From 392a55ba153dbc1ea9d51b61be5ea62f5ef2c11e Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Tue, 3 Sep 2013 20:10:28 +0000
Subject: [PATCH] * New version of Trevor Strickler's QuadTri patch (+ examples
 in benchmarks/extrude_quadtri)

* First pass at SU2 mesh export
---
 Common/CreateFile.cpp                         |    7 +
 Common/GmshDefines.h                          |   13 +-
 Common/SmoothData.cpp                         |   46 +
 Common/SmoothData.h                           |    8 +-
 Fltk/graphicWindow.cpp                        |    4 +
 Geo/CMakeLists.txt                            |    2 +-
 Geo/ExtrudeParams.cpp                         |   26 +
 Geo/ExtrudeParams.h                           |    9 +
 Geo/GFaceCompound.cpp                         |   75 +-
 Geo/GModel.h                                  |    7 +-
 Geo/GModelIO_GEO.cpp                          |   16 +
 Geo/GModelIO_MESH.cpp                         |    6 -
 Geo/Geo.cpp                                   | 2289 ++++---
 Geo/MElement.cpp                              |   10 +
 Geo/MElement.h                                |    1 +
 Geo/MVertex.cpp                               |   12 +
 Geo/MVertex.h                                 |    1 +
 Mesh/BoundaryLayers.cpp                       |  199 +-
 Mesh/QuadTriExtruded2D.cpp                    |  296 +-
 Mesh/QuadTriExtruded2D.h                      |    4 +-
 Mesh/QuadTriExtruded3D.cpp                    |  376 +-
 Mesh/QuadTriUtils.cpp                         |  222 +-
 Mesh/QuadTriUtils.h                           |    8 +
 Mesh/meshGFaceExtruded.cpp                    |   69 +-
 Parser/Gmsh.l                                 |    4 +
 Parser/Gmsh.tab.cpp                           | 5935 +++++++++--------
 Parser/Gmsh.tab.hpp                           |  228 +-
 Parser/Gmsh.y                                 |   57 +-
 Parser/Gmsh.yy.cpp                            | 1172 ++--
 benchmarks/extrude_quadtri/3sidedruled.stl.gz |  Bin 0 -> 113230 bytes
 benchmarks/extrude_quadtri/READMEQUADTRI.txt  |  253 +
 .../TransfiniteQuadTriExample.geo             |  162 +
 .../compound_extrude_annular_example.geo      |   74 +
 .../compound_extrude_example.geo              |   18 +
 .../compound_extrude_from_stl_example.geo     |   18 +
 benchmarks/extrude_quadtri/nico_torus.geo     |   79 +
 ...truded_square_torus_interfaced_example.geo |  113 +
 ...adtri_square_torus_compound_interfaced.geo |   96 +
 .../scaledBoundaryLayerTest.geo               |   61 +
 benchmarks/extrude_quadtri/tunnel_test.geo    |  169 +
 40 files changed, 7135 insertions(+), 5010 deletions(-)
 create mode 100644 benchmarks/extrude_quadtri/3sidedruled.stl.gz
 create mode 100644 benchmarks/extrude_quadtri/READMEQUADTRI.txt
 create mode 100644 benchmarks/extrude_quadtri/TransfiniteQuadTriExample.geo
 create mode 100644 benchmarks/extrude_quadtri/compound_extrude_annular_example.geo
 create mode 100644 benchmarks/extrude_quadtri/compound_extrude_example.geo
 create mode 100644 benchmarks/extrude_quadtri/compound_extrude_from_stl_example.geo
 create mode 100644 benchmarks/extrude_quadtri/nico_torus.geo
 create mode 100644 benchmarks/extrude_quadtri/quadtri_extruded_square_torus_interfaced_example.geo
 create mode 100644 benchmarks/extrude_quadtri/quadtri_square_torus_compound_interfaced.geo
 create mode 100644 benchmarks/extrude_quadtri/scaledBoundaryLayerTest.geo
 create mode 100644 benchmarks/extrude_quadtri/tunnel_test.geo

diff --git a/Common/CreateFile.cpp b/Common/CreateFile.cpp
index 89cf2a95ec..83d3a653fa 100644
--- a/Common/CreateFile.cpp
+++ b/Common/CreateFile.cpp
@@ -47,6 +47,7 @@ int GetFileFormatFromExtension(const std::string &ext)
   else if(ext == ".diff") return FORMAT_DIFF;
   else if(ext == ".inp")  return FORMAT_INP;
   else if(ext == ".celum")return FORMAT_CELUM;
+  else if(ext == ".su2")  return FORMAT_SU2;
   else if(ext == ".nas")  return FORMAT_BDF;
   else if(ext == ".p3d")  return FORMAT_P3D;
   else if(ext == ".wrl")  return FORMAT_VRML;
@@ -101,6 +102,7 @@ std::string GetDefaultFileName(int format)
   case FORMAT_DIFF: name += ".diff"; break;
   case FORMAT_INP:  name += ".inp"; break;
   case FORMAT_CELUM:name += ".celum"; break;
+  case FORMAT_SU2:  name += ".su2"; break;
   case FORMAT_P3D:  name += ".p3d"; break;
   case FORMAT_VRML: name += ".wrl"; break;
   case FORMAT_PLY2: name += ".ply2"; break;
@@ -318,6 +320,11 @@ void CreateOutputFile(const std::string &fileName, int format, bool redraw)
       (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor);
     break;
 
+  case FORMAT_SU2:
+    GModel::current()->writeSU2
+      (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor);
+    break;
+
   case FORMAT_P3D:
     GModel::current()->writeP3D
       (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor);
diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h
index 09cf319b19..16632e84c2 100644
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@ -48,6 +48,7 @@
 #define FORMAT_INP   39
 #define FORMAT_PLY2  40
 #define FORMAT_CELUM 41
+#define FORMAT_SU2   42
 
 // Element types
 #define TYPE_PNT     1
@@ -243,11 +244,11 @@
 #define MESH_UNSTRUCTURED 2
 
 // QuadTri options (structured/unstructured coupling with pyramids)
-#define NO_QUADTRI               0
-#define QUADTRI_DBL_1            1
-#define QUADTRI_DBL_1_RECOMB     2
-#define QUADTRI_SNGL_1           3
-#define QUADTRI_SNGL_1_RECOMB    4
-#define TRANSFINITE_QUADTRI_1    5
+#define NO_QUADTRI                    0
+#define QUADTRI_ADDVERTS_1            1
+#define QUADTRI_ADDVERTS_1_RECOMB     2
+#define QUADTRI_NOVERTS_1             3
+#define QUADTRI_NOVERTS_1_RECOMB      4
+#define TRANSFINITE_QUADTRI_1         5
 
 #endif
diff --git a/Common/SmoothData.cpp b/Common/SmoothData.cpp
index c81bbc5d7b..4e004b1b63 100644
--- a/Common/SmoothData.cpp
+++ b/Common/SmoothData.cpp
@@ -17,6 +17,8 @@ xyzv::xyzv(const xyzv &other)
   x = other.x;
   y = other.y;
   z = other.z;
+  scaleValue = other.scaleValue;  // Added by Trevor Strickler 07/10/2013
+  scale_numvals = other.scale_numvals;  // Added by Trevor Strickler 07/10/2013
   nbvals = other.nbvals;
   nboccurences = other.nboccurences;
   if(other.vals && other.nbvals) {
@@ -32,6 +34,8 @@ xyzv &xyzv::operator = (const xyzv &other)
     x = other.x;
     y = other.y;
     z = other.z;
+    scaleValue = other.scaleValue;  // Added by Trevor Strickler 07/10/2013
+    scale_numvals = other.scale_numvals;  // Added by Trevor Strickler 07/10/2013
     nbvals = other.nbvals;
     nboccurences = other.nboccurences;
     if(other.vals && other.nbvals) {
@@ -61,6 +65,21 @@ void xyzv::update(int n, double *v)
   nboccurences++;
 }
 
+// Added by Trevor Strickler
+void xyzv::scale_update(double scale_inp)
+{
+  if( fabs(1.0 - scale_inp) <= eps )
+    scale_inp = 1.0;
+  if( scale_inp != 1.0 || scaleValue != 1.0 ){
+    double x1 = (double)(scale_numvals) / (double)(scale_numvals + 1);
+    double x2 = 1.0 / (double)(scale_numvals + 1);
+    scaleValue = ( x1 * scaleValue + x2 * scale_inp);
+  }
+  if( fabs(1.0 - scaleValue) <= eps )
+    scaleValue = 1.0;
+  scale_numvals++;
+}
+
 void smooth_data::add(double x, double y, double z, int n, double *vals)
 {
   xyzv xyz(x, y, z);
@@ -77,6 +96,23 @@ void smooth_data::add(double x, double y, double z, int n, double *vals)
   }
 }
 
+//added by Trevor Strickler
+void smooth_data::add_scale(double x, double y, double z, double scale_val)
+{
+  xyzv xyz(x, y, z);
+  std::set<xyzv, lessthanxyzv>::const_iterator it = c.find(xyz);
+  if(it == c.end()){
+    xyz.scale_update(scale_val);
+    c.insert(xyz); 
+  }
+  else {
+    // we can do this because we know that it will not destroy the set
+    // ordering
+    xyzv *p = (xyzv *) & (*it);
+    p->scale_update(scale_val);
+  }
+}
+
 bool smooth_data::get(double x, double y, double z, int n, double *vals)
 {
   std::set<xyzv, lessthanxyzv>::const_iterator it = c.find(xyzv(x, y, z));
@@ -87,6 +123,16 @@ bool smooth_data::get(double x, double y, double z, int n, double *vals)
   return true;
 }
 
+//added by Trevor Strickler
+bool smooth_data::get_scale(double x, double y, double z, double *scale_val)
+{
+  std::set<xyzv, lessthanxyzv>::const_iterator it = c.find(xyzv(x, y, z));
+  if(it == c.end())
+    return false;
+  (*scale_val) = it->scaleValue;
+  return true;
+}
+
 void smooth_data::normalize()
 {
   std::set<xyzv, lessthanxyzv>::iterator it = c.begin();
diff --git a/Common/SmoothData.h b/Common/SmoothData.h
index 864f1bd519..8e3071964a 100644
--- a/Common/SmoothData.h
+++ b/Common/SmoothData.h
@@ -16,15 +16,19 @@ struct xyzv {
   double x, y, z, *vals;
   int nbvals;
   int nboccurences;
+  double scaleValue;  // Added by Trevor Strickler for scaling last element layer in quadtri boundary layer to make better quality interfaces
+  int scale_numvals;
   static double eps;
   xyzv(double xx, double yy, double zz)
-    : x(xx), y(yy), z(zz), vals(0), nbvals(0), nboccurences(0) {}
+    : x(xx), y(yy), z(zz), vals(0), nbvals(0), nboccurences(0), scaleValue(1.0), scale_numvals(0) {}  // Trevor Strickler modified
   ~xyzv(){ if(vals) delete [] vals; }
   // these are needed for set<> operations since the default copy
   // constructor won't allocate *vals
   xyzv(const xyzv & other);
   xyzv & operator = (const xyzv &other);
   void update(int n, double *v);
+  void scale_update(double scale_val);  // Trevor Strickler
+
 };
 
 struct lessthanxyzv {
@@ -54,6 +58,8 @@ class smooth_data{
   smooth_data() {}
   void add(double x, double y, double z, int n, double *vals);
   bool get(double x, double y, double z, int n, double *vals);
+  void add_scale(double x, double y, double z, double scale_val);  // Trevor Strickler
+  bool get_scale(double x, double y, double z, double *scale_val); // Trevor Strickler
   void normalize();
   bool exportview(std::string filename);
 };
diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp
index 0defb96aa6..37ed3c25c9 100644
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@ -272,6 +272,8 @@ static int _save_inp(const char *name){ return unvinpFileDialog
     (name, "Abaqus INP Options", FORMAT_INP); }
 static int _save_celum(const char *name){ return genericMeshFileDialog
     (name, "CELUM Options", FORMAT_CELUM, false, false); }
+static int _save_su2(const char *name){ return genericMeshFileDialog
+    (name, "SU2 Options", FORMAT_SU2, false, false); }
 static int _save_med(const char *name){ return genericMeshFileDialog
     (name, "MED Options", FORMAT_MED, false, false); }
 static int _save_mesh(const char *name){ return genericMeshFileDialog
@@ -335,6 +337,7 @@ static int _save_auto(const char *name)
   case FORMAT_DIFF : return _save_diff(name);
   case FORMAT_INP  : return _save_inp(name);
   case FORMAT_CELUM: return _save_celum(name);
+  case FORMAT_SU2  : return _save_su2(name);
   case FORMAT_P3D  : return _save_p3d(name);
   case FORMAT_IR3  : return _save_ir3(name);
   case FORMAT_STL  : return _save_stl(name);
@@ -392,6 +395,7 @@ static void file_save_as_cb(Fl_Widget *w, void *data)
     {"Mesh - VRML Surface" TT "*.wrl", _save_vrml},
     {"Mesh - VTK" TT "*.vtk", _save_vtk},
     {"Mesh - PLY2 Surface" TT "*.ply2", _save_ply2},
+    {"Mesh - SU2" TT "*.su2", _save_su2},
     {"Post-processing - Gmsh POS" TT "*.pos", _save_view_pos},
 #if defined(HAVE_MED)
     {"Post-processing - MED" TT "*.rmed", _save_view_med},
diff --git a/Geo/CMakeLists.txt b/Geo/CMakeLists.txt
index c9cea87f40..4f8685ff42 100644
--- a/Geo/CMakeLists.txt
+++ b/Geo/CMakeLists.txt
@@ -27,7 +27,7 @@ set(SRC
       GModelIO_PLY.cpp GModelIO_VRML.cpp GModelIO_UNV.cpp GModelIO_BDF.cpp 
       GModelIO_IR3.cpp GModelIO_DIFF.cpp GModelIO_GEOM.cpp GModelIO_INP.cpp
       GModelIO_MAIL.cpp GModelIO_P3D.cpp GModelIO_SGEOM.cpp GModelIO_CELUM.cpp
-      GModelIO_ACTRAN.cpp
+      GModelIO_ACTRAN.cpp GModelIO_SU2.cpp
   ExtrudeParams.cpp
   Geo.cpp
   GeoStringInterface.cpp GeoInterpolation.cpp
diff --git a/Geo/ExtrudeParams.cpp b/Geo/ExtrudeParams.cpp
index deb9899b04..6c4510a79d 100644
--- a/Geo/ExtrudeParams.cpp
+++ b/Geo/ExtrudeParams.cpp
@@ -10,6 +10,14 @@
 smooth_data* ExtrudeParams::normals[2] = {0, 0};
 std::vector<SPoint3> ExtrudeParams::normalsCoherence;
 
+// Added by Trevor Strickler to scale last layer size locally
+// If one section of the boundary layer index = 0 or 1  is not supposed to be
+// scaled...that section's normals will have scaleFactor = 1.0 (exactly  1.0 to all sig figs)
+// ...however, if that non-scaled
+// section borders a scaled section, the boundary normals will extrude consistently (an 
+// average of scaled and non-scaled heights).
+bool ExtrudeParams::calcLayerScaleFactor[2] = {0,0};  // Added by Trevor Strickler
+
 static void Projette(double p[3], double mat[3][3])
 {
   double X = p[0] * mat[0][0] + p[1] * mat[0][1] + p[2] * mat[0][2];
@@ -27,6 +35,8 @@ ExtrudeParams::ExtrudeParams(int ModeEx)
   mesh.ExtrudeMesh = false;
   mesh.Recombine = false;
   mesh.QuadToTri = NO_QUADTRI;
+  //added by Trevor Strickler 07/07/2013 (determines if a layer is scaled by source grid size (1) or not (0))...only meant for boundary layers
+  mesh.ScaleLast = false;
   mesh.ViewIndex = -1;
   mesh.BoundaryLayerIndex = 0;
 }
@@ -53,6 +63,22 @@ void ExtrudeParams::Extrude(int iLayer, int iElemLayer,
                             double &x, double &y, double &z)
 {
   double t = u(iLayer, iElemLayer);
+  // Trevor Strickler (this definitely relies on fixing lateral boundary extruded
+  // surfaces if mesh.ScaleLast is changed by ReplaceDuplicates.  This is done in BoundaryLayers.cpp right now.
+  if( geo.Type == BOUNDARY_LAYER && calcLayerScaleFactor[mesh.BoundaryLayerIndex]  && iLayer == mesh.NbLayer-1 &&
+      mesh.BoundaryLayerIndex >= 0 && mesh.BoundaryLayerIndex <= 1 && normals[mesh.BoundaryLayerIndex] ){
+    double scale = 1.0;
+    normals[mesh.BoundaryLayerIndex]->get_scale(x, y, z, &scale);
+    if( fabs(scale-1.0) <= xyzv::eps )
+      scale = 1.0;
+    else{
+      if( mesh.NbLayer == 1 )
+	t = t * scale;
+      else
+        t = (t-mesh.hLayer[mesh.NbLayer-2])*scale + mesh.hLayer[mesh.NbLayer-2];
+    }
+  }
+
   Extrude(t, x, y, z);
 }
 
diff --git a/Geo/ExtrudeParams.h b/Geo/ExtrudeParams.h
index e02f5ca8b4..03775f84cd 100644
--- a/Geo/ExtrudeParams.h
+++ b/Geo/ExtrudeParams.h
@@ -42,6 +42,8 @@ public :
     int NbLayer;
     std::vector<int> NbElmLayer;
     std::vector<double> hLayer;
+    //added by Trevor Strickler 07/07/2013 (determines if a layer is scaled by source grid size (1) or not (0))...only meant for boundary layers
+    bool ScaleLast;
     std::map<int, std::pair<double, std::vector<int> > > Holes;
     int ViewIndex, BoundaryLayerIndex;
   }mesh;
@@ -54,6 +56,13 @@ public :
   }geo;
 
   // for boundary layers
+  // Added by Trevor Strickler to scale last layer size locally
+  // If one section of the boundary layer index = 0 or 1  is not supposed to be
+  // scaled...that section's normals will have scaleFactor = 1.0 (exactly  1.0 to all sig figs)
+  // ...however, if that non-scaled
+  // section borders a scaled section, the boundary normals will extrude consistently (an
+  // average of scaled and non-scaled heights).
+  static bool calcLayerScaleFactor[2];  // Trevor Strickler, to give a global awareness of whether last layer scaling is to be used.
   static smooth_data *normals[2];
   static std::vector<SPoint3> normalsCoherence;
 };
diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp
index 8d2044caf5..8993eef77a 100644
--- a/Geo/GFaceCompound.cpp
+++ b/Geo/GFaceCompound.cpp
@@ -1014,6 +1014,8 @@ void GFaceCompound::getBoundingEdges()
   getUniqueEdges(_unique);
 
   l_edges.clear();
+  l_dirs.clear();    // added by Trevor Strickler 
+
 
   if(_U0.size()){
     // in case the bounding edges are explicitely given
@@ -1066,8 +1068,36 @@ void GFaceCompound::getBoundingEdges()
       }
     }
   }
+
+    // Added by Trevor Strickler (fill in the l_dirs)
+  std::list<GEdge*>::iterator it_loop;
+  std::list<std::list<GEdge*> >::iterator it_interior;
+  l_edges.clear();
+     
+  for( it_interior = _interior_loops.begin(); it_interior != _interior_loops.end(); it_interior++ ){
+    for( it_loop = it_interior->begin(); it_loop != it_interior->end(); it_loop++ ){
+      l_edges.push_back( (*it_loop) );
+      std::list<GEdge*>::iterator it_loop_next = it_loop;
+      it_loop_next++;
+      if( it_loop_next == it_interior->end() ) 
+        it_loop_next = it_interior->begin();
+      GVertex *vB = (*it_loop)->getBeginVertex();
+      GVertex *vE = (*it_loop)->getEndVertex();  
+      GVertex *vB_next = (*it_loop_next)->getBeginVertex();
+      GVertex *vE_next = (*it_loop_next)->getEndVertex();
+      if( vB == vB_next || vB == vE_next )
+        l_dirs.push_back(-1);
+      else if( vE == vB_next || vE == vE_next )
+        l_dirs.push_back(1);
+      else{
+       l_dirs.push_back(0);
+      }
+    }
+  }
+  
 }
 
+
 double GFaceCompound::getSizeH() const
 {
   SBoundingBox3d bb;
@@ -1134,6 +1164,49 @@ void GFaceCompound::computeALoop(std::set<GEdge*> &_unique, std::list<GEdge*> &l
     _unique.erase(it);
 
     bool found = false;
+/* Mod by Trevor Strickler: In the old implementation, the iterator 
+    itx was incremented twice per loop and _loops was not set up correctly.  
+    The While Loop below replaces the old for loop. 
+*/
+    for(int i = 0; i < 2; i++) {           
+      std::set<GEdge*>::iterator itx = _unique.begin();
+      while (itx != _unique.end() ){
+        GVertex *v1 = (*itx)->getBeginVertex();
+        GVertex *v2 = (*itx)->getEndVertex();
+        
+        std::set<GEdge*>::iterator itp = itx;
+        itx++;
+        
+        if(v1 == vE ){
+          _loop.push_back(*itp);
+          vE = v2;
+          i = -1;
+          _unique.erase(itp);
+        }
+        else if(v2 == vE){
+          _loop.push_back(*itp);
+          vE = v1;
+          i=-1;
+          _unique.erase(itp);
+        }
+      }
+      
+      if(vB == vE) {
+        found = true;
+        break;
+      }
+      
+      if(_unique.empty())  break;
+
+      // Mod by Trevor Strickler: had to wrap this in an if
+      //  or else it was executed when i == -1, which is not good.      
+      if( i != -1 ){
+        GVertex *temp = vB;
+        vB = vE;
+        vE = temp;
+      }
+    }
+    /* This is the old version of above nested loops before modified by Trevor Strickler
     for(int i = 0; i < 2; i++) {
       for(std::set<GEdge*>::iterator itx = _unique.begin();
           itx != _unique.end(); ++itx){
@@ -1170,7 +1243,7 @@ void GFaceCompound::computeALoop(std::set<GEdge*> &_unique, std::list<GEdge*> &l
       GVertex *temp = vB;
       vB = vE;
       vE = temp;
-    }
+    }*/
 
     if(found == true) break;
 
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 51a83c6411..6a973115a8 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -358,11 +358,6 @@ class GModel
   // access a mesh element by coordinates (using an octree search)
   MElement *getMeshElementByCoord(SPoint3 &p, int dim=-1, bool strict=true);
   std::vector<MElement*> getMeshElementsByCoord(SPoint3 &p, int dim=-1, bool strict=true);
-  //  inline std::vector<MElement*> getMeshElementsByCoords(std::vector<std::vector<double, std::allocator<double> >, int dim=-1, bool strict=true){
-  //    std::vector<MElement*> e;
-  //    for (unsigned int i = 0;i<p.size();i++)e.push_back (getMeshElementByCoord (p[i],dim,strict));
-  //    return e;
-  //  }
 
   // access a mesh element by tag, using the element cache
   MElement *getMeshElementByTag(int n);
@@ -700,6 +695,8 @@ class GModel
   // CEA triangulation
   int writeMAIL(const std::string &name, bool saveAll, double scalingFactor);
 
+  // SU2 mesh file
+  int writeSU2(const std::string &name, bool saveAll, double scalingFactor);
 };
 
 #endif
diff --git a/Geo/GModelIO_GEO.cpp b/Geo/GModelIO_GEO.cpp
index 2293dd0073..3b8cf19978 100644
--- a/Geo/GModelIO_GEO.cpp
+++ b/Geo/GModelIO_GEO.cpp
@@ -212,6 +212,22 @@ int GModel::importGEOInternals()
         f->meshAttributes.recombineAngle = s->RecombineAngle;
         f->meshAttributes.method = s->Method;
         f->meshAttributes.extrude = s->Extrude;
+        // transfinite import Added by Trevor Strickler.  This helps when experimenting
+        // to create compounds from transfinite surfs. Not having it does not break
+        // anything Gmsh *officially* does right now, but maybe it was left out by mistake??? and could
+        // cause problems later?
+        f->meshAttributes.transfiniteArrangement = s->Recombine_Dir;
+        f->meshAttributes.corners.clear();
+        for(int i = 0; i < List_Nbr(s->TrsfPoints); i++){
+          Vertex *corn;
+          List_Read(s->TrsfPoints, i, &corn);
+          GVertex *gv = f->model()->getVertexByTag(corn->Num);
+          if(gv)
+            f->meshAttributes.corners.push_back(gv);
+          else
+            Msg::Error("Unknown vertex %d in transfinite attributes", corn->Num);
+        }
+        
         add(f);
         if(s->EmbeddedCurves){
           for(int i = 0; i < List_Nbr(s->EmbeddedCurves); i++){
diff --git a/Geo/GModelIO_MESH.cpp b/Geo/GModelIO_MESH.cpp
index f23fd8b897..2fa3fc6df3 100644
--- a/Geo/GModelIO_MESH.cpp
+++ b/Geo/GModelIO_MESH.cpp
@@ -328,9 +328,3 @@ int GModel::writeMESH(const std::string &name, int elementTagType,
   fclose(fp);
   return 1;
 }
-
-
-
-
-
-
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 7eec90ad6e..21b92b5123 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1018,8 +1018,12 @@ static Curve *DuplicateCurve(Curve *c, bool copyMeshingMethod)
 
 static void CopySurface(Surface *s, Surface *ss, bool copyMeshingMethod)
 {
-  ss->Typ = s->Typ;
-  if(copyMeshingMethod){
+   // Trevor Strickler modified
+   if( s->Typ == MSH_SURF_COMPOUND )
+     ss->Typ = MSH_SURF_REGL;
+   else
+     ss->Typ = s->Typ;
+   if(copyMeshingMethod){
     ss->Method = s->Method;
     ss->Recombine = s->Recombine;
     ss->RecombineAngle = s->RecombineAngle;
@@ -1273,33 +1277,6 @@ void DeleteShape(int Type, int Num)
   }
 }
 
-static void ColorCurve(int ip, unsigned int col)
-{
-  Curve *c = FindCurve(ip);
-  if(!c)
-    return;
-  c->Color.type = 1;
-  c->Color.mesh = c->Color.geom = col;
-}
-
-static void ColorSurface(int is, unsigned int col)
-{
-  Surface *s = FindSurface(is);
-  if(!s)
-    return;
-  s->Color.type = 1;
-  s->Color.mesh = s->Color.geom = col;
-}
-
-static void ColorVolume(int iv, unsigned int col)
-{
-  Volume *v = FindVolume(iv);
-  if(!v)
-    return;
-  v->Color.type = 1;
-  v->Color.mesh = v->Color.geom = col;
-}
-
 void ColorShape(int Type, int Num, unsigned int Color, bool Recursive)
 {
   Curve *c;
@@ -2113,1175 +2090,1419 @@ void BoundaryShapes(List_T *shapes, List_T *shapesBoundary, bool combined)
   }
 }
 
-// Extrusion routines
-
-void ProtudeXYZ(double &x, double &y, double &z, ExtrudeParams *e)
+// Added by Trevor Strickler for extruding unique compound surface edges
+static List_T* GetCompoundUniqueEdges(Surface *ps)
 {
-  double matrix[4][4];
-  double T[3];
-  Vertex v(x, y, z);
-
-  T[0] = -e->geo.pt[0];
-  T[1] = -e->geo.pt[1];
-  T[2] = -e->geo.pt[2];
-  SetTranslationMatrix(matrix, T);
-  List_Reset(ListOfTransformedPoints);
-  ApplyTransformationToPoint(matrix, &v);
 
-  SetRotationMatrix(matrix, e->geo.axe, e->geo.angle);
-  List_Reset(ListOfTransformedPoints);
-  ApplyTransformationToPoint(matrix, &v);
+  // Two parts:
+  // Part 1: create map of keys with values abs(c->Num) that map to integer counts of abs(c->num) in compound
+  // Part 2: Make the unique list
 
-  T[0] = -T[0];
-  T[1] = -T[1];
-  T[2] = -T[2];
-  SetTranslationMatrix(matrix, T);
-  List_Reset(ListOfTransformedPoints);
-  ApplyTransformationToPoint(matrix, &v);
+  std::vector<int> comp_surfs = ps->compound;
+  if( comp_surfs.size() == 0 || ps->Typ != MSH_SURF_COMPOUND ){
+    Msg::Error("Surface %d is not compound", ps->Num);
+    return (List_T*)(0);
+  }
 
-  x = v.Pos.X;
-  y = v.Pos.Y;
-  z = v.Pos.Z;
+  int num_surfs = comp_surfs.size();
+  List_T *bnd_c= List_Create(4, 1, sizeof(Curve*));
 
-  List_Reset(ListOfTransformedPoints);
-}
+  std::map<int, unsigned int> count_map;
 
-int Extrude_ProtudePoint(int type, int ip,
-			 double T0, double T1, double T2,
-			 double A0, double A1, double A2,
-			 double X0, double X1, double X2, double alpha,
-			 Curve **pc, Curve **prc, int final,
-			 ExtrudeParams *e)
-{
-  double matrix[4][4], T[3], Ax[3], d;
-  Vertex V, *pv, *newp, *chapeau;
-  Curve *c;
-  int i;
+  for( int i = 0; i < num_surfs; i++ ){
+    Surface *s = FindSurface(std::abs(comp_surfs[i]));
+    if( !s ){
+      Msg::Error("Unknown surface %d", std::abs(comp_surfs[i]) );
+      return (List_T*)(0);
+    }
+    int num_in_surf = List_Nbr(s->Generatrices);
+    for( int m = 0; m < num_in_surf; m++ ){
+      Curve *c=0;
+      List_Read(s->Generatrices, m, &c);
 
-  pv = &V;
-  pv->Num = ip;
-  *pc = *prc = NULL;
-  if(!Tree_Query(GModel::current()->getGEOInternals()->Points, &pv))
-    return 0;
+      if( !c ){
+        Msg::Error("Unknown curve");
+        return (List_T*)(0);
+      }
 
-  Msg::Debug("Extrude Point %d", ip);
+      if( !FindCurve(-c->Num)  ) {
+        Msg::Error("Unknown curve %d", -c->Num );
+        return (List_T*)(0);
+      }
 
-  chapeau = DuplicateVertex(pv);
+      int abs_Num = std::abs(c->Num) ;
 
-  switch (type) {
-  case TRANSLATE:
-    T[0] = T0;
-    T[1] = T1;
-    T[2] = T2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToPoint(matrix, chapeau);
-    if(!comparePosition(&pv, &chapeau))
-      return pv->Num;
-    c = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.);
-    c->Control_Points = List_Create(2, 1, sizeof(Vertex *));
-    c->Extrude = new ExtrudeParams;
-    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-    if(e)
-      c->Extrude->mesh = e->mesh;
-    List_Add(c->Control_Points, &pv);
-    List_Add(c->Control_Points, &chapeau);
-    c->beg = pv;
-    c->end = chapeau;
-    break;
-  case BOUNDARY_LAYER:
-    chapeau->Typ = MSH_POINT_BND_LAYER;
-    if(e) chapeau->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
-    c = Create_Curve(NEWLINE(), MSH_SEGM_BND_LAYER, 1, NULL, NULL, -1, -1, 0., 1.);
-    c->Control_Points = List_Create(2, 1, sizeof(Vertex *));
-    c->Extrude = new ExtrudeParams;
-    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-    if(e) c->Extrude->mesh = e->mesh;
-    List_Add(c->Control_Points, &pv);
-    List_Add(c->Control_Points, &chapeau);
-    c->beg = pv;
-    c->end = chapeau;
-    break;
-  case ROTATE:
-    T[0] = -X0;
-    T[1] = -X1;
-    T[2] = -X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToPoint(matrix, chapeau);
-    Ax[0] = A0;
-    Ax[1] = A1;
-    Ax[2] = A2;
-    SetRotationMatrix(matrix, Ax, alpha);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToPoint(matrix, chapeau);
-    T[0] = X0;
-    T[1] = X1;
-    T[2] = X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToPoint(matrix, chapeau);
-    if(!comparePosition(&pv, &chapeau))
-      return pv->Num;
-    c = Create_Curve(NEWLINE(), MSH_SEGM_CIRC, 1, NULL, NULL, -1, -1, 0., 1.);
-    c->Control_Points = List_Create(3, 1, sizeof(Vertex *));
-    c->Extrude = new ExtrudeParams;
-    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-    if(e)
-      c->Extrude->mesh = e->mesh;
-    List_Add(c->Control_Points, &pv);
-    // compute circle center
-    newp = DuplicateVertex(pv);
-    Ax[0] = A0;
-    Ax[1] = A1;
-    Ax[2] = A2;
-    norme(Ax);
-    T[0] = pv->Pos.X - X0;
-    T[1] = pv->Pos.Y - X1;
-    T[2] = pv->Pos.Z - X2;
-    prosca(T, Ax, &d);
-    newp->Pos.X = X0 + d * Ax[0];
-    newp->Pos.Y = X1 + d * Ax[1];
-    newp->Pos.Z = X2 + d * Ax[2];
-    List_Add(c->Control_Points, &newp);
-    List_Add(c->Control_Points, &chapeau);
-    c->beg = pv;
-    c->end = chapeau;
-    break;
-  case TRANSLATE_ROTATE:
-    d = CTX::instance()->geom.extrudeSplinePoints;
-    d = d ? d : 1;
-    c = Create_Curve(NEWLINE(), MSH_SEGM_SPLN, 1, NULL, NULL, -1, -1, 0., 1.);
-    c->Control_Points =
-      List_Create(CTX::instance()->geom.extrudeSplinePoints + 1, 1, sizeof(Vertex *));
-    c->Extrude = new ExtrudeParams;
-    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-    if(e)
-      c->Extrude->mesh = e->mesh;
-    List_Add(c->Control_Points, &pv);
-    c->beg = pv;
-    for(i = 0; i < CTX::instance()->geom.extrudeSplinePoints; i++) {
-      if(i)
-        chapeau = DuplicateVertex(chapeau);
-      T[0] = -X0;
-      T[1] = -X1;
-      T[2] = -X2;
-      SetTranslationMatrix(matrix, T);
-      List_Reset(ListOfTransformedPoints);
-      ApplyTransformationToPoint(matrix, chapeau);
-      Ax[0] = A0;
-      Ax[1] = A1;
-      Ax[2] = A2;
-      SetRotationMatrix(matrix, Ax, alpha / d);
-      List_Reset(ListOfTransformedPoints);
-      ApplyTransformationToPoint(matrix, chapeau);
-      T[0] = X0;
-      T[1] = X1;
-      T[2] = X2;
-      SetTranslationMatrix(matrix, T);
-      List_Reset(ListOfTransformedPoints);
-      ApplyTransformationToPoint(matrix, chapeau);
-      T[0] = T0 / d;
-      T[1] = T1 / d;
-      T[2] = T2 / d;
-      SetTranslationMatrix(matrix, T);
-      List_Reset(ListOfTransformedPoints);
-      ApplyTransformationToPoint(matrix, chapeau);
-      List_Add(c->Control_Points, &chapeau);
+      if( count_map.find( abs_Num ) == count_map.end() )
+        count_map[ abs_Num ] = 1;
+      else
+        count_map[ abs_Num ]++;
     }
-    c->end = chapeau;
-    break;
-//  case ANALYTICAL:
-//
-//    break;
-  default:
-    Msg::Error("Unknown extrusion type");
-    return pv->Num;
   }
 
-  End_Curve(c);
-  Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
-  CreateReversedCurve(c);
-  *pc = c;
-  *prc = FindCurve(-c->Num);
-
-  List_Reset(ListOfTransformedPoints);
-
-  if(CTX::instance()->geom.autoCoherence && final)
-    ReplaceAllDuplicates();
+  // Now, create the list of uniques.  Exclude any repeats of abs(c->num) of
+  //   course.
+  for( int i = 0; i < num_surfs; i++ ){
+    Surface *s = FindSurface(std::abs(comp_surfs[i]));
+    int num_in_surf = List_Nbr(s->Generatrices);
+    for( int m = 0; m < num_in_surf; m++ ){
+      Curve *c;
+      List_Read(s->Generatrices, m, &c);
+      std::map<int, unsigned int>::iterator itmap = count_map.find(std::abs(c->Num));
+      if( itmap != count_map.end() ){
+        if( itmap->second == 1 ){
+          List_Add(bnd_c, &c);
+	  // for duplicates  -- if coherence on, do not need. if coherence off, should not try to find them
+          /*bool unique_flag = true;
+          std::map<int, unsigned int>::iterator itmap2 = count_map.begin();
+
+          for( ; itmap2 != count_map.end(); itmap2++ ){
+            Curve *c_tmp1 = FindCurve( itmap2->first );
+            Curve *c_tmp2 = FindCurve( -itmap2->first );
+
+            if( itmap != itmap2 &&
+                ( !compareTwoCurves( &c_tmp1, &c ) ||
+                  !compareTwoCurves( &c_tmp2, &c ) ) ){
+              unique_flag = false;
+              break;
+            }
+          }
+          if( unique_flag )
+	    List_Add(bnd_c, &c);
+	  */
+        }
+      }
+      else{ // if not found the curve in the count_map
+        Msg::Error("A problem in finding unique curves in extrusion of compound surface %d",
+                   std::abs(ps->Num) );
+        return (List_T*)(0);
+      }
+    }
+  }
 
-  return chapeau->Num;
+  return bnd_c;
 }
 
-int Extrude_ProtudeCurve(int type, int ic,
-			 double T0, double T1, double T2,
-			 double A0, double A1, double A2,
-			 double X0, double X1, double X2, double alpha,
-			 Surface **ps, int final,
-			 ExtrudeParams *e)
+
+// Added by Trevor Strickler
+// This function returns a pointer to an allocated List_T type that
+// contains an ordered list of unique edges for a compound surface.
+// The edges are grouped into loops if there is more than one loop.
+// The order is in order around a loop.
+// Only one problem: Sometimes holes can be selected as the first loop,
+// though this should not create many real problems on a copied top surface.
+static List_T* GetOrderedUniqueEdges( Surface *s )
 {
-  double matrix[4][4], T[3], Ax[3];
-  Curve *CurveBeg, *CurveEnd;
-  Curve *ReverseChapeau, *ReverseBeg, *ReverseEnd;
-  Curve *pc, *revpc, *chapeau;
-  Surface *s;
+  List_T* unique = GetCompoundUniqueEdges(s);
 
-  pc = FindCurve(ic);
-  revpc = FindCurve(-ic);
-  *ps = NULL;
+  // need to sort out the list into ordered, oriented loops before passing
+  // these into the gmsh geometry system.
+  // Have to get list of surface numbers
+  int numgen = List_Nbr(unique);
+  List_T *gen_nums = List_Create(numgen, 1, sizeof(int));
 
-  if(!pc || !revpc){
-    return 0;
+  for( int i = 0; i < numgen; i++ ){
+    Curve *ctemp = 0;
+    List_Read(unique, i, &ctemp);
+    if( !ctemp ){
+      Msg::Error("No such curve.");
+      return 0;
+    }
+
+    List_Add(gen_nums, &(ctemp->Num));
   }
 
-  if(!pc->beg || !pc->end){
-    Msg::Error("Cannot extrude curve with no begin/end points");
-    return 0;
+  sortEdgesInLoop(0,gen_nums,1);
+
+  // put sorted list of curve pointers back into compnd_gen and generatrices
+  List_Reset(unique);
+  for( int i = 0; i < List_Nbr(gen_nums); i++ ){
+
+    Curve *ctemp = 0;
+    int j;
+    List_Read(gen_nums, i, &j);
+    if( !(ctemp = FindCurve(j)) ){
+      Msg::Error("No such curve %d.", j);
+      return 0;
+    }
+    List_Add(unique, &ctemp);
   }
 
-  Msg::Debug("Extrude Curve %d", ic);
+  List_Delete(gen_nums);
 
-  chapeau = DuplicateCurve(pc, false);
+  return unique;
 
-  chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY);
-  chapeau->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-  chapeau->Extrude->geo.Source = pc->Num;
-  if(e)
-    chapeau->Extrude->mesh = e->mesh;
+}
 
-  switch (type) {
-  case TRANSLATE:
-    T[0] = T0;
-    T[1] = T1;
-    T[2] = T2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    break;
-  case BOUNDARY_LAYER:
-    chapeau->Typ = MSH_SEGM_BND_LAYER;
-    if(chapeau->beg){
-      chapeau->beg->Typ = MSH_POINT_BND_LAYER;
-      if(e) chapeau->beg->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
-    }
-    if(chapeau->end){
-      chapeau->end->Typ = MSH_POINT_BND_LAYER;
-      if(e) chapeau->end->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
-    }
-    for(int i = 0; i < List_Nbr(chapeau->Control_Points); i++){
-      Vertex *v;
-      List_Read(chapeau->Control_Points, i, &v);
-      if(e) v->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
-    }
-    revpc = FindCurve(-chapeau->Num);
-    if(revpc) revpc->Typ = MSH_SEGM_BND_LAYER;
-    break;
-  case ROTATE:
-    T[0] = -X0;
-    T[1] = -X1;
-    T[2] = -X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    Ax[0] = A0;
-    Ax[1] = A1;
-    Ax[2] = A2;
-    SetRotationMatrix(matrix, Ax, alpha);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    T[0] = X0;
-    T[1] = X1;
-    T[2] = X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    break;
-  case TRANSLATE_ROTATE:
-    T[0] = -X0;
-    T[1] = -X1;
-    T[2] = -X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    Ax[0] = A0;
-    Ax[1] = A1;
-    Ax[2] = A2;
-    SetRotationMatrix(matrix, Ax, alpha);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    T[0] = X0;
-    T[1] = X1;
-    T[2] = X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    T[0] = T0;
-    T[1] = T1;
-    T[2] = T2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToCurve(matrix, chapeau);
-    break;
-  default:
-    Msg::Error("Unknown extrusion type");
-    return pc->Num;
-  }
+// Duplicate removal
 
-  Extrude_ProtudePoint(type, pc->beg->Num, T0, T1, T2,
-                       A0, A1, A2, X0, X1, X2, alpha,
-                       &CurveBeg, &ReverseBeg, 0, e);
-  Extrude_ProtudePoint(type, pc->end->Num, T0, T1, T2,
-                       A0, A1, A2, X0, X1, X2, alpha,
-                       &CurveEnd, &ReverseEnd, 0, e);
+static int compareTwoPoints(const void *a, const void *b)
+{
 
-  if(!CurveBeg && !CurveEnd){
-    return pc->Num;
-  }
+  Vertex *q = *(Vertex **)a;
+  Vertex *w = *(Vertex **)b;
 
-  if(type == BOUNDARY_LAYER)
-    s = Create_Surface(NEWSURFACE(), MSH_SURF_BND_LAYER);
-  else if(!CurveBeg || !CurveEnd)
-    s = Create_Surface(NEWSURFACE(), MSH_SURF_TRIC);
-  else
-    s = Create_Surface(NEWSURFACE(), MSH_SURF_REGL);
+  if(q->Typ != w->Typ)
+    return q->Typ - w->Typ;
 
-  s->Generatrices = List_Create(4, 1, sizeof(Curve *));
-  s->Extrude = new ExtrudeParams;
-  s->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-  s->Extrude->geo.Source = pc->Num;
-  if(e)
-    s->Extrude->mesh = e->mesh;
+  if(q->boundaryLayerIndex != w->boundaryLayerIndex)
+    return q->boundaryLayerIndex - w->boundaryLayerIndex;
 
-  ReverseChapeau = FindCurve(-chapeau->Num);
+  return comparePosition(a, b);
+}
 
-  if(!CurveBeg) {
-    List_Add(s->Generatrices, &pc);
-    List_Add(s->Generatrices, &CurveEnd);
-    List_Add(s->Generatrices, &ReverseChapeau);
+static int compareTwoCurves(const void *a, const void *b)
+{
+  Curve *c1 = *(Curve **)a;
+  Curve *c2 = *(Curve **)b;
+  int comp;
+
+  if(c1->Typ != c2->Typ){
+    if((c1->Typ == MSH_SEGM_CIRC && c2->Typ == MSH_SEGM_CIRC_INV) ||
+       (c1->Typ == MSH_SEGM_CIRC_INV && c2->Typ == MSH_SEGM_CIRC) ||
+       (c1->Typ == MSH_SEGM_ELLI && c2->Typ == MSH_SEGM_ELLI_INV) ||
+       (c1->Typ == MSH_SEGM_ELLI_INV && c2->Typ == MSH_SEGM_ELLI)){
+      // this is still ok
+    }
+    else
+      return c1->Typ - c2->Typ;
   }
-  else if(!CurveEnd) {
-    List_Add(s->Generatrices, &ReverseChapeau);
-    List_Add(s->Generatrices, &ReverseBeg);
-    List_Add(s->Generatrices, &pc);
+
+  if(List_Nbr(c1->Control_Points) != List_Nbr(c2->Control_Points))
+    return List_Nbr(c1->Control_Points) - List_Nbr(c2->Control_Points);
+
+  if(!List_Nbr(c1->Control_Points)){
+    if(!c1->beg || !c2->beg)
+      return 1;
+    comp = compareVertex(&c1->beg, &c2->beg);
+    if(comp)
+      return comp;
+    if(!c1->end || !c2->end)
+      return 1;
+    comp = compareVertex(&c1->end, &c2->end);
+    if(comp)
+      return comp;
   }
   else {
-    List_Add(s->Generatrices, &pc);
-    List_Add(s->Generatrices, &CurveEnd);
-    List_Add(s->Generatrices, &ReverseChapeau);
-    List_Add(s->Generatrices, &ReverseBeg);
+    for(int i = 0; i < List_Nbr(c1->Control_Points); i++){
+      Vertex *v1, *v2;
+      List_Read(c1->Control_Points, i, &v1);
+      List_Read(c2->Control_Points, i, &v2);
+      comp = compareVertex(&v1, &v2);
+      if(comp)
+        return comp;
+    }
   }
+  return 0;
+}
 
-  End_Surface(s);
-  Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
+static int compareTwoSurfaces(const void *a, const void *b)
+{
+  Surface *s1 = *(Surface **)a;
+  Surface *s2 = *(Surface **)b;
 
-  List_Reset(ListOfTransformedPoints);
+  // checking types is the "right thing" to do (see e.g. compareTwoCurves)
+  // but it would break backward compatibility (see e.g. tutorial/t2.geo),
+  // so let's just do it for boundary layer surfaces for now:
+  if(s1->Typ == MSH_SURF_BND_LAYER || s2->Typ == MSH_SURF_BND_LAYER ||
+     s1->Typ == MSH_SURF_COMPOUND || s2->Typ == MSH_SURF_COMPOUND ){
+    if(s1->Typ != s2->Typ) return s1->Typ - s2->Typ;
+  }
 
-  *ps = s;
+  // if both surfaces have no generatrices, stay on the safe side and
+  // assume they are different
+  if(!List_Nbr(s1->Generatrices) && !List_Nbr(s2->Generatrices))
+    return 1;
 
-  if(CTX::instance()->geom.autoCoherence && final)
-    ReplaceAllDuplicates();
+  return compare2Lists(s1->Generatrices, s2->Generatrices, compareAbsCurve);
+}
 
-  return chapeau->Num;
+static void MaxNumPoint(void *a, void *b)
+{
+  Vertex *v = *(Vertex **)a;
+  GModel::current()->getGEOInternals()->MaxPointNum =
+    std::max(GModel::current()->getGEOInternals()->MaxPointNum, v->Num);
 }
 
-int Extrude_ProtudeSurface(int type, int is,
-			   double T0, double T1, double T2,
-			   double A0, double A1, double A2,
-			   double X0, double X1, double X2, double alpha,
-			   Volume **pv, ExtrudeParams *e)
+static void MaxNumCurve(void *a, void *b)
 {
-  double matrix[4][4], T[3], Ax[3];
-  Curve *c, *c2;
-  int i;
-  Surface *s, *ps, *chapeau;
+  Curve *c = *(Curve **)a;
+  GModel::current()->getGEOInternals()->MaxLineNum =
+    std::max(GModel::current()->getGEOInternals()->MaxLineNum, c->Num);
+}
 
-  *pv = NULL;
+static void MaxNumSurface(void *a, void *b)
+{
+  Surface *s = *(Surface **)a;
+  GModel::current()->getGEOInternals()->MaxSurfaceNum =
+    std::max(GModel::current()->getGEOInternals()->MaxSurfaceNum, s->Num);
+}
 
-  // 'is' can be negative, to signify that the surface orientation
-  // should be reversed. This orientation information is only used at
-  // the moment when creating boundary layers
-  if(!(ps = FindSurface(std::abs(is))))
-    return 0;
 
-  Msg::Debug("Extrude Surface %d", is);
+// Modified by Trevor Strickler
+static void ReplaceDuplicatePoints(std::map<int, int> * v_report = 0)
+{
+  // FIXME: This routine is in fact logically wrong (the compareTwoPoints
+  // function used in the avl tree is not a appropriate comparison
+  // function). The fix is simple (use a multi dimensional tree, e.g.,
+  // MVertexPositionSet), but fixing the routine would break backward
+  // compatibility with old .geo files. This will be fixed in the new abstract
+  // GModel CAD creation routines.
+  Vertex *v, *v2, **pv, **pv2;
+  Curve *c;
+  Surface *s;
+  Volume *vol;
+  Tree_T *points2delete = Tree_Create(sizeof(Vertex *), compareVertex);
+  Tree_T *allNonDuplicatedPoints = Tree_Create(sizeof(Vertex *), compareTwoPoints);
 
-  chapeau = DuplicateSurface(ps, false);
-  chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY);
-  chapeau->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-  chapeau->Extrude->geo.Source = is; // not ps->Num: we need the sign info
-  if(e)
-    chapeau->Extrude->mesh = e->mesh;
+  // Create unique points
 
-  for(i = 0; i < List_Nbr(chapeau->Generatrices); i++) {
-    List_Read(ps->Generatrices, i, &c2);
-    List_Read(chapeau->Generatrices, i, &c);
-    if(c->Num < 0){
-      int nn = -c->Num;
-      if(!(c = FindCurve(nn))) {
-        Msg::Error("Unknown curve %d", nn);
-        return ps->Num;
+  int start = Tree_Nbr(GModel::current()->getGEOInternals()->Points);
+
+  List_T *All = Tree2List(GModel::current()->getGEOInternals()->Points);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &v);
+    if(!Tree_Search(allNonDuplicatedPoints, &v)) {
+      Tree_Insert(allNonDuplicatedPoints, &v);
+    }
+    else {
+      Tree_Suppress(GModel::current()->getGEOInternals()->Points, &v);
+      Tree_Insert(points2delete, &v);
+      // Trevor Strickler
+      if(v_report){
+        std::map<int, int>::iterator m_it = v_report->find(v->Num);
+        if( m_it != v_report->end() ){
+	  Vertex **v_rep = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, &v);
+	  m_it->second = (*v_rep)->Num;
+        }
       }
     }
-    c->Extrude = new ExtrudeParams(COPIED_ENTITY);
-    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-    // don't take the abs(): the sign of c2->Num is important (used
-    // when copying the mesh in the extrusion routine)
-    c->Extrude->geo.Source = c2->Num;
-    if(e)
-      c->Extrude->mesh = e->mesh;
   }
+  List_Delete(All);
 
-  // FIXME: this is a really ugly hack for backward compatibility, so
-  // that we don't screw up the old .geo files too much. (Before
-  // version 1.54, we didn't always create new volumes during "Extrude
-  // Surface". Now we do, but with "CTX::instance()->geom.oldNewreg==1", this
-  // bumps the NEWREG() counter, and thus changes the whole automatic
-  // numbering sequence.) So we locally force oldNewreg to 0: in most
-  // cases, since we define points, curves, etc., before defining
-  // volumes, the NEWVOLUME() call below will return a fairly low
-  // number, that will not interfere with the other numbers...
-  int tmp = CTX::instance()->geom.oldNewreg;
-  CTX::instance()->geom.oldNewreg = 0;
-  Volume *v = Create_Volume(NEWVOLUME(), MSH_VOLUME);
-  CTX::instance()->geom.oldNewreg = tmp;
+  int end = Tree_Nbr(GModel::current()->getGEOInternals()->Points);
 
-  v->Extrude = new ExtrudeParams;
-  v->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
-  v->Extrude->geo.Source = is;
-  if(e)
-    v->Extrude->mesh = e->mesh;
-  int ori = -1;
-  List_Add(v->Surfaces, &ps);
-  List_Add(v->SurfacesOrientations, &ori);
-  ori = 1;
-  List_Add(v->Surfaces, &chapeau);
-  List_Add(v->SurfacesOrientations, &ori);
+  if(start == end) {
+    Tree_Delete(points2delete);
+    Tree_Delete(allNonDuplicatedPoints);
+    return;
+  }
 
-  for(i = 0; i < List_Nbr(ps->Generatrices); i++) {
-    List_Read(ps->Generatrices, i, &c);
-    Extrude_ProtudeCurve(type, c->Num, T0, T1, T2, A0, A1, A2, X0, X1, X2,
-                         alpha, &s, 0, e);
-    if(s){
-      if(c->Num < 0)
-        ori = -1;
-      else
-        ori = 1;
-      List_Add(v->Surfaces, &s);
-      List_Add(v->SurfacesOrientations, &ori);
-    }
+  Msg::Debug("Removed %d duplicate points", start - end);
+
+  if(CTX::instance()->geom.oldNewreg) {
+    GModel::current()->getGEOInternals()->MaxPointNum = 0;
+    Tree_Action(GModel::current()->getGEOInternals()->Points, MaxNumPoint);
   }
 
-  switch (type) {
-  case TRANSLATE:
-    T[0] = T0;
-    T[1] = T1;
-    T[2] = T2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    break;
-  case BOUNDARY_LAYER:
-    chapeau->Typ = MSH_SURF_BND_LAYER;
-    for(int i = 0; i < List_Nbr(chapeau->Generatrices); i++) {
-      List_Read(chapeau->Generatrices, i, &c);
-      c->Typ = MSH_SEGM_BND_LAYER;
-      c = FindCurve(-c->Num);
-      c->Typ = MSH_SEGM_BND_LAYER;
-      if(c->beg){
-        c->beg->Typ = MSH_POINT_BND_LAYER;
-        if(e) c->beg->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
-      }
-      if(c->end){
-        c->end->Typ = MSH_POINT_BND_LAYER;
-        if(e) c->end->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
-      }
-      for(int i = 0; i < List_Nbr(c->Control_Points); i++){
-        Vertex *v;
-        List_Read(c->Control_Points, i, &v);
-        if(e) v->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
+  // Replace old points in curves
+
+  All = Tree2List(GModel::current()->getGEOInternals()->Curves);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &c);
+    // replace begin/end points
+    if(!Tree_Query(allNonDuplicatedPoints, &c->beg))
+      Msg::Error("Weird point %d in Coherence", c->beg->Num);
+    if(!Tree_Query(allNonDuplicatedPoints, &c->end))
+      Msg::Error("Weird point %d in Coherence", c->end->Num);
+    // replace control points
+    for(int j = 0; j < List_Nbr(c->Control_Points); j++) {
+      pv = (Vertex **)List_Pointer(c->Control_Points, j);
+      if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, pv)))
+        Msg::Error("Weird point %d in Coherence", (*pv)->Num);
+      else
+        List_Write(c->Control_Points, j, pv2);
+    }
+    // replace extrusion sources
+    if(c->Extrude && c->Extrude->geo.Mode == EXTRUDED_ENTITY){
+      v2 = FindPoint(std::abs(c->Extrude->geo.Source), points2delete);
+      if(v2){
+        if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, &v2)))
+          Msg::Error("Weird point %d in Coherence", v2->Num);
+        else
+          c->Extrude->geo.Source = (*pv2)->Num;
       }
     }
-    break;
-  case ROTATE:
-    T[0] = -X0;
-    T[1] = -X1;
-    T[2] = -X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    Ax[0] = A0;
-    Ax[1] = A1;
-    Ax[2] = A2;
-    SetRotationMatrix(matrix, Ax, alpha);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    T[0] = X0;
-    T[1] = X1;
-    T[2] = X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    break;
-  case TRANSLATE_ROTATE:
-    T[0] = -X0;
-    T[1] = -X1;
-    T[2] = -X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    Ax[0] = A0;
-    Ax[1] = A1;
-    Ax[2] = A2;
-    SetRotationMatrix(matrix, Ax, alpha);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    T[0] = X0;
-    T[1] = X1;
-    T[2] = X2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    T[0] = T0;
-    T[1] = T1;
-    T[2] = T2;
-    SetTranslationMatrix(matrix, T);
-    List_Reset(ListOfTransformedPoints);
-    ApplyTransformationToSurface(matrix, chapeau);
-    break;
-  default:
-    Msg::Error("Unknown extrusion type");
-    return ps->Num;
   }
+  List_Delete(All);
 
-  // this is done only for backward compatibility with the old
-  // numbering scheme
-  Tree_Suppress(GModel::current()->getGEOInternals()->Surfaces, &chapeau);
-
-  chapeau->Num = NEWSURFACE();
-
-  GModel::current()->getGEOInternals()->MaxSurfaceNum = chapeau->Num;
-  Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &chapeau);
+  // Replace old points in surfaces
 
-  Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
+  All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &s);
+    // replace transfinite corners
+    for(int j = 0; j < List_Nbr(s->TrsfPoints); j++){
+      pv = (Vertex **)List_Pointer(s->TrsfPoints, j);
+      if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, pv)))
+        Msg::Error("Weird point %d in Coherence", (*pv)->Num);
+      else
+        List_Write(s->TrsfPoints, j, pv2);
+    }
+  }
+  List_Delete(All);
 
-  *pv = v;
+  // Replace old points in volumes
 
-  if(CTX::instance()->geom.autoCoherence)
-    ReplaceAllDuplicates();
+  All = Tree2List(GModel::current()->getGEOInternals()->Volumes);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &vol);
+    // replace transfinite corners
+    for(int j = 0; j < List_Nbr(vol->TrsfPoints); j++){
+      pv = (Vertex **)List_Pointer(vol->TrsfPoints, j);
+      if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, pv)))
+        Msg::Error("Weird point %d in Coherence", (*pv)->Num);
+      else
+        List_Write(vol->TrsfPoints, j, pv2);
+    }
+  }
+  List_Delete(All);
 
-  List_Reset(ListOfTransformedPoints);
+  // Replace old points in physical groups
+  for(int i = 0; i < List_Nbr(GModel::current()->getGEOInternals()->PhysicalGroups); i++){
+    PhysicalGroup *p = *(PhysicalGroup**)List_Pointer
+      (GModel::current()->getGEOInternals()->PhysicalGroups, i);
+    if(p->Typ == MSH_PHYSICAL_POINT){
+      for(int j = 0; j < List_Nbr(p->Entities); j++){
+        int num;
+        List_Read(p->Entities, j, &num);
+        v2 = FindPoint(std::abs(num), points2delete);
+        if(v2){
+          if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, &v2)))
+            Msg::Error("Weird point %d in Coherence", v2->Num);
+          else
+            List_Write(p->Entities, j, &(*pv2)->Num);
+        }
+      }
+    }
+  }
 
-  return chapeau->Num;
+  Tree_Action(points2delete, Free_Vertex);
+  Tree_Delete(points2delete);
+  Tree_Delete(allNonDuplicatedPoints);
 }
 
-void ExtrudeShape(int extrude_type, int shape_type, int shape_num,
-                  double T0, double T1, double T2,
-                  double A0, double A1, double A2,
-                  double X0, double X1, double X2, double alpha,
-                  ExtrudeParams *e,
-                  List_T *list_out)
-{
-  Shape shape;
-  shape.Type = shape_type;
-  shape.Num = shape_num;
-  List_T *tmp = List_Create(1, 1, sizeof(Shape));
-  List_Add(tmp, &shape);
-  ExtrudeShapes(extrude_type, tmp,
-                T0, T1, T2,
-                A0, A1, A2,
-                X0, X1, X2, alpha,
-                e,
-                list_out);
-  List_Delete(tmp);
-}
+//Modified by Trevor Strickler
+static void ReplaceDuplicateCurves(std::map<int, int> * c_report = 0)
 
-void ExtrudeShapes(int type, List_T *list_in,
-                   double T0, double T1, double T2,
-                   double A0, double A1, double A2,
-                   double X0, double X1, double X2, double alpha,
-                   ExtrudeParams *e,
-                   List_T *list_out)
 {
+  Curve *c, *c2, **pc, **pc2;
+  Surface *s;
+  Tree_T *curves2delete = Tree_Create(sizeof(Curve *), compareCurve);
+  Tree_T *allNonDuplicatedCurves = Tree_Create(sizeof(Curve *), compareTwoCurves);
 
-  for(int i = 0; i < List_Nbr(list_in); i++){
-    Shape shape;
-    List_Read(list_in, i, &shape);
-    switch(shape.Type){
-    case MSH_POINT:
-      {
-        Curve *pc = 0, *prc = 0;
-        Shape top;
-        top.Num = Extrude_ProtudePoint(type, shape.Num, T0, T1, T2,
-                                       A0, A1, A2, X0, X1, X2, alpha,
-                                       &pc, &prc, 1, e);
-        top.Type = MSH_POINT;
-        List_Add(list_out, &top);
-        if(pc){
-          Shape body;
-          body.Num = pc->Num;
-          body.Type = pc->Typ;
-          List_Add(list_out, &body);
+  // Create unique curves
+
+  int start = Tree_Nbr(GModel::current()->getGEOInternals()->Curves);
+
+  List_T *All = Tree2List(GModel::current()->getGEOInternals()->Curves);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &c);
+    if(c->Num > 0) {
+      if(!Tree_Search(allNonDuplicatedCurves, &c)) {
+        Tree_Insert(allNonDuplicatedCurves, &c);
+        if(!(c2 = FindCurve(-c->Num))) {
+          Msg::Error("Unknown curve %d", -c->Num);
+          List_Delete(All);
+          return;
         }
+        Tree_Insert(allNonDuplicatedCurves, &c2);
       }
-      break;
-    case MSH_SEGM_LINE:
-    case MSH_SEGM_SPLN:
-    case MSH_SEGM_BSPLN:
-    case MSH_SEGM_BEZIER:
-    case MSH_SEGM_CIRC:
-    case MSH_SEGM_CIRC_INV:
-    case MSH_SEGM_ELLI:
-    case MSH_SEGM_ELLI_INV:
-    case MSH_SEGM_NURBS:
-      {
-        Surface *ps = 0;
-        Shape top;
-        top.Num = Extrude_ProtudeCurve(type, shape.Num, T0, T1, T2,
-                                       A0, A1, A2, X0, X1, X2, alpha,
-                                       &ps, 1, e);
-        Curve *pc = FindCurve(top.Num);
-        top.Type = pc ? pc->Typ : 0;
-        List_Add(list_out, &top);
-        if(ps){
-          Shape body;
-          body.Num = ps->Num;
-          body.Type = ps->Typ;
-          List_Add(list_out, &body);
-          if(CTX::instance()->geom.extrudeReturnLateral){
-            for(int j = 0; j < List_Nbr(ps->Generatrices); j++){
-              Curve *c;
-              List_Read(ps->Generatrices, j, &c);
-              if(abs(c->Num) != shape.Num && abs(c->Num) != top.Num){
-                Shape side;
-                side.Num = c->Num;
-                side.Type = c->Typ;
-                List_Add(list_out, &side);
-              }
-            }
-          }
+      else {
+        Tree_Suppress(GModel::current()->getGEOInternals()->Curves, &c);
+        if(!(c2 = FindCurve(-c->Num))) {
+          Msg::Error("Unknown curve %d", -c->Num);
+          break;
         }
+        Tree_Suppress(GModel::current()->getGEOInternals()->Curves, &c2);
+        Tree_Insert(curves2delete, &c);
+        Tree_Insert(curves2delete, &c2);
+	// Trevor Strickler
+	if(c_report){
+	  std::map<int, int>::iterator m_it = c_report->find(c->Num);
+	  if( m_it != c_report->end() ){
+	    Curve **c_rep = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c);
+	    m_it->second = (*c_rep)->Num;
+	  }
+	  m_it = c_report->find(c2->Num);
+	  if( m_it != c_report->end() ){
+	    Curve **c_rep_neg = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c2);
+	    m_it->second = (*c_rep_neg)->Num;
+	  }
+	}
       }
-      break;
-    case MSH_SURF_REGL:
-    case MSH_SURF_TRIC:
-    case MSH_SURF_PLAN:
-    case MSH_SURF_DISCRETE:
-    case MSH_SURF_COMPOUND:
-      {
-        Volume *pv = 0;
-        Shape top;
-        top.Num = Extrude_ProtudeSurface(type, shape.Num, T0, T1, T2,
-                                         A0, A1, A2, X0, X1, X2, alpha,
-                                         &pv, e);
-        Surface *ps = FindSurface(top.Num);
-        top.Type = ps ? ps->Typ : 0;
+    }
+  }
+  List_Delete(All);
 
-        List_Add(list_out, &top);
-        if(pv){
-          Shape body;
-          body.Num = pv->Num;
-          body.Type = pv->Typ;
-          List_Add(list_out, &body);
-          if(CTX::instance()->geom.extrudeReturnLateral){
-            for(int j = 0; j < List_Nbr(pv->Surfaces); j++){
-              Surface *s;
-              List_Read(pv->Surfaces, j, &s);
-              if(abs(s->Num) != shape.Num && abs(s->Num) != top.Num){
-                Shape side;
-                side.Num = s->Num;
-                side.Type = s->Typ;
-                List_Add(list_out, &side);
-              }
-            }
-          }
+  int end = Tree_Nbr(GModel::current()->getGEOInternals()->Curves);
+
+  if(start == end) {
+    Tree_Delete(curves2delete);
+    Tree_Delete(allNonDuplicatedCurves);
+    return;
+  }
+
+  Msg::Debug("Removed %d duplicate curves", start - end);
+
+  if(CTX::instance()->geom.oldNewreg) {
+    GModel::current()->getGEOInternals()->MaxLineNum = 0;
+    Tree_Action(GModel::current()->getGEOInternals()->Curves, MaxNumCurve);
+  }
+
+  // Replace old curves in curves
+
+  All = Tree2List(GModel::current()->getGEOInternals()->Curves);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &c);
+    // replace extrusion sources
+    if(c->Extrude && c->Extrude->geo.Mode == COPIED_ENTITY){
+      c2 = FindCurve(std::abs(c->Extrude->geo.Source), curves2delete);
+      if(c2){
+        if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c2)))
+          Msg::Error("Weird curve %d in Coherence", c2->Num);
+        else
+          c->Extrude->geo.Source = (*pc2)->Num;
+      }
+    }
+  }
+  List_Delete(All);
+
+  // Replace old curves in surfaces
+
+  All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &s);
+    // replace bounding curves
+    for(int j = 0; j < List_Nbr(s->Generatrices); j++) {
+      pc = (Curve **)List_Pointer(s->Generatrices, j);
+      if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, pc)))
+        Msg::Error("Weird curve %d in Coherence", (*pc)->Num);
+      else {
+        List_Write(s->Generatrices, j, pc2);
+        // arghhh: check compareTwoCurves!
+        End_Curve(*pc2);
+      }
+    }
+    // replace extrusion sources
+    if(s->Extrude && s->Extrude->geo.Mode == EXTRUDED_ENTITY){
+      c2 = FindCurve(std::abs(s->Extrude->geo.Source), curves2delete);
+      if(c2){
+        if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c2)))
+          Msg::Error("Weird curve %d in Coherence", c2->Num);
+        else
+          s->Extrude->geo.Source = (*pc2)->Num;
+      }
+    }
+  }
+  List_Delete(All);
+
+  // Replace old curves in physical groups
+  for(int i = 0; i < List_Nbr(GModel::current()->getGEOInternals()->PhysicalGroups); i++){
+    PhysicalGroup *p = *(PhysicalGroup**)List_Pointer
+      (GModel::current()->getGEOInternals()->PhysicalGroups, i);
+    if(p->Typ == MSH_PHYSICAL_LINE){
+      for(int j = 0; j < List_Nbr(p->Entities); j++){
+        int num;
+        List_Read(p->Entities, j, &num);
+        c2 = FindCurve(std::abs(num), curves2delete);
+        if(c2){
+          if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c2)))
+            Msg::Error("Weird curve %d in Coherence", c2->Num);
+          else
+            List_Write(p->Entities, j, &(*pc2)->Num);
+        }
+      }
+    }
+  }
+
+  Tree_Action(curves2delete, Free_Curve);
+  Tree_Delete(curves2delete);
+  Tree_Delete(allNonDuplicatedCurves);
+}
+
+// Modified By Trevor Strickler
+static void ReplaceDuplicateSurfaces(std::map<int, int> *s_report = 0)
+{
+  Surface *s, *s2, **ps, **ps2;
+  Volume *vol;
+  Tree_T *surfaces2delete = Tree_Create(sizeof(Surface *), compareSurface);
+  Tree_T *allNonDuplicatedSurfaces = Tree_Create(sizeof(Surface *), compareTwoSurfaces);
+
+  // Create unique surfaces
+
+  int start = Tree_Nbr(GModel::current()->getGEOInternals()->Surfaces);
+
+  List_T *All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &s);
+    if(s->Num > 0) {
+      if(!Tree_Search(allNonDuplicatedSurfaces, &s)) {
+        Tree_Insert(allNonDuplicatedSurfaces, &s);
+      }
+      else {
+        Tree_Suppress(GModel::current()->getGEOInternals()->Surfaces, &s);
+        Tree_Insert(surfaces2delete, &s);
+      // Trevor Strickler
+	if(s_report){
+	  std::map<int, int>::iterator m_it = (*s_report).find(s->Num);
+	  if( m_it != s_report->end() ){
+	    Surface **s_rep = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, &s);
+	    m_it->second = (*s_rep)->Num;
+	  }
+	}
+      }
+    }
+  }
+  List_Delete(All);
+
+  int end = Tree_Nbr(GModel::current()->getGEOInternals()->Surfaces);
+
+  if(start == end) {
+    Tree_Delete(surfaces2delete);
+    Tree_Delete(allNonDuplicatedSurfaces);
+    return;
+  }
+
+  Msg::Debug("Removed %d duplicate surfaces", start - end);
+
+  if(CTX::instance()->geom.oldNewreg) {
+    GModel::current()->getGEOInternals()->MaxSurfaceNum = 0;
+    Tree_Action(GModel::current()->getGEOInternals()->Surfaces, MaxNumSurface);
+  }
+
+  // Replace old surfaces in surfaces
+
+  All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &s);
+    // replace extrusion sources
+    if(s->Extrude && s->Extrude->geo.Mode == COPIED_ENTITY){
+      s2 = FindSurface(std::abs(s->Extrude->geo.Source), surfaces2delete);
+      if(s2){
+        if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, &s2)))
+          Msg::Error("Weird surface %d in Coherence", s2->Num);
+        else
+          s->Extrude->geo.Source = (*ps2)->Num;
+      }
+    }
+  }
+  List_Delete(All);
+
+  // Replace old surfaces in volumes
+
+  All = Tree2List(GModel::current()->getGEOInternals()->Volumes);
+  for(int i = 0; i < List_Nbr(All); i++) {
+    List_Read(All, i, &vol);
+    // replace bounding surfaces
+    for(int j = 0; j < List_Nbr(vol->Surfaces); j++) {
+      ps = (Surface **)List_Pointer(vol->Surfaces, j);
+      if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, ps)))
+        Msg::Error("Weird surface %d in Coherence", (*ps)->Num);
+      else
+        List_Write(vol->Surfaces, j, ps2);
+    }
+    // replace extrusion sources
+    if(vol->Extrude && vol->Extrude->geo.Mode == EXTRUDED_ENTITY){
+      s2 = FindSurface(std::abs(vol->Extrude->geo.Source), surfaces2delete);
+      if(s2){
+        if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, &s2)))
+          Msg::Error("Weird surface %d in Coherence", s2->Num);
+        else
+          vol->Extrude->geo.Source = (*ps2)->Num;
+      }
+    }
+  }
+  List_Delete(All);
+
+  // Replace old surfaces in physical groups
+  for(int i = 0; i < List_Nbr(GModel::current()->getGEOInternals()->PhysicalGroups); i++){
+    PhysicalGroup *p = *(PhysicalGroup**)List_Pointer
+      (GModel::current()->getGEOInternals()->PhysicalGroups, i);
+    if(p->Typ == MSH_PHYSICAL_SURFACE){
+      for(int j = 0; j < List_Nbr(p->Entities); j++){
+        int num;
+        List_Read(p->Entities, j, &num);
+        s2 = FindSurface(std::abs(num), surfaces2delete);
+        if(s2){
+          if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, &s2)))
+            Msg::Error("Weird surface %d in Coherence", s2->Num);
+          else
+            List_Write(p->Entities, j, &(*ps2)->Num);
         }
       }
-      break;
-    default:
-      Msg::Error("Impossible to extrude entity %d (of type %d)",
-                 shape.Num, shape.Type);
-      break;
     }
   }
 
+  Tree_Action(surfaces2delete, Free_Surface);
+  Tree_Delete(surfaces2delete);
+  Tree_Delete(allNonDuplicatedSurfaces);
 }
 
-// Duplicate removal
-
-static int compareTwoPoints(const void *a, const void *b)
+// Trevor Strickler added argument to return select changed shape nums
+// this is needed to set chapeau correctly in situations where chapeau gets replaced!
+// report has a default argument of zero.
+static void ReplaceAllDuplicates(std::vector<std::map<int, int> > &report)
 {
+  std::map<int, int>  *vertex_report = 0;
+  std::map<int, int>  *curve_report = 0;
+  std::map<int, int>  *surface_report = 0;
+  if( report.size() >=1 && report[0].size() )
+    vertex_report = &(report[0]);
+  if( report.size() >=2 && report[1].size() )
+    curve_report = &(report[1]);
+  if( report.size() >= 3 && report[2].size() )
+    surface_report = &(report[2]);
 
-  Vertex *q = *(Vertex **)a;
-  Vertex *w = *(Vertex **)b;
-
-  if(q->Typ != w->Typ)
-    return q->Typ - w->Typ;
+  ReplaceDuplicatePoints(vertex_report);
+  ReplaceDuplicateCurves(curve_report);
+  ReplaceDuplicateSurfaces(surface_report);
+}
 
-  if(q->boundaryLayerIndex != w->boundaryLayerIndex)
-    return q->boundaryLayerIndex - w->boundaryLayerIndex;
 
-  return comparePosition(a, b);
+// overloaded ReplaceAllDuplicates to keep old functionality with no danger of
+// default pointer argument = 0
+void ReplaceAllDuplicates()
+{
+  std::vector<std::map<int,int> > report;
+  report.clear();
+  ReplaceAllDuplicates(report);
 }
 
-static int compareTwoCurves(const void *a, const void *b)
+
+// Extrusion routines
+
+void ProtudeXYZ(double &x, double &y, double &z, ExtrudeParams *e)
 {
-  Curve *c1 = *(Curve **)a;
-  Curve *c2 = *(Curve **)b;
-  int comp;
+  double matrix[4][4];
+  double T[3];
+  Vertex v(x, y, z);
 
-  if(c1->Typ != c2->Typ){
-    if((c1->Typ == MSH_SEGM_CIRC && c2->Typ == MSH_SEGM_CIRC_INV) ||
-       (c1->Typ == MSH_SEGM_CIRC_INV && c2->Typ == MSH_SEGM_CIRC) ||
-       (c1->Typ == MSH_SEGM_ELLI && c2->Typ == MSH_SEGM_ELLI_INV) ||
-       (c1->Typ == MSH_SEGM_ELLI_INV && c2->Typ == MSH_SEGM_ELLI)){
-      // this is still ok
-    }
-    else
-      return c1->Typ - c2->Typ;
-  }
+  T[0] = -e->geo.pt[0];
+  T[1] = -e->geo.pt[1];
+  T[2] = -e->geo.pt[2];
+  SetTranslationMatrix(matrix, T);
+  List_Reset(ListOfTransformedPoints);
+  ApplyTransformationToPoint(matrix, &v);
 
-  if(List_Nbr(c1->Control_Points) != List_Nbr(c2->Control_Points))
-    return List_Nbr(c1->Control_Points) - List_Nbr(c2->Control_Points);
+  SetRotationMatrix(matrix, e->geo.axe, e->geo.angle);
+  List_Reset(ListOfTransformedPoints);
+  ApplyTransformationToPoint(matrix, &v);
 
-  if(!List_Nbr(c1->Control_Points)){
-    if(!c1->beg || !c2->beg)
-      return 1;
-    comp = compareVertex(&c1->beg, &c2->beg);
-    if(comp)
-      return comp;
-    if(!c1->end || !c2->end)
-      return 1;
-    comp = compareVertex(&c1->end, &c2->end);
-    if(comp)
-      return comp;
-  }
-  else {
-    for(int i = 0; i < List_Nbr(c1->Control_Points); i++){
-      Vertex *v1, *v2;
-      List_Read(c1->Control_Points, i, &v1);
-      List_Read(c2->Control_Points, i, &v2);
-      comp = compareVertex(&v1, &v2);
-      if(comp)
-        return comp;
-    }
-  }
-  return 0;
+  T[0] = -T[0];
+  T[1] = -T[1];
+  T[2] = -T[2];
+  SetTranslationMatrix(matrix, T);
+  List_Reset(ListOfTransformedPoints);
+  ApplyTransformationToPoint(matrix, &v);
+
+  x = v.Pos.X;
+  y = v.Pos.Y;
+  z = v.Pos.Z;
+
+  List_Reset(ListOfTransformedPoints);
 }
 
-static int compareTwoSurfaces(const void *a, const void *b)
+int Extrude_ProtudePoint(int type, int ip,
+			 double T0, double T1, double T2,
+			 double A0, double A1, double A2,
+			 double X0, double X1, double X2, double alpha,
+			 Curve **pc, Curve **prc, int final,
+			 ExtrudeParams *e)
 {
-  Surface *s1 = *(Surface **)a;
-  Surface *s2 = *(Surface **)b;
+  double matrix[4][4], T[3], Ax[3], d;
+  Vertex V, *pv, *newp, *chapeau;
+  Curve *c;
+  int i;
 
-  // checking types is the "right thing" to do (see e.g. compareTwoCurves)
-  // but it would break backward compatibility (see e.g. tutorial/t2.geo),
-  // so let's just do it for boundary layer surfaces for now:
-  if(s1->Typ == MSH_SURF_BND_LAYER || s2->Typ == MSH_SURF_BND_LAYER ||
-     s1->Typ == MSH_SURF_COMPOUND || s2->Typ == MSH_SURF_COMPOUND ){
-    if(s1->Typ != s2->Typ) return s1->Typ - s2->Typ;
-  }
+  pv = &V;
+  pv->Num = ip;
+  *pc = *prc = NULL;
+  if(!Tree_Query(GModel::current()->getGEOInternals()->Points, &pv))
+    return 0;
 
-  // if both surfaces have no generatrices, stay on the safe side and
-  // assume they are different
-  if(!List_Nbr(s1->Generatrices) && !List_Nbr(s2->Generatrices))
-    return 1;
+  Msg::Debug("Extrude Point %d", ip);
+
+  chapeau = DuplicateVertex(pv);
+
+  switch (type) {
+  case TRANSLATE:
+    T[0] = T0;
+    T[1] = T1;
+    T[2] = T2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToPoint(matrix, chapeau);
+    if(!comparePosition(&pv, &chapeau))
+      return pv->Num;
+    c = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.);
+    c->Control_Points = List_Create(2, 1, sizeof(Vertex *));
+    c->Extrude = new ExtrudeParams;
+    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+    if(e)
+      c->Extrude->mesh = e->mesh;
+    List_Add(c->Control_Points, &pv);
+    List_Add(c->Control_Points, &chapeau);
+    c->beg = pv;
+    c->end = chapeau;
+    break;
+  case BOUNDARY_LAYER:
+    chapeau->Typ = MSH_POINT_BND_LAYER;
+    if(e) chapeau->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
+    c = Create_Curve(NEWLINE(), MSH_SEGM_BND_LAYER, 1, NULL, NULL, -1, -1, 0., 1.);
+    c->Control_Points = List_Create(2, 1, sizeof(Vertex *));
+    c->Extrude = new ExtrudeParams;
+    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+    if(e) c->Extrude->mesh = e->mesh;
+    List_Add(c->Control_Points, &pv);
+    List_Add(c->Control_Points, &chapeau);
+    c->beg = pv;
+    c->end = chapeau;
+    break;
+  case ROTATE:
+    T[0] = -X0;
+    T[1] = -X1;
+    T[2] = -X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToPoint(matrix, chapeau);
+    Ax[0] = A0;
+    Ax[1] = A1;
+    Ax[2] = A2;
+    SetRotationMatrix(matrix, Ax, alpha);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToPoint(matrix, chapeau);
+    T[0] = X0;
+    T[1] = X1;
+    T[2] = X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToPoint(matrix, chapeau);
+    if(!comparePosition(&pv, &chapeau))
+      return pv->Num;
+    c = Create_Curve(NEWLINE(), MSH_SEGM_CIRC, 1, NULL, NULL, -1, -1, 0., 1.);
+    c->Control_Points = List_Create(3, 1, sizeof(Vertex *));
+    c->Extrude = new ExtrudeParams;
+    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+    if(e)
+      c->Extrude->mesh = e->mesh;
+    List_Add(c->Control_Points, &pv);
+    // compute circle center
+    newp = DuplicateVertex(pv);
+    Ax[0] = A0;
+    Ax[1] = A1;
+    Ax[2] = A2;
+    norme(Ax);
+    T[0] = pv->Pos.X - X0;
+    T[1] = pv->Pos.Y - X1;
+    T[2] = pv->Pos.Z - X2;
+    prosca(T, Ax, &d);
+    newp->Pos.X = X0 + d * Ax[0];
+    newp->Pos.Y = X1 + d * Ax[1];
+    newp->Pos.Z = X2 + d * Ax[2];
+    List_Add(c->Control_Points, &newp);
+    List_Add(c->Control_Points, &chapeau);
+    c->beg = pv;
+    c->end = chapeau;
+    break;
+  case TRANSLATE_ROTATE:
+    d = CTX::instance()->geom.extrudeSplinePoints;
+    d = d ? d : 1;
+    c = Create_Curve(NEWLINE(), MSH_SEGM_SPLN, 1, NULL, NULL, -1, -1, 0., 1.);
+    c->Control_Points =
+      List_Create(CTX::instance()->geom.extrudeSplinePoints + 1, 1, sizeof(Vertex *));
+    c->Extrude = new ExtrudeParams;
+    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+    if(e)
+      c->Extrude->mesh = e->mesh;
+    List_Add(c->Control_Points, &pv);
+    c->beg = pv;
+    for(i = 0; i < CTX::instance()->geom.extrudeSplinePoints; i++) {
+      if(i)
+        chapeau = DuplicateVertex(chapeau);
+      T[0] = -X0;
+      T[1] = -X1;
+      T[2] = -X2;
+      SetTranslationMatrix(matrix, T);
+      List_Reset(ListOfTransformedPoints);
+      ApplyTransformationToPoint(matrix, chapeau);
+      Ax[0] = A0;
+      Ax[1] = A1;
+      Ax[2] = A2;
+      SetRotationMatrix(matrix, Ax, alpha / d);
+      List_Reset(ListOfTransformedPoints);
+      ApplyTransformationToPoint(matrix, chapeau);
+      T[0] = X0;
+      T[1] = X1;
+      T[2] = X2;
+      SetTranslationMatrix(matrix, T);
+      List_Reset(ListOfTransformedPoints);
+      ApplyTransformationToPoint(matrix, chapeau);
+      T[0] = T0 / d;
+      T[1] = T1 / d;
+      T[2] = T2 / d;
+      SetTranslationMatrix(matrix, T);
+      List_Reset(ListOfTransformedPoints);
+      ApplyTransformationToPoint(matrix, chapeau);
+      List_Add(c->Control_Points, &chapeau);
+    }
+    c->end = chapeau;
+    break;
+//  case ANALYTICAL:
+//
+//    break;
+  default:
+    Msg::Error("Unknown extrusion type");
+    return pv->Num;
+  }
 
-  return compare2Lists(s1->Generatrices, s2->Generatrices, compareAbsCurve);
-}
+  End_Curve(c);
+  Tree_Add(GModel::current()->getGEOInternals()->Curves, &c);
+  CreateReversedCurve(c);
+  *pc = c;
+  *prc = FindCurve(-c->Num);
 
-static void MaxNumPoint(void *a, void *b)
-{
-  Vertex *v = *(Vertex **)a;
-  GModel::current()->getGEOInternals()->MaxPointNum =
-    std::max(GModel::current()->getGEOInternals()->MaxPointNum, v->Num);
-}
+  List_Reset(ListOfTransformedPoints);
 
-static void MaxNumCurve(void *a, void *b)
-{
-  Curve *c = *(Curve **)a;
-  GModel::current()->getGEOInternals()->MaxLineNum =
-    std::max(GModel::current()->getGEOInternals()->MaxLineNum, c->Num);
-}
+  int chap_num = chapeau->Num;
 
-static void MaxNumSurface(void *a, void *b)
-{
-  Surface *s = *(Surface **)a;
-  GModel::current()->getGEOInternals()->MaxSurfaceNum =
-    std::max(GModel::current()->getGEOInternals()->MaxSurfaceNum, s->Num);
+  if(CTX::instance()->geom.autoCoherence && final){
+    // Trevor Strickler added to fix replaced Chapeau
+    std::vector<std::map<int, int> > report(3);
+    report[0][chapeau->Num] = chap_num;
+    ReplaceAllDuplicates(report);
+    std::map<int, int>::iterator m_it = (report[0]).find(chap_num);
+    if( m_it != (report[0]).end() )
+      chap_num = (report[0])[chap_num];
+    else
+      chap_num = 0;
+  }
+  return chap_num;
 }
 
-static void ReplaceDuplicatePoints()
+int Extrude_ProtudeCurve(int type, int ic,
+			 double T0, double T1, double T2,
+			 double A0, double A1, double A2,
+			 double X0, double X1, double X2, double alpha,
+			 Surface **ps, int final,
+			 ExtrudeParams *e)
 {
-  // FIXME: This routine is in fact logically wrong (the compareTwoPoints
-  // function used in the avl tree is not a appropriate comparison
-  // function). The fix is simple (use a multi dimensional tree, e.g.,
-  // MVertexPositionSet), but fixing the routine would break backward
-  // compatibility with old .geo files. This will be fixed in the new abstract
-  // GModel CAD creation routines.
-  Vertex *v, *v2, **pv, **pv2;
-  Curve *c;
+  double matrix[4][4], T[3], Ax[3];
+  Curve *CurveBeg, *CurveEnd;
+  Curve *ReverseChapeau, *ReverseBeg, *ReverseEnd;
+  Curve *pc, *revpc, *chapeau;
   Surface *s;
-  Volume *vol;
-  Tree_T *points2delete = Tree_Create(sizeof(Vertex *), compareVertex);
-  Tree_T *allNonDuplicatedPoints = Tree_Create(sizeof(Vertex *), compareTwoPoints);
 
-  // Create unique points
-
-  int start = Tree_Nbr(GModel::current()->getGEOInternals()->Points);
+  pc = FindCurve(ic);
+  revpc = FindCurve(-ic);
+  *ps = NULL;
 
-  List_T *All = Tree2List(GModel::current()->getGEOInternals()->Points);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &v);
-    if(!Tree_Search(allNonDuplicatedPoints, &v)) {
-      Tree_Insert(allNonDuplicatedPoints, &v);
-    }
-    else {
-      Tree_Suppress(GModel::current()->getGEOInternals()->Points, &v);
-      Tree_Insert(points2delete, &v);
-    }
+  if(!pc || !revpc){
+    return 0;
   }
-  List_Delete(All);
-
-  int end = Tree_Nbr(GModel::current()->getGEOInternals()->Points);
 
-  if(start == end) {
-    Tree_Delete(points2delete);
-    Tree_Delete(allNonDuplicatedPoints);
-    return;
+  if(!pc->beg || !pc->end){
+    Msg::Error("Cannot extrude curve with no begin/end points");
+    return 0;
   }
 
-  Msg::Debug("Removed %d duplicate points", start - end);
+  Msg::Debug("Extrude Curve %d", ic);
 
-  if(CTX::instance()->geom.oldNewreg) {
-    GModel::current()->getGEOInternals()->MaxPointNum = 0;
-    Tree_Action(GModel::current()->getGEOInternals()->Points, MaxNumPoint);
-  }
+  chapeau = DuplicateCurve(pc, false);
 
-  // Replace old points in curves
+  chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY);
+  chapeau->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+  chapeau->Extrude->geo.Source = pc->Num;
+  if(e)
+    chapeau->Extrude->mesh = e->mesh;
 
-  All = Tree2List(GModel::current()->getGEOInternals()->Curves);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &c);
-    // replace begin/end points
-    if(!Tree_Query(allNonDuplicatedPoints, &c->beg))
-      Msg::Error("Weird point %d in Coherence", c->beg->Num);
-    if(!Tree_Query(allNonDuplicatedPoints, &c->end))
-      Msg::Error("Weird point %d in Coherence", c->end->Num);
-    // replace control points
-    for(int j = 0; j < List_Nbr(c->Control_Points); j++) {
-      pv = (Vertex **)List_Pointer(c->Control_Points, j);
-      if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, pv)))
-        Msg::Error("Weird point %d in Coherence", (*pv)->Num);
-      else
-        List_Write(c->Control_Points, j, pv2);
+  switch (type) {
+  case TRANSLATE:
+    T[0] = T0;
+    T[1] = T1;
+    T[2] = T2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    break;
+  case BOUNDARY_LAYER:
+    chapeau->Typ = MSH_SEGM_BND_LAYER;
+    if(chapeau->beg){
+      chapeau->beg->Typ = MSH_POINT_BND_LAYER;
+      if(e) chapeau->beg->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
     }
-    // replace extrusion sources
-    if(c->Extrude && c->Extrude->geo.Mode == EXTRUDED_ENTITY){
-      v2 = FindPoint(std::abs(c->Extrude->geo.Source), points2delete);
-      if(v2){
-        if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, &v2)))
-          Msg::Error("Weird point %d in Coherence", v2->Num);
-        else
-          c->Extrude->geo.Source = (*pv2)->Num;
-      }
+    if(chapeau->end){
+      chapeau->end->Typ = MSH_POINT_BND_LAYER;
+      if(e) chapeau->end->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
     }
-  }
-  List_Delete(All);
-
-  // Replace old points in surfaces
-
-  All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &s);
-    // replace transfinite corners
-    for(int j = 0; j < List_Nbr(s->TrsfPoints); j++){
-      pv = (Vertex **)List_Pointer(s->TrsfPoints, j);
-      if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, pv)))
-        Msg::Error("Weird point %d in Coherence", (*pv)->Num);
-      else
-        List_Write(s->TrsfPoints, j, pv2);
+    for(int i = 0; i < List_Nbr(chapeau->Control_Points); i++){
+      Vertex *v;
+      List_Read(chapeau->Control_Points, i, &v);
+      if(e) v->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
     }
+    revpc = FindCurve(-chapeau->Num);
+    if(revpc) revpc->Typ = MSH_SEGM_BND_LAYER;
+    break;
+  case ROTATE:
+    T[0] = -X0;
+    T[1] = -X1;
+    T[2] = -X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    Ax[0] = A0;
+    Ax[1] = A1;
+    Ax[2] = A2;
+    SetRotationMatrix(matrix, Ax, alpha);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    T[0] = X0;
+    T[1] = X1;
+    T[2] = X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    break;
+  case TRANSLATE_ROTATE:
+    T[0] = -X0;
+    T[1] = -X1;
+    T[2] = -X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    Ax[0] = A0;
+    Ax[1] = A1;
+    Ax[2] = A2;
+    SetRotationMatrix(matrix, Ax, alpha);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    T[0] = X0;
+    T[1] = X1;
+    T[2] = X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    T[0] = T0;
+    T[1] = T1;
+    T[2] = T2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToCurve(matrix, chapeau);
+    break;
+  default:
+    Msg::Error("Unknown extrusion type");
+    return pc->Num;
   }
-  List_Delete(All);
 
-  // Replace old points in volumes
+  Extrude_ProtudePoint(type, pc->beg->Num, T0, T1, T2,
+                       A0, A1, A2, X0, X1, X2, alpha,
+                       &CurveBeg, &ReverseBeg, 0, e);
+  Extrude_ProtudePoint(type, pc->end->Num, T0, T1, T2,
+                       A0, A1, A2, X0, X1, X2, alpha,
+                       &CurveEnd, &ReverseEnd, 0, e);
 
-  All = Tree2List(GModel::current()->getGEOInternals()->Volumes);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &vol);
-    // replace transfinite corners
-    for(int j = 0; j < List_Nbr(vol->TrsfPoints); j++){
-      pv = (Vertex **)List_Pointer(vol->TrsfPoints, j);
-      if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, pv)))
-        Msg::Error("Weird point %d in Coherence", (*pv)->Num);
-      else
-        List_Write(vol->TrsfPoints, j, pv2);
-    }
+  if(!CurveBeg && !CurveEnd){
+    return pc->Num;
   }
-  List_Delete(All);
 
-  // Replace old points in physical groups
-  for(int i = 0; i < List_Nbr(GModel::current()->getGEOInternals()->PhysicalGroups); i++){
-    PhysicalGroup *p = *(PhysicalGroup**)List_Pointer
-      (GModel::current()->getGEOInternals()->PhysicalGroups, i);
-    if(p->Typ == MSH_PHYSICAL_POINT){
-      for(int j = 0; j < List_Nbr(p->Entities); j++){
-        int num;
-        List_Read(p->Entities, j, &num);
-        v2 = FindPoint(std::abs(num), points2delete);
-        if(v2){
-          if(!(pv2 = (Vertex **)Tree_PQuery(allNonDuplicatedPoints, &v2)))
-            Msg::Error("Weird point %d in Coherence", v2->Num);
-          else
-            List_Write(p->Entities, j, &(*pv2)->Num);
-        }
-      }
-    }
+  if(type == BOUNDARY_LAYER)
+    s = Create_Surface(NEWSURFACE(), MSH_SURF_BND_LAYER);
+  else if(!CurveBeg || !CurveEnd)
+    s = Create_Surface(NEWSURFACE(), MSH_SURF_TRIC);
+  else
+    s = Create_Surface(NEWSURFACE(), MSH_SURF_REGL);
+
+  s->Generatrices = List_Create(4, 1, sizeof(Curve *));
+  s->Extrude = new ExtrudeParams;
+  s->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+  s->Extrude->geo.Source = pc->Num;
+  if(e)
+    s->Extrude->mesh = e->mesh;
+
+  ReverseChapeau = FindCurve(-chapeau->Num);
+
+  if(!CurveBeg) {
+    List_Add(s->Generatrices, &pc);
+    List_Add(s->Generatrices, &CurveEnd);
+    List_Add(s->Generatrices, &ReverseChapeau);
+  }
+  else if(!CurveEnd) {
+    List_Add(s->Generatrices, &ReverseChapeau);
+    List_Add(s->Generatrices, &ReverseBeg);
+    List_Add(s->Generatrices, &pc);
+  }
+  else {
+    List_Add(s->Generatrices, &pc);
+    List_Add(s->Generatrices, &CurveEnd);
+    List_Add(s->Generatrices, &ReverseChapeau);
+    List_Add(s->Generatrices, &ReverseBeg);
   }
 
-  Tree_Action(points2delete, Free_Vertex);
-  Tree_Delete(points2delete);
-  Tree_Delete(allNonDuplicatedPoints);
-}
+  End_Surface(s);
+  Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
 
-static void ReplaceDuplicateCurves()
-{
-  Curve *c, *c2, **pc, **pc2;
-  Surface *s;
-  Tree_T *curves2delete = Tree_Create(sizeof(Curve *), compareCurve);
-  Tree_T *allNonDuplicatedCurves = Tree_Create(sizeof(Curve *), compareTwoCurves);
+  List_Reset(ListOfTransformedPoints);
 
-  // Create unique curves
+  *ps = s;
 
-  int start = Tree_Nbr(GModel::current()->getGEOInternals()->Curves);
+  int chap_num = chapeau->Num;
 
-  List_T *All = Tree2List(GModel::current()->getGEOInternals()->Curves);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &c);
-    if(c->Num > 0) {
-      if(!Tree_Search(allNonDuplicatedCurves, &c)) {
-        Tree_Insert(allNonDuplicatedCurves, &c);
-        if(!(c2 = FindCurve(-c->Num))) {
-          Msg::Error("Unknown curve %d", -c->Num);
-          List_Delete(All);
-          return;
-        }
-        Tree_Insert(allNonDuplicatedCurves, &c2);
-      }
-      else {
-        Tree_Suppress(GModel::current()->getGEOInternals()->Curves, &c);
-        if(!(c2 = FindCurve(-c->Num))) {
-          Msg::Error("Unknown curve %d", -c->Num);
-          break;
-        }
-        Tree_Suppress(GModel::current()->getGEOInternals()->Curves, &c2);
-        Tree_Insert(curves2delete, &c);
-        Tree_Insert(curves2delete, &c2);
-      }
-    }
+  if(CTX::instance()->geom.autoCoherence && final){
+    // Trevor Strickler added to fix replaced Chapeau
+    std::vector<std::map<int, int> > report(3);
+    (report[1])[chap_num] = chap_num;
+    ReplaceAllDuplicates(report);
+    std::map<int, int>::iterator m_it = (report[1]).find(chap_num);
+    if( m_it != (report[1]).end() )
+      chap_num = (report[1])[chap_num];
+    else
+      chap_num = 0;
   }
-  List_Delete(All);
 
-  int end = Tree_Nbr(GModel::current()->getGEOInternals()->Curves);
+  return chap_num;
+}
 
-  if(start == end) {
-    Tree_Delete(curves2delete);
-    Tree_Delete(allNonDuplicatedCurves);
-    return;
-  }
 
-  Msg::Debug("Removed %d duplicate curves", start - end);
+int Extrude_ProtudeSurface(int type, int is,
+			   double T0, double T1, double T2,
+			   double A0, double A1, double A2,
+			   double X0, double X1, double X2, double alpha,
+			   Volume **pv, ExtrudeParams *e)
+{
+  double matrix[4][4], T[3], Ax[3];
+  Curve *c, *c2;
+  int i;
+  Surface *s, *ps, *chapeau;
 
-  if(CTX::instance()->geom.oldNewreg) {
-    GModel::current()->getGEOInternals()->MaxLineNum = 0;
-    Tree_Action(GModel::current()->getGEOInternals()->Curves, MaxNumCurve);
-  }
+  *pv = NULL;
 
-  // Replace old curves in curves
+  // 'is' can be negative, to signify that the surface orientation
+  // should be reversed. This orientation information is only used at
+  // the moment when creating boundary layers
+  if(!(ps = FindSurface(std::abs(is))))
+    return 0;
 
-  All = Tree2List(GModel::current()->getGEOInternals()->Curves);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &c);
-    // replace extrusion sources
-    if(c->Extrude && c->Extrude->geo.Mode == COPIED_ENTITY){
-      c2 = FindCurve(std::abs(c->Extrude->geo.Source), curves2delete);
-      if(c2){
-        if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c2)))
-          Msg::Error("Weird curve %d in Coherence", c2->Num);
-        else
-          c->Extrude->geo.Source = (*pc2)->Num;
+  Msg::Debug("Extrude Surface %d", is);
+
+  chapeau = DuplicateSurface(ps, false);
+  chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY);
+  chapeau->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+  chapeau->Extrude->geo.Source = is; // not ps->Num: we need the sign info
+  if(e)
+    chapeau->Extrude->mesh = e->mesh;
+
+  for(i = 0; i < List_Nbr(chapeau->Generatrices); i++) {
+    List_Read(ps->Generatrices, i, &c2);
+    List_Read(chapeau->Generatrices, i, &c);
+    if(c->Num < 0){
+      int nn = -c->Num;
+      if(!(c = FindCurve(nn))) {
+        Msg::Error("Unknown curve %d", nn);
+        return ps->Num;
       }
     }
+    c->Extrude = new ExtrudeParams(COPIED_ENTITY);
+    c->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+    // don't take the abs(): the sign of c2->Num is important (used
+    // when copying the mesh in the extrusion routine)
+    c->Extrude->geo.Source = c2->Num;
+    if(e)
+      c->Extrude->mesh = e->mesh;
   }
-  List_Delete(All);
 
-  // Replace old curves in surfaces
+  // FIXME: this is a really ugly hack for backward compatibility, so
+  // that we don't screw up the old .geo files too much. (Before
+  // version 1.54, we didn't always create new volumes during "Extrude
+  // Surface". Now we do, but with "CTX::instance()->geom.oldNewreg==1", this
+  // bumps the NEWREG() counter, and thus changes the whole automatic
+  // numbering sequence.) So we locally force oldNewreg to 0: in most
+  // cases, since we define points, curves, etc., before defining
+  // volumes, the NEWVOLUME() call below will return a fairly low
+  // number, that will not interfere with the other numbers...
+  int tmp = CTX::instance()->geom.oldNewreg;
+  CTX::instance()->geom.oldNewreg = 0;
+  Volume *v = Create_Volume(NEWVOLUME(), MSH_VOLUME);
+  CTX::instance()->geom.oldNewreg = tmp;
 
-  All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &s);
-    // replace bounding curves
-    for(int j = 0; j < List_Nbr(s->Generatrices); j++) {
-      pc = (Curve **)List_Pointer(s->Generatrices, j);
-      if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, pc)))
-        Msg::Error("Weird curve %d in Coherence", (*pc)->Num);
-      else {
-        List_Write(s->Generatrices, j, pc2);
-        // arghhh: check compareTwoCurves!
-        End_Curve(*pc2);
-      }
-    }
-    // replace extrusion sources
-    if(s->Extrude && s->Extrude->geo.Mode == EXTRUDED_ENTITY){
-      c2 = FindCurve(std::abs(s->Extrude->geo.Source), curves2delete);
-      if(c2){
-        if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c2)))
-          Msg::Error("Weird curve %d in Coherence", c2->Num);
-        else
-          s->Extrude->geo.Source = (*pc2)->Num;
-      }
+  v->Extrude = new ExtrudeParams;
+  v->Extrude->fill(type, T0, T1, T2, A0, A1, A2, X0, X1, X2, alpha);
+  v->Extrude->geo.Source = is;
+  if(e)
+    v->Extrude->mesh = e->mesh;
+  int ori = -1;
+  List_Add(v->Surfaces, &ps);
+  List_Add(v->SurfacesOrientations, &ori);
+  ori = 1;
+  List_Add(v->Surfaces, &chapeau);
+  List_Add(v->SurfacesOrientations, &ori);
+
+  for(i = 0; i < List_Nbr(ps->Generatrices); i++) {
+    List_Read(ps->Generatrices, i, &c);
+    Extrude_ProtudeCurve(type, c->Num, T0, T1, T2, A0, A1, A2, X0, X1, X2,
+                         alpha, &s, 0, e);
+    if(s){
+      if(c->Num < 0)
+        ori = -1;
+      else
+        ori = 1;
+      List_Add(v->Surfaces, &s);
+      List_Add(v->SurfacesOrientations, &ori);
     }
   }
-  List_Delete(All);
 
-  // Replace old curves in physical groups
-  for(int i = 0; i < List_Nbr(GModel::current()->getGEOInternals()->PhysicalGroups); i++){
-    PhysicalGroup *p = *(PhysicalGroup**)List_Pointer
-      (GModel::current()->getGEOInternals()->PhysicalGroups, i);
-    if(p->Typ == MSH_PHYSICAL_LINE){
-      for(int j = 0; j < List_Nbr(p->Entities); j++){
-        int num;
-        List_Read(p->Entities, j, &num);
-        c2 = FindCurve(std::abs(num), curves2delete);
-        if(c2){
-          if(!(pc2 = (Curve **)Tree_PQuery(allNonDuplicatedCurves, &c2)))
-            Msg::Error("Weird curve %d in Coherence", c2->Num);
-          else
-            List_Write(p->Entities, j, &(*pc2)->Num);
-        }
+  switch (type) {
+  case TRANSLATE:
+    T[0] = T0;
+    T[1] = T1;
+    T[2] = T2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    break;
+  case BOUNDARY_LAYER:
+    chapeau->Typ = MSH_SURF_BND_LAYER;
+    for(int i = 0; i < List_Nbr(chapeau->Generatrices); i++) {
+      List_Read(chapeau->Generatrices, i, &c);
+      c->Typ = MSH_SEGM_BND_LAYER;
+      c = FindCurve(-c->Num);
+      c->Typ = MSH_SEGM_BND_LAYER;
+      if(c->beg){
+        c->beg->Typ = MSH_POINT_BND_LAYER;
+        if(e) c->beg->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
+      }
+      if(c->end){
+        c->end->Typ = MSH_POINT_BND_LAYER;
+        if(e) c->end->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
+      }
+      for(int i = 0; i < List_Nbr(c->Control_Points); i++){
+        Vertex *v;
+        List_Read(c->Control_Points, i, &v);
+        if(e) v->boundaryLayerIndex = e->mesh.BoundaryLayerIndex;
       }
     }
+    break;
+  case ROTATE:
+    T[0] = -X0;
+    T[1] = -X1;
+    T[2] = -X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    Ax[0] = A0;
+    Ax[1] = A1;
+    Ax[2] = A2;
+    SetRotationMatrix(matrix, Ax, alpha);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    T[0] = X0;
+    T[1] = X1;
+    T[2] = X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    break;
+  case TRANSLATE_ROTATE:
+    T[0] = -X0;
+    T[1] = -X1;
+    T[2] = -X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    Ax[0] = A0;
+    Ax[1] = A1;
+    Ax[2] = A2;
+    SetRotationMatrix(matrix, Ax, alpha);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    T[0] = X0;
+    T[1] = X1;
+    T[2] = X2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    T[0] = T0;
+    T[1] = T1;
+    T[2] = T2;
+    SetTranslationMatrix(matrix, T);
+    List_Reset(ListOfTransformedPoints);
+    ApplyTransformationToSurface(matrix, chapeau);
+    break;
+  default:
+    Msg::Error("Unknown extrusion type");
+    return ps->Num;
   }
 
-  Tree_Action(curves2delete, Free_Curve);
-  Tree_Delete(curves2delete);
-  Tree_Delete(allNonDuplicatedCurves);
-}
+  // this is done only for backward compatibility with the old
+  // numbering scheme
+  Tree_Suppress(GModel::current()->getGEOInternals()->Surfaces, &chapeau);
 
-static void ReplaceDuplicateSurfaces()
-{
-  Surface *s, *s2, **ps, **ps2;
-  Volume *vol;
-  Tree_T *surfaces2delete = Tree_Create(sizeof(Surface *), compareSurface);
-  Tree_T *allNonDuplicatedSurfaces = Tree_Create(sizeof(Surface *), compareTwoSurfaces);
+  chapeau->Num = NEWSURFACE();
 
-  // Create unique surfaces
+  GModel::current()->getGEOInternals()->MaxSurfaceNum = chapeau->Num;
+  Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &chapeau);
 
-  int start = Tree_Nbr(GModel::current()->getGEOInternals()->Surfaces);
+  Tree_Add(GModel::current()->getGEOInternals()->Volumes, &v);
 
-  List_T *All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &s);
-    if(s->Num > 0) {
-      if(!Tree_Search(allNonDuplicatedSurfaces, &s)) {
-        Tree_Insert(allNonDuplicatedSurfaces, &s);
-      }
-      else {
-        Tree_Suppress(GModel::current()->getGEOInternals()->Surfaces, &s);
-        Tree_Insert(surfaces2delete, &s);
-      }
-    }
-  }
-  List_Delete(All);
+  *pv = v;
 
-  int end = Tree_Nbr(GModel::current()->getGEOInternals()->Surfaces);
+  int chap_num = chapeau->Num;
 
-  if(start == end) {
-    Tree_Delete(surfaces2delete);
-    Tree_Delete(allNonDuplicatedSurfaces);
-    return;
+  if(CTX::instance()->geom.autoCoherence){
+    // Trevor Strickler added to fix replaced Chapeau
+    std::vector<std::map<int, int> > report(3);
+    (report[2])[chap_num] = chap_num;
+    ReplaceAllDuplicates(report);
+    std::map<int, int>::iterator m_it = (report[2]).find(chap_num);
+    if( m_it != (report[2]).end() )
+      chap_num = (report[2])[chap_num];
+    else
+      chap_num = 0;
   }
 
-  Msg::Debug("Removed %d duplicate surfaces", start - end);
+  List_Reset(ListOfTransformedPoints);
 
-  if(CTX::instance()->geom.oldNewreg) {
-    GModel::current()->getGEOInternals()->MaxSurfaceNum = 0;
-    Tree_Action(GModel::current()->getGEOInternals()->Surfaces, MaxNumSurface);
-  }
 
-  // Replace old surfaces in surfaces
+  return chap_num;
+}
 
-  All = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &s);
-    // replace extrusion sources
-    if(s->Extrude && s->Extrude->geo.Mode == COPIED_ENTITY){
-      s2 = FindSurface(std::abs(s->Extrude->geo.Source), surfaces2delete);
-      if(s2){
-        if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, &s2)))
-          Msg::Error("Weird surface %d in Coherence", s2->Num);
-        else
-          s->Extrude->geo.Source = (*ps2)->Num;
-      }
-    }
-  }
-  List_Delete(All);
+void ExtrudeShape(int extrude_type, int shape_type, int shape_num,
+                  double T0, double T1, double T2,
+                  double A0, double A1, double A2,
+                  double X0, double X1, double X2, double alpha,
+                  ExtrudeParams *e,
+                  List_T *list_out)
+{
+  Shape shape;
+  shape.Type = shape_type;
+  shape.Num = shape_num;
+  List_T *tmp = List_Create(1, 1, sizeof(Shape));
+  List_Add(tmp, &shape);
+  ExtrudeShapes(extrude_type, tmp,
+                T0, T1, T2,
+                A0, A1, A2,
+                X0, X1, X2, alpha,
+                e,
+                list_out);
+  List_Delete(tmp);
+}
 
-  // Replace old surfaces in volumes
+void ExtrudeShapes(int type, List_T *list_in,
+                   double T0, double T1, double T2,
+                   double A0, double A1, double A2,
+                   double X0, double X1, double X2, double alpha,
+                   ExtrudeParams *e,
+                   List_T *list_out)
+{
 
-  All = Tree2List(GModel::current()->getGEOInternals()->Volumes);
-  for(int i = 0; i < List_Nbr(All); i++) {
-    List_Read(All, i, &vol);
-    // replace bounding surfaces
-    for(int j = 0; j < List_Nbr(vol->Surfaces); j++) {
-      ps = (Surface **)List_Pointer(vol->Surfaces, j);
-      if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, ps)))
-        Msg::Error("Weird surface %d in Coherence", (*ps)->Num);
-      else
-        List_Write(vol->Surfaces, j, ps2);
-    }
-    // replace extrusion sources
-    if(vol->Extrude && vol->Extrude->geo.Mode == EXTRUDED_ENTITY){
-      s2 = FindSurface(std::abs(vol->Extrude->geo.Source), surfaces2delete);
-      if(s2){
-        if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, &s2)))
-          Msg::Error("Weird surface %d in Coherence", s2->Num);
-        else
-          vol->Extrude->geo.Source = (*ps2)->Num;
+  for(int i = 0; i < List_Nbr(list_in); i++){
+    Shape shape;
+    List_Read(list_in, i, &shape);
+    switch(shape.Type){
+    case MSH_POINT:
+      {
+        Curve *pc = 0, *prc = 0;
+        Shape top;
+        top.Num = Extrude_ProtudePoint(type, shape.Num, T0, T1, T2,
+                                       A0, A1, A2, X0, X1, X2, alpha,
+                                       &pc, &prc, 1, e);
+        top.Type = MSH_POINT;
+        List_Add(list_out, &top);
+        if(pc){
+          Shape body;
+          body.Num = pc->Num;
+          body.Type = pc->Typ;
+          List_Add(list_out, &body);
+        }
       }
-    }
-  }
-  List_Delete(All);
+      break;
+    case MSH_SEGM_LINE:
+    case MSH_SEGM_SPLN:
+    case MSH_SEGM_BSPLN:
+    case MSH_SEGM_BEZIER:
+    case MSH_SEGM_CIRC:
+    case MSH_SEGM_CIRC_INV:
+    case MSH_SEGM_ELLI:
+    case MSH_SEGM_ELLI_INV:
+    case MSH_SEGM_NURBS:
+      {
+        Surface *ps = 0;
+        Shape top;
+        top.Num = Extrude_ProtudeCurve(type, shape.Num, T0, T1, T2,
+                                       A0, A1, A2, X0, X1, X2, alpha,
+                                       &ps, 1, e);
+        Curve *pc = FindCurve(top.Num);
+        top.Type = pc ? pc->Typ : 0;
+        List_Add(list_out, &top);
+        if(ps){
+          Shape body;
+          body.Num = ps->Num;
+          body.Type = ps->Typ;
+          List_Add(list_out, &body);
+          if(CTX::instance()->geom.extrudeReturnLateral){
+            for(int j = 0; j < List_Nbr(ps->Generatrices); j++){
+              Curve *c;
+              List_Read(ps->Generatrices, j, &c);
+              if(abs(c->Num) != shape.Num && abs(c->Num) != top.Num){
+                Shape side;
+                side.Num = c->Num;
+                side.Type = c->Typ;
+                List_Add(list_out, &side);
+              }
+            }
+          }
+        }
+      }
+      break;
+    case MSH_SURF_REGL:
+    case MSH_SURF_TRIC:
+    case MSH_SURF_PLAN:
+    case MSH_SURF_DISCRETE:
+    case MSH_SURF_COMPOUND:
+      {
+        // if statement by Trevor Strickler
+        if( shape.Type == MSH_SURF_COMPOUND ){
+          if( !(e && e->mesh.ExtrudeMesh) ){
+            Msg::Error("Impossible to extrude compound entity %d without also extruding mesh!",
+                       abs(shape.Num) );
+            break;
+          }
+        }
 
-  // Replace old surfaces in physical groups
-  for(int i = 0; i < List_Nbr(GModel::current()->getGEOInternals()->PhysicalGroups); i++){
-    PhysicalGroup *p = *(PhysicalGroup**)List_Pointer
-      (GModel::current()->getGEOInternals()->PhysicalGroups, i);
-    if(p->Typ == MSH_PHYSICAL_SURFACE){
-      for(int j = 0; j < List_Nbr(p->Entities); j++){
-        int num;
-        List_Read(p->Entities, j, &num);
-        s2 = FindSurface(std::abs(num), surfaces2delete);
-        if(s2){
-          if(!(ps2 = (Surface **)Tree_PQuery(allNonDuplicatedSurfaces, &s2)))
-            Msg::Error("Weird surface %d in Coherence", s2->Num);
-          else
-            List_Write(p->Entities, j, &(*ps2)->Num);
+        Volume *pv = 0;
+        Shape top;
+        top.Num = Extrude_ProtudeSurface(type, shape.Num, T0, T1, T2,
+                                         A0, A1, A2, X0, X1, X2, alpha,
+                                         &pv, e);
+        Surface *ps = FindSurface(top.Num);
+        top.Type = ps ? ps->Typ : 0;
+
+        List_Add(list_out, &top);
+        if(pv){
+          Shape body;
+          body.Num = pv->Num;
+          body.Type = pv->Typ;
+          List_Add(list_out, &body);
+          if(CTX::instance()->geom.extrudeReturnLateral){
+            for(int j = 0; j < List_Nbr(pv->Surfaces); j++){
+              Surface *s;
+              List_Read(pv->Surfaces, j, &s);
+              if(abs(s->Num) != shape.Num && abs(s->Num) != top.Num){
+                Shape side;
+                side.Num = s->Num;
+                side.Type = s->Typ;
+                List_Add(list_out, &side);
+              }
+            }
+          }
         }
       }
+      break;
+    default:
+      Msg::Error("Impossible to extrude entity %d (of type %d)",
+                 shape.Num, shape.Type);
+      break;
     }
   }
 
-  Tree_Action(surfaces2delete, Free_Surface);
-  Tree_Delete(surfaces2delete);
-  Tree_Delete(allNonDuplicatedSurfaces);
-}
-
-void ReplaceAllDuplicates()
-{
-  ReplaceDuplicatePoints();
-  ReplaceDuplicateCurves();
-  ReplaceDuplicateSurfaces();
 }
 
 // Projection of a point on a surface
@@ -3662,6 +3883,14 @@ void setSurfaceGeneratrices(Surface *s, List_T *loops)
   s->Generatrices = List_Create(4, 4, sizeof(Curve *));
   List_Delete(s->GeneratricesByTag);
   s->GeneratricesByTag = List_Create(4, 4, sizeof(int));
+  //trevor strickler
+  if(s->Typ == MSH_SURF_COMPOUND){
+    s->Generatrices = GetOrderedUniqueEdges(s);
+    if(!List_Nbr(s->Generatrices)){
+      Msg::Error("Could not make generatrices list for compound surface %d.",s->Num);
+      return;
+    }
+  }
   for(int i = 0; i < nbLoop; i++) {
     int iLoop;
     List_Read(loops, i, &iLoop);
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index a1474e1c00..4f1452d22c 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1169,6 +1169,16 @@ void MElement::writeINP(FILE *fp, int num)
   fprintf(fp, "\n");
 }
 
+void MElement::writeSU2(FILE *fp, int num)
+{
+  setVolumePositive();
+  fprintf(fp, "%d ", getTypeForVTK());
+  for(int i = 0; i < getNumVertices(); i++)
+    fprintf(fp, "%d ", getVertexVTK(i)->getIndex() - 1);
+  if(num >= 0) fprintf(fp, "%d\n", num);
+  else fprintf(fp, "\n");
+}
+
 int MElement::getInfoMSH(const int typeMSH, const char **const name)
 {
   switch(typeMSH){
diff --git a/Geo/MElement.h b/Geo/MElement.h
index 9b7bfb9f9d..9cef0e28a7 100644
--- a/Geo/MElement.h
+++ b/Geo/MElement.h
@@ -343,6 +343,7 @@ class MElement
   virtual void writeDIFF(FILE *fp, int num, bool binary=false,
                          int physical_property=1);
   virtual void writeINP(FILE *fp, int num);
+  virtual void writeSU2(FILE *fp, int num);
 
   // info for specific IO formats (returning 0 means that the element
   // is not implemented in that format)
diff --git a/Geo/MVertex.cpp b/Geo/MVertex.cpp
index d06aa37af5..4238a82429 100644
--- a/Geo/MVertex.cpp
+++ b/Geo/MVertex.cpp
@@ -337,6 +337,18 @@ void MVertex::writeDIFF(FILE *fp, bool binary, double scalingFactor)
           _index, x() * scalingFactor, y() * scalingFactor, z() * scalingFactor);
 }
 
+void MVertex::writeSU2(FILE *fp, int dim, double scalingFactor)
+{
+  if(_index < 0) return; // negative index vertices are never saved
+
+  if(dim == 2)
+    fprintf(fp, "%.16g %.16g %d\n", x() * scalingFactor, y() * scalingFactor,
+             _index - 1);
+  else
+    fprintf(fp, "%.16g %.16g %.16g %d\n", x() * scalingFactor, y() * scalingFactor,
+            z() * scalingFactor, _index - 1);
+}
+
 std::set<MVertex*, MVertexLessThanLexicographic>::iterator
 MVertex::linearSearch(std::set<MVertex*, MVertexLessThanLexicographic> &pos)
 {
diff --git a/Geo/MVertex.h b/Geo/MVertex.h
index c35064a948..70038b6f43 100644
--- a/Geo/MVertex.h
+++ b/Geo/MVertex.h
@@ -117,6 +117,7 @@ class MVertex{
   void writeBDF(FILE *fp, int format=0, double scalingFactor=1.0);
   void writeINP(FILE *fp, double scalingFactor=1.0);
   void writeDIFF(FILE *fp, bool binary, double scalingFactor=1.0);
+  void writeSU2(FILE *fp, int dim, double scalingFactor=1.0);
 };
 
 class MEdgeVertex : public MVertex{
diff --git a/Mesh/BoundaryLayers.cpp b/Mesh/BoundaryLayers.cpp
index 6459d2f685..5e5864bb19 100644
--- a/Mesh/BoundaryLayers.cpp
+++ b/Mesh/BoundaryLayers.cpp
@@ -13,6 +13,8 @@
 #include "meshGFace.h"
 #include "GmshMessage.h"
 #include "Field.h"
+// added by Trevor Strickler
+#include "GFaceCompound.h"
 
 #if defined(HAVE_POST)
 #include "PView.h"
@@ -22,9 +24,24 @@
 class OctreePost{ int dummy; };
 #endif
 
+// by Trevor Strickler
+static double GetAveEdgeLength(std::vector<MVertex*> &elem_verts)
+{
+  double ave = 0.0;
+  int size = elem_verts.size();
+  if(!size)
+    return 0.0;
+  for( int i = 0; i < size-1; i++ )
+    ave += elem_verts[i]->distance(elem_verts[i+1]);    
+  ave += elem_verts[0]->distance(elem_verts[size-1]);
+  ave /= size;
+  return ave;
+}
+
+// Trevor Strickler modified this function
 template<class T>
 static void addExtrudeNormals(std::vector<T*> &elements, int invert,
-                              OctreePost *octree, bool gouraud, int index)
+                              OctreePost *octree, bool gouraud, int index, bool skipScaleCalc)
 {
   if(index < 0 || index > 1){
     Msg::Error("Boundary layer index should be 0 or 1");
@@ -32,10 +49,29 @@ static void addExtrudeNormals(std::vector<T*> &elements, int invert,
   }
  
   if(octree && !gouraud){ // get extrusion direction from post-processing view
+    // Trevor Strickler modified this section heavily
     std::set<MVertex*> verts;
-    for(unsigned int i = 0; i < elements.size(); i++)
-      for(int j = 0; j < elements[i]->getNumVertices(); j++)
-        verts.insert(elements[i]->getVertex(j));
+    for(unsigned int i = 0; i < elements.size(); i++){
+      if( !ExtrudeParams::calcLayerScaleFactor[index] )  // Trevor Strickler
+	for(int j = 0; j < elements[i]->getNumVertices(); j++)
+          verts.insert(elements[i]->getVertex(j));
+      else{	// Trevor Strickler
+	std::vector<MVertex*> elem_verts;
+	double aveLength = 0.0;
+	elements[i]->getVertices(elem_verts);
+	if( skipScaleCalc )
+	  aveLength = 1.0;
+	else
+	  aveLength = GetAveEdgeLength(elem_verts);
+	for(unsigned int j = 0; j < elem_verts.size(); j++){
+	  verts.insert(elem_verts[j]);
+	  // Added by Trevor Strickler: if scaleLastLayer selection, but not doing gouraud, then still scale the last layer...
+	  // This might create weird behavior for the unprepared....
+	  if( aveLength != 0.0 )
+	    ExtrudeParams::normals[index]->add_scale(elem_verts[j]->x(), elem_verts[j]->y(), elem_verts[j]->z(), aveLength);
+	}
+      }
+    }
     for(std::set<MVertex*>::iterator it = verts.begin(); it != verts.end(); it++){
       MVertex *v = *it;
       double nn[3] = {0., 0., 0.};
@@ -55,9 +91,24 @@ static void addExtrudeNormals(std::vector<T*> &elements, int invert,
         n = crossprod(ele->getEdge(0).tangent(), SVector3(0., 0., 1.));
       if(invert) n *= -1.;
       double nn[3] = {n[0], n[1], n[2]};
-      for(int k = 0; k < ele->getNumVertices(); k++){
-        MVertex *v = ele->getVertex(k);
-        ExtrudeParams::normals[index]->add(v->x(), v->y(), v->z(), 3, nn);
+      if( !ExtrudeParams::calcLayerScaleFactor[index] )  // Trevor Strickler
+	for(int k = 0; k < ele->getNumVertices(); k++){
+          MVertex *v = ele->getVertex(k);
+          ExtrudeParams::normals[index]->add(v->x(), v->y(), v->z(), 3, nn);
+        }
+      else{  // Trevor Strickler
+	std::vector<MVertex*> elem_verts;
+	double aveLength = 0.0;
+	elements[i]->getVertices(elem_verts);
+	if( skipScaleCalc )
+	  aveLength = 1.0;
+	else
+	  aveLength = GetAveEdgeLength(elem_verts);
+	for(unsigned int j = 0; j < elem_verts.size(); j++){
+	  ExtrudeParams::normals[index]->add(elem_verts[j]->x(), elem_verts[j]->y(), elem_verts[j]->z(), 3, nn);
+	  if( aveLength != 0.0 )
+	    ExtrudeParams::normals[index]->add_scale(elem_verts[j]->x(), elem_verts[j]->y(), elem_verts[j]->z(), aveLength);
+	}
       }
     }
   }
@@ -65,9 +116,15 @@ static void addExtrudeNormals(std::vector<T*> &elements, int invert,
 
 typedef std::set<std::pair<bool, std::pair<int, int> > > infoset;
 
+// Trevor Strickler Modified this function
+//skipScaleCalcMap maps an entity tag to a flag telling whether to skip the 
+// scale calc when extruding only that entity.  The flag is false when an extrusion
+// is not scaleLast when in a boundary layer that has at least one scaleLast region.
+// Effectively, this makes the vertices on the boundary between a scaled and not 
+// scaled region 'average' between being scaled and not scaled.
 template<class T>
 static void addExtrudeNormals(std::set<T*> &entities,
-                              std::map<int, infoset> &infos)
+                              std::map<int, infoset> &infos, std::map<int, bool> &skipScaleCalcMap)
 {
   bool normalize = true, special3dbox = false, extrudeField=false;
   std::vector<OctreePost*> octrees;
@@ -103,11 +160,16 @@ static void addExtrudeNormals(std::set<T*> &entities,
           Msg::Error("Unknown View[%d]: using normals instead", view);
       }
 #endif
+      // Trevor Strickler
+      bool skipScaleCalc = true;
+      std::map<int, bool>::iterator itskip = skipScaleCalcMap.find(ge->tag());
+      if( itskip != skipScaleCalcMap.end() )
+	skipScaleCalc = skipScaleCalcMap[ge->tag()];
       if(ge->dim() == 1)
-        addExtrudeNormals(((GEdge*)ge)->lines, invert, octree, gouraud, index);
+	addExtrudeNormals(((GEdge*)ge)->lines, invert, octree, gouraud, index, skipScaleCalc );
       else if(ge->dim() == 2){
-        addExtrudeNormals(((GFace*)ge)->triangles, invert, octree, gouraud, index);
-        addExtrudeNormals(((GFace*)ge)->quadrangles, invert, octree, gouraud, index);
+        addExtrudeNormals(((GFace*)ge)->triangles, invert, octree, gouraud, index, skipScaleCalc );
+        addExtrudeNormals(((GFace*)ge)->quadrangles, invert, octree, gouraud, index, skipScaleCalc );
       }
       if(!gouraud) normalize = false;
     }
@@ -183,6 +245,71 @@ static void checkDepends(GModel *m, GFace *f, std::set<GFace*> &dep)
     dep.insert(from);
     checkDepends(m, from, dep);
   }
+  
+  // Added by Trevor Strickler for compound face extrusion
+  if( f->geomType() == GEntity::CompoundSurface ){
+    std::list<GFace*> compounds = ((GFaceCompound*)(f))->getCompounds();
+    std::list<GFace*>::iterator itgf = compounds.begin();
+    for( ; itgf != compounds.end(); itgf++ ){
+      if( !(*itgf) ){
+        Msg::Error("Unknown compound face in boundary layer source face %d.",  f->tag() );
+        return;
+      }
+      dep.insert( *itgf );
+      checkDepends(m, *itgf, dep);
+    }
+  }
+  
+}
+
+// Trevor Strickler
+static unsigned int FixErasedExtrScaleFlags(GModel *m, std::map<int, bool> &faceSkipScaleCalc, std::map<int, bool> &edgeSkipScaleCalc)
+{
+  unsigned int num_changed = 0;
+  std::set<GRegion *, GEntityLessThan>::iterator itreg;
+  // fix all extruded faces bordering ScaleLast regions
+  for( itreg = m->firstRegion(); itreg != m->lastRegion(); itreg++ ){
+    ExtrudeParams *r_ep = (*itreg)->meshAttributes.extrude;
+    if(!r_ep || !r_ep->mesh.ExtrudeMesh || r_ep->geo.Mode != EXTRUDED_ENTITY 
+        || !r_ep->mesh.ScaleLast )
+      continue;
+    std::list<GFace *> reg_faces = (*itreg)->faces();
+    std::list<GFace *>::iterator itface;
+    for( itface = reg_faces.begin(); itface != reg_faces.end(); itface++ ){
+      if( m->getFaceByTag( std::abs(r_ep->geo.Source) ) != (*itface) ){
+	ExtrudeParams *f_ep = (*itface)->meshAttributes.extrude;
+	if(f_ep && f_ep->mesh.ExtrudeMesh && !f_ep->mesh.ScaleLast){
+	  num_changed++;
+	  f_ep->mesh.ScaleLast = true;
+	  faceSkipScaleCalc[(*itface)->tag()] = false;
+	}
+      }
+    }
+  }
+  // fix all extruded curves bordering ScaleLast faces...the previous loop should
+  // have fixed any replaced extruded faces.  if a face is not bordering a region,
+  // then it would not have been replaced except by a pointless degenerate extrusion
+  // right on it...which makes no sense anyway.
+  // So... just loop through faces.
+  for(GModel::fiter it = m->firstFace(); it != m->lastFace(); it++){
+    ExtrudeParams *f_ep = (*it)->meshAttributes.extrude;
+    if(!f_ep || !f_ep->mesh.ExtrudeMesh || !f_ep->mesh.ScaleLast )
+      continue;
+    std::list<GEdge *> f_edges = (*it)->edges();
+    std::list<GEdge *>::iterator itedge;
+    for( itedge = f_edges.begin(); itedge != f_edges.end(); itedge++ ){
+      if( m->getEdgeByTag( std::abs(f_ep->geo.Source) ) != (*itedge) ){
+	ExtrudeParams *e_ep = (*itedge)->meshAttributes.extrude;
+	if( e_ep && e_ep->mesh.ExtrudeMesh && !e_ep->mesh.ScaleLast ){
+	  num_changed++;
+	  e_ep->mesh.ScaleLast = true;
+	  edgeSkipScaleCalc[(*itedge)->tag()] = false;
+	}
+      }
+    }
+  }
+  
+  return num_changed;
 }
 
 int Mesh2DWithBoundaryLayers(GModel *m)
@@ -190,7 +317,10 @@ int Mesh2DWithBoundaryLayers(GModel *m)
   std::set<GFace*> sourceFaces, otherFaces;
   std::set<GEdge*> sourceEdges, otherEdges;
   std::map<int, infoset> sourceFaceInfo, sourceEdgeInfo;
-
+  std::map<int, bool> faceSkipScaleCalc, edgeSkipScaleCalc; // Trevor Strickler
+  ExtrudeParams::calcLayerScaleFactor[0] = 0; // Trevor Strickler
+  ExtrudeParams::calcLayerScaleFactor[1] = 0; // Trevor Strickler
+  
   // 2D boundary layers
   for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); it++){
     GEdge *ge = *it;
@@ -208,6 +338,18 @@ int Mesh2DWithBoundaryLayers(GModel *m)
            (ep->mesh.BoundaryLayerIndex, ep->mesh.ViewIndex));
         sourceEdgeInfo[from->tag()].insert(tags);
         sourceEdges.insert(from);
+	// Trevor Strickler
+        // Added by Trevor Strickler to scale last layer size locally
+	// Do not worry if one section of the boundary layer index = 0 or 1  is not supposed to be
+	// scaled...that section's normals will have scaleFactor = 1.0 (exactly  1.0 to all sig figs)
+	// ...however, if that non-scaled
+	// section borders a scaled section, the boundary normals will extrude scaled.
+	if( !ep->mesh.ScaleLast )
+	  edgeSkipScaleCalc[from->tag()] = true;
+        else{
+	  edgeSkipScaleCalc[from->tag()] = false;
+	  ExtrudeParams::calcLayerScaleFactor[ep->mesh.BoundaryLayerIndex] = true;
+	}
       }
     }
   }
@@ -229,14 +371,43 @@ int Mesh2DWithBoundaryLayers(GModel *m)
            (ep->mesh.BoundaryLayerIndex, ep->mesh.ViewIndex));
         sourceFaceInfo[from->tag()].insert(tags);
         sourceFaces.insert(from);
+        // Trevor Strickler
+	// Added by Trevor Strickler to scale last layer size locally
+	// Do not worry if one section of the boundary layer index = 0 or 1  is not supposed to be
+	// scaled...that section's normals will have scaleFactor = 1.0 (exactly  1.0 to all sig figs)
+	// ...however, if that non-scaled
+	// section borders a scaled section, the boundary normals will extrude scaled
+	if( !ep->mesh.ScaleLast )
+	  faceSkipScaleCalc[from->tag()] = true;
+        else{
+	  faceSkipScaleCalc[from->tag()] = false;
+	  ExtrudeParams::calcLayerScaleFactor[ep->mesh.BoundaryLayerIndex] = true;
+	}
         std::list<GEdge*> e = from->edges();
         sourceEdges.insert(e.begin(), e.end());
+        // by Trevor Strickler
+	for( std::list<GEdge*>::iterator ite = e.begin(); ite != e.end(); ite++ ){
+	  if( edgeSkipScaleCalc.find( (*ite)->tag() ) == edgeSkipScaleCalc.end() )
+	    edgeSkipScaleCalc[ (*ite)->tag() ] = true;  // a default
+	  if( ep->mesh.ScaleLast )
+	    edgeSkipScaleCalc[(*ite)->tag()] = false;
+	}
       }
     }
   }
 
   if(sourceEdges.empty() && sourceFaces.empty()) return 0;
 
+  // from Trevor Strickler -- Just in case ReplaceDuplicates() erases the ExtrudeParams::mesh.scaleLast
+  // flag, should check all bounding regions of this curve to see if scaleLast is set.
+  // if so, reset it in the extrudeParams (maybe this could be done in the TreeUtils....
+  // but I do not want to change the code too much and create a bug.
+  // The developers should decide that.
+  if( ExtrudeParams::calcLayerScaleFactor[0]  || ExtrudeParams::calcLayerScaleFactor[1] ){
+    unsigned int num_changed = FixErasedExtrScaleFlags(m, faceSkipScaleCalc, edgeSkipScaleCalc);
+    if( num_changed )
+      Msg::Warning("%d entities were changed from ScaleLast = false to ScaleLast = true", num_changed);
+  }
   // compute mesh dependencies in source faces (so we can e.g. create
   // a boundary layer on an extruded mesh)
   std::set<GFace*> sourceFacesDependencies;
@@ -275,9 +446,9 @@ int Mesh2DWithBoundaryLayers(GModel *m)
     ExtrudeParams::normals[i] = new smooth_data();
   }
   if(sourceFaces.empty())
-    addExtrudeNormals(sourceEdges, sourceEdgeInfo);
+    addExtrudeNormals(sourceEdges, sourceEdgeInfo, edgeSkipScaleCalc);
   else
-    addExtrudeNormals(sourceFaces, sourceFaceInfo);
+    addExtrudeNormals(sourceFaces, sourceFaceInfo, faceSkipScaleCalc);
 
   // set the position of boundary layer points using the smooth normal
   // field
diff --git a/Mesh/QuadTriExtruded2D.cpp b/Mesh/QuadTriExtruded2D.cpp
index 079890013b..04e610d157 100644
--- a/Mesh/QuadTriExtruded2D.cpp
+++ b/Mesh/QuadTriExtruded2D.cpp
@@ -36,12 +36,14 @@ GNU General Public License for more details.
 
 // By Geuzaine, Remacle...
 static void addTriangle(MVertex* v1, MVertex* v2, MVertex* v3,
-                        GFace *to, MElement* source)
+                        GFace *to)
 {
   MTriangle* newTri = new MTriangle(v1, v2, v3);
   to->triangles.push_back(newTri);
 }
 
+
+
 // The function that tests whether a 2D surface is a lateral of a valid QuadToTri
 // region and whether there are conflicts. If surface is not part of valid QuadToTri region
 // or if there are QuadToTri conflicts, return 0.  Note that RemoveDuplicateSurfaces()
@@ -126,17 +128,19 @@ int IsValidQuadToTriLateral(GFace *face, int *tri_quad_flag, bool *detectQuadToT
   bool detect_conflict = false;
 
 
-  // Set the tri_quad_flag that lets extrudeMesh override ep->Recombine;
+  // Set the tri_quad_flag that lets ExtrudeMesh override ep->Recombine;
   // tri_quad_values: 0 = no override, 1 = mesh as quads, 2 = mesh as triangles.
 
   // if this face is a free surface:
   if( adjacent_regions.size() == 1 ){
-    if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_SNGL_1_RECOMB ||
-        lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_DBL_1_RECOMB )
+    if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_NOVERTS_1_RECOMB ||
+        lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_ADDVERTS_1_RECOMB ){
       (*tri_quad_flag) = 1;
-    else if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_SNGL_1 ||
-             lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_DBL_1 )
+    }
+    if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_NOVERTS_1 ||
+        lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_ADDVERTS_1 ){
       (*tri_quad_flag) = 2;
+    }
     else
       (*tri_quad_flag) = 0;
   }
@@ -161,11 +165,11 @@ int IsValidQuadToTriLateral(GFace *face, int *tri_quad_flag, bool *detectQuadToT
     // neighboring extrusion.
     else if( adj_ep && adj_ep->mesh.ExtrudeMesh &&
              model->getFaceByTag( std::abs( adj_ep->geo.Source ) ) == face ){
-      if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_SNGL_1_RECOMB ||
-          lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_DBL_1_RECOMB )
+      if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_NOVERTS_1_RECOMB ||
+          lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_ADDVERTS_1_RECOMB )
         (*tri_quad_flag) = 1;
-      else if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_SNGL_1 ||
-               lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_DBL_1 )
+      else if( lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_NOVERTS_1 ||
+               lateral_regions[0]->meshAttributes.extrude->mesh.QuadToTri == QUADTRI_ADDVERTS_1 )
         (*tri_quad_flag) = 2;
       else
         (*tri_quad_flag) = 0;
@@ -178,15 +182,11 @@ int IsValidQuadToTriLateral(GFace *face, int *tri_quad_flag, bool *detectQuadToT
       else if( (adj_ep && !adj_ep->mesh.QuadToTri && !adj_ep->mesh.Recombine) ||
                (ep && !ep->mesh.QuadToTri && !ep->mesh.Recombine) )
         (*tri_quad_flag) = 2;
-      // if both are quadToTri and either are quadToTri recomblaterals, recombine
-      else if( ep->mesh.QuadToTri == QUADTRI_SNGL_1_RECOMB ||
-               (adj_ep && adj_ep->mesh.QuadToTri == QUADTRI_SNGL_1_RECOMB) )
-        (*tri_quad_flag) = 1;
-      else if( ep->mesh.QuadToTri == QUADTRI_DBL_1_RECOMB ||
-               (adj_ep && adj_ep->mesh.QuadToTri == QUADTRI_DBL_1_RECOMB) )
+      // if both are quadToTri ALWAYS try to recombine
+      else if( ep->mesh.QuadToTri && adj_ep && adj_ep->mesh.QuadToTri )
         (*tri_quad_flag) = 1;
       else
-        (*tri_quad_flag) = 2;
+        (*tri_quad_flag) = 0;
     }
     // any other adjacent surface, just default to the QuadToTri region's non-QuadToTri
     // default recombination method.  Any mistakes at this point are not this feature's.
@@ -210,8 +210,11 @@ int IsValidQuadToTriLateral(GFace *face, int *tri_quad_flag, bool *detectQuadToT
 
 // The function that tests whether a surface is a QuadToTri top surface and whether
 // there are conflicts. If surface is not a top for a valid QuadToTri region or if
-// there are QuadToTri conflicts, return 0.  Note that RemoveDuplicateSurfaces()
-// makes this DIFFICULT. Also, the type of QuadToTri interface is placed into the
+// there are QuadToTri conflicts, return 0.
+// if the surface turns out to be the source of a toroidal loop extrusion (which will then
+// NOT have geo.Mode == COPIED_ENTITY), return 2 (this will require special meshing considerations).
+// Note that RemoveDuplicateSurfaces() makes this DIFFICULT. 
+// Also, the type of QuadToTri interface is placed into the
 // pointer argument quadToTri. .
 // Added 2010-12-09.
 int IsValidQuadToTriTop(GFace *face, int *quadToTri, bool *detectQuadToTriTop)
@@ -219,8 +222,13 @@ int IsValidQuadToTriTop(GFace *face, int *quadToTri, bool *detectQuadToTriTop)
   (*quadToTri) = NO_QUADTRI;
   (*detectQuadToTriTop) = false;
 
+  int is_toroidal_quadtri = 0;
+  
   GModel *model = face->model();
 
+  // First thing is first: determine if this is a toroidal quadtri extrusion.  if so, can skip the  rest
+  
+  
   // It seems the member pointers to neighboring regions for extruded top faces are not set.
   // For now, have to loop through
   // ALL the regions to see if the presently considered face belongs to the region.
@@ -228,109 +236,128 @@ int IsValidQuadToTriTop(GFace *face, int *quadToTri, bool *detectQuadToTriTop)
   // whether the face is a top face of the region (including whether the region is even extruded).
   // After that information is determined, function can test for QuadToTri neighbor conflicts.
 
-  std::vector<GRegion *> top_regions;
-  std::vector<GRegion *> adjacent_regions;
-  std::vector<GRegion *> all_regions;
-  int numRegions = 0;
-  int numTopRegions = 0;
-
-  std::set<GRegion *, GEntityLessThan>::iterator itreg;
-  for( itreg = model->firstRegion(); itreg != model->lastRegion(); itreg++ )
-    all_regions.push_back( (*itreg) );
+  
 
-  for(unsigned int i_reg = 0; i_reg < all_regions.size(); i_reg++ ){
-
-    // save time
-    if( numRegions >= 2 )
-      break;
-
-    GRegion *region = all_regions[i_reg];
-
-    // is region in the current model's regions or is it deleted?
-    if( !FindVolume( ( region->tag() ) ) )
-      continue;
-
-    // does face belong to region?
-    std::list<GFace *> region_faces = std::list<GFace *>( region->faces() );
-    if( std::find( region_faces.begin(), region_faces.end(), face ) !=
-          region_faces.end() ){
-      adjacent_regions.push_back(region);
-      numRegions++;
+  
+  // first determine if this is toroidal quadtotri
+  is_toroidal_quadtri = IsInToroidalQuadToTri(face);
+  
+  if( is_toroidal_quadtri )
+    (*detectQuadToTriTop) = true;
+  else{
+    std::vector<GRegion *> top_regions;
+    std::vector<GRegion *> adjacent_regions;
+    std::vector<GRegion *> all_regions;
+    int numRegions = 0;
+    int numTopRegions = 0;
+    std::set<GRegion *, GEntityLessThan>::iterator itreg;
+
+    for( itreg = model->firstRegion(); itreg != model->lastRegion(); itreg++ )
+      all_regions.push_back( (*itreg) );
+
+    for(unsigned int i_reg = 0; i_reg < all_regions.size(); i_reg++ ){
+
+      // save time
+      if( numRegions >= 2 )
+	break;
+
+      GRegion *region = all_regions[i_reg];
+
+      // is region in the current model's regions or is it deleted?
+      if( !FindVolume( ( region->tag() ) ) )
+	continue;
+
+      // does face belong to region?
+      std::list<GFace *> region_faces = std::list<GFace *>( region->faces() );
+      if( std::find( region_faces.begin(), region_faces.end(), face ) !=
+	    region_faces.end() ){
+	adjacent_regions.push_back(region);
+	numRegions++;
+      }
+      else
+	continue;
+
+      // is region a structured extruded?
+      if( !(region->meshAttributes.extrude && region->meshAttributes.extrude->mesh.ExtrudeMesh &&
+	    region->meshAttributes.extrude->geo.Mode == EXTRUDED_ENTITY) )
+	continue;
+
+      // Test whether the face is a top for the region
+      if( IsSurfaceATopForRegion(region, face) ){
+	top_regions.push_back(region);
+	numTopRegions++;
+	if( region->meshAttributes.extrude->mesh.QuadToTri )
+	  (*detectQuadToTriTop) = true;
+      }
+	      
     }
-    else
-      continue;
+ 
+    // MAIN test of whether this is even a quadToTri extrusion lateral
+    // the only return 0 path that is NOT an error
+    if( !(*detectQuadToTriTop) )
+      return 0;
 
-    // is region extruded?
-    if( !region->meshAttributes.extrude )
-      continue;
-    if( region->meshAttributes.extrude->geo.Mode != EXTRUDED_ENTITY )
-      continue;
+    ExtrudeParams *ep = face->meshAttributes.extrude;
 
-    // Test whether the face is a top for the region
-    if( IsSurfaceATopForRegion(region, face) ){
-      top_regions.push_back(region);
-      numTopRegions++;
-      if( region->meshAttributes.extrude->mesh.QuadToTri )
-        (*detectQuadToTriTop) = true;
+    if(!ep && !is_toroidal_quadtri){
+      Msg::Error("In IsValidQuadToTriTop(), no extrude info for surface %d.",
+		face->tag() );
+      return 0;
     }
 
-  }
-
-  // MAIN test of whether this is even a quadToTri extrusion lateral
-  // the only return 0 path that is NOT an error
-  if( !(*detectQuadToTriTop) )
-    return 0;
-
-
-
-  ExtrudeParams *ep = face->meshAttributes.extrude;
+    if( ep->geo.Mode != COPIED_ENTITY ){
+      Msg::Error("In IsValidQuadToTriTop(), surface %d is not copied from source.",
+		face->tag() );
+      return 0;
+    }
 
-  if(!ep){
-    Msg::Error("In IsValidQuadToTriTop(), no extrude info for surface %d.",
-               face->tag() );
-    return 0;
-  }
+    if( ep->mesh.QuadToTri == 0){
+      Msg::Error("In IsValidQuadToTriTop(), surface %d was determined to be the top surface "
+		"for a QuadToTri extrusion, but does not have QuadToTri parameters set within itself.",
+		face->tag() );
+      return 0;
+    }
 
-  if( ep->geo.Mode != COPIED_ENTITY){
-    Msg::Error("In IsValidQuadToTriTop(), surface %d is not copied from source.",
-               face->tag() );
-    return 0;
-  }
+    GFace *face_source = model->getFaceByTag(std::abs(ep->geo.Source));
+    if(!face_source){
+      Msg::Error("In IsValidQuadToTriTop(), unknown source face number %d.",
+		  face->meshAttributes.extrude->geo.Source);
+      return 0;
+    }
 
-  if( ep->mesh.QuadToTri == 0){
-    Msg::Error("In IsValidQuadToTriTop(), surface %d was determined to be the top surface "
-               "for a QuadToTri extrusion, but does not have QuadToTri parameters set within itself.",
-               face->tag() );
-    return 0;
-  }
+    if(numRegions > 2){
+      Msg::Error("In IsValidQuadToTriTop(), too many regions adjacent to surface %d.",
+		face->tag() );
+      return 0;
+    }
 
-  GFace *face_source = model->getFaceByTag(std::abs(ep->geo.Source));
-  if(!face_source){
-    Msg::Error("In IsValidQuadToTriTop(), unknown source face number %d.",
-                 face->meshAttributes.extrude->geo.Source);
-    return 0;
-  }
 
-  if(numRegions > 2){
-    Msg::Error("In IsValidQuadToTriTop(), too many regions adjacent to surface %d.",
-               face->tag() );
-    return 0;
-  }
+    if( top_regions.size() ){
+      (*quadToTri) = top_regions[0]->meshAttributes.extrude->mesh.QuadToTri;
+    }
 
+    // Make sure that face is the top for only one region. if not, then there will likely
+    // be conflicts (two regions extruded into each other).
+    if( top_regions.size() > 1 ){
+      Msg::Error("In IsValidQuadToTriTop(), QuadToTri top surface %d identified as top "
+		"surface for more than one region. Likely conflict.",  face->tag() );
+      return 0;
+    }
 
-  if( top_regions.size() ){
-    (*quadToTri) = top_regions[0]->meshAttributes.extrude->mesh.QuadToTri;
-  }
+  }  // end of else that executes if NOT toroidal extrusion
 
-  // Make sure that face is the top for only one region. if not, then there will likely
-  // be conflicts (two regions extruded into each other).
-  if( top_regions.size() > 1 ){
-    Msg::Error("In IsValidQuadToTriTop(), QuadToTri top surface %d identified as top "
-               "surface for more than one region. Likely conflict.",  face->tag() );
+  
+  // this is technically redundant...but if changes are made, it's good to keep this here at the end for safety
+  if( !(*detectQuadToTriTop) )
     return 0;
-  }
 
-  return 1;
+  if( !is_toroidal_quadtri )
+    return 1;
+  else if( is_toroidal_quadtri == 1 )
+  { return 2;} // for toroidal extrusion
+  else
+    return 3;
+    
 }
 
 
@@ -394,8 +421,6 @@ static int MeshQuadToTriTopUnstructured(GFace *from, GFace *to,
       return 0;
     }
 
-    // make the element
-    MElement *element = from->quadrangles[i];
 
     // draw other diagonals to minimize difference in average edge length with diagonal length, in quadrature
 
@@ -410,12 +435,12 @@ static int MeshQuadToTriTopUnstructured(GFace *from, GFace *to,
     double d2 = verts[1]->distance(verts[3]);
 
     if(fabs(d1*d1-mag_sq_ave) <= fabs(d2*d2-mag_sq_ave) ){
-      addTriangle(verts[0],verts[1],verts[2],to,element);
-      addTriangle(verts[0],verts[2],verts[3],to,element);
+      addTriangle(verts[0],verts[1],verts[2],to);
+      addTriangle(verts[0],verts[2],verts[3],to);
     }
     else{
-      addTriangle(verts[1],verts[2],verts[3],to,element);
-      addTriangle(verts[1],verts[3],verts[0],to,element);
+      addTriangle(verts[1],verts[2],verts[3],to);
+      addTriangle(verts[1],verts[3],verts[0],to);
     }
   }
 
@@ -429,10 +454,10 @@ static int MeshQuadToTriTopUnstructured(GFace *from, GFace *to,
 //       'GFace *to' is the top surface to mesh, 'from' is the source surface, 'pos' is a std::set
 //       of vertex positions for the top surface.
 int MeshQuadToTriTopSurface( GFace *from, GFace *to, std::set<MVertex*,
-                             MVertexLessThanLexicographic> &pos)
+                             MVertexLessThanLexicographic> &pos )
 {
   if( !to->meshAttributes.extrude || !to->meshAttributes.extrude->mesh.QuadToTri  )
-    return 0;
+   return 0;
 
   // if the source is all triangles, then just let this function is not needed. Return 1.
   if( from->triangles.size() && !from->quadrangles.size() )
@@ -442,30 +467,26 @@ int MeshQuadToTriTopSurface( GFace *from, GFace *to, std::set<MVertex*,
   if( !from->triangles.size() && !from->quadrangles.size() )
     return 0;
 
+
   ExtrudeParams *ep = to->meshAttributes.extrude;
   if( !ep || !ep->mesh.ExtrudeMesh || !(ep->geo.Mode == COPIED_ENTITY) ){
     Msg::Error("In MeshQuadToTriTopSurface(), incomplete or no "
-               "extrude information for top face %d.", to->tag() );
+		"extrude information for top face %d.", to->tag() );
     return 0;
   }
-
-  // number of extrusion layers
-  int num_layers = 0;
-  for( int p = 0; p < ep->mesh.NbLayer; p++ )
-    num_layers += ep->mesh.NbElmLayer[p];
-
-  // is this a valid double layer extrusion?
-  bool is_dbl = false;
-  if( num_layers >= 2 && ( ep->mesh.QuadToTri == QUADTRI_DBL_1 || ep->mesh.QuadToTri == QUADTRI_DBL_1_RECOMB ) )
-    is_dbl = true;
-
-  // IF this is a SINGLE layer quadToTri, mesh the surfaces according to this modified
+  
+  // is this a quadtri extrusion with added vertices?
+  bool is_addverts = false;
+  if( ep && (ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1 || ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1_RECOMB) )
+    is_addverts = true;
+
+  // execute this section if 
+  // IF this is a 'no new vertices' quadToTri, mesh the surfaces according to this modified
   // least point value method: if a 3 boundary point quad, draw diagonals from middle corner toward
   // interior.  If a a 2- or 1- point boundary quad, draw toward lowest pointer number NOT on boundary.
   // All interior quad, draw diagonal to vertex with lowest pointer number.
 
-  if( !is_dbl ){
-
+  if( !is_addverts ){
     std::set<MVertex*, MVertexLessThanLexicographic> pos_src_edge;
     QuadToTriInsertFaceEdgeVertices(from, pos_src_edge);
     std::set<MVertex*, MVertexLessThanLexicographic>::iterator itp;
@@ -540,17 +561,17 @@ int MeshQuadToTriTopSurface( GFace *from, GFace *to, std::set<MVertex*,
         low_index = getIndexForLowestVertexPointer(verts);
 
       addTriangle( verts[low_index],verts[(low_index+1)%verts.size()],
-                   verts[(low_index+2)%verts.size()],to,element);
+                   verts[(low_index+2)%verts.size()],to);
       addTriangle( verts[low_index],verts[(low_index+2)%verts.size()],
-                   verts[(low_index+3)%verts.size()],to,element);
+                   verts[(low_index+3)%verts.size()],to);
     }
     return 1;
   }
 
 
-  // AFTER THIS POINT IN FUNCTION, CODE IS ALL FOR DOUBLE LAYER EXTRUSIONS (Less restrictive).
+  // AFTER THIS POINT IN FUNCTION, CODE IS ALL FOR 'ADD INTERNAL VERTEX' EXTRUSIONS (Less restrictive).
 
-  // if double layer and unstructured, can try to make the top mesh a little neater
+  // if source face is unstructured, can try to make the top mesh a little neater
   GFace *root_source = findRootSourceFaceForFace( from );
   ExtrudeParams *ep_src = root_source->meshAttributes.extrude;
   bool struct_root = false;
@@ -562,7 +583,7 @@ int MeshQuadToTriTopSurface( GFace *from, GFace *to, std::set<MVertex*,
   if( !struct_root && MeshQuadToTriTopUnstructured(from, to, pos) )
     return 1;
 
-  // And top surface for a structured double layer can be meshed quite easily
+  // And top surface for the 'added internal vertex' method can be meshed quite easily
   else{
     std::set<MVertex *, MVertexLessThanLexicographic >::iterator itp;
     // loop through each element source quadrangle and extrude
@@ -597,10 +618,9 @@ int MeshQuadToTriTopSurface( GFace *from, GFace *to, std::set<MVertex*,
         return 0;
       }
 
-      // make the element
-      MElement *element = from->quadrangles[i];
-      addTriangle( verts[0],verts[2], verts[3],to,element);
-      addTriangle( verts[0],verts[1], verts[2],to,element);
+      // make the elements
+      addTriangle( verts[0],verts[2], verts[3],to);
+      addTriangle( verts[0],verts[1], verts[2],to);
     }
     return 1;
   }
diff --git a/Mesh/QuadTriExtruded2D.h b/Mesh/QuadTriExtruded2D.h
index 131a21bde3..329a842cfe 100644
--- a/Mesh/QuadTriExtruded2D.h
+++ b/Mesh/QuadTriExtruded2D.h
@@ -53,6 +53,8 @@ GNU General Public License for more details.
 #include <math.h>
 #include "QuadTriUtils.h"
 
+
+
 // The function that tests whether a 2D surface is a lateral of a valid QuadToTri 
 // region and whether there are conflicts. If surface is not part of valid QuadToTri region 
 // or if there are QuadToTri conflicts, return 0.  Note that RemoveDuplicateSurfaces() 
@@ -78,6 +80,6 @@ int IsValidQuadToTriTop(GFace *face, int *quadToTri, bool *detectQuadToTriTop);
 //       'GFace *to' is the top surface to mesh, 'from' is the source surface, 'pos' is a std::set  
 //       of vertex positions for the top surface.
 int MeshQuadToTriTopSurface( GFace *from, GFace *to, std::set<MVertex*, 
-                             MVertexLessThanLexicographic> &pos);
+                             MVertexLessThanLexicographic> &pos );
 
 #endif
diff --git a/Mesh/QuadTriExtruded3D.cpp b/Mesh/QuadTriExtruded3D.cpp
index 079b83291e..acb2ddc6ec 100644
--- a/Mesh/QuadTriExtruded3D.cpp
+++ b/Mesh/QuadTriExtruded3D.cpp
@@ -270,7 +270,10 @@ bool IsValidQuadToTriRegion(GRegion *region, bool *allNonGlobalSharedLaterals)
                region->tag() );
     return false;
   }
-
+  
+  bool is_toroidal = IsInToroidalQuadToTri(reg_source);
+  GFace *root = findRootSourceFaceForFace(reg_source);
+  
   // Find a source surface. Then find a COPIED_ENTITY that is the top surface.
   // Then determine if all the laterals are either all quad or all triangle.
   // If shared laterals are all static (quad or non subdivide triangles),
@@ -278,15 +281,18 @@ bool IsValidQuadToTriRegion(GRegion *region, bool *allNonGlobalSharedLaterals)
   // If any lateral is unstructured, error.
 
   bool foundTop = false, foundSource = false,
-                  foundNoStruct = false;
+                  foundNoStruct = false, foundRoot = false;
 
   std::list<GFace *> faces = region->faces();
   std::list<GFace *>::iterator it = faces.begin();
 
   (*allNonGlobalSharedLaterals) = true;
 
+  
   for( it = faces.begin(); it != faces.end(); it++ ){
     ExtrudeParams *face_tmp_ep = (*it)->meshAttributes.extrude;
+    if( (*it) == root )
+      foundRoot = true;
     if( (*it) == reg_source )
       foundSource = true;
     else if( face_tmp_ep && face_tmp_ep->geo.Mode ==
@@ -303,6 +309,7 @@ bool IsValidQuadToTriRegion(GRegion *region, bool *allNonGlobalSharedLaterals)
       else if( top_source_tmp == reg_source &&
                !IsSurfaceALateralForRegion(region, *it) )
         foundTop = true;
+     
     }
     // This is a check to see if there are lateral surface triangles that need to be edged globally in subdivide operation
     else if( IsSurfaceALateralForRegion(region, *it) ){
@@ -317,11 +324,15 @@ bool IsValidQuadToTriRegion(GRegion *region, bool *allNonGlobalSharedLaterals)
           (*allNonGlobalSharedLaterals) = false;
       }
     }
-    else
+    else if( !is_toroidal )
       foundNoStruct = true;
   }
 
 
+  // if didn't find the copied entity, maybe this is toroidal and the top has been replaced
+  if( is_toroidal && !foundTop && foundRoot && root != reg_source )
+    foundTop = true;
+  
   // test for errors
   bool detectConflict = false;
   if( !foundTop ){
@@ -2377,34 +2388,46 @@ static bool QuadToTriGetRegionDiags(GRegion *gr,
     return false;
   }
 
-  // Find a source surface, find a COPIED_ENTITY that is the top surface,
+  // Find a source surface, find a COPIED_ENTITY that is the top surface, or if toroidal, find what is now the top
 
-  bool foundSource = false, foundTop = false;
+  bool foundSource = false, foundTop = false, foundRoot = false;
   GFace *reg_top = NULL;
+  GFace *root_face = NULL;
   std::list<GFace *> faces = gr->faces();
   std::list<GFace *>::iterator it = faces.begin();
 
+  // top faces in toroidal quadtri need special treatment
+  bool is_toroidal = IsInToroidalQuadToTri(reg_source);
+  if( is_toroidal )
+    root_face = findRootSourceFaceForFace(reg_source);
+  
   for( it = faces.begin(); it != faces.end(); it++ ){
     ExtrudeParams *face_tmp_ep = (*it)->meshAttributes.extrude;
+    if( (*it) == root_face )
+      foundRoot = true;
     if( (*it) == reg_source )
       foundSource = true;
     else if( face_tmp_ep && face_tmp_ep->geo.Mode ==
-        COPIED_ENTITY ){
+	COPIED_ENTITY ){
       GFace *top_source_tmp = model->getFaceByTag(
-                              std::abs( face_tmp_ep->geo.Source ) );
+			      std::abs( face_tmp_ep->geo.Source ) );
       if( !top_source_tmp ){
-        Msg::Error("In QuadToTriGetRegionDiags(), could not find source face "
-                   "%d for copied surface %d of region %d.",
-                   std::abs( face_tmp_ep->geo.Source ),
-                   (*it)->tag(), gr->tag() );
+	Msg::Error("In QuadToTriGetRegionDiags(), could not find source face "
+		  "%d for copied surface %d of region %d.",
+		  std::abs( face_tmp_ep->geo.Source ),
+		  (*it)->tag(), gr->tag() );
       }
       else if( top_source_tmp == reg_source ){
-        foundTop = true;
-        reg_top = (*it);
+	foundTop = true;
+	reg_top = (*it);
       }
     }
   }
 
+  if( !foundTop && is_toroidal && foundRoot && root_face != reg_source ){
+    foundTop = true;
+    reg_top = root_face;
+  }
   if( !foundTop )
     Msg::Warning("In QuadToTriGetRegionDiags(), could not find top face "
                "for region %d.", gr->tag() );
@@ -2427,14 +2450,29 @@ static bool QuadToTriGetRegionDiags(GRegion *gr,
         IsSurfaceALateralForRegion(gr, *it) ){
 
       // take care of forbidden edges
-      for( unsigned int i = 0; i < (*it)->quadrangles.size(); i++){
-        std::vector<MVertex*> v;
-        (*it)->quadrangles[i]->getVertices(v);
-        createForbidden(v, forbidden_edges );
-      }
-
-      // at this point, if there are no triangles or if there are quads, continue
-      if( !(*it)->triangles.size() || (*it)->quadrangles.size() )
+      // test whether this surface is a lateral bounded by two quadtri regions.
+      // if so, and the other is not already meshed, 
+      // then don't make these forbidden.  This is worked out in a 
+      // lateral remesh later
+      std::vector<GRegion *> adj_regions;
+      int numNeighbors = 0;
+      numNeighbors = GetNeighborRegionsOfFace((*it), adj_regions);
+      int ind_notcurrent = adj_regions[0] == gr ? 1 : 0;
+      if( !( numNeighbors == 2 && adj_regions[0]->meshAttributes.extrude && adj_regions[1]->meshAttributes.extrude &&
+	  adj_regions[0]->meshAttributes.extrude->mesh.ExtrudeMesh && adj_regions[1]->meshAttributes.extrude->mesh.ExtrudeMesh &&
+	  adj_regions[0]->meshAttributes.extrude->geo.Mode == EXTRUDED_ENTITY  && adj_regions[1]->meshAttributes.extrude->geo.Mode == EXTRUDED_ENTITY &&
+	  adj_regions[0]->meshAttributes.extrude->mesh.QuadToTri && adj_regions[1]->meshAttributes.extrude->mesh.QuadToTri  &&
+	  IsSurfaceALateralForRegion(adj_regions[ind_notcurrent], *it) &&
+	  !adj_regions[ind_notcurrent]->getNumMeshElements() ) ){
+	for( unsigned int i = 0; i < (*it)->quadrangles.size(); i++){
+          std::vector<MVertex*> v;
+	  (*it)->quadrangles[i]->getVertices(v);
+	  createForbidden(v, forbidden_edges );
+	}
+      }
+      
+      // at this point, if there are no triangles, continue
+      if( !(*it)->triangles.size() )
         continue;
 
       ExtrudeParams *face_ep_tmp = (*it)->meshAttributes.extrude;
@@ -2552,9 +2590,9 @@ static bool QuadToTriGetRegionDiags(GRegion *gr,
               else
                 createEdge( verts[diag.first+add], verts[diag.second-add], lat_tri_diags );
             }
-            else
-              Msg::Error("In QuadToTriGetRegionDiags(), failed to find a diagonal on unrecombined lateral surface %d.", (*it)->tag() );
-
+            else if( !(*it)->quadrangles.size() )
+              Msg::Error("In QuadToTriGetRegionDiags(), failed to find a diagonal in lateral surface %d.", (*it)->tag() );
+	  
             index_guess += 2;
              /*
 
@@ -2582,18 +2620,19 @@ static bool QuadToTriGetRegionDiags(GRegion *gr,
               else
                 createEdge( elemEdge_tmp.first, elemEdge_tmp.second, lat_tri_diags );
               */
-
+	  
           }
         }
       }
-    }
 
+    }
   }
-  // Insert diagonals of the COPIED top surface into quadToTri_edges;
+    
+  // Insert diagonals of the top surface into quadToTri_edges;
   unsigned int index_guess = reg_source->triangles.size();
-  if( reg_top->quadrangles.size() ){
+  if( reg_top->quadrangles.size() && !is_toroidal ){
     Msg::Error("In QuadToTriGetRegionDiags(), top surface of region "
-               "%d has quads.", gr->tag() );
+               "%d has quads in a non-toroidal QuadToTri extrusion.", gr->tag() );
     return false;
   }
 
@@ -2605,16 +2644,19 @@ static bool QuadToTriGetRegionDiags(GRegion *gr,
     std::vector<MVertex *> verts;
     get2DExtrudedVertices( elem, ep, j_top, k_top, pos, verts );
     if( verts.size() != 4 ) break;
-
-    // Find diagonal:
-    std::pair<int,int> diag(0,0);
-    diag = FindDiagonalEdgeIndices( verts, reg_top, false, index_guess );
-    if( diag.first || diag.second )
-      createEdge( verts[diag.first], verts[diag.second], quadToTri_edges );
+    if( !is_toroidal ){
+      // Find diagonal:
+      std::pair<int,int> diag(0,0);
+      diag = FindDiagonalEdgeIndices( verts, reg_top, false, index_guess );
+      if( diag.first || diag.second )
+	createEdge( verts[diag.first], verts[diag.second], quadToTri_edges );
+      else
+	  Msg::Error("In QuadToTriGetRegionDiags(), failed to find a diagonal on top surface %d, but should have.", reg_top->tag() );
+      index_guess += 2;
+    }
     else
-      Msg::Error("In QuadToTriGetRegionDiags(), failed to find a diagonal on top surface %d.", reg_top->tag() );
+      createForbidden(verts, forbidden_edges);
 
-    index_guess += 2;
   }
   return true;
 }
@@ -2623,7 +2665,7 @@ static bool QuadToTriGetRegionDiags(GRegion *gr,
 // For use in QuadToTriEdgeGenerator:  Controls BRUTE FORCE edging of elements with ALL vertices
 // on a lateral boundary surface.
 // Added 04/08/2011
-static int makeEdgesForElemsWithAllVertsOnBnd( GRegion *gr, bool is_dbl,
+static int makeEdgesForElemsWithAllVertsOnBnd( GRegion *gr, bool is_addverts,
                                                CategorizedSourceElements &cat_src_elems,
                                                std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                                std::set<std::pair<MVertex*, MVertex*> > &lat_tri_diags,
@@ -2672,8 +2714,8 @@ static int makeEdgesForElemsWithAllVertsOnBnd( GRegion *gr, bool is_dbl,
   // can afford temporary copies since these sets should be relatively small for all cases.
   std::set<unsigned int> tri_tmp, quad_tmp;
   tri_tmp = cat_src_elems.three_bnd_pt_tri;
-  // if is_dbl, then don't track the quads
-  if( !is_dbl )
+  // if is_addverts, then don't track the quads
+  if( !is_addverts )
     quad_tmp = cat_src_elems.four_bnd_pt_quad;
 
   while( tri_tmp.size() || quad_tmp.size() ){
@@ -2869,7 +2911,7 @@ static int makeEdgesForElemsWithAllVertsOnBnd( GRegion *gr, bool is_dbl,
 // For use in QuadToTriEdgeGenerator:  Does the edging of prisms with some but not all vertices
 // on a lateral boundary surface.
 // Added 04/08/2011
-static int makeEdgesForOtherBndPrisms( GRegion *gr, bool is_dbl, CategorizedSourceElements &cat_src_elems,
+static int makeEdgesForOtherBndPrisms( GRegion *gr, bool is_addverts, CategorizedSourceElements &cat_src_elems,
                                        std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                        std::set<std::pair<MVertex*, MVertex*> > &lat_tri_diags,
                                        std::set<std::pair<MVertex*, MVertex*> > &forbidden_edges,
@@ -2996,7 +3038,7 @@ static int makeEdgesForOtherBndPrisms( GRegion *gr, bool is_dbl, CategorizedSour
 // For use in QuadToTriEdgeGenerator:  Does the edging of hexahedra with some but not all vertices
 // on a lateral boundary surface.
 // Added 04/08/2011
-static int makeEdgesForOtherBndHexa( GRegion *gr, bool is_dbl, CategorizedSourceElements &cat_src_elems,
+static int makeEdgesForOtherBndHexa( GRegion *gr, bool is_addverts, CategorizedSourceElements &cat_src_elems,
                                      std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                      std::set<std::pair<MVertex*, MVertex*> > &lat_tri_diags,
                                      std::set<std::pair<MVertex*, MVertex*> > &forbidden_edges,
@@ -3320,7 +3362,7 @@ static int makeEdgesForOtherBndHexa( GRegion *gr, bool is_dbl, CategorizedSource
 // a pivot vertex of a hexahedral element that has ONE SOURCE vertex on a lateral boundary surface.
 // See inside function for a definition of the "pivot vertex."
 // Added 04/08/2011
- static int makeEdgesForElemsTouchPivotVert( GRegion *gr, bool is_dbl, CategorizedSourceElements &cat_src_elems,
+ static int makeEdgesForElemsTouchPivotVert( GRegion *gr, bool is_addverts, CategorizedSourceElements &cat_src_elems,
                                        std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                        std::set<std::pair<MVertex*, MVertex*> > &lat_tri_diags,
                                        std::set<std::pair<MVertex*, MVertex*> > &forbidden_edges,
@@ -3546,7 +3588,7 @@ static int makeEdgesForOtherBndHexa( GRegion *gr, bool is_dbl, CategorizedSource
 // For use in QuadToTriEdgeGenerator:  Does the lateral edging of internal elements in the top extrusion
 // layer by lowest vertex pointer value in TOP FACE.
 // Added 04/08/2011
-static int makeEdgesInternalTopLayer( GRegion *gr, bool is_dbl, CategorizedSourceElements &cat_src_elems,
+static int makeEdgesInternalTopLayer( GRegion *gr, bool is_addverts, CategorizedSourceElements &cat_src_elems,
                                       std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                       std::set<MVertex*, MVertexLessThanLexicographic> &pos )
 {
@@ -3660,15 +3702,16 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
     return 0;
   }
 
+  
   // number of extrusion layers
   int num_layers = 0;
   for( int p = 0; p < ep->mesh.NbLayer; p++ )
     num_layers += ep->mesh.NbElmLayer[p];
 
-  // is this a valid double layer extrusion?
-  bool is_dbl = false;
-  if( num_layers >= 2 && ( ep->mesh.QuadToTri == QUADTRI_DBL_1 || ep->mesh.QuadToTri == QUADTRI_DBL_1_RECOMB ) )
-    is_dbl = true;
+  // is this a valid 'add internal vertex' extrusion?
+  bool is_addverts = false;
+  if( ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1 || ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1_RECOMB )
+    is_addverts = true;
 
 
   // now find and verify the source and the top of region
@@ -3680,20 +3723,32 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
     return 0;
   }
 
+  // need for toroidal loop extrusions...top layer treated specially
+  bool is_toroidal = IsInToroidalQuadToTri(reg_source);
+  
+  
   std::list<GFace *> reg_faces = gr->faces();
   std::list<GFace *>::iterator itf = reg_faces.begin();
 
-  // find top surface of extrusion
+  // find top surface of extrusion and first root dependency of source
   GFace *reg_top = NULL;
+  GFace *root = findRootSourceFaceForFace(reg_source);
+  bool foundRoot = false;
   for( itf = reg_faces.begin(); itf != reg_faces.end(); itf++ ){
     ExtrudeParams *face_ep = (*itf)->meshAttributes.extrude;
     if( face_ep && face_ep->geo.Mode == COPIED_ENTITY &&
         reg_source == model->getFaceByTag( std::abs(face_ep->geo.Source) ) ){
       reg_top = (*itf);
-      break;
     }
+    if( (*itf) == root )
+      foundRoot = true;
+    if( reg_top && (foundRoot || !is_toroidal) )
+      break;
+    
   }
-
+  
+  if( is_toroidal && !reg_top && foundRoot && root != reg_source )
+    reg_top = root;
   if( !reg_top ){
     Msg::Error("In QuadToTriEdgeGenerator(), invalid top surface for region "
                "%d.", gr->tag() );
@@ -3755,9 +3810,9 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
     }
   }*/
 
-  // if this is a double layer extrusion, don't need adjustable lateral edges, so
+  // if this is an' add internal vertex' extrusion, don't need adjustable lateral edges, so
   // put all lat_tri_diags into quadToTri_edges
-  if( is_dbl)
+  if( is_addverts)
     quadToTri_edges.insert(lat_tri_diags.begin(), lat_tri_diags.end());
 
   // If there are no lat_tri_diags and no quads, there is nothing  left to do
@@ -3765,14 +3820,14 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
     return 1;
 
 
-  // can return now if this is a double layer extrusion...nothing left to do
-  if( is_dbl )
+  // can return now if this is an 'add internal vertex' extrusion...nothing left to do
+  if( is_addverts )
     return 1;
 
 
   // BRUTE FORCE diagonalization of elements with all vertices on a lateral boundary of region:
   // This has to be done for all cases with such elements if
-  if( !makeEdgesForElemsWithAllVertsOnBnd( gr, is_dbl, cat_src_elems, quadToTri_edges,
+  if( !makeEdgesForElemsWithAllVertsOnBnd( gr, is_addverts, cat_src_elems, quadToTri_edges,
                                            lat_tri_diags, forbidden_edges, problems, pos ) ){
      Msg::Error("In QuadToTriEdgeGenerator(), failed to make edges for the elements in region %d "
                 "with all vertices on a lateral boundary", gr->tag() );
@@ -3783,7 +3838,7 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
 
 
   // Extrude source triangles that are on the source boundary edges and find any diagonals
-  if( !makeEdgesForOtherBndPrisms( gr, is_dbl, cat_src_elems, quadToTri_edges,
+  if( !makeEdgesForOtherBndPrisms( gr, is_addverts, cat_src_elems, quadToTri_edges,
                                    lat_tri_diags, forbidden_edges, problems, pos ) ){
     Msg::Error("In QuadToTriEdgeGenerator(), failed to make edges for the prism extrusions in region %d with "
                "source triangles having some but not all vertices on the boundary", gr->tag() );
@@ -3799,7 +3854,7 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
 
 
   // Edge creation for extruded quadrangles with some but not all vertices on a boundary.
-  if( !makeEdgesForOtherBndHexa( gr, is_dbl, cat_src_elems, quadToTri_edges,
+  if( !makeEdgesForOtherBndHexa( gr, is_addverts, cat_src_elems, quadToTri_edges,
                                  lat_tri_diags, forbidden_edges, problems, pos ) ){
     Msg::Error("In QuadToTriEdgeGenerator(), failed to make edges for the hexahedral extrusions in region %d with "
                "source quads having some but not all vertices on the boundary", gr->tag() );
@@ -3810,7 +3865,7 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
   // Find diagonals for elements touching a "pivot vertex" of a hexa element that has
   // a source quad with only one vertex on a lateral boundary (see inside makeEdgesForOtherBndHexa() and
   // makeEdgesForElemsTouchingPivotVert() for details of "pivot vertex".
-  if( !makeEdgesForElemsTouchPivotVert( gr, is_dbl, cat_src_elems, quadToTri_edges,
+  if( !makeEdgesForElemsTouchPivotVert( gr, is_addverts, cat_src_elems, quadToTri_edges,
                                         lat_tri_diags, forbidden_edges, pos ) ){
     Msg::Error("In QuadToTriEdgeGenerator(), failed to make edges for "
                "the elements in region %d touching a \'pivot vertex\' of a "
@@ -3820,7 +3875,7 @@ int QuadToTriEdgeGenerator(GRegion *gr,  CategorizedSourceElements &cat_src_elem
 
   // Mesh internal elements in the top layer (just add lateral diagonals for the
   // Do this by lowest pointer in top surface
-  if( !makeEdgesInternalTopLayer( gr, is_dbl, cat_src_elems, quadToTri_edges, pos ) ){
+  if( !is_toroidal && !makeEdgesInternalTopLayer( gr, is_addverts, cat_src_elems, quadToTri_edges, pos ) ){
     Msg::Error("In QuadToTriEdgeGenerator(), failed to make internal edges "
                "in top extrusion layer of region %d.", gr->tag() );
     return 0;
@@ -3857,14 +3912,19 @@ static bool QuadToTriLateralRemesh( GRegion *gr, std::set<std::pair<MVertex*,MVe
   // If shared laterals are all static (quad or non subdivide triangles),
   // set the allStaticSharedLaterals argument to true.
   // If any lateral is unstructured, error.
-
-  bool foundTop = false;
+  
+  bool is_toroidal = IsInToroidalQuadToTri(reg_source);
+  GFace *root = findRootSourceFaceForFace(reg_source);
+  
+  bool foundTop = false, foundRoot = false;
   GFace *reg_top = NULL;
   std::list<GFace *> faces = gr->faces();
   std::list<GFace *>::iterator it = faces.begin();
 
   for( it = faces.begin(); it != faces.end(); it++ ){
     ExtrudeParams *face_tmp_ep = (*it)->meshAttributes.extrude;
+    if( (*it) == root )
+      foundRoot = true;
     if( face_tmp_ep && face_tmp_ep->geo.Mode ==
         COPIED_ENTITY ){
       GFace *top_source_tmp = model->getFaceByTag(
@@ -3882,6 +3942,10 @@ static bool QuadToTriLateralRemesh( GRegion *gr, std::set<std::pair<MVertex*,MVe
     }
   }
 
+    // if didn't find the copied entity, maybe this is toroidal and the top has been replaced
+  if( is_toroidal && !foundTop && foundRoot && root != reg_source )
+    foundTop = true;
+
   if( !foundTop )
     Msg::Warning("In QuadToTriLateralRemesh(), could not find top face "
                  "for region %d.", gr->tag() );
@@ -3891,11 +3955,9 @@ static bool QuadToTriLateralRemesh( GRegion *gr, std::set<std::pair<MVertex*,MVe
   // now loop through faces again, remeshing all laterals that need it.
   for( it = faces.begin(); it != faces.end(); it++ ){
     if( (*it) != reg_top && (*it) != reg_source &&
-        IsSurfaceALateralForRegion(gr, *it)
-        &&
-        (*it)->triangles.size() && !(*it)->quadrangles.size() ){
+        IsSurfaceALateralForRegion(gr, *it) ){
 
-      // *** JUST REMESH EVERY TRIANGLE SURFACE AGAIN TO BE SURE ***
+      // *** JUST REMESH EVERY SURFACE AGAIN TO BE SURE ***
 
       for(unsigned int i = 0; i < (*it)->triangles.size(); i++)
         delete (*it)->triangles[i];
@@ -3911,10 +3973,10 @@ static bool QuadToTriLateralRemesh( GRegion *gr, std::set<std::pair<MVertex*,MVe
 
 
 // Adds the face- or body-center vertices needed for some QuadToTri elements
-static bool addFaceOrBodyCenteredVertices( GRegion *to, CategorizedSourceElements &c,
+static bool addBodyCenteredVertices( GRegion *to, CategorizedSourceElements &c,
                                            std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                            std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems,
-                                           bool is_dbl, unsigned int lat_tri_diags_size,
+                                           bool is_addverts, unsigned int lat_tri_diags_size,
                                            std::set<MVertex *, MVertexLessThanLexicographic> &pos )
 {
 
@@ -3927,42 +3989,31 @@ static bool addFaceOrBodyCenteredVertices( GRegion *to, CategorizedSourceElement
   if( !from )
     return false;
 
-  // need these for double layer extrusion purposes
-  int j_second_from_top, k_second_from_top;
-  if( ep->mesh.NbElmLayer[ep->mesh.NbLayer-1] > 1 ){
-    j_second_from_top = ep->mesh.NbLayer-1;
-    k_second_from_top = ep->mesh.NbElmLayer[j_second_from_top]-2;
-  }
-  else{
-    j_second_from_top = std::max(ep->mesh.NbLayer-2, 0);
-    k_second_from_top = ep->mesh.NbElmLayer[j_second_from_top]-1;
-  }
-
   // find number of layers;
   unsigned int num_layer = 0;
   for( int p = 0; p < ep->mesh.NbLayer; p++ )
     num_layer += ep->mesh.NbElmLayer[p];
 
-  // If !is_dbl, make the body centered internal vertices for all "problem" elements
-  // If is_dbl, make face-centered verts where needed
-
   // create reserve capacity for the temp vector of new vertices:
   unsigned int cap_add = 0;
-  if( !is_dbl ){
+  if( !is_addverts ){
     std::map<MElement *, std::set< std::pair<unsigned int, unsigned int> > >::iterator itmap;
     for( itmap = problems.begin(); itmap != problems.end(); itmap++ )
       cap_add += itmap->second.size();
-    to->mesh_vertices.reserve(to->mesh_vertices.size()+cap_add);
   }
   else{
     unsigned int NbBndElems = c.four_bnd_pt_quad.size() + c.three_bnd_pt_tri.size() +
                               c.other_bnd_quad.size()   + c.other_bnd_tri.size();
     unsigned int NbSourceElems = from->triangles.size() + from->quadrangles.size();
-    cap_add = NbSourceElems + NbBndElems * ( num_layer-2 > 0 ? num_layer-2 : 0 );
+    if( findRootSourceFaceForFace(from) == from ) // if extruded back on the source in a ring
+      cap_add = NbBndElems * num_layer;
+    else
+      cap_add = NbSourceElems + NbBndElems * (num_layer-1);
   }
+  to->mesh_vertices.reserve(to->mesh_vertices.size()+cap_add);
 
-  // first the !is_dbl case
-  if( problems.size() && !is_dbl ){
+  // first the !is_addverts case
+  if( problems.size() && !is_addverts ){
     std::map<MElement *, std::set< std::pair<unsigned int, unsigned int> > >::iterator itmap;
     for( itmap = problems.begin(); itmap != problems.end(); itmap++ ){
       MElement *elem = itmap->first;
@@ -3977,10 +4028,10 @@ static bool addFaceOrBodyCenteredVertices( GRegion *to, CategorizedSourceElement
     }
   }
 
-  if( !is_dbl )
+  if( !is_addverts )
     return 1;
 
-  // The rest of the function works for is_dbl, double layer quadToTri extrusion
+  // The rest of the function works for is_addverts
 
 
   //Holds the new vertices...put them in to->mesh_vertices only at the end
@@ -4034,7 +4085,7 @@ static bool addFaceOrBodyCenteredVertices( GRegion *to, CategorizedSourceElement
           else if( edgeExists( verts3D[p+elem_size], verts3D[(p+1)%elem_size], quadToTri_edges ) )
             found_diags = true;
         }
-        // triangle extrusions don't need face centered verts if NO diags found
+        // triangle extrusions don't need body centered verts if NO diags found
         // or if not on lateral boundary
         if( !t && ( !found_diags || s==2 ) )
           continue;
@@ -4044,19 +4095,17 @@ static bool addFaceOrBodyCenteredVertices( GRegion *to, CategorizedSourceElement
           j_start = 0;
           k_start = 0;
         }
-        else{  // only non quads not extruded into degen hexa should execute this
-          j_start = j_second_from_top;
-          k_start = k_second_from_top;
+        else{  // only non-bnd quads or columns with no lateral diags and not extruded into degen hexa should execute this
+          j_start = ep->mesh.NbLayer-1;
+          k_start = ep->mesh.NbElmLayer[j_start]-1;
         }
-        std::vector<MVertex*> v_face;
+        std::vector<MVertex*> verts;
         for( int j = j_start; j < ep->mesh.NbLayer; j++ ){
-          int k_start_tmp = (j == j_start) ? k_start : 0;
-          int k_stop = (j == ep->mesh.NbLayer-1)
-                       ? ep->mesh.NbElmLayer[j]-1 : ep->mesh.NbElmLayer[j];
-          for( int k = k_start_tmp; k < k_stop; k++ ){
-            v_face.resize(0);
-            get2DExtrudedVertices( elem, ep, j, k+1, pos, v_face);
-            QtMakeCentroidVertex(v_face, &v_tmp, to, pos);
+          int k_stop = ep->mesh.NbElmLayer[j];
+	  for( int k = k_start; k < k_stop; k++ ){
+            verts.resize(0);
+            getExtrudedVertices(elem, ep, j, k, pos, verts);
+            QtMakeCentroidVertex(verts, &v_tmp, to, pos);
           }
         }
       }
@@ -4101,7 +4150,7 @@ static void MeshWithInternalVertex( GRegion *to, MElement *source, std::vector<M
   std::vector<double> centroid = QtFindVertsCentroid(v);
   MVertex tmp(centroid[0], centroid[1], centroid[2], 0, -1);
 
-  // it's too dangerous to use the 'new' command in here even with face-centered vertices.
+  // it's too dangerous to use the 'new' command in here even with body-centered vertices.
 
   std::set<MVertex*, MVertexLessThanLexicographic>::iterator itp;
   itp = pos.find(&tmp);
@@ -4168,7 +4217,7 @@ static void MeshWithInternalVertex( GRegion *to, MElement *source, std::vector<M
 // Can pick top or bottom faces to have the vertex, or both, based on the top_flag and bottom_flag args.
 // created here in the code
 // Added 2010-04-05
-static void MeshWithFaceCenteredVertex( GRegion *to, MElement *source, std::vector<MVertex *> v, std::vector<int> n1,
+/*static void MeshWithFaceCenteredVertex( GRegion *to, MElement *source, std::vector<MVertex *> v, std::vector<int> n1,
                                         std::vector<int> n2, bool bottom_flag, bool top_flag,
                                         std::set<MVertex *, MVertexLessThanLexicographic> &pos )
 {
@@ -4307,6 +4356,8 @@ static void MeshWithFaceCenteredVertex( GRegion *to, MElement *source, std::vect
 
 }
 
+*/
+
 
 // Construct the elements that subdivide a prism (or degenerated prism)  in a QuadToTri interface;
 // Added 2010-01-24
@@ -4315,7 +4366,7 @@ static inline void QuadToTriPriPyrTet(std::vector<MVertex*> &v, GRegion *to, int
                               std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                               std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems,
                               std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems_new,
-                              unsigned int lat_tri_diags_size, bool bnd_elem, bool is_dbl, bool diag_search,
+                              unsigned int lat_tri_diags_size, bool bnd_elem, bool is_addverts, bool diag_search,
                               std::set<MVertex*, MVertexLessThanLexicographic> &pos )
 {
   int dup[3];
@@ -4324,25 +4375,8 @@ static inline void QuadToTriPriPyrTet(std::vector<MVertex*> &v, GRegion *to, int
     if(v[i] == v[i + 3])
       dup[m++] = i;
 
-
-  ExtrudeParams *ep = to->meshAttributes.extrude;
-
-  // need these for double layer extrusion purposes
-  /*unsigned int j_second_from_top = 0, k_second_from_top = 0;
-  if( ep ){
-    if( ep->mesh.NbElmLayer[ep->mesh.NbLayer-1] > 1 ){
-      j_second_from_top = ep->mesh.NbLayer-1;
-      k_second_from_top = ep->mesh.NbElmLayer[j_second_from_top]-2;
-    }
-    else{
-      j_second_from_top = std::max(ep->mesh.NbLayer-2, 0);
-      k_second_from_top = ep->mesh.NbElmLayer[j_second_from_top]-1;
-    }
-  }*/
-
-
   bool is_problem = false;
-  if( !is_dbl ){
+  if( !is_addverts ){
     std::pair<unsigned int, unsigned int> jk_pair (j,k);
     std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > >::iterator itprob;
     itprob = problems.find(source);
@@ -4385,19 +4419,14 @@ static inline void QuadToTriPriPyrTet(std::vector<MVertex*> &v, GRegion *to, int
     }
   }
 
-  // mesh double layer
-  // is this prism part of a QuadToTri Double Layer extrusion and does it need to be extruded as such?
-  if( is_dbl && bnd_elem && found_diags ){
-    if( j==0 && k==0 )
-      MeshWithFaceCenteredVertex( to, source, v, n1, n2, 0, 1, pos );
-    else if( j >= ep->mesh.NbLayer-1 && k >= ep->mesh.NbElmLayer[ep->mesh.NbLayer-1]-1 )
-      MeshWithFaceCenteredVertex( to, source, v, n1, n2, 1, 0, pos );
-    else
-      MeshWithFaceCenteredVertex( to, source, v, n1, n2, 1, 1, pos );
+  // mesh with added internal body centered vertex
+  // is this prism part of a QuadToTri internal vertex extrusion and does it need to be extruded as such?
+  if( is_addverts && bnd_elem && found_diags ){
+    MeshWithInternalVertex( to, source, v, n1, n2, pos );
     return;
   }
 
-  // The rest are for single layer extrusions or degenerate prisms:
+  // The rest are for 'no new vertex' extrusions or degenerate prisms:
 
 
   // tetrahedron
@@ -4479,7 +4508,7 @@ static inline bool createTwoPtDegenHexElems( std::vector<MVertex*> &v, GRegion *
                                       std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                       std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems,
                                       std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems_new,
-                                      unsigned int lat_tri_diags_size, bool bnd_elem, bool is_dbl, bool found_diags,
+                                      unsigned int lat_tri_diags_size, bool bnd_elem, bool is_addverts, bool found_diags,
                                       std::set<MVertex*, MVertexLessThanLexicographic> &pos )
 {
 
@@ -4577,7 +4606,7 @@ static inline bool createOnePtDegenHexElems( std::vector<MVertex*> &v, GRegion *
                                       std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                       std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems,
                                       std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems_new,
-                                      unsigned int lat_tri_diags_size, bool bnd_elem, bool is_dbl, bool found_diags,
+                                      unsigned int lat_tri_diags_size, bool bnd_elem, bool is_addverts, bool found_diags,
                                       std::set<MVertex*, MVertexLessThanLexicographic> &pos )
 {
 
@@ -4818,7 +4847,7 @@ static inline bool createFullHexElems( std::vector<MVertex*> &v, GRegion *to, Ex
                                 std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                                 std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems,
                                 std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems_new,
-                                unsigned int lat_tri_diags_size, bool bnd_elem, bool is_dbl, bool found_diags,
+                                unsigned int lat_tri_diags_size, bool bnd_elem, bool is_addverts, bool found_diags,
                                 std::set<MVertex*, MVertexLessThanLexicographic> &pos )
 {
 
@@ -5216,7 +5245,7 @@ static inline void QuadToTriHexPri(std::vector<MVertex*> &v, GRegion *to, int j,
                               std::set<std::pair<MVertex*, MVertex*> > &quadToTri_edges,
                               std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems,
                               std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > > &problems_new,
-                              unsigned int lat_tri_diags_size, bool bnd_elem, bool is_dbl, bool diag_search,
+                              unsigned int lat_tri_diags_size, bool bnd_elem, bool is_addverts, bool diag_search,
                               std::set<MVertex*, MVertexLessThanLexicographic> &pos )
 {
 
@@ -5229,7 +5258,7 @@ static inline void QuadToTriHexPri(std::vector<MVertex*> &v, GRegion *to, int j,
   bool is_problem = false;
 
   // is element marked as needing internal vertex?
-  if( !is_dbl ){
+  if( !is_addverts ){
     std::pair<unsigned int, unsigned int> jk_pair (j,k);
     std::map<MElement*, std::set<std::pair<unsigned int, unsigned int> > >::iterator itprob;
     itprob = problems.find(source);
@@ -5241,20 +5270,7 @@ static inline void QuadToTriHexPri(std::vector<MVertex*> &v, GRegion *to, int j,
 
   ExtrudeParams *ep = to->meshAttributes.extrude;
 
-  // need these for double layer extrusion purposes
-  int j_second_from_top = 0, k_second_from_top = 0;
-  if( ep ){
-    if( ep->mesh.NbElmLayer[ep->mesh.NbLayer-1] > 1 ){
-      j_second_from_top = ep->mesh.NbLayer-1;
-      k_second_from_top = ep->mesh.NbElmLayer[j_second_from_top]-2;
-    }
-    else{
-      j_second_from_top = std::max(ep->mesh.NbLayer-2, 0);
-      k_second_from_top = ep->mesh.NbElmLayer[j_second_from_top]-1;
-    }
-  }
-
-
+  
   // variables to hold of each faces's diagonal vertex nodes
   bool found_diags = false;
   std::vector<int> n1, n2;
@@ -5297,33 +5313,26 @@ static inline void QuadToTriHexPri(std::vector<MVertex*> &v, GRegion *to, int j,
   }
 
 
-  // Divide by double layer extrusion method?
-  if( is_dbl && ( found_diags || j > j_second_from_top ||
-                  (j==j_second_from_top && k >= k_second_from_top) || m==1 ) ){
-    if( (j==0 && k==0) ||
-        (j==j_second_from_top && k==k_second_from_top && ( !bnd_elem || !found_diags ) && m != 1) )
-      MeshWithFaceCenteredVertex( to, source, v, n1, n2, 0, 1, pos );
-    else if( j == ep->mesh.NbLayer-1 && k == ep->mesh.NbElmLayer[j]-1 )
-      MeshWithFaceCenteredVertex( to, source, v, n1, n2, 1, 0, pos );
-    else
-      MeshWithFaceCenteredVertex( to, source, v, n1, n2, 1, 1, pos );
+  // Divide by new internal vertex extrusion method?
+  if( is_addverts && ( found_diags || m==1 ) ){
+    MeshWithInternalVertex( to, source, v, n1, n2, pos );
     return;
   }
 
 
-  // The of the possibilites are for a single layer extrusion
+  // The of the possibilites are for a 'no new vertex' extrusion
 
   // PRISM
   else if( m == 2 && !is_problem ){
     if( createTwoPtDegenHexElems( v, to, ep, j, k, dup, source, n1, n2, quadToTri_edges, problems,
-                                  problems_new, lat_tri_diags_size, bnd_elem, is_dbl, found_diags, pos ) )
+                                  problems_new, lat_tri_diags_size, bnd_elem, is_addverts, found_diags, pos ) )
       return;
   }
 
   // DEGENERATE HEXAHEDRON
   else if( m == 1 && !is_problem ){
     if( createOnePtDegenHexElems( v, to, ep, j, k, dup, source, n1, n2, quadToTri_edges, problems,
-                                  problems_new, lat_tri_diags_size, bnd_elem, is_dbl, found_diags, pos ) )
+                                  problems_new, lat_tri_diags_size, bnd_elem, is_addverts, found_diags, pos ) )
       return;
   }
 
@@ -5331,7 +5340,7 @@ static inline void QuadToTriHexPri(std::vector<MVertex*> &v, GRegion *to, int j,
   // FULL HEXAHEDRON
   else if( !is_problem ){
     if( createFullHexElems( v, to, ep, j, k, dup, source, n1, n2, quadToTri_edges, problems,
-                            problems_new, lat_tri_diags_size, bnd_elem, is_dbl, found_diags, pos ) )
+                            problems_new, lat_tri_diags_size, bnd_elem, is_addverts, found_diags, pos ) )
       return;
   }
 
@@ -5359,7 +5368,7 @@ static inline void QuadToTriHexPri(std::vector<MVertex*> &v, GRegion *to, int j,
 // in the element vectors in the region 'to'
 // *** STILL EXPERIMENTAL -- It *kind* of works to limit memory footprint of vectors.
 /*
-static void reserveQuadToTriCapacityForRegion( GRegion *to, GFace *from,  bool is_dbl, unsigned int num_layers,
+static void reserveQuadToTriCapacityForRegion( GRegion *to, GFace *from,  bool is_addverts, unsigned int num_layers,
                                               unsigned int lat_tri_diags_size, CategorizedSourceElements *c,
                                               std::map<MElement*, std::set<std::pair<unsigned int,
                                                        unsigned int> > > *problems )
@@ -5386,7 +5395,7 @@ static void reserveQuadToTriCapacityForRegion( GRegion *to, GFace *from,  bool i
   // in case !ep->Recombine is ever allowed...
   if( !ep->mesh.Recombine )
     to->tetrahedra.reserve( num_layers*(3*num_tri + 6*num_quad + 8*num_prob_tri + 12*num_prob_quad) );
-  else if( !is_dbl ){
+  else if( !is_addverts ){
     //to->tetrahedra.reserve( (6*num_quad + 3*num_tri +2*lat_tri_diags_size + 8*num_prob_tri + 12*num_prob_quad) );
     to->prisms.reserve( num_tri*num_layers );
     to->hexahedra.reserve( num_quad*(num_layers-1) );
@@ -5403,7 +5412,7 @@ static void reserveQuadToTriCapacityForRegion( GRegion *to, GFace *from,  bool i
 */
 
 // displays for the user a list of the body centered vertices created for problem elements.
-static void listBodyCenteredVertices( GRegion *to, bool is_dbl,
+static void listBodyCenteredVertices( GRegion *to, bool is_addverts,
                                       std::map<MElement *, std::set<std::pair<unsigned int,unsigned int> > > *problems,
                                       std::map<MElement *, std::set<std::pair<unsigned int,unsigned int> > > *problems_new,
                                       std::set<MVertex*, MVertexLessThanLexicographic> *pos )
@@ -5425,7 +5434,7 @@ static void listBodyCenteredVertices( GRegion *to, bool is_dbl,
     for( itmap = problems_new->begin(); itmap!= problems_new->end(); itmap++ )
       (*problems)[itmap->first].insert( itmap->second.begin(), itmap->second.end() );
 
-    if( is_dbl ){
+    if( is_addverts ){
       it_begin = problems_new->begin();
       it_end = problems_new->end();
     }
@@ -5442,14 +5451,14 @@ static void listBodyCenteredVertices( GRegion *to, bool is_dbl,
 
     if( int_verts_count ){
       if( int_verts_count == 1 )
-        Msg::Error("QuadToTri meshed %d element in region %d "
+        Msg::Warning("QuadToTri meshed %d element in region %d "
                    "with a body-centered internal vertex.",
                    int_verts_count, to->tag() );
       else
-        Msg::Error("QuadToTri meshed %d elements in region %d "
+        Msg::Warning("QuadToTri meshed %d elements in region %d "
                    "with body-centered internal vertices.",
                    int_verts_count, to->tag() );
-      Msg::Error("( Mesh *should* still conformal, but the user should be aware of these internal vertices. )" );
+      Msg::Warning("( Mesh *should* still conformal, but the user should be aware of these internal vertices. )" );
 
       unsigned int int_verts_count2 = 0;
 
@@ -5463,7 +5472,7 @@ static void listBodyCenteredVertices( GRegion *to, bool is_dbl,
             // find centroid
             std::vector<double> centroid = QtFindVertsCentroid(verts);
             int_verts_count2++;
-            Msg::Error("Internal Vertex %d at (x,y,z) = (%g, %g, %g).", int_verts_count2,
+            Msg::Warning("Internal Vertex %d at (x,y,z) = (%g, %g, %g).", int_verts_count2,
                        centroid[0], centroid[1], centroid[2] );
           }
         }
@@ -5501,14 +5510,14 @@ bool QuadToTriCreateElements(GRegion *to,  CategorizedSourceElements &cat_src_el
   for( int j = 0; j < ep->mesh.NbLayer; j++ )
     num_layers += ep->mesh.NbElmLayer[j];
 
-  // Is this a valid double layer extrusion?
-  bool is_dbl = false;
-  if( num_layers >= 2 && ( ep->mesh.QuadToTri == QUADTRI_DBL_1 || ep->mesh.QuadToTri == QUADTRI_DBL_1_RECOMB ) )
-    is_dbl = true;
+  // Is this a valid 'add internal vertex' extrusion?
+  bool is_addverts = false;
+  if( ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1 || ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1_RECOMB )
+    is_addverts = true;
 
   // Find where top divided layer starts
   /*int j_top_start = 0, k_top_start = 0;
-  if( is_dbl ){  // second from top
+  if( is_addverts ){  // second from top
     if( ep->mesh.NbElmLayer[ep->mesh.NbLayer-1] > 1 ){
       j_top_start = ep->mesh.NbLayer-1;
       k_top_start = ep->mesh.NbElmLayer[j_top_start]-2;
@@ -5541,7 +5550,7 @@ bool QuadToTriCreateElements(GRegion *to,  CategorizedSourceElements &cat_src_el
 
 
   // Make the extra vertices needed for Some QuadToTri elements
-  if( !addFaceOrBodyCenteredVertices( to, cat_src_elems, quadToTri_edges, problems, is_dbl,
+  if( !addBodyCenteredVertices( to, cat_src_elems, quadToTri_edges, problems, is_addverts,
                                       lat_tri_diags_size, pos ) ){
     Msg::Error("QuadToTriCreateElements() could not add face or body vertices for QuadToTri region %d.", to->tag() );
     return false;
@@ -5549,7 +5558,7 @@ bool QuadToTriCreateElements(GRegion *to,  CategorizedSourceElements &cat_src_el
 
   // reserve enough capacity for all possible elements, try to find combination of simplicity and memory efficiency.
   //  *** EXPERIMENTAL ***
-  //reserveQuadToTriCapacityForRegion( to, from, is_dbl, num_layers, lat_tri_diags_size, &cat_src_elems, &problems );
+  //reserveQuadToTriCapacityForRegion( to, from, is_addverts, num_layers, lat_tri_diags_size, &cat_src_elems, &problems );
 
   // create elements:
 
@@ -5584,7 +5593,7 @@ bool QuadToTriCreateElements(GRegion *to,  CategorizedSourceElements &cat_src_el
           if( getExtrudedVertices(elem, ep, j, k, pos, verts) == 6 ){
             QuadToTriPriPyrTet( verts, to, j, k, elem, quadToTri_edges,
                                problems, problems_new, lat_tri_diags_size,
-                               bnd_elem, is_dbl, 1, pos );
+                               bnd_elem, is_addverts, 1, pos );
           }
         }
       }
@@ -5631,7 +5640,7 @@ bool QuadToTriCreateElements(GRegion *to,  CategorizedSourceElements &cat_src_el
             if(getExtrudedVertices(elem, ep, j, k, pos, verts) == 8 ){
               QuadToTriHexPri(verts, to, j, k, elem, quadToTri_edges,
                               problems, problems_new, lat_tri_diags_size,
-                              bnd_elem, is_dbl, 1, pos);
+                              bnd_elem, is_addverts, 1, pos);
             }
           }
         }
@@ -5646,7 +5655,7 @@ bool QuadToTriCreateElements(GRegion *to,  CategorizedSourceElements &cat_src_el
   }
 
   // List for the user any elements with internal vertices:
-  listBodyCenteredVertices( to, is_dbl, &problems, &problems_new, &pos );
+  listBodyCenteredVertices( to, is_addverts, &problems, &problems_new, &pos );
 
 
   // Now revert any elements that have positive  volume.
@@ -5728,6 +5737,7 @@ int meshQuadToTriRegion( GRegion *gr, std::set<MVertex*, MVertexLessThanLexicogr
     std::set<std::pair<MVertex*, MVertex*> > lat_tri_diags;
     std::map<MElement*, std::set<std::pair<unsigned int,unsigned int> > > problems;
 
+    // first thing is first
     // data structure for boundary status-categorized source elements,
     // (member data containers defined in .h file)
     CategorizedSourceElements cat_src_elems( gr );
diff --git a/Mesh/QuadTriUtils.cpp b/Mesh/QuadTriUtils.cpp
index 91b9f72db1..2154a6a2e1 100644
--- a/Mesh/QuadTriUtils.cpp
+++ b/Mesh/QuadTriUtils.cpp
@@ -31,7 +31,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 ****************************************************************************************************/
-
+#include <stdlib.h>
 #include "QuadTriUtils.h"
 
 
@@ -59,6 +59,218 @@ ExtrusionElementMap::addExtrudedElemVector(MElement* source, std::vector<MElemen
 
 }*/
 
+
+// By Geuzaine, Remacle...
+static void addTriangle(MVertex* v1, MVertex* v2, MVertex* v3,
+                        GFace *to)
+{
+  MTriangle* newTri = new MTriangle(v1, v2, v3);
+  to->triangles.push_back(newTri);
+}
+
+// this determines if a face is a non-lateral face in a structured toroidal volume extrusion with at 
+// least one QuadToTri region...
+int IsInToroidalQuadToTri(GFace *face)
+{
+   if( !face )
+     return false;
+   
+   GModel *model = face->model();
+   
+   bool is_toroidal = false, is_quadtri = false, is_noaddverts = false;
+   
+   // Find the root face first...then step back through extrusions as far as can find
+   // another structured region.  If there is a single quadtri region, and this is a torus that
+   // extrudes back onto the root source surface, then return true.
+   GFace *root_face = 0;
+   root_face = findRootSourceFaceForFace(face);
+   unsigned int numRegions = 0;
+   std::vector<GRegion*> adj_extruded_reg;
+   
+   //find the two regions adjacent to the root face. If this is a structured torus, then both regions
+   // should be structured extrusions and BOTH should have the same root face
+   std::set<GRegion *, GEntityLessThan>::iterator itreg;
+   for( itreg = model->firstRegion(); itreg != model->lastRegion(); itreg++ ){
+      // save time
+      if( numRegions >= 2 )
+	break;
+
+      GRegion *region = (*itreg);
+
+      // is region in the current model's regions or is it deleted?
+      if( !FindVolume( ( region->tag() ) ) )
+	continue;
+
+      // does face belong to region and if so is it a structured extrusion?
+      std::list<GFace *> region_faces = std::list<GFace *>( region->faces() );
+      if( std::find( region_faces.begin(), region_faces.end(), root_face ) !=
+	    region_faces.end() && region->meshAttributes.extrude && 
+	  region->meshAttributes.extrude->mesh.ExtrudeMesh &&
+	  region->meshAttributes.extrude->geo.Mode == EXTRUDED_ENTITY ){
+	
+	adj_extruded_reg.push_back(region);
+	numRegions++;
+      }
+      else
+	continue;
+    }
+    // if there are two structured extruded regions adjacent to the root face,
+    // then find the one that is NOT extruded from the root directly.  Then follow this 
+    // face as far as possible back to the source.
+    
+    GRegion *last_region = 0;
+    GFace *last_reg_source = 0;
+    bool found_first = 0, found_last = 0;
+    if( numRegions == 2 ){
+      for( int ind = 0; ind <= 1; ind++ ){
+	ExtrudeParams *adj_ep = adj_extruded_reg[ind]->meshAttributes.extrude;
+	GFace *reg_source = 0;
+	
+	if( adj_ep && adj_ep->mesh.ExtrudeMesh ){
+	  reg_source = model->getFaceByTag(std::abs( adj_ep->geo.Source ) );
+          if( adj_ep->mesh.QuadToTri ){
+	    is_quadtri = true;
+	    if( adj_ep->mesh.QuadToTri == QUADTRI_NOVERTS_1 || 
+	        adj_ep->mesh.QuadToTri == QUADTRI_NOVERTS_1_RECOMB )
+	      is_noaddverts = true;
+	  }
+	}
+	if( reg_source ){
+	  if( reg_source != root_face ){
+	    last_region = adj_extruded_reg[ind];
+	    last_reg_source = reg_source;
+	    found_last = true;
+	  }
+	  else{
+	    found_first = true;
+	  }
+	}
+	else{
+	  Msg::Error("In IsInToroidalQuadToTri(), could not find source face of region %d",
+               adj_extruded_reg[ind]->tag() );
+	  return 0;
+	}
+      }
+    }
+
+    //walk back around to beginning if possible 
+    if( last_region && found_first && found_last ){
+      GFace *iter_face = last_reg_source;
+      GFace *iter_source_face = 0;
+      bool done = false;
+      unsigned int maxiter = model->getNumFaces() + 2;
+      unsigned int counter = 0;
+      while( !done && counter <= maxiter ){
+	counter++;
+	if( iter_face ){
+	  ExtrudeParams *iter_eps = iter_face->meshAttributes.extrude;
+	  if( iter_eps && iter_eps->mesh.ExtrudeMesh && 
+	      iter_eps->geo.Mode == COPIED_ENTITY ){
+	    if( iter_eps->mesh.QuadToTri )
+	      is_quadtri = true;
+	    iter_source_face = model->getFaceByTag(std::abs( iter_eps->geo.Source ));
+	    if( iter_source_face ){
+	      if( iter_source_face == root_face ){
+		is_toroidal = true;
+		done = true;
+	      }
+	      else
+		iter_face = iter_source_face;
+	    }
+	    else{
+	      Msg::Error("In IsInToroidalQuadToTri(), could not find source face of face %d",
+                          iter_face->tag() );
+	      return 0;
+	    }
+	  }
+	  else // if we found a source face not extruded as part of structured source (ie, not copied)
+	    return 0;
+	}
+	else{
+	  Msg::Error("In IsInToroidalQuadToTri(), could not find a face...");
+	  return 0;
+	}
+      }
+    }
+    
+    // now return
+    if( is_toroidal && is_quadtri ){
+      if( !is_noaddverts )
+        return 1;
+      else
+	return 2;
+    }
+    else
+      return 0;
+}
+
+// replace boundary quads in a source surface for toroidal quadtri extrusion
+void ReplaceBndQuadsInFace(GFace *face)
+{
+  ExtrudeParams *ep = face->meshAttributes.extrude;
+  bool is_struct = false;
+  if( (ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY) ||
+      face->meshAttributes.method == MESH_TRANSFINITE  )
+    is_struct = true;
+  GFace *root_face = findRootSourceFaceForFace( face );
+  if( root_face == face ){
+    std::set<MVertex*, MVertexLessThanLexicographic> pos_src_edge;
+    QuadToTriInsertFaceEdgeVertices(face, pos_src_edge);
+    std::vector<MQuadrangle*> quads2; 
+    //loop through source quads, if on boundary, delete them
+    for(unsigned int i = 0; i < face->quadrangles.size(); i++){
+      std::vector<MVertex*> verts;
+      int num_verts = face->quadrangles[i]->getNumVertices();
+      bool on_edge = false;
+      
+      for( int j = 0; j < num_verts; j++ )
+	verts.push_back(face->quadrangles[i]->getVertex(j));
+      
+      for( int j = 0; j < num_verts; j++ ){
+	if( pos_src_edge.find( verts[j] ) != pos_src_edge.end() ){
+	  on_edge = true;
+	  break;
+	}
+      }
+      if( on_edge ){
+	delete face->quadrangles[i];
+	if( is_struct ){
+	  addTriangle( verts[0],verts[2], verts[3],face);
+	  addTriangle( verts[0],verts[1], verts[2],face);
+	}
+	else{
+	  // draw other diagonals to minimize difference in average edge length with diagonal length, in quadrature
+
+	  double mag_sq_ave = 0.0;
+	  for( int p = 0; p < 4; p++ ){
+	    int d_leg = verts[p]->distance(verts[(p+1)%4]);
+	    mag_sq_ave += d_leg*d_leg;
+	  }
+	  mag_sq_ave /= 4.0;
+
+	  double d1 = verts[0]->distance(verts[2]);
+	  double d2 = verts[1]->distance(verts[3]);
+
+	  if(fabs(d1*d1-mag_sq_ave) <= fabs(d2*d2-mag_sq_ave) ){
+	    addTriangle(verts[0],verts[1],verts[2],face);
+	    addTriangle(verts[0],verts[2],verts[3],face);
+	  }
+	  else{
+	    addTriangle(verts[1],verts[2],verts[3],face);
+	    addTriangle(verts[1],verts[3],verts[0],face);
+	  }
+	}
+      }
+      else
+	quads2.push_back(face->quadrangles[i]);
+    }
+    face->quadrangles.clear();
+    face->quadrangles = quads2;
+  }
+  
+}
+
+
 // Insert all vertices on a region's source edge, including corners,
 // into pos_src_edge set.
 // Added 2010-01-09
@@ -405,7 +617,8 @@ std::pair<int, int> FindDiagonalEdgeIndices( std::vector<MVertex*> verts,
   for( int s = 0; s < s_max; s++ ){
     if( s != 0 && !wrong_guess  ){
       wrong_guess = true;
-      Msg::Error("FindDiagonalEdgeIndices() encountered unexpected surface configuration.");
+      if( !face->quadrangles.size() )
+	Msg::Error("FindDiagonalEdgeIndices() encountered unexpected surface configuration.");
     }
     int v_count0 = 0,  v_count1 = 0;
     elem_tmp = (MElement*)(face->triangles[(s+index_guess)%s_max]);
@@ -432,7 +645,8 @@ std::pair<int, int> FindDiagonalEdgeIndices( std::vector<MVertex*> verts,
     }
   }
 
-  Msg::Error("In FindDiagonalEdge(), could not "
+  if( !face->quadrangles.size() )
+    Msg::Error("In FindDiagonalEdgeIndices(), could not "
              "find a diagonal on surface %d.",
              face->tag() );
   return std::pair<int,int>(0,0);
@@ -463,7 +677,6 @@ int GetNeighborRegionsOfFace(GFace *face, std::vector<GRegion *> &neighbors)
     regions_count = 0;
 
   // pedantic search
-  std::vector<GRegion *> all_regions;
   std::set<GRegion *, GEntityLessThan>::iterator itreg;
   for( itreg = model->firstRegion(); itreg != model->lastRegion(); itreg++ ){
     std::list<GFace *> reg_faces = (*itreg)->faces();
@@ -593,7 +806,6 @@ int IsSurfaceALateralForRegion(GRegion *region, GFace *face)
   return 1; // if code executes here, passed all tests
 }
 
-
 // Function to determine if a face is a top surface for a region.  It returns 1
 // if the face is COPIED_ENTITY with source = region's source and if face belongs to region.
 // Otherwise, return 0 (NOTE: ReplaceDuplicateSurfaces() can remove a top surface
diff --git a/Mesh/QuadTriUtils.h b/Mesh/QuadTriUtils.h
index b7a139ad36..19645f9d63 100644
--- a/Mesh/QuadTriUtils.h
+++ b/Mesh/QuadTriUtils.h
@@ -35,6 +35,7 @@ GNU General Public License for more details.
 #if !defined(_QUADTRIUTILS_H_)
 #define _QUADTRIUTILS_H_
 
+#include <stdlib.h>
 #include "ExtrudeParams.h"
 #include "Geo.h"
 #include "GEntity.h"
@@ -106,6 +107,13 @@ struct CategorizedSourceElements{
   CategorizedSourceElements( GRegion *gr );
 };
 
+// this determines if a face is a non-lateral face in a structured toroidal volume extrusion with at 
+// least one QuadToTri region...
+int IsInToroidalQuadToTri(GFace *face);
+
+// replace boundary quads in a source surface for toroidal quadtri extrusion
+void ReplaceBndQuadsInFace(GFace *face);
+
 
 // This is a member function for the element map in ExtrudeParams.
 // This allows insertion of a whole vector at once.
diff --git a/Mesh/meshGFaceExtruded.cpp b/Mesh/meshGFaceExtruded.cpp
index b76f14543c..b065a0aa81 100644
--- a/Mesh/meshGFaceExtruded.cpp
+++ b/Mesh/meshGFaceExtruded.cpp
@@ -39,7 +39,23 @@ static void createQuaTri(std::vector<MVertex*> &v, GFace *to,
   else{
     // Trevor Strickler added the tri_quad_flag stuff here.
     if((ep->mesh.Recombine && tri_quad_flag != 2) || tri_quad_flag == 1){
-      addQuadrangle(v[0], v[1], v[3], v[2], to);
+      if(!constrainedEdges)
+	addQuadrangle(v[0], v[1], v[3], v[2], to);
+      else{
+	std::pair<MVertex*, MVertex*> p1(std::min(v[1], v[2]), std::max(v[1], v[2]));
+	std::pair<MVertex*, MVertex*> p2(std::min(v[0], v[3]), std::max(v[0], v[3]));
+	if(constrainedEdges->count(p1)){
+	  addTriangle(v[2], v[1], v[0], to);
+	  addTriangle(v[2], v[3], v[1], to);
+	}
+	else if(constrainedEdges->count(p2)){
+	  addTriangle(v[2], v[3], v[0], to);
+	  addTriangle(v[0], v[3], v[1], to);
+	}
+	else
+	  addQuadrangle(v[0], v[1], v[3], v[2], to);
+      }
+	
     }
     else if(!constrainedEdges){
       addTriangle(v[0], v[1], v[3], to);
@@ -88,6 +104,7 @@ static void extrudeMesh(GEdge *from, GFace *to,
     }
   }
 
+  // Trevor Strickler
   // figure out whether to recombine this surface or not in the event
   // of quadToTri region neighbors (if QuadToTri, tri_quad_flag is an
   // int flag that lets createQuadTri() override the surface's
@@ -153,7 +170,33 @@ static void copyMesh(GFace *from, GFace *to,
     pos.insert(newv);
   }
 
-  // create elements
+  // if performing QuadToTri mesh, cannot simply copy the mesh from
+  // the source.  The vertices and triangles can be copied directly
+  // though.  First, of course, do some checks and make sure this is a
+  // valid QuadToTri top surface before engaging in QuadToTri meshing.
+  int quadToTri= NO_QUADTRI;
+  bool detectQuadToTriTop = false;
+  int quadToTri_valid = IsValidQuadToTriTop(to, &quadToTri, &detectQuadToTriTop);
+  bool is_toroidal = quadToTri_valid >= 2 ? true : false;
+  bool is_noaddverts = quadToTri_valid == 3 ? true : false;
+  if( detectQuadToTriTop && !quadToTri_valid && !is_toroidal ){
+    Msg::Error("In MeshGFaceExtrudedSurface::copyMesh(), Mesh of QuadToTri top "
+               "surface %d likely has errors.", to->tag());
+  }
+  
+  // if this is toroidal No New Vertices QuadToTri, then replace the root dependency face's boundary
+  // quads with triangles for better meshing.
+  if( is_toroidal && is_noaddverts ){
+    GFace *root = findRootSourceFaceForFace( from );
+    if( root == from ){
+      ReplaceBndQuadsInFace( root );
+      Msg::Warning("To facilitate QuadToTri interface on surface %d, source surface %d was re-meshed "
+                "with all triangles on boundary.  To avoid this, use QuadTriAddVerts instead of "
+		 "QuadTriNoNewVerts.", to->tag(), root->tag());
+    }
+  }
+  
+  // create triangle elements
   std::set<MVertex*, MVertexLessThanLexicographic>::iterator itp;
   for(unsigned int i = 0; i < from->triangles.size(); i++){
     std::vector<MVertex*> verts;
@@ -177,23 +220,17 @@ static void copyMesh(GFace *from, GFace *to,
     addTriangle(verts[0], verts[1], verts[2], to);
   }
 
-  // if performing QuadToTri mesh, cannot simply copy the mesh from
-  // the source.  The vertices and triangles can be copied directly
-  // though.  First, of course, do some checks and make sure this is a
-  // valid QuadToTri top surface before engaging in QuadToTri meshing.
-  int quadToTri= NO_QUADTRI;
-  bool detectQuadToTriTop = false;
-  bool quadToTri_valid = IsValidQuadToTriTop(to, &quadToTri, &detectQuadToTriTop);
-  if(detectQuadToTriTop){
-    if(!quadToTri_valid)
-      Msg::Error("In MeshGFaceExtrudedSurface::copyMesh(), Mesh of QuadToTri top "
-                 "surface %d likely has errors.", to->tag());
-    if(!MeshQuadToTriTopSurface(from, to, pos))
+  // Add triangles for divided quads for QuadTri -- Trevor Strickler
+  // if quadtotri and not part of a toroidal extrusion, mesh the top surface accordingly
+  if( detectQuadToTriTop && !is_toroidal ){
+    if( !MeshQuadToTriTopSurface(from, to, pos))
       Msg::Error("In MeshExtrudedSurface()::copyMesh(), mesh of QuadToTri top "
-                 "surface %d failed.", to->tag() );
+		  "surface %d failed.", to->tag() );
     return;
-  }
+  } 
+
 
+  // create quadrangle elements if NOT QuadToTri and NOT toroidal
   for(unsigned int i = 0; i < from->quadrangles.size(); i++){
     std::vector<MVertex*> verts;
     for(int j = 0; j < 4; j++){
diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l
index d952de3f3f..5d3b1e72b4 100644
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@ -187,6 +187,9 @@ PolarSphere             return tPolarSphere;
 Printf                  return tPrintf;
 Plugin                  return tPlugin;
 
+Quad[tT]ri[aA]dd[vV]erts        return tQuadTriAddVerts;
+Quad[tT]ri[nN]o[nN]ew[vV]erts   return tQuadTriNoNewVerts;
+
 Quad[tT]ri[dD]bl        return tQuadTriDbl;
 Quad[tT]ri[sS]ngl       return tQuadTriSngl;
 
@@ -200,6 +203,7 @@ RefineMesh              return tRefineMesh;
 Return                  return tReturn;
 Reverse                 return tReverse;
 
+ScaleLastLayer          return tScaleLast;
 Smoother                return tSmoother;
 SetOrder                return tSetOrder;
 Sqrt                    return tSqrt;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index a3f5813eaf..83eafabd28 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -170,61 +170,64 @@
      tMeshAlgorithm = 351,
      tReverse = 352,
      tLayers = 353,
-     tHole = 354,
-     tAlias = 355,
-     tAliasWithOptions = 356,
-     tQuadTriDbl = 357,
-     tQuadTriSngl = 358,
-     tRecombLaterals = 359,
-     tTransfQuadTri = 360,
-     tText2D = 361,
-     tText3D = 362,
-     tInterpolationScheme = 363,
-     tTime = 364,
-     tCombine = 365,
-     tBSpline = 366,
-     tBezier = 367,
-     tNurbs = 368,
-     tNurbsOrder = 369,
-     tNurbsKnots = 370,
-     tColor = 371,
-     tColorTable = 372,
-     tFor = 373,
-     tIn = 374,
-     tEndFor = 375,
-     tIf = 376,
-     tEndIf = 377,
-     tExit = 378,
-     tAbort = 379,
-     tField = 380,
-     tReturn = 381,
-     tCall = 382,
-     tFunction = 383,
-     tShow = 384,
-     tHide = 385,
-     tGetValue = 386,
-     tGetEnv = 387,
-     tGetString = 388,
-     tHomology = 389,
-     tCohomology = 390,
-     tBetti = 391,
-     tSetOrder = 392,
-     tGMSH_MAJOR_VERSION = 393,
-     tGMSH_MINOR_VERSION = 394,
-     tGMSH_PATCH_VERSION = 395,
-     tAFFECTDIVIDE = 396,
-     tAFFECTTIMES = 397,
-     tAFFECTMINUS = 398,
-     tAFFECTPLUS = 399,
-     tOR = 400,
-     tAND = 401,
-     tNOTEQUAL = 402,
-     tEQUAL = 403,
-     tGREATEROREQUAL = 404,
-     tLESSOREQUAL = 405,
-     UNARYPREC = 406,
-     tMINUSMINUS = 407,
-     tPLUSPLUS = 408
+     tScaleLast = 354,
+     tHole = 355,
+     tAlias = 356,
+     tAliasWithOptions = 357,
+     tQuadTriAddVerts = 358,
+     tQuadTriNoNewVerts = 359,
+     tQuadTriSngl = 360,
+     tQuadTriDbl = 361,
+     tRecombLaterals = 362,
+     tTransfQuadTri = 363,
+     tText2D = 364,
+     tText3D = 365,
+     tInterpolationScheme = 366,
+     tTime = 367,
+     tCombine = 368,
+     tBSpline = 369,
+     tBezier = 370,
+     tNurbs = 371,
+     tNurbsOrder = 372,
+     tNurbsKnots = 373,
+     tColor = 374,
+     tColorTable = 375,
+     tFor = 376,
+     tIn = 377,
+     tEndFor = 378,
+     tIf = 379,
+     tEndIf = 380,
+     tExit = 381,
+     tAbort = 382,
+     tField = 383,
+     tReturn = 384,
+     tCall = 385,
+     tFunction = 386,
+     tShow = 387,
+     tHide = 388,
+     tGetValue = 389,
+     tGetEnv = 390,
+     tGetString = 391,
+     tHomology = 392,
+     tCohomology = 393,
+     tBetti = 394,
+     tSetOrder = 395,
+     tGMSH_MAJOR_VERSION = 396,
+     tGMSH_MINOR_VERSION = 397,
+     tGMSH_PATCH_VERSION = 398,
+     tAFFECTDIVIDE = 399,
+     tAFFECTTIMES = 400,
+     tAFFECTMINUS = 401,
+     tAFFECTPLUS = 402,
+     tOR = 403,
+     tAND = 404,
+     tNOTEQUAL = 405,
+     tEQUAL = 406,
+     tGREATEROREQUAL = 407,
+     tLESSOREQUAL = 408,
+     UNARYPREC = 409,
+     tMINUSMINUS = 410,
+     tPLUSPLUS = 411
    };
 #endif
 /* Tokens.  */
@@ -324,61 +327,64 @@
 #define tMeshAlgorithm 351
 #define tReverse 352
 #define tLayers 353
-#define tHole 354
-#define tAlias 355
-#define tAliasWithOptions 356
-#define tQuadTriDbl 357
-#define tQuadTriSngl 358
-#define tRecombLaterals 359
-#define tTransfQuadTri 360
-#define tText2D 361
-#define tText3D 362
-#define tInterpolationScheme 363
-#define tTime 364
-#define tCombine 365
-#define tBSpline 366
-#define tBezier 367
-#define tNurbs 368
-#define tNurbsOrder 369
-#define tNurbsKnots 370
-#define tColor 371
-#define tColorTable 372
-#define tFor 373
-#define tIn 374
-#define tEndFor 375
-#define tIf 376
-#define tEndIf 377
-#define tExit 378
-#define tAbort 379
-#define tField 380
-#define tReturn 381
-#define tCall 382
-#define tFunction 383
-#define tShow 384
-#define tHide 385
-#define tGetValue 386
-#define tGetEnv 387
-#define tGetString 388
-#define tHomology 389
-#define tCohomology 390
-#define tBetti 391
-#define tSetOrder 392
-#define tGMSH_MAJOR_VERSION 393
-#define tGMSH_MINOR_VERSION 394
-#define tGMSH_PATCH_VERSION 395
-#define tAFFECTDIVIDE 396
-#define tAFFECTTIMES 397
-#define tAFFECTMINUS 398
-#define tAFFECTPLUS 399
-#define tOR 400
-#define tAND 401
-#define tNOTEQUAL 402
-#define tEQUAL 403
-#define tGREATEROREQUAL 404
-#define tLESSOREQUAL 405
-#define UNARYPREC 406
-#define tMINUSMINUS 407
-#define tPLUSPLUS 408
+#define tScaleLast 354
+#define tHole 355
+#define tAlias 356
+#define tAliasWithOptions 357
+#define tQuadTriAddVerts 358
+#define tQuadTriNoNewVerts 359
+#define tQuadTriSngl 360
+#define tQuadTriDbl 361
+#define tRecombLaterals 362
+#define tTransfQuadTri 363
+#define tText2D 364
+#define tText3D 365
+#define tInterpolationScheme 366
+#define tTime 367
+#define tCombine 368
+#define tBSpline 369
+#define tBezier 370
+#define tNurbs 371
+#define tNurbsOrder 372
+#define tNurbsKnots 373
+#define tColor 374
+#define tColorTable 375
+#define tFor 376
+#define tIn 377
+#define tEndFor 378
+#define tIf 379
+#define tEndIf 380
+#define tExit 381
+#define tAbort 382
+#define tField 383
+#define tReturn 384
+#define tCall 385
+#define tFunction 386
+#define tShow 387
+#define tHide 388
+#define tGetValue 389
+#define tGetEnv 390
+#define tGetString 391
+#define tHomology 392
+#define tCohomology 393
+#define tBetti 394
+#define tSetOrder 395
+#define tGMSH_MAJOR_VERSION 396
+#define tGMSH_MINOR_VERSION 397
+#define tGMSH_PATCH_VERSION 398
+#define tAFFECTDIVIDE 399
+#define tAFFECTTIMES 400
+#define tAFFECTMINUS 401
+#define tAFFECTPLUS 402
+#define tOR 403
+#define tAND 404
+#define tNOTEQUAL 405
+#define tEQUAL 406
+#define tGREATEROREQUAL 407
+#define tLESSOREQUAL 408
+#define UNARYPREC 409
+#define tMINUSMINUS 410
+#define tPLUSPLUS 411
 
 
 
@@ -508,7 +514,7 @@ typedef union YYSTYPE
   List_T *l;
 }
 /* Line 193 of yacc.c.  */
-#line 512 "Gmsh.tab.cpp"
+#line 518 "Gmsh.tab.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -521,7 +527,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 525 "Gmsh.tab.cpp"
+#line 531 "Gmsh.tab.cpp"
 
 #ifdef short
 # undef short
@@ -736,20 +742,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   8505
+#define YYLAST   8716
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  174
+#define YYNTOKENS  177
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  91
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  462
+#define YYNRULES  467
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1612
+#define YYNSTATES  1622
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   408
+#define YYMAXUTOK   411
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -760,16 +766,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   159,     2,   169,     2,   158,     2,     2,
-     164,   165,   156,   154,   170,   155,   168,   157,     2,     2,
+       2,     2,     2,   162,     2,   172,     2,   161,     2,     2,
+     167,   168,   159,   157,   173,   158,   171,   160,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     150,     2,   151,   145,     2,     2,     2,     2,     2,     2,
+     153,     2,   154,   148,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   166,     2,   167,   163,     2,     2,     2,     2,     2,
+       2,   169,     2,   170,   166,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   171,     2,   172,   173,     2,     2,     2,
+       2,     2,     2,   174,     2,   175,   176,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -797,7 +803,8 @@ static const yytype_uint8 yytranslate[] =
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     146,   147,   148,   149,   152,   153,   160,   161,   162
+     145,   146,   147,   149,   150,   151,   152,   155,   156,   163,
+     164,   165
 };
 
 #if YYDEBUG
@@ -831,295 +838,296 @@ static const yytype_uint16 yyprhs[] =
     1351,  1352,  1359,  1368,  1377,  1386,  1399,  1412,  1425,  1440,
     1455,  1470,  1471,  1484,  1485,  1498,  1499,  1512,  1513,  1530,
     1531,  1548,  1549,  1566,  1567,  1586,  1587,  1606,  1607,  1626,
-    1628,  1631,  1637,  1645,  1655,  1658,  1661,  1665,  1668,  1672,
-    1682,  1689,  1690,  1694,  1695,  1697,  1698,  1701,  1702,  1705,
-    1713,  1720,  1729,  1735,  1739,  1747,  1753,  1758,  1765,  1772,
-    1785,  1796,  1807,  1818,  1829,  1840,  1845,  1850,  1853,  1857,
-    1864,  1866,  1868,  1870,  1873,  1879,  1887,  1898,  1900,  1904,
-    1907,  1910,  1913,  1917,  1921,  1925,  1929,  1933,  1937,  1941,
-    1945,  1949,  1953,  1957,  1961,  1965,  1969,  1975,  1980,  1985,
-    1990,  1995,  2000,  2005,  2010,  2015,  2020,  2025,  2032,  2037,
-    2042,  2047,  2052,  2057,  2062,  2069,  2076,  2083,  2088,  2093,
-    2098,  2103,  2108,  2113,  2118,  2123,  2128,  2133,  2138,  2145,
-    2150,  2155,  2160,  2165,  2170,  2175,  2182,  2189,  2196,  2201,
-    2203,  2205,  2207,  2209,  2211,  2213,  2215,  2217,  2219,  2221,
-    2227,  2232,  2237,  2240,  2246,  2250,  2257,  2262,  2270,  2277,
-    2284,  2291,  2296,  2298,  2301,  2304,  2308,  2312,  2324,  2334,
-    2342,  2350,  2352,  2356,  2358,  2360,  2363,  2367,  2372,  2378,
-    2380,  2382,  2385,  2389,  2393,  2399,  2404,  2407,  2410,  2413,
-    2416,  2422,  2428,  2434,  2440,  2442,  2444,  2448,  2452,  2457,
-    2464,  2471,  2473,  2475,  2479,  2483,  2493,  2501,  2503,  2509,
-    2513,  2520,  2522,  2526,  2528,  2530,  2534,  2541,  2543,  2545,
-    2550,  2557,  2564,  2569,  2574,  2583,  2588,  2593,  2598,  2603,
-    2610,  2617,  2619
+    1628,  1631,  1637,  1645,  1655,  1658,  1661,  1664,  1668,  1671,
+    1675,  1678,  1682,  1685,  1689,  1699,  1706,  1707,  1711,  1712,
+    1714,  1715,  1718,  1719,  1722,  1730,  1737,  1746,  1752,  1756,
+    1764,  1770,  1775,  1782,  1789,  1802,  1813,  1824,  1835,  1846,
+    1857,  1862,  1867,  1870,  1874,  1881,  1883,  1885,  1887,  1890,
+    1896,  1904,  1915,  1917,  1921,  1924,  1927,  1930,  1934,  1938,
+    1942,  1946,  1950,  1954,  1958,  1962,  1966,  1970,  1974,  1978,
+    1982,  1986,  1992,  1997,  2002,  2007,  2012,  2017,  2022,  2027,
+    2032,  2037,  2042,  2049,  2054,  2059,  2064,  2069,  2074,  2079,
+    2086,  2093,  2100,  2105,  2110,  2115,  2120,  2125,  2130,  2135,
+    2140,  2145,  2150,  2155,  2162,  2167,  2172,  2177,  2182,  2187,
+    2192,  2199,  2206,  2213,  2218,  2220,  2222,  2224,  2226,  2228,
+    2230,  2232,  2234,  2236,  2238,  2244,  2249,  2254,  2257,  2263,
+    2267,  2274,  2279,  2287,  2294,  2301,  2308,  2313,  2315,  2318,
+    2321,  2325,  2329,  2341,  2351,  2359,  2367,  2369,  2373,  2375,
+    2377,  2380,  2384,  2389,  2395,  2397,  2399,  2402,  2406,  2410,
+    2416,  2421,  2424,  2427,  2430,  2433,  2439,  2445,  2451,  2457,
+    2459,  2461,  2465,  2469,  2474,  2481,  2488,  2490,  2492,  2496,
+    2500,  2510,  2518,  2520,  2526,  2530,  2537,  2539,  2543,  2545,
+    2547,  2551,  2558,  2560,  2562,  2567,  2574,  2581,  2586,  2591,
+    2600,  2605,  2610,  2615,  2620,  2627,  2634,  2636
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     175,     0,    -1,   176,    -1,     1,     6,    -1,    -1,   176,
-     177,    -1,   180,    -1,   179,    -1,   198,    -1,   212,    -1,
-     217,    -1,   221,    -1,   222,    -1,   223,    -1,   226,    -1,
-     246,    -1,   247,    -1,   225,    -1,   224,    -1,   220,    -1,
-     249,    -1,   151,    -1,   151,   151,    -1,    36,   164,   262,
-     165,     6,    -1,    37,   164,   262,   165,     6,    -1,    36,
-     164,   262,   165,   178,   262,     6,    -1,    36,   164,   262,
-     170,   258,   165,     6,    -1,    37,   164,   262,   170,   258,
-     165,     6,    -1,    36,   164,   262,   170,   258,   165,   178,
-     262,     6,    -1,     4,   262,   171,   181,   172,     6,    -1,
-     100,     4,   166,   250,   167,     6,    -1,   101,     4,   166,
-     250,   167,     6,    -1,    -1,   181,   184,    -1,   181,   188,
-      -1,   181,   191,    -1,   181,   193,    -1,   181,   194,    -1,
-     250,    -1,   182,   170,   250,    -1,   250,    -1,   183,   170,
-     250,    -1,    -1,    -1,     4,   185,   164,   182,   165,   186,
-     171,   183,   172,     6,    -1,   262,    -1,   187,   170,   262,
-      -1,    -1,   106,   164,   250,   170,   250,   170,   250,   165,
-     189,   171,   187,   172,     6,    -1,   262,    -1,   190,   170,
-     262,    -1,    -1,   107,   164,   250,   170,   250,   170,   250,
-     170,   250,   165,   192,   171,   190,   172,     6,    -1,   108,
-     171,   254,   172,   171,   254,   172,     6,    -1,   108,   171,
-     254,   172,   171,   254,   172,   171,   254,   172,   171,   254,
-     172,     6,    -1,    -1,   109,   195,   171,   183,   172,     6,
-      -1,     7,    -1,   144,    -1,   143,    -1,   142,    -1,   141,
-      -1,   162,    -1,   161,    -1,    56,   166,   200,   167,     6,
-      -1,    57,   166,   203,   167,     6,    -1,     4,   196,   255,
-       6,    -1,     4,   166,   167,   196,   255,     6,    -1,     4,
-     166,   250,   167,   196,   250,     6,    -1,     4,   164,   250,
-     165,   196,   250,     6,    -1,     4,   166,   171,   258,   172,
-     167,   196,   255,     6,    -1,     4,   164,   171,   258,   172,
-     165,   196,   255,     6,    -1,     4,   197,     6,    -1,     4,
-     166,   250,   167,   197,     6,    -1,     4,     7,   263,     6,
-      -1,     4,   168,     4,     7,   263,     6,    -1,     4,   166,
-     250,   167,   168,     4,     7,   263,     6,    -1,     4,   168,
-       4,   196,   250,     6,    -1,     4,   166,   250,   167,   168,
-       4,   196,   250,     6,    -1,     4,   168,     4,   197,     6,
-      -1,     4,   166,   250,   167,   168,     4,   197,     6,    -1,
-       4,   168,   116,   168,     4,     7,   259,     6,    -1,     4,
-     166,   250,   167,   168,   116,   168,     4,     7,   259,     6,
-      -1,     4,   168,   117,     7,   260,     6,    -1,     4,   166,
-     250,   167,   168,   117,     7,   260,     6,    -1,     4,   125,
-       7,   250,     6,    -1,   125,   166,   250,   167,     7,     4,
-       6,    -1,   125,   166,   250,   167,   168,     4,     7,   250,
-       6,    -1,   125,   166,   250,   167,   168,     4,     7,   263,
-       6,    -1,   125,   166,   250,   167,   168,     4,     7,   171,
-     258,   172,     6,    -1,   125,   166,   250,   167,   168,     4,
-       6,    -1,    81,   164,     4,   165,   168,     4,     7,   250,
-       6,    -1,    81,   164,     4,   165,   168,     4,     7,   263,
-       6,    -1,    -1,   170,    -1,    -1,   200,   199,     4,    -1,
-     200,   199,     4,     7,   250,    -1,    -1,   200,   199,     4,
-       7,   171,   250,   201,   205,   172,    -1,   200,   199,     4,
-       7,   263,    -1,    -1,   200,   199,     4,     7,   171,   263,
-     202,   207,   172,    -1,    -1,   203,   199,   262,    -1,   250,
-       7,   263,    -1,   204,   170,   250,     7,   263,    -1,    -1,
-     205,   206,    -1,   170,     4,   255,    -1,   170,     4,   171,
-     204,   172,    -1,   170,     4,   263,    -1,    -1,   207,   208,
-      -1,   170,     4,   250,    -1,   170,     4,   263,    -1,   170,
-       4,   171,   264,   172,    -1,   250,    -1,   263,    -1,    -1,
-     119,    62,   171,   250,   172,    -1,    -1,    73,   252,    -1,
-      58,   164,   250,   165,     7,   252,     6,    -1,    -1,    77,
-      58,   213,   164,   209,   165,     7,   255,     6,    -1,    67,
-      68,   255,     7,   250,     6,    -1,    61,   164,   250,   165,
-       7,   255,     6,    -1,    82,    61,   255,     6,    -1,    65,
-     164,   250,   165,     7,   255,     6,    -1,    59,   164,   250,
-     165,     7,   255,   211,     6,    -1,    60,   164,   250,   165,
-       7,   255,   211,     6,    -1,   111,   164,   250,   165,     7,
-     255,     6,    -1,   112,   164,   250,   165,     7,   255,     6,
-      -1,   113,   164,   250,   165,     7,   255,   115,   255,   114,
-     250,     6,    -1,    61,     4,   164,   250,   165,     7,   255,
-       6,    -1,    78,    61,   164,   250,   165,     7,   255,     6,
-      -1,    -1,    77,    61,   214,   164,   209,   165,     7,   255,
-       6,    -1,    73,    64,   164,   250,   165,     7,   255,     6,
-      -1,    74,    64,   164,   250,   165,     7,   255,   210,     6,
-      -1,    12,    13,     6,    -1,    13,    64,   250,     6,    -1,
-      69,    64,   164,   250,   165,     7,     5,     5,     5,     6,
-      -1,    62,   164,   250,   165,     7,   255,     6,    -1,    63,
-     164,   250,   165,     7,   255,     6,    -1,    64,     4,   164,
-     250,   165,     7,   255,     6,    -1,    78,    64,   164,   250,
-     165,     7,   255,     6,    -1,    78,    64,   164,   250,   165,
-       7,   255,     4,   171,   254,   172,     6,    -1,    -1,    77,
-      64,   215,   164,   209,   165,     7,   255,     6,    -1,    76,
-      66,   164,   250,   165,     7,   255,     6,    -1,    66,   164,
-     250,   165,     7,   255,     6,    -1,    78,    66,   164,   250,
-     165,     7,   255,     6,    -1,    -1,    77,    66,   216,   164,
-     209,   165,     7,   255,     6,    -1,    85,   252,   171,   218,
-     172,    -1,    84,   171,   252,   170,   252,   170,   250,   172,
-     171,   218,   172,    -1,    86,   252,   171,   218,   172,    -1,
-      87,   171,   252,   170,   250,   172,   171,   218,   172,    -1,
-      87,   171,   252,   170,   252,   172,   171,   218,   172,    -1,
-       4,   171,   218,   172,    -1,    95,    61,   171,   258,   172,
-      64,   171,   250,   172,    -1,    92,    61,   164,   250,   165,
-     171,   258,   172,     6,    -1,   219,    -1,   217,    -1,    -1,
-     219,   212,    -1,   219,    58,   171,   258,   172,     6,    -1,
-     219,    61,   171,   258,   172,     6,    -1,   219,    64,   171,
-     258,   172,     6,    -1,   219,    66,   171,   258,   172,     6,
-      -1,    89,    73,   164,   250,   165,     7,   255,     6,    -1,
-      89,    58,   164,   250,   165,     7,   171,   254,   172,     6,
-      -1,    89,    73,   164,   250,   165,     7,   171,   252,   170,
-     252,   170,   258,   172,     6,    -1,    89,    73,   164,   250,
-     165,     7,   171,   252,   170,   252,   170,   252,   170,   258,
-     172,     6,    -1,    89,    62,   164,   250,   165,     7,   171,
-     252,   170,   258,   172,     6,    -1,    89,     4,   164,   250,
-     165,     7,   255,     6,    -1,    89,     4,   164,   250,   165,
-       7,     5,     6,    -1,    89,     4,   171,   250,   172,     6,
-      -1,    89,     4,   164,   250,   165,     7,   171,   252,   170,
-     252,   170,   258,   172,     6,    -1,    93,   171,   219,   172,
-      -1,    93,   125,   166,   250,   167,     6,    -1,    93,     4,
-     166,   250,   167,     6,    -1,    93,     4,     6,    -1,    93,
-       4,     4,     6,    -1,   116,   259,   171,   219,   172,    -1,
-      83,   116,   259,   171,   219,   172,    -1,   129,     5,     6,
-      -1,   130,     5,     6,    -1,   129,   171,   219,   172,    -1,
-      83,   129,   171,   219,   172,    -1,   130,   171,   219,   172,
-      -1,    83,   130,   171,   219,   172,    -1,     4,   263,     6,
-      -1,     4,     4,   166,   250,   167,   262,     6,    -1,     4,
-       4,     4,   166,   250,   167,     6,    -1,     4,   250,     6,
-      -1,    81,   164,     4,   165,   168,     4,     6,    -1,   110,
-       4,     6,    -1,   123,     6,    -1,   124,     6,    -1,    52,
-       6,    -1,    47,     6,    -1,    47,   171,   250,   170,   250,
-     170,   250,   170,   250,   170,   250,   170,   250,   172,     6,
+     178,     0,    -1,   179,    -1,     1,     6,    -1,    -1,   179,
+     180,    -1,   183,    -1,   182,    -1,   201,    -1,   215,    -1,
+     220,    -1,   224,    -1,   225,    -1,   226,    -1,   229,    -1,
+     249,    -1,   250,    -1,   228,    -1,   227,    -1,   223,    -1,
+     252,    -1,   154,    -1,   154,   154,    -1,    36,   167,   265,
+     168,     6,    -1,    37,   167,   265,   168,     6,    -1,    36,
+     167,   265,   168,   181,   265,     6,    -1,    36,   167,   265,
+     173,   261,   168,     6,    -1,    37,   167,   265,   173,   261,
+     168,     6,    -1,    36,   167,   265,   173,   261,   168,   181,
+     265,     6,    -1,     4,   265,   174,   184,   175,     6,    -1,
+     101,     4,   169,   253,   170,     6,    -1,   102,     4,   169,
+     253,   170,     6,    -1,    -1,   184,   187,    -1,   184,   191,
+      -1,   184,   194,    -1,   184,   196,    -1,   184,   197,    -1,
+     253,    -1,   185,   173,   253,    -1,   253,    -1,   186,   173,
+     253,    -1,    -1,    -1,     4,   188,   167,   185,   168,   189,
+     174,   186,   175,     6,    -1,   265,    -1,   190,   173,   265,
+      -1,    -1,   109,   167,   253,   173,   253,   173,   253,   168,
+     192,   174,   190,   175,     6,    -1,   265,    -1,   193,   173,
+     265,    -1,    -1,   110,   167,   253,   173,   253,   173,   253,
+     173,   253,   168,   195,   174,   193,   175,     6,    -1,   111,
+     174,   257,   175,   174,   257,   175,     6,    -1,   111,   174,
+     257,   175,   174,   257,   175,   174,   257,   175,   174,   257,
+     175,     6,    -1,    -1,   112,   198,   174,   186,   175,     6,
+      -1,     7,    -1,   147,    -1,   146,    -1,   145,    -1,   144,
+      -1,   165,    -1,   164,    -1,    56,   169,   203,   170,     6,
+      -1,    57,   169,   206,   170,     6,    -1,     4,   199,   258,
+       6,    -1,     4,   169,   170,   199,   258,     6,    -1,     4,
+     169,   253,   170,   199,   253,     6,    -1,     4,   167,   253,
+     168,   199,   253,     6,    -1,     4,   169,   174,   261,   175,
+     170,   199,   258,     6,    -1,     4,   167,   174,   261,   175,
+     168,   199,   258,     6,    -1,     4,   200,     6,    -1,     4,
+     169,   253,   170,   200,     6,    -1,     4,     7,   266,     6,
+      -1,     4,   171,     4,     7,   266,     6,    -1,     4,   169,
+     253,   170,   171,     4,     7,   266,     6,    -1,     4,   171,
+       4,   199,   253,     6,    -1,     4,   169,   253,   170,   171,
+       4,   199,   253,     6,    -1,     4,   171,     4,   200,     6,
+      -1,     4,   169,   253,   170,   171,     4,   200,     6,    -1,
+       4,   171,   119,   171,     4,     7,   262,     6,    -1,     4,
+     169,   253,   170,   171,   119,   171,     4,     7,   262,     6,
+      -1,     4,   171,   120,     7,   263,     6,    -1,     4,   169,
+     253,   170,   171,   120,     7,   263,     6,    -1,     4,   128,
+       7,   253,     6,    -1,   128,   169,   253,   170,     7,     4,
+       6,    -1,   128,   169,   253,   170,   171,     4,     7,   253,
+       6,    -1,   128,   169,   253,   170,   171,     4,     7,   266,
+       6,    -1,   128,   169,   253,   170,   171,     4,     7,   174,
+     261,   175,     6,    -1,   128,   169,   253,   170,   171,     4,
+       6,    -1,    81,   167,     4,   168,   171,     4,     7,   253,
+       6,    -1,    81,   167,     4,   168,   171,     4,     7,   266,
+       6,    -1,    -1,   173,    -1,    -1,   203,   202,     4,    -1,
+     203,   202,     4,     7,   253,    -1,    -1,   203,   202,     4,
+       7,   174,   253,   204,   208,   175,    -1,   203,   202,     4,
+       7,   266,    -1,    -1,   203,   202,     4,     7,   174,   266,
+     205,   210,   175,    -1,    -1,   206,   202,   265,    -1,   253,
+       7,   266,    -1,   207,   173,   253,     7,   266,    -1,    -1,
+     208,   209,    -1,   173,     4,   258,    -1,   173,     4,   174,
+     207,   175,    -1,   173,     4,   266,    -1,    -1,   210,   211,
+      -1,   173,     4,   253,    -1,   173,     4,   266,    -1,   173,
+       4,   174,   267,   175,    -1,   253,    -1,   266,    -1,    -1,
+     122,    62,   174,   253,   175,    -1,    -1,    73,   255,    -1,
+      58,   167,   253,   168,     7,   255,     6,    -1,    -1,    77,
+      58,   216,   167,   212,   168,     7,   258,     6,    -1,    67,
+      68,   258,     7,   253,     6,    -1,    61,   167,   253,   168,
+       7,   258,     6,    -1,    82,    61,   258,     6,    -1,    65,
+     167,   253,   168,     7,   258,     6,    -1,    59,   167,   253,
+     168,     7,   258,   214,     6,    -1,    60,   167,   253,   168,
+       7,   258,   214,     6,    -1,   114,   167,   253,   168,     7,
+     258,     6,    -1,   115,   167,   253,   168,     7,   258,     6,
+      -1,   116,   167,   253,   168,     7,   258,   118,   258,   117,
+     253,     6,    -1,    61,     4,   167,   253,   168,     7,   258,
+       6,    -1,    78,    61,   167,   253,   168,     7,   258,     6,
+      -1,    -1,    77,    61,   217,   167,   212,   168,     7,   258,
+       6,    -1,    73,    64,   167,   253,   168,     7,   258,     6,
+      -1,    74,    64,   167,   253,   168,     7,   258,   213,     6,
+      -1,    12,    13,     6,    -1,    13,    64,   253,     6,    -1,
+      69,    64,   167,   253,   168,     7,     5,     5,     5,     6,
+      -1,    62,   167,   253,   168,     7,   258,     6,    -1,    63,
+     167,   253,   168,     7,   258,     6,    -1,    64,     4,   167,
+     253,   168,     7,   258,     6,    -1,    78,    64,   167,   253,
+     168,     7,   258,     6,    -1,    78,    64,   167,   253,   168,
+       7,   258,     4,   174,   257,   175,     6,    -1,    -1,    77,
+      64,   218,   167,   212,   168,     7,   258,     6,    -1,    76,
+      66,   167,   253,   168,     7,   258,     6,    -1,    66,   167,
+     253,   168,     7,   258,     6,    -1,    78,    66,   167,   253,
+     168,     7,   258,     6,    -1,    -1,    77,    66,   219,   167,
+     212,   168,     7,   258,     6,    -1,    85,   255,   174,   221,
+     175,    -1,    84,   174,   255,   173,   255,   173,   253,   175,
+     174,   221,   175,    -1,    86,   255,   174,   221,   175,    -1,
+      87,   174,   255,   173,   253,   175,   174,   221,   175,    -1,
+      87,   174,   255,   173,   255,   175,   174,   221,   175,    -1,
+       4,   174,   221,   175,    -1,    95,    61,   174,   261,   175,
+      64,   174,   253,   175,    -1,    92,    61,   167,   253,   168,
+     174,   261,   175,     6,    -1,   222,    -1,   220,    -1,    -1,
+     222,   215,    -1,   222,    58,   174,   261,   175,     6,    -1,
+     222,    61,   174,   261,   175,     6,    -1,   222,    64,   174,
+     261,   175,     6,    -1,   222,    66,   174,   261,   175,     6,
+      -1,    89,    73,   167,   253,   168,     7,   258,     6,    -1,
+      89,    58,   167,   253,   168,     7,   174,   257,   175,     6,
+      -1,    89,    73,   167,   253,   168,     7,   174,   255,   173,
+     255,   173,   261,   175,     6,    -1,    89,    73,   167,   253,
+     168,     7,   174,   255,   173,   255,   173,   255,   173,   261,
+     175,     6,    -1,    89,    62,   167,   253,   168,     7,   174,
+     255,   173,   261,   175,     6,    -1,    89,     4,   167,   253,
+     168,     7,   258,     6,    -1,    89,     4,   167,   253,   168,
+       7,     5,     6,    -1,    89,     4,   174,   253,   175,     6,
+      -1,    89,     4,   167,   253,   168,     7,   174,   255,   173,
+     255,   173,   261,   175,     6,    -1,    93,   174,   222,   175,
+      -1,    93,   128,   169,   253,   170,     6,    -1,    93,     4,
+     169,   253,   170,     6,    -1,    93,     4,     6,    -1,    93,
+       4,     4,     6,    -1,   119,   262,   174,   222,   175,    -1,
+      83,   119,   262,   174,   222,   175,    -1,   132,     5,     6,
+      -1,   133,     5,     6,    -1,   132,   174,   222,   175,    -1,
+      83,   132,   174,   222,   175,    -1,   133,   174,   222,   175,
+      -1,    83,   133,   174,   222,   175,    -1,     4,   266,     6,
+      -1,     4,     4,   169,   253,   170,   265,     6,    -1,     4,
+       4,     4,   169,   253,   170,     6,    -1,     4,   253,     6,
+      -1,    81,   167,     4,   168,   171,     4,     6,    -1,   113,
+       4,     6,    -1,   126,     6,    -1,   127,     6,    -1,    52,
+       6,    -1,    47,     6,    -1,    47,   174,   253,   173,   253,
+     173,   253,   173,   253,   173,   253,   173,   253,   175,     6,
       -1,    48,     6,    -1,    53,     6,    -1,    54,     6,    -1,
-      71,     6,    -1,    72,   171,   258,   172,   171,   258,   172,
-     171,   254,   172,   171,   250,   170,   250,   172,     6,    -1,
-     137,   250,     6,    -1,   118,   164,   250,     8,   250,   165,
-      -1,   118,   164,   250,     8,   250,     8,   250,   165,    -1,
-     118,     4,   119,   171,   250,     8,   250,   172,    -1,   118,
-       4,   119,   171,   250,     8,   250,     8,   250,   172,    -1,
-     120,    -1,   128,     4,    -1,   126,    -1,   127,     4,     6,
-      -1,   121,   164,   250,   165,    -1,   122,    -1,    88,   252,
-     171,   219,   172,    -1,    88,   171,   252,   170,   252,   170,
-     250,   172,   171,   219,   172,    -1,    88,   171,   252,   170,
-     252,   170,   252,   170,   250,   172,   171,   219,   172,    -1,
-      -1,    88,   252,   171,   219,   227,   240,   172,    -1,    -1,
-      88,   171,   252,   170,   252,   170,   250,   172,   171,   219,
-     228,   240,   172,    -1,    -1,    88,   171,   252,   170,   252,
-     170,   252,   170,   250,   172,   171,   219,   229,   240,   172,
-      -1,    -1,    88,   171,   219,   230,   240,   172,    -1,    88,
-      58,   171,   250,   170,   252,   172,     6,    -1,    88,    61,
-     171,   250,   170,   252,   172,     6,    -1,    88,    64,   171,
-     250,   170,   252,   172,     6,    -1,    88,    58,   171,   250,
-     170,   252,   170,   252,   170,   250,   172,     6,    -1,    88,
-      61,   171,   250,   170,   252,   170,   252,   170,   250,   172,
-       6,    -1,    88,    64,   171,   250,   170,   252,   170,   252,
-     170,   250,   172,     6,    -1,    88,    58,   171,   250,   170,
-     252,   170,   252,   170,   252,   170,   250,   172,     6,    -1,
-      88,    61,   171,   250,   170,   252,   170,   252,   170,   252,
-     170,   250,   172,     6,    -1,    88,    64,   171,   250,   170,
-     252,   170,   252,   170,   252,   170,   250,   172,     6,    -1,
-      -1,    88,    58,   171,   250,   170,   252,   172,   231,   171,
-     240,   172,     6,    -1,    -1,    88,    61,   171,   250,   170,
-     252,   172,   232,   171,   240,   172,     6,    -1,    -1,    88,
-      64,   171,   250,   170,   252,   172,   233,   171,   240,   172,
-       6,    -1,    -1,    88,    58,   171,   250,   170,   252,   170,
-     252,   170,   250,   172,   234,   171,   240,   172,     6,    -1,
-      -1,    88,    61,   171,   250,   170,   252,   170,   252,   170,
-     250,   172,   235,   171,   240,   172,     6,    -1,    -1,    88,
-      64,   171,   250,   170,   252,   170,   252,   170,   250,   172,
-     236,   171,   240,   172,     6,    -1,    -1,    88,    58,   171,
-     250,   170,   252,   170,   252,   170,   252,   170,   250,   172,
-     237,   171,   240,   172,     6,    -1,    -1,    88,    61,   171,
-     250,   170,   252,   170,   252,   170,   252,   170,   250,   172,
-     238,   171,   240,   172,     6,    -1,    -1,    88,    64,   171,
-     250,   170,   252,   170,   252,   170,   252,   170,   250,   172,
-     239,   171,   240,   172,     6,    -1,   241,    -1,   240,   241,
-      -1,    98,   171,   250,   172,     6,    -1,    98,   171,   255,
-     170,   255,   172,     6,    -1,    98,   171,   255,   170,   255,
-     170,   255,   172,     6,    -1,    90,     6,    -1,   102,     6,
-      -1,   102,   104,     6,    -1,   103,     6,    -1,   103,   104,
-       6,    -1,    99,   164,   250,   165,     7,   255,    80,   250,
-       6,    -1,    80,     4,   166,   250,   167,     6,    -1,    -1,
-      80,     4,   250,    -1,    -1,     4,    -1,    -1,     7,   255,
-      -1,    -1,     7,   250,    -1,    75,    61,   256,     7,   250,
-     242,     6,    -1,    75,    64,   256,   244,   243,     6,    -1,
-      70,    64,   171,   250,   172,     7,   255,     6,    -1,    75,
-      66,   256,   244,     6,    -1,   105,   256,     6,    -1,    96,
-      64,   171,   258,   172,   250,     6,    -1,    90,    64,   256,
-     245,     6,    -1,    90,    66,   256,     6,    -1,    91,    64,
-     255,     7,   250,     6,    -1,    79,    61,   255,     7,   255,
-       6,    -1,    79,    64,   250,   171,   258,   172,     7,   250,
-     171,   258,   172,     6,    -1,    58,   171,   258,   172,   119,
-      64,   171,   250,   172,     6,    -1,    61,   171,   258,   172,
-     119,    64,   171,   250,   172,     6,    -1,    58,   171,   258,
-     172,   119,    66,   171,   250,   172,     6,    -1,    61,   171,
-     258,   172,   119,    66,   171,   250,   172,     6,    -1,    64,
-     171,   258,   172,   119,    66,   171,   250,   172,     6,    -1,
-      97,    64,   256,     6,    -1,    97,    61,   256,     6,    -1,
-      94,     6,    -1,    94,     4,     6,    -1,    94,    58,   171,
-     258,   172,     6,    -1,   134,    -1,   135,    -1,   136,    -1,
-     248,     6,    -1,   248,   171,   255,   172,     6,    -1,   248,
-     171,   255,   170,   255,   172,     6,    -1,   248,   164,   255,
-     165,   171,   255,   170,   255,   172,     6,    -1,   251,    -1,
-     164,   250,   165,    -1,   155,   250,    -1,   154,   250,    -1,
-     159,   250,    -1,   250,   155,   250,    -1,   250,   154,   250,
-      -1,   250,   156,   250,    -1,   250,   157,   250,    -1,   250,
-     158,   250,    -1,   250,   163,   250,    -1,   250,   150,   250,
-      -1,   250,   151,   250,    -1,   250,   153,   250,    -1,   250,
-     152,   250,    -1,   250,   149,   250,    -1,   250,   148,   250,
-      -1,   250,   147,   250,    -1,   250,   146,   250,    -1,   250,
-     145,   250,     8,   250,    -1,    14,   164,   250,   165,    -1,
-      15,   164,   250,   165,    -1,    16,   164,   250,   165,    -1,
-      17,   164,   250,   165,    -1,    18,   164,   250,   165,    -1,
-      19,   164,   250,   165,    -1,    20,   164,   250,   165,    -1,
-      21,   164,   250,   165,    -1,    22,   164,   250,   165,    -1,
-      24,   164,   250,   165,    -1,    25,   164,   250,   170,   250,
-     165,    -1,    26,   164,   250,   165,    -1,    27,   164,   250,
-     165,    -1,    28,   164,   250,   165,    -1,    29,   164,   250,
-     165,    -1,    30,   164,   250,   165,    -1,    31,   164,   250,
-     165,    -1,    32,   164,   250,   170,   250,   165,    -1,    33,
-     164,   250,   170,   250,   165,    -1,    34,   164,   250,   170,
-     250,   165,    -1,    23,   164,   250,   165,    -1,    14,   166,
-     250,   167,    -1,    15,   166,   250,   167,    -1,    16,   166,
-     250,   167,    -1,    17,   166,   250,   167,    -1,    18,   166,
-     250,   167,    -1,    19,   166,   250,   167,    -1,    20,   166,
-     250,   167,    -1,    21,   166,   250,   167,    -1,    22,   166,
-     250,   167,    -1,    24,   166,   250,   167,    -1,    25,   166,
-     250,   170,   250,   167,    -1,    26,   166,   250,   167,    -1,
-      27,   166,   250,   167,    -1,    28,   166,   250,   167,    -1,
-      29,   166,   250,   167,    -1,    30,   166,   250,   167,    -1,
-      31,   166,   250,   167,    -1,    32,   166,   250,   170,   250,
-     167,    -1,    33,   166,   250,   170,   250,   167,    -1,    34,
-     166,   250,   170,   250,   167,    -1,    23,   166,   250,   167,
-      -1,     3,    -1,     9,    -1,    10,    -1,    11,    -1,   138,
-      -1,   139,    -1,   140,    -1,    50,    -1,    51,    -1,     4,
-      -1,     4,   173,   171,   250,   172,    -1,     4,   166,   250,
-     167,    -1,   169,     4,   166,   167,    -1,     4,   197,    -1,
-       4,   166,   250,   167,   197,    -1,     4,   168,     4,    -1,
-       4,   166,   250,   167,   168,     4,    -1,     4,   168,     4,
-     197,    -1,     4,   166,   250,   167,   168,     4,   197,    -1,
-     131,   164,   262,   170,   250,   165,    -1,    44,   164,   262,
-     170,   262,   165,    -1,    45,   164,   262,   170,   262,   165,
-      -1,    46,   164,   264,   165,    -1,   253,    -1,   155,   252,
-      -1,   154,   252,    -1,   252,   155,   252,    -1,   252,   154,
-     252,    -1,   171,   250,   170,   250,   170,   250,   170,   250,
-     170,   250,   172,    -1,   171,   250,   170,   250,   170,   250,
-     170,   250,   172,    -1,   171,   250,   170,   250,   170,   250,
-     172,    -1,   164,   250,   170,   250,   170,   250,   165,    -1,
-     255,    -1,   254,   170,   255,    -1,   250,    -1,   257,    -1,
-     171,   172,    -1,   171,   258,   172,    -1,   155,   171,   258,
-     172,    -1,   250,   156,   171,   258,   172,    -1,   255,    -1,
-       5,    -1,   155,   257,    -1,   250,   156,   257,    -1,   250,
-       8,   250,    -1,   250,     8,   250,     8,   250,    -1,    58,
-     171,   250,   172,    -1,    58,     5,    -1,    61,     5,    -1,
-      64,     5,    -1,    66,     5,    -1,    77,    58,   171,   258,
-     172,    -1,    77,    61,   171,   258,   172,    -1,    77,    64,
-     171,   258,   172,    -1,    77,    66,   171,   258,   172,    -1,
-     217,    -1,   226,    -1,     4,   166,   167,    -1,     4,   164,
-     165,    -1,    35,   166,     4,   167,    -1,     4,   166,   171,
-     258,   172,   167,    -1,     4,   164,   171,   258,   172,   165,
-      -1,   250,    -1,   257,    -1,   258,   170,   250,    -1,   258,
-     170,   257,    -1,   171,   250,   170,   250,   170,   250,   170,
-     250,   172,    -1,   171,   250,   170,   250,   170,   250,   172,
-      -1,     4,    -1,     4,   168,   116,   168,     4,    -1,   171,
-     261,   172,    -1,     4,   166,   250,   167,   168,   117,    -1,
-     259,    -1,   261,   170,   259,    -1,   263,    -1,     4,    -1,
-       4,   168,     4,    -1,     4,   166,   250,   167,   168,     4,
-      -1,     5,    -1,    49,    -1,   132,   164,   262,   165,    -1,
-     133,   164,   262,   170,   262,   165,    -1,    40,   164,   262,
-     170,   262,   165,    -1,    41,   164,   262,   165,    -1,    42,
-     164,   262,   165,    -1,    43,   164,   262,   170,   262,   170,
-     262,   165,    -1,    38,   164,   264,   165,    -1,    38,   166,
-     264,   167,    -1,    39,   164,   262,   165,    -1,    39,   166,
-     262,   167,    -1,    39,   164,   262,   170,   258,   165,    -1,
-      39,   166,   262,   170,   258,   167,    -1,   262,    -1,   264,
-     170,   262,    -1
+      71,     6,    -1,    72,   174,   261,   175,   174,   261,   175,
+     174,   257,   175,   174,   253,   173,   253,   175,     6,    -1,
+     140,   253,     6,    -1,   121,   167,   253,     8,   253,   168,
+      -1,   121,   167,   253,     8,   253,     8,   253,   168,    -1,
+     121,     4,   122,   174,   253,     8,   253,   175,    -1,   121,
+       4,   122,   174,   253,     8,   253,     8,   253,   175,    -1,
+     123,    -1,   131,     4,    -1,   129,    -1,   130,     4,     6,
+      -1,   124,   167,   253,   168,    -1,   125,    -1,    88,   255,
+     174,   222,   175,    -1,    88,   174,   255,   173,   255,   173,
+     253,   175,   174,   222,   175,    -1,    88,   174,   255,   173,
+     255,   173,   255,   173,   253,   175,   174,   222,   175,    -1,
+      -1,    88,   255,   174,   222,   230,   243,   175,    -1,    -1,
+      88,   174,   255,   173,   255,   173,   253,   175,   174,   222,
+     231,   243,   175,    -1,    -1,    88,   174,   255,   173,   255,
+     173,   255,   173,   253,   175,   174,   222,   232,   243,   175,
+      -1,    -1,    88,   174,   222,   233,   243,   175,    -1,    88,
+      58,   174,   253,   173,   255,   175,     6,    -1,    88,    61,
+     174,   253,   173,   255,   175,     6,    -1,    88,    64,   174,
+     253,   173,   255,   175,     6,    -1,    88,    58,   174,   253,
+     173,   255,   173,   255,   173,   253,   175,     6,    -1,    88,
+      61,   174,   253,   173,   255,   173,   255,   173,   253,   175,
+       6,    -1,    88,    64,   174,   253,   173,   255,   173,   255,
+     173,   253,   175,     6,    -1,    88,    58,   174,   253,   173,
+     255,   173,   255,   173,   255,   173,   253,   175,     6,    -1,
+      88,    61,   174,   253,   173,   255,   173,   255,   173,   255,
+     173,   253,   175,     6,    -1,    88,    64,   174,   253,   173,
+     255,   173,   255,   173,   255,   173,   253,   175,     6,    -1,
+      -1,    88,    58,   174,   253,   173,   255,   175,   234,   174,
+     243,   175,     6,    -1,    -1,    88,    61,   174,   253,   173,
+     255,   175,   235,   174,   243,   175,     6,    -1,    -1,    88,
+      64,   174,   253,   173,   255,   175,   236,   174,   243,   175,
+       6,    -1,    -1,    88,    58,   174,   253,   173,   255,   173,
+     255,   173,   253,   175,   237,   174,   243,   175,     6,    -1,
+      -1,    88,    61,   174,   253,   173,   255,   173,   255,   173,
+     253,   175,   238,   174,   243,   175,     6,    -1,    -1,    88,
+      64,   174,   253,   173,   255,   173,   255,   173,   253,   175,
+     239,   174,   243,   175,     6,    -1,    -1,    88,    58,   174,
+     253,   173,   255,   173,   255,   173,   255,   173,   253,   175,
+     240,   174,   243,   175,     6,    -1,    -1,    88,    61,   174,
+     253,   173,   255,   173,   255,   173,   255,   173,   253,   175,
+     241,   174,   243,   175,     6,    -1,    -1,    88,    64,   174,
+     253,   173,   255,   173,   255,   173,   255,   173,   253,   175,
+     242,   174,   243,   175,     6,    -1,   244,    -1,   243,   244,
+      -1,    98,   174,   253,   175,     6,    -1,    98,   174,   258,
+     173,   258,   175,     6,    -1,    98,   174,   258,   173,   258,
+     173,   258,   175,     6,    -1,    99,     6,    -1,    90,     6,
+      -1,   105,     6,    -1,   105,   107,     6,    -1,   106,     6,
+      -1,   106,   107,     6,    -1,   103,     6,    -1,   103,   107,
+       6,    -1,   104,     6,    -1,   104,   107,     6,    -1,   100,
+     167,   253,   168,     7,   258,    80,   253,     6,    -1,    80,
+       4,   169,   253,   170,     6,    -1,    -1,    80,     4,   253,
+      -1,    -1,     4,    -1,    -1,     7,   258,    -1,    -1,     7,
+     253,    -1,    75,    61,   259,     7,   253,   245,     6,    -1,
+      75,    64,   259,   247,   246,     6,    -1,    70,    64,   174,
+     253,   175,     7,   258,     6,    -1,    75,    66,   259,   247,
+       6,    -1,   108,   259,     6,    -1,    96,    64,   174,   261,
+     175,   253,     6,    -1,    90,    64,   259,   248,     6,    -1,
+      90,    66,   259,     6,    -1,    91,    64,   258,     7,   253,
+       6,    -1,    79,    61,   258,     7,   258,     6,    -1,    79,
+      64,   253,   174,   261,   175,     7,   253,   174,   261,   175,
+       6,    -1,    58,   174,   261,   175,   122,    64,   174,   253,
+     175,     6,    -1,    61,   174,   261,   175,   122,    64,   174,
+     253,   175,     6,    -1,    58,   174,   261,   175,   122,    66,
+     174,   253,   175,     6,    -1,    61,   174,   261,   175,   122,
+      66,   174,   253,   175,     6,    -1,    64,   174,   261,   175,
+     122,    66,   174,   253,   175,     6,    -1,    97,    64,   259,
+       6,    -1,    97,    61,   259,     6,    -1,    94,     6,    -1,
+      94,     4,     6,    -1,    94,    58,   174,   261,   175,     6,
+      -1,   137,    -1,   138,    -1,   139,    -1,   251,     6,    -1,
+     251,   174,   258,   175,     6,    -1,   251,   174,   258,   173,
+     258,   175,     6,    -1,   251,   167,   258,   168,   174,   258,
+     173,   258,   175,     6,    -1,   254,    -1,   167,   253,   168,
+      -1,   158,   253,    -1,   157,   253,    -1,   162,   253,    -1,
+     253,   158,   253,    -1,   253,   157,   253,    -1,   253,   159,
+     253,    -1,   253,   160,   253,    -1,   253,   161,   253,    -1,
+     253,   166,   253,    -1,   253,   153,   253,    -1,   253,   154,
+     253,    -1,   253,   156,   253,    -1,   253,   155,   253,    -1,
+     253,   152,   253,    -1,   253,   151,   253,    -1,   253,   150,
+     253,    -1,   253,   149,   253,    -1,   253,   148,   253,     8,
+     253,    -1,    14,   167,   253,   168,    -1,    15,   167,   253,
+     168,    -1,    16,   167,   253,   168,    -1,    17,   167,   253,
+     168,    -1,    18,   167,   253,   168,    -1,    19,   167,   253,
+     168,    -1,    20,   167,   253,   168,    -1,    21,   167,   253,
+     168,    -1,    22,   167,   253,   168,    -1,    24,   167,   253,
+     168,    -1,    25,   167,   253,   173,   253,   168,    -1,    26,
+     167,   253,   168,    -1,    27,   167,   253,   168,    -1,    28,
+     167,   253,   168,    -1,    29,   167,   253,   168,    -1,    30,
+     167,   253,   168,    -1,    31,   167,   253,   168,    -1,    32,
+     167,   253,   173,   253,   168,    -1,    33,   167,   253,   173,
+     253,   168,    -1,    34,   167,   253,   173,   253,   168,    -1,
+      23,   167,   253,   168,    -1,    14,   169,   253,   170,    -1,
+      15,   169,   253,   170,    -1,    16,   169,   253,   170,    -1,
+      17,   169,   253,   170,    -1,    18,   169,   253,   170,    -1,
+      19,   169,   253,   170,    -1,    20,   169,   253,   170,    -1,
+      21,   169,   253,   170,    -1,    22,   169,   253,   170,    -1,
+      24,   169,   253,   170,    -1,    25,   169,   253,   173,   253,
+     170,    -1,    26,   169,   253,   170,    -1,    27,   169,   253,
+     170,    -1,    28,   169,   253,   170,    -1,    29,   169,   253,
+     170,    -1,    30,   169,   253,   170,    -1,    31,   169,   253,
+     170,    -1,    32,   169,   253,   173,   253,   170,    -1,    33,
+     169,   253,   173,   253,   170,    -1,    34,   169,   253,   173,
+     253,   170,    -1,    23,   169,   253,   170,    -1,     3,    -1,
+       9,    -1,    10,    -1,    11,    -1,   141,    -1,   142,    -1,
+     143,    -1,    50,    -1,    51,    -1,     4,    -1,     4,   176,
+     174,   253,   175,    -1,     4,   169,   253,   170,    -1,   172,
+       4,   169,   170,    -1,     4,   200,    -1,     4,   169,   253,
+     170,   200,    -1,     4,   171,     4,    -1,     4,   169,   253,
+     170,   171,     4,    -1,     4,   171,     4,   200,    -1,     4,
+     169,   253,   170,   171,     4,   200,    -1,   134,   167,   265,
+     173,   253,   168,    -1,    44,   167,   265,   173,   265,   168,
+      -1,    45,   167,   265,   173,   265,   168,    -1,    46,   167,
+     267,   168,    -1,   256,    -1,   158,   255,    -1,   157,   255,
+      -1,   255,   158,   255,    -1,   255,   157,   255,    -1,   174,
+     253,   173,   253,   173,   253,   173,   253,   173,   253,   175,
+      -1,   174,   253,   173,   253,   173,   253,   173,   253,   175,
+      -1,   174,   253,   173,   253,   173,   253,   175,    -1,   167,
+     253,   173,   253,   173,   253,   168,    -1,   258,    -1,   257,
+     173,   258,    -1,   253,    -1,   260,    -1,   174,   175,    -1,
+     174,   261,   175,    -1,   158,   174,   261,   175,    -1,   253,
+     159,   174,   261,   175,    -1,   258,    -1,     5,    -1,   158,
+     260,    -1,   253,   159,   260,    -1,   253,     8,   253,    -1,
+     253,     8,   253,     8,   253,    -1,    58,   174,   253,   175,
+      -1,    58,     5,    -1,    61,     5,    -1,    64,     5,    -1,
+      66,     5,    -1,    77,    58,   174,   261,   175,    -1,    77,
+      61,   174,   261,   175,    -1,    77,    64,   174,   261,   175,
+      -1,    77,    66,   174,   261,   175,    -1,   220,    -1,   229,
+      -1,     4,   169,   170,    -1,     4,   167,   168,    -1,    35,
+     169,     4,   170,    -1,     4,   169,   174,   261,   175,   170,
+      -1,     4,   167,   174,   261,   175,   168,    -1,   253,    -1,
+     260,    -1,   261,   173,   253,    -1,   261,   173,   260,    -1,
+     174,   253,   173,   253,   173,   253,   173,   253,   175,    -1,
+     174,   253,   173,   253,   173,   253,   175,    -1,     4,    -1,
+       4,   171,   119,   171,     4,    -1,   174,   264,   175,    -1,
+       4,   169,   253,   170,   171,   120,    -1,   262,    -1,   264,
+     173,   262,    -1,   266,    -1,     4,    -1,     4,   171,     4,
+      -1,     4,   169,   253,   170,   171,     4,    -1,     5,    -1,
+      49,    -1,   135,   167,   265,   168,    -1,   136,   167,   265,
+     173,   265,   168,    -1,    40,   167,   265,   173,   265,   168,
+      -1,    41,   167,   265,   168,    -1,    42,   167,   265,   168,
+      -1,    43,   167,   265,   173,   265,   173,   265,   168,    -1,
+      38,   167,   267,   168,    -1,    38,   169,   267,   170,    -1,
+      39,   167,   265,   168,    -1,    39,   169,   265,   170,    -1,
+      39,   167,   265,   173,   261,   168,    -1,    39,   169,   265,
+     173,   261,   170,    -1,   265,    -1,   267,   173,   265,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1139,39 +1147,39 @@ static const yytype_uint16 yyrline[] =
     1282,  1297,  1307,  1308,  1313,  1321,  1330,  1348,  1352,  1363,
     1366,  1379,  1382,  1392,  1416,  1415,  1435,  1457,  1475,  1496,
     1514,  1544,  1574,  1592,  1610,  1636,  1654,  1673,  1672,  1695,
-    1713,  1752,  1758,  1764,  1771,  1796,  1821,  1838,  1855,  1887,
-    1886,  1910,  1928,  1945,  1962,  1961,  1987,  1992,  1997,  2002,
-    2007,  2012,  2035,  2041,  2052,  2053,  2058,  2061,  2065,  2088,
-    2111,  2134,  2162,  2183,  2209,  2230,  2252,  2272,  2384,  2403,
-    2441,  2550,  2559,  2565,  2580,  2608,  2625,  2634,  2648,  2654,
-    2660,  2669,  2678,  2687,  2701,  2746,  2763,  2778,  2797,  2809,
-    2833,  2837,  2842,  2849,  2855,  2860,  2866,  2870,  2874,  2879,
-    2934,  2947,  2964,  2981,  3002,  3023,  3058,  3066,  3072,  3079,
-    3083,  3092,  3100,  3108,  3117,  3116,  3130,  3129,  3143,  3142,
-    3156,  3155,  3168,  3175,  3182,  3189,  3196,  3203,  3210,  3217,
-    3224,  3232,  3231,  3244,  3243,  3256,  3255,  3268,  3267,  3280,
-    3279,  3292,  3291,  3304,  3303,  3316,  3315,  3328,  3327,  3343,
-    3346,  3352,  3364,  3384,  3407,  3411,  3415,  3419,  3423,  3427,
-    3446,  3459,  3462,  3478,  3481,  3498,  3501,  3507,  3510,  3517,
-    3573,  3643,  3648,  3715,  3751,  3759,  3802,  3841,  3861,  3888,
-    3928,  3951,  3974,  3978,  3982,  4005,  4044,  4089,  4093,  4103,
-    4138,  4139,  4140,  4144,  4150,  4162,  4180,  4208,  4209,  4210,
-    4211,  4212,  4213,  4214,  4215,  4216,  4223,  4224,  4225,  4226,
-    4227,  4228,  4229,  4230,  4231,  4232,  4233,  4234,  4235,  4236,
-    4237,  4238,  4239,  4240,  4241,  4242,  4243,  4244,  4245,  4246,
-    4247,  4248,  4249,  4250,  4251,  4252,  4253,  4254,  4257,  4258,
-    4259,  4260,  4261,  4262,  4263,  4264,  4265,  4266,  4267,  4268,
-    4269,  4270,  4271,  4272,  4273,  4274,  4275,  4276,  4277,  4286,
-    4287,  4288,  4289,  4290,  4291,  4292,  4293,  4294,  4298,  4319,
-    4338,  4356,  4368,  4385,  4406,  4411,  4416,  4426,  4436,  4441,
-    4450,  4455,  4482,  4486,  4490,  4494,  4498,  4505,  4509,  4513,
-    4517,  4524,  4529,  4536,  4541,  4545,  4550,  4554,  4562,  4573,
-    4577,  4589,  4597,  4605,  4612,  4622,  4642,  4646,  4650,  4654,
-    4658,  4687,  4716,  4745,  4774,  4784,  4794,  4807,  4819,  4831,
-    4850,  4871,  4876,  4880,  4884,  4896,  4900,  4912,  4919,  4929,
-    4933,  4948,  4953,  4960,  4964,  4977,  4985,  4996,  5000,  5008,
-    5016,  5024,  5032,  5046,  5060,  5072,  5089,  5105,  5110,  5114,
-    5134,  5156,  5161
+    1713,  1752,  1758,  1764,  1771,  1796,  1821,  1838,  1857,  1892,
+    1891,  1915,  1933,  1950,  1967,  1966,  1992,  1997,  2002,  2007,
+    2012,  2017,  2040,  2046,  2057,  2058,  2063,  2066,  2070,  2093,
+    2116,  2139,  2167,  2188,  2214,  2235,  2257,  2277,  2389,  2408,
+    2446,  2555,  2564,  2570,  2585,  2613,  2630,  2639,  2653,  2659,
+    2665,  2674,  2683,  2692,  2706,  2751,  2768,  2783,  2802,  2814,
+    2838,  2842,  2847,  2854,  2860,  2865,  2871,  2875,  2879,  2884,
+    2939,  2952,  2969,  2986,  3007,  3028,  3063,  3071,  3077,  3084,
+    3088,  3097,  3105,  3113,  3122,  3121,  3136,  3135,  3150,  3149,
+    3164,  3163,  3177,  3184,  3191,  3198,  3205,  3212,  3219,  3226,
+    3233,  3241,  3240,  3254,  3253,  3267,  3266,  3280,  3279,  3293,
+    3292,  3306,  3305,  3319,  3318,  3332,  3331,  3345,  3344,  3361,
+    3364,  3370,  3382,  3402,  3426,  3431,  3435,  3439,  3443,  3447,
+    3451,  3455,  3459,  3463,  3467,  3486,  3499,  3502,  3518,  3521,
+    3538,  3541,  3547,  3550,  3557,  3613,  3683,  3688,  3755,  3791,
+    3799,  3842,  3881,  3901,  3928,  3968,  3991,  4014,  4018,  4022,
+    4045,  4084,  4129,  4133,  4143,  4178,  4179,  4180,  4184,  4190,
+    4202,  4220,  4248,  4249,  4250,  4251,  4252,  4253,  4254,  4255,
+    4256,  4263,  4264,  4265,  4266,  4267,  4268,  4269,  4270,  4271,
+    4272,  4273,  4274,  4275,  4276,  4277,  4278,  4279,  4280,  4281,
+    4282,  4283,  4284,  4285,  4286,  4287,  4288,  4289,  4290,  4291,
+    4292,  4293,  4294,  4297,  4298,  4299,  4300,  4301,  4302,  4303,
+    4304,  4305,  4306,  4307,  4308,  4309,  4310,  4311,  4312,  4313,
+    4314,  4315,  4316,  4317,  4326,  4327,  4328,  4329,  4330,  4331,
+    4332,  4333,  4334,  4338,  4359,  4378,  4396,  4408,  4425,  4446,
+    4451,  4456,  4466,  4476,  4481,  4490,  4495,  4522,  4526,  4530,
+    4534,  4538,  4545,  4549,  4553,  4557,  4564,  4569,  4576,  4581,
+    4585,  4590,  4594,  4602,  4613,  4617,  4629,  4637,  4645,  4652,
+    4662,  4682,  4686,  4690,  4694,  4698,  4727,  4756,  4785,  4814,
+    4824,  4834,  4847,  4859,  4871,  4890,  4911,  4916,  4920,  4924,
+    4936,  4940,  4952,  4959,  4969,  4973,  4988,  4993,  5000,  5004,
+    5017,  5025,  5036,  5040,  5048,  5056,  5064,  5072,  5086,  5100,
+    5112,  5129,  5145,  5150,  5154,  5174,  5196,  5201
 };
 #endif
 
@@ -1197,8 +1205,9 @@ static const char *const yytname[] =
   "tUsing", "tPlugin", "tDegenerated", "tRecursive", "tRotate",
   "tTranslate", "tSymmetry", "tDilate", "tExtrude", "tLevelset",
   "tRecombine", "tSmoother", "tSplit", "tDelete", "tCoherence",
-  "tIntersect", "tMeshAlgorithm", "tReverse", "tLayers", "tHole", "tAlias",
-  "tAliasWithOptions", "tQuadTriDbl", "tQuadTriSngl", "tRecombLaterals",
+  "tIntersect", "tMeshAlgorithm", "tReverse", "tLayers", "tScaleLast",
+  "tHole", "tAlias", "tAliasWithOptions", "tQuadTriAddVerts",
+  "tQuadTriNoNewVerts", "tQuadTriSngl", "tQuadTriDbl", "tRecombLaterals",
   "tTransfQuadTri", "tText2D", "tText3D", "tInterpolationScheme", "tTime",
   "tCombine", "tBSpline", "tBezier", "tNurbs", "tNurbsOrder",
   "tNurbsKnots", "tColor", "tColorTable", "tFor", "tIn", "tEndFor", "tIf",
@@ -1251,63 +1260,63 @@ static const yytype_uint16 yytoknum[] =
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,    63,   400,   401,   402,   403,
-      60,    62,   404,   405,    43,    45,    42,    47,    37,    33,
-     406,   407,   408,    94,    40,    41,    91,    93,    46,    35,
-      44,   123,   125,   126
+     395,   396,   397,   398,   399,   400,   401,   402,    63,   403,
+     404,   405,   406,    60,    62,   407,   408,    43,    45,    42,
+      47,    37,    33,   409,   410,   411,    94,    40,    41,    91,
+      93,    46,    35,    44,   123,   125,   126
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   174,   175,   175,   176,   176,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   178,   178,   179,   179,   179,   179,   179,   179,   180,
-     180,   180,   181,   181,   181,   181,   181,   181,   182,   182,
-     183,   183,   185,   186,   184,   187,   187,   189,   188,   190,
-     190,   192,   191,   193,   193,   195,   194,   196,   196,   196,
-     196,   196,   197,   197,   198,   198,   198,   198,   198,   198,
-     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
-     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
-     198,   198,   198,   199,   199,   200,   200,   200,   201,   200,
-     200,   202,   200,   203,   203,   204,   204,   205,   205,   206,
-     206,   206,   207,   207,   208,   208,   208,   209,   209,   210,
-     210,   211,   211,   212,   213,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   214,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   215,
-     212,   212,   212,   212,   216,   212,   217,   217,   217,   217,
-     217,   217,   217,   217,   218,   218,   219,   219,   219,   219,
-     219,   219,   220,   220,   220,   220,   220,   220,   220,   220,
-     220,   221,   221,   221,   221,   221,   222,   222,   223,   223,
-     223,   223,   223,   223,   224,   224,   224,   224,   224,   224,
-     224,   224,   224,   224,   224,   224,   224,   224,   224,   224,
-     224,   225,   225,   225,   225,   225,   225,   225,   225,   225,
-     225,   226,   226,   226,   227,   226,   228,   226,   229,   226,
-     230,   226,   226,   226,   226,   226,   226,   226,   226,   226,
-     226,   231,   226,   232,   226,   233,   226,   234,   226,   235,
-     226,   236,   226,   237,   226,   238,   226,   239,   226,   240,
-     240,   241,   241,   241,   241,   241,   241,   241,   241,   241,
-     241,   242,   242,   243,   243,   244,   244,   245,   245,   246,
-     246,   246,   246,   246,   246,   246,   246,   246,   246,   246,
-     246,   246,   246,   246,   246,   246,   246,   247,   247,   247,
-     248,   248,   248,   249,   249,   249,   249,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   251,
-     251,   251,   251,   251,   251,   251,   251,   251,   251,   251,
-     251,   251,   251,   251,   251,   251,   251,   251,   251,   251,
-     251,   251,   252,   252,   252,   252,   252,   253,   253,   253,
-     253,   254,   254,   255,   255,   255,   255,   255,   255,   256,
-     256,   257,   257,   257,   257,   257,   257,   257,   257,   257,
-     257,   257,   257,   257,   257,   257,   257,   257,   257,   257,
-     257,   258,   258,   258,   258,   259,   259,   259,   259,   260,
-     260,   261,   261,   262,   262,   262,   262,   263,   263,   263,
-     263,   263,   263,   263,   263,   263,   263,   263,   263,   263,
-     263,   264,   264
+       0,   177,   178,   178,   179,   179,   180,   180,   180,   180,
+     180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
+     180,   181,   181,   182,   182,   182,   182,   182,   182,   183,
+     183,   183,   184,   184,   184,   184,   184,   184,   185,   185,
+     186,   186,   188,   189,   187,   190,   190,   192,   191,   193,
+     193,   195,   194,   196,   196,   198,   197,   199,   199,   199,
+     199,   199,   200,   200,   201,   201,   201,   201,   201,   201,
+     201,   201,   201,   201,   201,   201,   201,   201,   201,   201,
+     201,   201,   201,   201,   201,   201,   201,   201,   201,   201,
+     201,   201,   201,   202,   202,   203,   203,   203,   204,   203,
+     203,   205,   203,   206,   206,   207,   207,   208,   208,   209,
+     209,   209,   210,   210,   211,   211,   211,   212,   212,   213,
+     213,   214,   214,   215,   216,   215,   215,   215,   215,   215,
+     215,   215,   215,   215,   215,   215,   215,   217,   215,   215,
+     215,   215,   215,   215,   215,   215,   215,   215,   215,   218,
+     215,   215,   215,   215,   219,   215,   220,   220,   220,   220,
+     220,   220,   220,   220,   221,   221,   222,   222,   222,   222,
+     222,   222,   223,   223,   223,   223,   223,   223,   223,   223,
+     223,   224,   224,   224,   224,   224,   225,   225,   226,   226,
+     226,   226,   226,   226,   227,   227,   227,   227,   227,   227,
+     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
+     227,   228,   228,   228,   228,   228,   228,   228,   228,   228,
+     228,   229,   229,   229,   230,   229,   231,   229,   232,   229,
+     233,   229,   229,   229,   229,   229,   229,   229,   229,   229,
+     229,   234,   229,   235,   229,   236,   229,   237,   229,   238,
+     229,   239,   229,   240,   229,   241,   229,   242,   229,   243,
+     243,   244,   244,   244,   244,   244,   244,   244,   244,   244,
+     244,   244,   244,   244,   244,   244,   245,   245,   246,   246,
+     247,   247,   248,   248,   249,   249,   249,   249,   249,   249,
+     249,   249,   249,   249,   249,   249,   249,   249,   249,   249,
+     249,   249,   250,   250,   250,   251,   251,   251,   252,   252,
+     252,   252,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   255,   255,   255,
+     255,   255,   256,   256,   256,   256,   257,   257,   258,   258,
+     258,   258,   258,   258,   259,   259,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   260,   260,   260,   260,
+     260,   260,   260,   260,   260,   260,   261,   261,   261,   261,
+     262,   262,   262,   262,   263,   263,   264,   264,   265,   265,
+     265,   265,   266,   266,   266,   266,   266,   266,   266,   266,
+     266,   266,   266,   266,   266,   266,   267,   267
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1339,27 +1348,27 @@ static const yytype_uint8 yyr2[] =
        0,     6,     8,     8,     8,    12,    12,    12,    14,    14,
       14,     0,    12,     0,    12,     0,    12,     0,    16,     0,
       16,     0,    16,     0,    18,     0,    18,     0,    18,     1,
-       2,     5,     7,     9,     2,     2,     3,     2,     3,     9,
-       6,     0,     3,     0,     1,     0,     2,     0,     2,     7,
-       6,     8,     5,     3,     7,     5,     4,     6,     6,    12,
-      10,    10,    10,    10,    10,     4,     4,     2,     3,     6,
-       1,     1,     1,     2,     5,     7,    10,     1,     3,     2,
-       2,     2,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     5,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     6,     4,     4,
-       4,     4,     4,     4,     6,     6,     6,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     6,     4,
-       4,     4,     4,     4,     4,     6,     6,     6,     4,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     5,
-       4,     4,     2,     5,     3,     6,     4,     7,     6,     6,
-       6,     4,     1,     2,     2,     3,     3,    11,     9,     7,
-       7,     1,     3,     1,     1,     2,     3,     4,     5,     1,
-       1,     2,     3,     3,     5,     4,     2,     2,     2,     2,
-       5,     5,     5,     5,     1,     1,     3,     3,     4,     6,
-       6,     1,     1,     3,     3,     9,     7,     1,     5,     3,
-       6,     1,     3,     1,     1,     3,     6,     1,     1,     4,
-       6,     6,     4,     4,     8,     4,     4,     4,     4,     6,
-       6,     1,     3
+       2,     5,     7,     9,     2,     2,     2,     3,     2,     3,
+       2,     3,     2,     3,     9,     6,     0,     3,     0,     1,
+       0,     2,     0,     2,     7,     6,     8,     5,     3,     7,
+       5,     4,     6,     6,    12,    10,    10,    10,    10,    10,
+       4,     4,     2,     3,     6,     1,     1,     1,     2,     5,
+       7,    10,     1,     3,     2,     2,     2,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     5,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     6,     4,     4,     4,     4,     4,     4,     6,
+       6,     6,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     6,     4,     4,     4,     4,     4,     4,
+       6,     6,     6,     4,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     5,     4,     4,     2,     5,     3,
+       6,     4,     7,     6,     6,     6,     4,     1,     2,     2,
+       3,     3,    11,     9,     7,     7,     1,     3,     1,     1,
+       2,     3,     4,     5,     1,     1,     2,     3,     3,     5,
+       4,     2,     2,     2,     2,     5,     5,     5,     5,     1,
+       1,     3,     3,     4,     6,     6,     1,     1,     3,     3,
+       9,     7,     1,     5,     3,     6,     1,     3,     1,     1,
+       3,     6,     1,     1,     4,     6,     6,     4,     4,     8,
+       4,     4,     4,     4,     6,     6,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1374,154 +1383,155 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   215,     0,   220,     0,     0,
-       0,   217,     0,     0,     0,     0,   300,   301,   302,     0,
+       0,   217,     0,     0,     0,     0,   305,   306,   307,     0,
        5,     7,     6,     8,     9,    10,    19,    11,    12,    13,
-      18,    17,    14,    15,    16,     0,    20,   369,   378,   447,
-      57,   370,   371,   372,     0,     0,     0,     0,     0,     0,
+      18,    17,    14,    15,    16,     0,    20,   374,   383,   452,
+      57,   375,   376,   377,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   448,   376,   377,     0,     0,     0,
-       0,   373,   374,   375,    61,    60,    59,    58,     0,     0,
+       0,     0,     0,     0,   453,   381,   382,     0,     0,     0,
+       0,   378,   379,   380,    61,    60,    59,    58,     0,     0,
        0,    63,    62,     0,     0,     0,     0,   166,     0,     0,
-       0,   307,     0,   443,     0,     0,     0,     0,   203,     0,
+       0,   312,     0,   448,     0,     0,     0,     0,   203,     0,
      205,   202,   206,   207,    95,   103,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   208,     0,     0,     0,     0,     0,     0,     0,
      124,   137,   149,   154,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     392,     0,     0,     0,     0,     0,   166,     0,     0,     0,
+     397,     0,     0,     0,     0,     0,   166,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
-     297,     0,     0,     0,     0,     0,     0,     0,   378,   410,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   424,
-     425,   403,   409,     0,   404,     0,     0,     0,     0,   437,
+     302,     0,     0,     0,     0,     0,     0,     0,   383,   415,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   429,
+     430,   408,   414,     0,   409,     0,     0,     0,     0,   442,
        0,     0,     0,     0,     0,   200,   201,     0,     0,   216,
-       0,   166,     0,   166,   378,     0,   303,     0,     0,     0,
-       0,     0,     0,   382,     0,     0,     0,     0,     0,     0,
+       0,   166,     0,   166,   383,     0,   308,     0,     0,     0,
+       0,     0,     0,   387,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   310,   309,   311,     0,     0,     0,     0,     0,
+       0,     0,   315,   314,   316,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   165,     0,   164,     0,    72,
      197,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    32,   194,   141,     0,
-     444,     0,   443,     0,     0,    93,    93,     0,     0,   431,
-     432,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     449,     0,   448,     0,     0,    93,    93,     0,     0,   436,
+     437,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     275,   275,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   166,   166,     0,   394,   393,
+     280,   280,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   166,   166,     0,   399,   398,
        0,     0,     0,     0,   166,   166,     0,     0,     0,     0,
        0,     0,     0,   230,     0,   166,     0,     0,     0,     0,
-       0,   277,     0,     0,     0,     0,   184,     0,     0,     0,
-     298,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   416,     0,   417,   418,   419,     0,     0,     0,
-       0,     0,   309,   411,     0,   405,     0,     0,     0,   283,
+       0,   282,     0,     0,     0,     0,   184,     0,     0,     0,
+     303,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   421,     0,   422,   423,   424,     0,     0,     0,
+       0,     0,   314,   416,     0,   410,     0,     0,     0,   288,
      199,     0,     0,     0,     0,     0,   166,     0,     0,     0,
        0,   218,   188,     0,   189,     0,     0,   210,     0,     0,
-       0,     0,   384,     0,    74,     0,     0,     0,     0,     0,
+       0,     0,   389,     0,    74,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   461,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   466,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   308,    57,     0,     0,     0,    57,
+       0,     0,     0,     0,   313,    57,     0,     0,     0,    57,
        0,     0,     0,     0,     0,   161,     0,     0,     0,     0,
-     167,    66,     0,   325,   324,   323,   322,   318,   319,   321,
-     320,   313,   312,   314,   315,   316,   317,     0,   142,     0,
+     167,    66,     0,   330,   329,   328,   327,   323,   324,   326,
+     325,   318,   317,   319,   320,   321,   322,     0,   142,     0,
        0,     0,     0,     0,     0,     0,     0,    94,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   273,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   278,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,   128,   166,     0,
-       0,     0,     0,     0,   396,   395,     0,     0,     0,     0,
+       0,     0,     0,     0,   401,   400,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   224,     0,     0,     0,     0,
-       0,     0,     0,   286,     0,     0,   185,     0,     0,   181,
-       0,     0,     0,   296,   295,     0,     0,   427,     0,   426,
-       0,     0,   384,     0,     0,     0,     0,     0,     0,     0,
-     308,   406,   413,     0,   314,   412,     0,     0,     0,     0,
+       0,     0,     0,   291,     0,     0,   185,     0,     0,   181,
+       0,     0,     0,   301,   300,     0,     0,   432,     0,   431,
+       0,     0,   389,     0,     0,     0,     0,     0,     0,     0,
+     313,   411,   418,     0,   319,   417,     0,     0,     0,     0,
        0,     0,     0,     0,   219,     0,   190,   192,     0,     0,
-       0,     0,   380,   386,     0,   327,   348,   328,   349,   329,
-     350,   330,   351,   331,   352,   332,   353,   333,   354,   334,
-     355,   335,   356,   347,   368,   336,   357,     0,     0,   338,
-     359,   339,   360,   340,   361,   341,   362,   342,   363,   343,
-     364,     0,     0,     0,     0,     0,     0,   455,     0,   456,
-     457,     0,   458,     0,     0,   452,   453,     0,     0,     0,
-     391,    85,     0,   449,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    79,     0,     0,     0,     0,   381,
+       0,     0,   385,   391,     0,   332,   353,   333,   354,   334,
+     355,   335,   356,   336,   357,   337,   358,   338,   359,   339,
+     360,   340,   361,   352,   373,   341,   362,     0,     0,   343,
+     364,   344,   365,   345,   366,   346,   367,   347,   368,   348,
+     369,     0,     0,     0,     0,     0,     0,   460,     0,   461,
+     462,     0,   463,     0,     0,   457,   458,     0,     0,     0,
+     396,    85,     0,   454,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    79,     0,     0,     0,     0,   386,
        0,     0,     0,     0,     0,    42,     0,     0,     0,    55,
-       0,    33,    34,    35,    36,    37,     0,   445,    23,    21,
+       0,    33,    34,    35,    36,    37,     0,   450,    23,    21,
        0,     0,    24,     0,     0,    64,    96,    65,   104,     0,
-     433,   434,     0,     0,     0,     0,     0,     0,     0,     0,
+     438,   439,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     271,   276,   274,     0,   282,     0,     0,   117,   118,     0,
+     276,   281,   279,     0,   287,     0,     0,   117,   118,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   191,
      193,     0,     0,     0,   156,   158,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   259,     0,
-     221,     0,     0,     0,     0,     0,     0,   278,   285,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     380,   428,   415,     0,     0,     0,     0,   407,     0,     0,
-       0,     0,     0,     0,     0,   186,     0,     0,     0,     0,
-       0,     0,   304,     0,     0,   383,     0,   379,     0,     0,
-       0,     0,     0,     0,     0,     0,   462,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    67,     0,     0,
-       0,     0,     0,    73,    75,    77,     0,     0,   441,     0,
-      83,     0,     0,     0,     0,   326,     0,     0,     0,     0,
-       0,    29,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,     0,   121,   121,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   126,     0,     0,     0,     0,     0,
-       0,     0,   280,     0,     0,     0,     0,     0,     0,     0,
-       0,   288,     0,     0,   187,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   264,     0,     0,   265,     0,   267,
-       0,   231,   260,     0,     0,     0,   179,     0,     0,     0,
-     287,     0,   183,   182,   299,     0,     0,    30,    31,     0,
-       0,     0,   420,   421,   422,   423,   414,   408,     0,     0,
-       0,   438,     0,     0,     0,   211,     0,     0,     0,     0,
-     196,   385,   195,   337,   358,   344,   365,   345,   366,   346,
-     367,   459,   460,   451,     0,   389,   390,   388,   450,     0,
-      69,     0,    57,     0,     0,     0,     0,    68,     0,     0,
-       0,   439,     0,     0,     0,     0,     0,     0,     0,     0,
-     401,     0,     0,    25,    26,     0,    27,     0,     0,    97,
-     100,   123,     0,     0,     0,     0,     0,     0,   127,     0,
-       0,   144,   145,     0,     0,   129,   152,     0,     0,     0,
-       0,   119,     0,   279,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   198,     0,     0,     0,     0,   166,   166,
-       0,   241,     0,   243,     0,   245,     0,   403,     0,     0,
-     266,   268,     0,     0,   225,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   284,   430,   429,   385,   132,   133,
-       0,     0,     0,     0,    86,    90,     0,     0,   305,   387,
+       0,   259,     0,   221,     0,     0,     0,     0,     0,     0,
+     283,   290,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   385,   433,   420,     0,     0,     0,     0,
+     412,     0,     0,     0,     0,     0,     0,     0,   186,     0,
+       0,     0,     0,     0,     0,   309,     0,     0,   388,     0,
+     384,     0,     0,     0,     0,     0,     0,     0,     0,   467,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      67,     0,     0,     0,     0,     0,    73,    75,    77,     0,
+       0,   446,     0,    83,     0,     0,     0,     0,   331,     0,
+       0,     0,     0,     0,    29,     0,    22,     0,     0,     0,
+       0,     0,     0,     0,     0,   121,   121,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   126,     0,     0,
+       0,     0,     0,     0,     0,   285,     0,     0,     0,     0,
+       0,     0,     0,     0,   293,     0,     0,   187,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   265,     0,   264,
+       0,   270,     0,   272,     0,   266,     0,   268,     0,   231,
+     260,     0,     0,     0,   179,     0,     0,     0,   292,     0,
+     183,   182,   304,     0,     0,    30,    31,     0,     0,     0,
+     425,   426,   427,   428,   419,   413,     0,     0,     0,   443,
+       0,     0,     0,   211,     0,     0,     0,     0,   196,   390,
+     195,   342,   363,   349,   370,   350,   371,   351,   372,   464,
+     465,   456,     0,   394,   395,   393,   455,     0,    69,     0,
+      57,     0,     0,     0,     0,    68,     0,     0,     0,   444,
+       0,     0,     0,     0,     0,     0,     0,     0,   406,     0,
+       0,    25,    26,     0,    27,     0,     0,    97,   100,   123,
+       0,     0,     0,     0,     0,     0,   127,     0,     0,   144,
+     145,     0,     0,   129,   152,     0,     0,     0,     0,   119,
+       0,   284,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   198,     0,     0,     0,     0,   166,   166,     0,   241,
+       0,   243,     0,   245,     0,   408,     0,     0,   271,   273,
+     267,   269,     0,     0,   225,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   289,   435,   434,   390,   132,   133,
+       0,     0,     0,     0,    86,    90,     0,     0,   310,   392,
        0,     0,     0,     0,     0,    80,     0,     0,    81,     0,
-     442,   168,   169,   170,   171,     0,    38,     0,     0,     0,
-       0,     0,    40,   446,     0,     0,    98,   101,     0,     0,
-     122,   130,   131,   135,     0,     0,   146,     0,     0,   281,
-       0,   139,     0,     0,   272,   151,     0,     0,     0,     0,
-     136,     0,   147,   153,     0,     0,     0,     0,   400,     0,
-     399,     0,     0,     0,   232,     0,     0,   233,     0,     0,
+     447,   168,   169,   170,   171,     0,    38,     0,     0,     0,
+       0,     0,    40,   451,     0,     0,    98,   101,     0,     0,
+     122,   130,   131,   135,     0,     0,   146,     0,     0,   286,
+       0,   139,     0,     0,   277,   151,     0,     0,     0,     0,
+     136,     0,   147,   153,     0,     0,     0,     0,   405,     0,
+     404,     0,     0,     0,   232,     0,     0,   233,     0,     0,
      234,     0,     0,     0,     0,     0,     0,     0,   178,     0,
        0,   177,     0,     0,     0,   172,     0,     0,     0,     0,
-     436,     0,   213,   212,     0,     0,     0,     0,   454,    71,
+     441,     0,   213,   212,     0,     0,     0,     0,   459,    71,
       70,    76,    78,     0,    84,     0,    43,     0,     0,     0,
-     402,     0,     0,     0,    28,     0,   107,   112,     0,     0,
+     407,     0,     0,     0,    28,     0,   107,   112,     0,     0,
        0,     0,     0,     0,     0,     0,   140,   125,   138,   150,
      155,     0,     0,    91,    92,   166,     0,   159,   160,     0,
        0,     0,     0,     0,     0,     0,   261,     0,     0,   166,
        0,     0,     0,     0,     0,   163,   162,     0,     0,     0,
-       0,    87,    88,     0,     0,   440,     0,    39,     0,     0,
-       0,    41,    56,     0,     0,     0,   290,   292,   291,   293,
-     294,   143,     0,     0,     0,     0,     0,     0,   398,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   270,     0,
-       0,     0,   226,     0,     0,   173,     0,     0,     0,   435,
-     214,     0,   306,    82,     0,     0,     0,     0,     0,     0,
+       0,    87,    88,     0,     0,   445,     0,    39,     0,     0,
+       0,    41,    56,     0,     0,     0,   295,   297,   296,   298,
+     299,   143,     0,     0,     0,     0,     0,     0,   403,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   275,     0,
+       0,     0,   226,     0,     0,   173,     0,     0,     0,   440,
+     214,     0,   311,    82,     0,     0,     0,     0,     0,     0,
       99,   108,     0,   102,   113,     0,     0,     0,     0,   157,
        0,   247,     0,     0,   249,     0,     0,   251,     0,     0,
        0,   262,     0,   222,     0,   166,     0,     0,     0,   134,
       89,     0,    47,     0,    53,     0,     0,     0,     0,     0,
-     120,   148,   289,   397,   235,     0,     0,   242,   236,     0,
+     120,   148,   294,   402,   235,     0,     0,   242,   236,     0,
        0,   244,   237,     0,     0,   246,     0,     0,     0,   228,
        0,   176,     0,     0,     0,     0,     0,     0,     0,     0,
      109,   111,     0,   114,   115,     0,     0,   253,     0,   255,
-       0,   257,   263,   269,   227,   223,     0,     0,     0,     0,
-      44,     0,    51,     0,     0,     0,   431,     0,     0,     0,
+       0,   257,   263,   274,   227,   223,     0,     0,     0,     0,
+      44,     0,    51,     0,     0,     0,   436,     0,     0,     0,
      238,     0,     0,   239,     0,     0,   240,     0,     0,   180,
        0,   174,     0,    45,     0,     0,   204,     0,   110,     0,
      116,     0,     0,     0,     0,     0,     0,     0,   229,     0,
@@ -1534,531 +1544,511 @@ static const yytype_uint16 yydefact[] =
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     3,    80,   840,    81,    82,   617,  1245,  1251,
-     831,   996,  1396,  1562,   832,  1515,  1596,   833,  1564,   834,
-     835,  1000,   158,   293,    83,   628,   395,  1346,  1347,   396,
-    1545,  1404,  1451,  1405,  1454,   876,  1273,  1155,   600,   423,
+      -1,     2,     3,    80,   840,    81,    82,   617,  1255,  1261,
+     831,   999,  1406,  1572,   832,  1525,  1606,   833,  1574,   834,
+     835,  1003,   158,   293,    83,   628,   395,  1356,  1357,   396,
+    1555,  1414,  1461,  1415,  1464,   876,  1283,  1163,   600,   423,
      424,   425,   426,   259,   366,   367,    86,    87,    88,    89,
-      90,    91,   260,   911,  1474,  1536,   683,  1295,  1298,  1301,
-    1495,  1499,  1503,  1551,  1554,  1557,   907,   908,  1031,   873,
+      90,    91,   260,   914,  1484,  1546,   683,  1305,  1308,  1311,
+    1505,  1509,  1513,  1561,  1564,  1567,   910,   911,  1034,   873,
      654,   692,    93,    94,    95,    96,   261,   161,   439,   220,
-    1139,   262,   263,   264,   496,   271,   818,   989,   567,   392,
+    1147,   262,   263,   264,   496,   271,   818,   992,   567,   392,
      568
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1204
+#define YYPACT_NINF -1208
 static const yytype_int16 yypact[] =
 {
-    4748,    20,    62,  4843, -1204, -1204,  2459,   124,   -17,  -130,
-      -9,    -3,   143,   160,   198,   228,   100,   109,   -82,    51,
-      95,     9,   117,   137,    21,   149,   167,   239,   299,   308,
-     373,   238,   350,   360,   244,   379,   548,   472,   210,   274,
-     388,   -16,   315,    82,    82,   341,   297,    34,   -21,   456,
-     406,    19,    40,   478,   465,   432,   559,   569,  2659,   594,
-     392,   440,   463,    23,    37, -1204,   473, -1204,   607,   613,
-     491, -1204,   659,   665,    13,    27, -1204, -1204, -1204,  1418,
-   -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204,
-   -1204, -1204, -1204, -1204, -1204,    36, -1204, -1204,     8, -1204,
-     662, -1204, -1204, -1204,   190,   296,   309,   403,   430,   457,
-     467,   508,   528,   551,   552,   571,   593,   617,   623,   636,
-     637,   640,   641,   646,   647,   650,   672,   512,   529,   543,
-     570,   612,   616,   622, -1204, -1204, -1204,   751,   626,   651,
-     654, -1204, -1204, -1204, -1204, -1204, -1204, -1204,  1418,  1418,
-    1418, -1204, -1204,  4240,  2405,    47,   767,   355,  3000,   840,
-    1015, -1204,   684,   850,   870,  1418,   475,   475, -1204,  1418,
-   -1204, -1204, -1204, -1204, -1204, -1204,  1418,  4447,  1418,  1418,
-     669,  1418,  4447,  1418,  1418,   713,  4447,  1418,  1418,  3000,
-     716,   714, -1204,  4447,   773,   789,  2659,  2659,  2659,   794,
-   -1204, -1204, -1204, -1204,   795,   813,   814,  3000,  1418,   927,
-    3000,    23,   757,   819,    82,    82,    82,  1418,  1418,  -115,
-   -1204,   -97,    82,   820,   833,   836,  4284,   -78,   -62,   834,
-     837,   848,  2659,  2659,  3000,   868,    25,   778, -1204,  1011,
-   -1204,   845,   851,   874,  2659,  2659,   880,   888,   138, -1204,
-     894,    28,  1031,  1067,  1075,   600,  3163,  1418,   371, -1204,
-   -1204,   169, -1204,  1055, -1204,  1059,  1418,  1418,  1418,   898,
-    1418,   928,   984,  1418,  1418, -1204, -1204,  1418,  1080, -1204,
-    1103, -1204,  1104, -1204,   303,  1184, -1204,  3000,  3000,   947,
-    1418,  1116,   950, -1204,  1127,  1418,  1418,  1418,  1418,  1418,
-    1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,
-    1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,
-    1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,
-    1418,  1418,  1418,  1418,  1418,  1418,  1418,   475,   475,   475,
-     475,   475,   475,   475,   475,   475,   475,   475,  1418,   475,
-     475,   475,   977,   977,   977,  4447,  7187,   136,  4447,  6428,
-     209,   976,  1145,   987,  1004, -1204,  1023,  3899,  1170, -1204,
-   -1204,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,  1418,
-    1418,  1418,  1418,  1418,  1418,  1418, -1204, -1204, -1204,  1348,
-     673,   -71, -1204,    41,  5700,   468,   479,  7208,  4447,   575,
-   -1204,   670,  7229,  7250,  1418,  7271,   680,  7292,  7313,  1418,
-     681,  7334,  7355,  1192,  1418,  1418,   699,  1418,  1418,  1195,
-    1212,  1212,  1418,  1058,  1062,  1071,  1078,  1418,  1418,  1418,
-    1232,  5620,  1081,  1241,  1090, -1204, -1204,    88, -1204, -1204,
-    5726,  5752,    82,    82,   355,   355,   113,  1418,  1418,  1418,
-    4284,  4284,  1418,  3899,   187, -1204,  1418,  1418,  1418,  1418,
-    1418,  1245,  1256,  1276,  1418,  1278, -1204,  1418,  1418,   488,
-   -1204,  4447,  4447,  4447,  1297,  1298,  1418,  1418,    80,  4071,
-    1301,  1306, -1204,  1418, -1204, -1204, -1204,  1142,  1144,  1146,
-    1147,  4447,   977, -1204,  7376, -1204,   702,  1418,  3326, -1204,
-   -1204,  7397,  7418,  7439,  1196,  5778, -1204,  1148,  4511,  7460,
-    6451, -1204, -1204,  2035, -1204,  2119,  1418, -1204,  1157,   703,
-    1418,  6474,   265,  1418, -1204,  7481,  6497,  7502,  6520,  7523,
-    6543,  7544,  6566,  7565,  6589,  7586,  6612,  7607,  6635,  7628,
-    6658,  7649,  6681,  7670,  6704,  7691,  6727,  5804,  5830,  7712,
-    6750,  7733,  6773,  7754,  6796,  7775,  6819,  7796,  6842,  7817,
-    6865,  5856,  5882,  5908,  5934,  5960,  5986, -1204,   213,   480,
-     255,   481,  1155,  1161,  1163,  1173,  1174,  1175,   263,  1518,
-    1176,  1183,  1179,   771,   136, -1204,  3000,   775,   205,   662,
-    1418,  1344,  1347,    24,  1185, -1204,    67,    11,    26,    83,
-   -1204, -1204,  4530,  1123,  1139,   830,   830,   592,   592,   592,
-     592,   106,   106,   977,   977,   977,   977,    33, -1204,  1418,
-    1349,     3,  4447,  1350,  4447,  1418,  1351, -1204,  1356,  1355,
-     475,  1358,  4447,  4447,  1236,  1359,  1360,  7838,  1361,  1243,
-    1362,  1363,  7859,  1244,  1364,  1371,  1418,  7880,  4892,  1208,
-    7901,  7922,  1418,  3000,  1376,  1375,  7943,  4604,  4604,  4604,
-    4604,  7964,  7985,  8006,  3000,  4447,  1215, -1204, -1204,  2887,
-    3040,    82,  1418,  1418, -1204, -1204,  1213,  1214,  4284,  6012,
-    6038,  6064,  5674,   -30,    82,  3203,  8027,  4920,  8048,  8069,
-    8090,  1418,  1381, -1204,  1418,  8111, -1204,  6888,  6911, -1204,
-     824,   827,   853, -1204, -1204,  6934,  6957, -1204,  4447, -1204,
-    4447,  6980,   -91,  1221,  4948,  4447,  4447,  4447,  4447,   856,
-   -1204, -1204,  4551,  4447,   977, -1204,  1382,  1384,  1387,  1227,
-    1418,  3366,  1418,  1418, -1204,    15, -1204, -1204,  1225,  3000,
-    1392,  7003,   449, -1204,  4976, -1204, -1204, -1204, -1204, -1204,
-   -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204,
-   -1204, -1204, -1204, -1204, -1204, -1204, -1204,  1418,  1418, -1204,
-   -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204,
-   -1204,  1418,  1418,  1418,  1418,  1418,  1418, -1204,   475, -1204,
-   -1204,  4447, -1204,  4447,   475, -1204, -1204,   475,   475,   475,
-   -1204, -1204,  1418, -1204,   475,  1234,  1418,  1394,  1235,    93,
-    1418,  1397,  1399,  1736, -1204,  1400,  1251,    23,  1403, -1204,
-    4447,  4447,  4447,  4447,  1418, -1204,  1246,  1254,  1249, -1204,
-    1417, -1204, -1204, -1204, -1204, -1204,  7026, -1204, -1204,  1273,
-     475,   362, -1204,   372,  6090, -1204,  1419, -1204, -1204,    82,
-     575, -1204,   779,  3000,  3000,  1423,  3000,   963,  3000,  3000,
-    1424,  1388,  3000,  3000,  1789,  1446,  1448,  4447,  1449,  1450,
-     674, -1204, -1204,  1453, -1204,  1454,  1260,  8342, -1204,  1295,
-    1300,  1302,  1459,  1463,  1464,  1466,   861,  1469,  3529, -1204,
-   -1204,   214,  6116,  6142, -1204, -1204,  5004,  -119,    82,    82,
-      82,  1470,  1471,  1304,  1312,    46,    49,   -15, -1204,   253,
-   -1204,   -30,  1472,  1474,  1477,  1478,  1479,  8342, -1204,  2202,
-    1307,  1475,  1481,  1482,  1426,  1418,  1485,  1501,   865,   899,
-     424, -1204, -1204,   903,   906,   907,   911, -1204,  1418,   915,
-    3000,  3000,  3000,  1504,  6168, -1204,  4571,   533,  1505,  1506,
-    3000,  1340, -1204,  1508,  1513, -1204,  1509, -1204,  8132,  7049,
-    8153,  7072,  8174,  7095,  8195,  7118, -1204,   455,   501,  1353,
-    1352,  1354,  1365,  8216,  1366,   136,  2488, -1204,   136,   269,
-    1357,  1514,  2610, -1204, -1204, -1204,    23,  1418, -1204,   920,
-   -1204,   921,   924,   925,   930,  8342,  1369,  1418,  1418,  3000,
-    1367, -1204,  1368, -1204,  1517,    57,  1520,  1418,  3815,    48,
-    1370,  1372,  1447,  1447,  3000,  1521,  1373,  1374,  1522,  1528,
-    3000,  1377,  1531,  1533, -1204,  1535,  3000,   934,  3000,  3000,
-    1538,  1540, -1204,  3000,  1543,  1544,  1545,  1547,  3000,  3000,
-    3000, -1204,  1548,   745, -1204,  1418,  1418,  1418,  1389,  1390,
-    -106,   -69,   -64,  1393, -1204,  3000,  1418, -1204,  1541, -1204,
-    1556, -1204, -1204,  4284,   542,  2837, -1204,  1395,  1396,  3489,
-   -1204,  4447, -1204, -1204, -1204,  1398,  3603, -1204, -1204,  1405,
-    1401,  1559, -1204, -1204, -1204, -1204,  8342, -1204,  1565,  1569,
-    1465, -1204,  1418,  1418,  1418, -1204,  1573,   790,  1411,  1577,
-   -1204,   397, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204,
-   -1204, -1204, -1204, -1204,   475, -1204, -1204, -1204, -1204,  3000,
-   -1204,  3000,   662,  1418,  1578,  1561,    24, -1204,  1579,  7141,
-      23, -1204,  1580,  1584,  1585,  1586,  1418,  6194,  6220,   946,
-   -1204,  1418,  1589, -1204, -1204,   475, -1204,  6246,  4604,  8342,
-   -1204, -1204,  1418,  1418,    82,  1590,  1594,  1595, -1204,  1418,
-    1418, -1204, -1204,  1596,  1418, -1204, -1204,  1598,  1602,  1433,
-    1603,  1476,  1418, -1204,  1604,  3000,  3000,  3000,  3000,  1605,
-    1141,  1606,  1418, -1204,  4604,  5032,  8237,  2630,   355,   355,
-      82,  1607,    82,  1608,    82,  1609,  1418,    72,  1451,  8258,
-   -1204, -1204,  5060,   264, -1204,  1610,   101,  1611,  3000,    82,
-     101,  1612,   978,  1418, -1204, -1204, -1204,   -91, -1204, -1204,
-    3000,  4836,   140,  8279, -1204, -1204,  3864,  3000, -1204, -1204,
-    1457,  1613,  1617,  1618,  3624, -1204,  1619,  1621, -1204,  1460,
-   -1204, -1204, -1204, -1204, -1204,   464,  8342,  1418,  1418,  3000,
-    1458,   979,  8342, -1204,  1624,  1418,  8342, -1204,  5088,  5116,
-     340, -1204, -1204, -1204,  5144,  5172, -1204,  5200,  1628, -1204,
-    3000, -1204,  1572,  1629,  8342, -1204,  1633,  1634,  1635,  1636,
-   -1204,  1473, -1204, -1204,  5647,  3778,  1637,  1480, -1204,  1418,
-   -1204,  1483,  1484,   327, -1204,  1486,   329, -1204,  1487,   349,
-   -1204,  1488,  7164,  1639,  3000,  1641,  1489,  1418, -1204,  3652,
-     351, -1204,  1010,   353,   390, -1204,  1643,  5228,  1536,  1418,
-   -1204,  1418, -1204, -1204,  4447,  3981,  1646,  1507, -1204, -1204,
-   -1204, -1204, -1204,    23, -1204,  1560, -1204,  1418,  6272,  6298,
-   -1204,  3000,  1418,  1647, -1204,  6324, -1204, -1204,  1655,  1672,
-    1674,  1676,  1680,  1681,  1013,  1519, -1204, -1204, -1204, -1204,
-   -1204,  3000,  4447, -1204, -1204,   355,  4864, -1204, -1204,  4284,
-     -30,  4284,   -30,  4284,   -30,  1683, -1204,  1014,  3000, -1204,
-    5256,    82,  1685,  4447,    82, -1204, -1204,  1418,  5284,  5312,
-    1021, -1204, -1204,  1686,  1688, -1204,  1524,  8342,  1418,  1418,
-    1024,  8342, -1204,  1418,  1028,  1033, -1204, -1204, -1204, -1204,
-   -1204, -1204,  1525,  1418,  1036,  1037,  1526,  1418, -1204,  5340,
-     417,   663,  5368,   421,   764,  5396,   423,   780, -1204,  3000,
-    1693,  1620,  4111,  1530,   425, -1204,  1042,   435,  4193, -1204,
-   -1204,  1696, -1204, -1204,  1418,  8300,  6350,     1,  6376,  1699,
-   -1204, -1204,  1701, -1204, -1204,  1418,  5424,  1702,  1703, -1204,
-    5452,  1704,  1418,  1705,  1706,  1418,  1707,  1709,  1418,  1710,
-    1546, -1204,  1418, -1204,   -30, -1204,  4447,  1711,  3652, -1204,
-   -1204,  1048, -1204,  1418, -1204,  3000,  1418,  2235,  4027,  6402,
-   -1204, -1204, -1204, -1204, -1204,  1549,  5480, -1204, -1204,  1550,
-    5508, -1204, -1204,  1551,  5536, -1204,  1713,  4212,   852,  4324,
-    1060, -1204,   448,  1061,  1717,  1553,  8321,  1064,  5564,   371,
-   -1204, -1204,   475,  8342, -1204,  1418,   -30,  1719,   -30,  1720,
-     -30,  1722, -1204, -1204, -1204, -1204,   -30,  1723,  4447,  1724,
-   -1204,   475, -1204,  1562,  1725,  1068,  4400,  1087,  5592,   858,
-   -1204,  1563,   912, -1204,  1564,   954, -1204,  1566,  1025, -1204,
-    1088, -1204,  1095, -1204,  1567,  3000, -1204,  1418, -1204,   662,
-   -1204,  1730,  1734,   -30,  1735,   -30,  1739,   -30, -1204,  1740,
-     475,  1741,   475,  1096,  4419, -1204, -1204, -1204,  1032, -1204,
-    1039, -1204,  1056, -1204, -1204, -1204,  1128, -1204,  1742,   662,
-    1743,  1746,  1747,   475,  1748, -1204, -1204, -1204, -1204, -1204,
-   -1204, -1204
+    4862,     4,    76,  4961, -1208, -1208,  2615,     7,   -22,   -82,
+     -78,    22,   205,   212,   240,   250,   -59,   118,  -129,    99,
+     103,     5,   124,   130,     9,   161,   165,   252,   327,   355,
+     407,   248,   366,   378,   265,   372,   214,   308,    95,   302,
+     416,   -70,   312,    63,    63,   315,   218,    36,   143,   435,
+     439,     8,    33,   444,   442,   101,   567,   579,  2787,   582,
+     452,   458,   466,    11,    30, -1208,   470, -1208,   600,   603,
+     471, -1208,   652,   667,    16,    17, -1208, -1208, -1208,  4672,
+   -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208,
+   -1208, -1208, -1208, -1208, -1208,    19, -1208, -1208,     2, -1208,
+     762, -1208, -1208, -1208,   259,   436,   453,   461,   469,   474,
+     490,   493,   494,   503,   511,   534,   543,   544,   575,   587,
+     594,   595,   601,   605,   609,   610,   614,   512,   515,   516,
+     519,   520,   528,   539, -1208, -1208, -1208,   700,   563,   564,
+     572, -1208, -1208, -1208, -1208, -1208, -1208, -1208,  4672,  4672,
+    4672, -1208, -1208,  4258,    97,    20,   739,   472,  3119,   752,
+     568, -1208,   573,   759,   763,  4672,   419,   419, -1208,  4672,
+   -1208, -1208, -1208, -1208, -1208, -1208,  4672,  4468,  4672,  4672,
+     623,  4672,  4468,  4672,  4672,   627,  4468,  4672,  4672,  3119,
+     632,   648, -1208,  4468,   642,   647,  2787,  2787,  2787,   656,
+   -1208, -1208, -1208, -1208,   680,   681,   684,  3119,  4672,   785,
+    3119,    11,   653,   663,    63,    63,    63,  4672,  4672,    84,
+   -1208,    91,    63,   678,   694,   713,  4424,    94,     3,   721,
+     729,   732,  2787,  2787,  3119,   733,    26,   650, -1208,   866,
+   -1208,   736,   743,   756,  2787,  2787,   696,   734,   581, -1208,
+     754,    18,   913,   926,   931,   502,  3285,  4672,  2233, -1208,
+   -1208,  1675, -1208,   965, -1208,   969,  4672,  4672,  4672,   809,
+    4672,   814,   861,  4672,  4672, -1208, -1208,  4672,   985, -1208,
+     998, -1208,  1006, -1208,   533,  1020, -1208,  3119,  3119,   827,
+    4672,  1013,   847, -1208,  1019,  4672,  4672,  4672,  4672,  4672,
+    4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,
+    4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,
+    4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,
+    4672,  4672,  4672,  4672,  4672,  4672,  4672,   419,   419,   419,
+     419,   419,   419,   419,   419,   419,   419,   419,  4672,   419,
+     419,   419,   898,   898,   898,  4468,  7395,    80,  4468,  6636,
+     177,   897,  1058,   917,   935, -1208,   907,  5047,  1067, -1208,
+   -1208,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,  4672,
+    4672,  4672,  4672,  4672,  4672,  4672, -1208, -1208, -1208,  1154,
+     615,  -102, -1208,   113,  5908,   -71,    49,  7416,  4468,  3904,
+   -1208,   612,  7437,  7458,  4672,  7479,   622,  7500,  7521,  4672,
+     640,  7542,  7563,  1084,  4672,  4672,   645,  4672,  4672,  1098,
+    1103,  1103,  4672,   944,   945,   947,   948,  4672,  4672,  4672,
+    1110,  5828,   950,  1113,   946, -1208, -1208,   -83, -1208, -1208,
+    5934,  5960,    63,    63,   472,   472,    71,  4672,  4672,  4672,
+    4424,  4424,  4672,  5047,   104, -1208,  4672,  4672,  4672,  4672,
+    4672,  1114,  1116,  1117,  4672,  1121, -1208,  4672,  4672,   900,
+   -1208,  4468,  4468,  4468,  1122,  1123,  4672,  4672,  -127,  4208,
+    1131,  1137, -1208,  4672, -1208, -1208, -1208,   968,   970,   972,
+     978,  4468,   898, -1208,  7584, -1208,   660,  4672,  3451, -1208,
+   -1208,  7605,  7626,  7647,  1024,  5986, -1208,   983,  4576,  7668,
+    6659, -1208, -1208,  1603, -1208,  1805,  4672, -1208,   991,   665,
+    4672,  6682,   153,  4672, -1208,  7689,  6705,  7710,  6728,  7731,
+    6751,  7752,  6774,  7773,  6797,  7794,  6820,  7815,  6843,  7836,
+    6866,  7857,  6889,  7878,  6912,  7899,  6935,  6012,  6038,  7920,
+    6958,  7941,  6981,  7962,  7004,  7983,  7027,  8004,  7050,  8025,
+    7073,  6064,  6090,  6116,  6142,  6168,  6194, -1208,   117,    90,
+     210,   190,   989,   993,   996,  1009,  1011,  1012,   211,  1774,
+    1017,  1023,  1021,   670,    80, -1208,  3119,   671,   148,   762,
+    4672,  1160,  1188,    14,  1025, -1208,    38,    13,    15,    41,
+   -1208, -1208,  4595,  2046,  1866,   701,   701,   421,   421,   421,
+     421,   457,   457,   898,   898,   898,   898,    23, -1208,  4672,
+    1189,    27,  4468,  1192,  4468,  4672,  1194, -1208,  1197,  1196,
+     419,  1198,  4468,  4468,  1081,  1199,  1202,  8046,  1203,  1082,
+    1204,  1205,  8067,  1091,  1207,  1208,  4672,  8088,  5100,  1042,
+    8109,  8130,  4672,  3119,  1216,  1218,  8151,  4628,  4628,  4628,
+    4628,  8172,  8193,  8214,  3119,  4468,  1051, -1208, -1208,  1836,
+    1926,    63,  4672,  4672, -1208, -1208,  1054,  1055,  4424,  6220,
+    6246,  6272,  5882,   349,    63,  2650,  8235,  5128,  8256,  8277,
+    8298,  4672,  1220, -1208,  4672,  8319, -1208,  7096,  7119, -1208,
+     691,   698,   705, -1208, -1208,  7142,  7165, -1208,  4468, -1208,
+    4468,  7188,   -27,  1062,  5156,  4468,  4468,  4468,  4468,   706,
+   -1208, -1208,  4699,  4468,   898, -1208,  1226,  1227,  1228,  1065,
+    4672,  2827,  4672,  4672, -1208,    29, -1208, -1208,  1064,  3119,
+    1233,  7211,    39, -1208,  5184, -1208, -1208, -1208, -1208, -1208,
+   -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208,
+   -1208, -1208, -1208, -1208, -1208, -1208, -1208,  4672,  4672, -1208,
+   -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208,
+   -1208,  4672,  4672,  4672,  4672,  4672,  4672, -1208,   419, -1208,
+   -1208,  4468, -1208,  4468,   419, -1208, -1208,   419,   419,   419,
+   -1208, -1208,  4672, -1208,   419,  1074,  4672,  1237,  1075,    31,
+    4672,  1238,  1241,  2004, -1208,  1242,  1079,    11,  1244, -1208,
+    4468,  4468,  4468,  4468,  4672, -1208,  1085,  1086,  1080, -1208,
+    1250, -1208, -1208, -1208, -1208, -1208,  7234, -1208, -1208,  1104,
+     419,   229, -1208,   264,  6298, -1208,  1254, -1208, -1208,    63,
+    3904, -1208,   744,  3119,  3119,  1257,  3119,   819,  3119,  3119,
+    1261,  1206,  3119,  3119,  2181,  1262,  1266,  4468,  1267,  1269,
+    4984, -1208, -1208,  1265, -1208,  1275,  1119,  8550, -1208,  1124,
+    1125,  1126,  1282,  1283,  1284,  1289,   711,  1293,  2993, -1208,
+   -1208,   116,  6324,  6350, -1208, -1208,  5212,   -12,    63,    63,
+      63,  1294,  1295,  1142,  1315,  1132,    42,    45,    46,    47,
+     398, -1208,   157, -1208,   349,  1316,  1318,  1319,  1321,  1339,
+    8550, -1208,  2263,  1148,  1343,  1350,  1351,  1296,  4672,  1353,
+    1365,   718,   719,   -68, -1208, -1208,   731,   741,   749,   753,
+   -1208,  4672,   766,  3119,  3119,  3119,  1368,  6376, -1208,  4730,
+     894,  1370,  1376,  3119,  1201, -1208,  1375,  1378, -1208,  1377,
+   -1208,  8340,  7257,  8361,  7280,  8382,  7303,  8403,  7326, -1208,
+     297,   236,  1219,  1213,  1222,  1223,  8424,  1224,    80,  2420,
+   -1208,    80,   243,  1217,  1386,  2519, -1208, -1208, -1208,    11,
+    4672, -1208,   769, -1208,   770,   773,   778,   782,  8550,  1229,
+    4672,  4672,  3119,  1221, -1208,  1230, -1208,  1388,    40,  1392,
+    4672,  3949,    44,  1225,  1231,  1330,  1330,  3119,  1400,  1234,
+    1236,  1405,  1407,  3119,  1240,  1410,  1411, -1208,  1413,  3119,
+     797,  3119,  3119,  1415,  1414, -1208,  3119,  1416,  1418,  1422,
+    1423,  3119,  3119,  3119, -1208,  1424,   162, -1208,  4672,  4672,
+    4672,  1248,  1260,  -103,   -89,    59,  1272, -1208,  3119, -1208,
+    4672, -1208,  1429, -1208,  1430, -1208,  1432, -1208,  1436, -1208,
+   -1208,  4424,   726,  2953, -1208,  1270,  1271,  3617, -1208,  4468,
+   -1208, -1208, -1208,  1273,  2539, -1208, -1208,  1278,  1279,  1444,
+   -1208, -1208, -1208, -1208,  8550, -1208,  1445,  1446,  1332, -1208,
+    4672,  4672,  4672, -1208,  1448,   374,  1286,  1455, -1208,   484,
+   -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208,
+   -1208, -1208,   419, -1208, -1208, -1208, -1208,  3119, -1208,  3119,
+     762,  4672,  1456,  1459,    14, -1208,  1458,  7349,    11, -1208,
+    1460,  1462,  1463,  1466,  4672,  6402,  6428,   806, -1208,  4672,
+    1461, -1208, -1208,   419, -1208,  6454,  4628,  8550, -1208, -1208,
+    4672,  4672,    63,  1467,  1470,  1471, -1208,  4672,  4672, -1208,
+   -1208,  1481,  4672, -1208, -1208,  1494,  1495,  1326,  1497,  1382,
+    4672, -1208,  1499,  3119,  3119,  3119,  3119,  1504,   988,  1509,
+    4672, -1208,  4628,  5240,  8445,  5016,   472,   472,    63,  1511,
+      63,  1513,    63,  1529,  4672,   150,  1364,  8466, -1208, -1208,
+   -1208, -1208,  5268,   204, -1208,  1533,  2052,  1537,  3119,    63,
+    2052,  1538,   822,  4672, -1208, -1208, -1208,   -27, -1208, -1208,
+    3119,  5044,   198,  8487, -1208, -1208,  3998,  3119, -1208, -1208,
+    1379,  1543,  1544,  1547,  3399, -1208,  1549,  1548, -1208,  1387,
+   -1208, -1208, -1208, -1208, -1208,   299,  8550,  4672,  4672,  3119,
+    1383,   832,  8550, -1208,  1553,  4672,  8550, -1208,  5296,  5324,
+     324, -1208, -1208, -1208,  5352,  5380, -1208,  5408,  1556, -1208,
+    3119, -1208,  1501,  1559,  8550, -1208,  1562,  1567,  1573,  1574,
+   -1208,  1417, -1208, -1208,  5855,  3418,  1575,  1419, -1208,  4672,
+   -1208,  1412,  1420,   254, -1208,  1425,   258, -1208,  1427,   260,
+   -1208,  1428,  7372,  1576,  3119,  1578,  1431,  4672, -1208,  3783,
+     263, -1208,   836,   283,   293, -1208,  1582,  5436,  1473,  4672,
+   -1208,  4672, -1208, -1208,  4468,  3574,  1586,  1433, -1208, -1208,
+   -1208, -1208, -1208,    11, -1208,  1474, -1208,  4672,  6480,  6506,
+   -1208,  3119,  4672,  1591, -1208,  6532, -1208, -1208,  1597,  1600,
+    1605,  1606,  1607,  1611,   845,  1435, -1208, -1208, -1208, -1208,
+   -1208,  3119,  4468, -1208, -1208,   472,  5072, -1208, -1208,  4424,
+     349,  4424,   349,  4424,   349,  1612, -1208,   849,  3119, -1208,
+    5464,    63,  1613,  4468,    63, -1208, -1208,  4672,  5492,  5520,
+     855, -1208, -1208,  1614,  1615, -1208,  1449,  8550,  4672,  4672,
+     856,  8550, -1208,  4672,   859,   860, -1208, -1208, -1208, -1208,
+   -1208, -1208,  1450,  4672,   883,   884,  1447,  4672, -1208,  5548,
+     322,   990,  5576,   335,  1033,  5604,   404,  1050, -1208,  3119,
+    1621,  1551,  3159,  1454,   412, -1208,   888,   454,  3731, -1208,
+   -1208,  1623, -1208, -1208,  4672,  8508,  6558,    25,  6584,  1630,
+   -1208, -1208,  1632, -1208, -1208,  4672,  5632,  1633,  1637, -1208,
+    5660,  1639,  4672,  1640,  1642,  4672,  1643,  1644,  4672,  1645,
+    1477, -1208,  4672, -1208,   349, -1208,  4468,  1647,  3783, -1208,
+   -1208,   896, -1208,  4672, -1208,  3119,  4672,  2449,  4164,  6610,
+   -1208, -1208, -1208, -1208, -1208,  1480,  5688, -1208, -1208,  1482,
+    5716, -1208, -1208,  1483,  5744, -1208,  1649,  3750,  1180,  3325,
+     899, -1208,   456,   903,  1652,  1485,  8529,   904,  5772,  2233,
+   -1208, -1208,   419,  8550, -1208,  4672,   349,  1654,   349,  1667,
+     349,  1668, -1208, -1208, -1208, -1208,   349,  1669,  4468,  1672,
+   -1208,   419, -1208,  1510,  1680,   908,  1181,   912,  5800,  1264,
+   -1208,  1514,  1380, -1208,  1516,  1391, -1208,  1520,  1408, -1208,
+     924, -1208,   925, -1208,  1522,  3119, -1208,  4672, -1208,   762,
+   -1208,  1681,  1691,   349,  1692,   349,  1694,   349, -1208,  1698,
+     419,  1700,   419,   928,  1372, -1208, -1208, -1208,  1472, -1208,
+    1663, -1208,  1868, -1208, -1208, -1208,   929, -1208,  1701,   762,
+    1702,  1703,  1705,   419,  1706, -1208, -1208, -1208, -1208, -1208,
+   -1208, -1208
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-   -1204, -1204, -1204, -1204,   752, -1204, -1204, -1204, -1204,   316,
-   -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204, -1204,
-   -1204, -1204,  -336,     0, -1204,  1311, -1204, -1204, -1204, -1204,
-   -1204, -1204, -1204, -1204, -1204,    50, -1204,   746,  1758, -1204,
-   -1204, -1204, -1204,    -1,  -425,  -222, -1204, -1204, -1204, -1204,
-   -1204, -1204,  1759, -1204, -1204, -1204, -1204, -1204, -1204, -1204,
-   -1204, -1204, -1204, -1204, -1204, -1204,  -900,  -893, -1204, -1204,
-    1343, -1204, -1204, -1204, -1204, -1204,   591, -1204,    35, -1204,
-   -1203,   967,   132,  1134,  1511,  -201,   639, -1204,    -6,    -5,
-    -330
+   -1208, -1208, -1208, -1208,   708, -1208, -1208, -1208, -1208,   266,
+   -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208, -1208,
+   -1208, -1208,  -331,    54, -1208,  1325, -1208, -1208, -1208, -1208,
+   -1208, -1208, -1208, -1208, -1208,  -149, -1208,   709,  1723, -1208,
+   -1208, -1208, -1208,     0,  -437,  -222, -1208, -1208, -1208, -1208,
+   -1208, -1208,  1724, -1208, -1208, -1208, -1208, -1208, -1208, -1208,
+   -1208, -1208, -1208, -1208, -1208, -1208,  -631,  -827, -1208, -1208,
+    1307, -1208, -1208, -1208, -1208, -1208,   217, -1208,    21, -1208,
+   -1207,   779,  -140,  1069,   635,  -209,   596, -1208,    -6,    -5,
+    -333
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -447
+#define YYTABLE_NINF -452
 static const yytype_int16 yytable[] =
 {
-     162,   163,    85,   168,   453,  1312,   159,  1484,   569,   838,
-     434,  1064,   289,   180,  1062,   180,   469,   578,   280,   676,
-     677,   586,   948,   236,   590,   185,     4,   269,   816,   465,
-     185,   466,   282,   482,   166,   442,   443,   825,   228,   442,
-     443,   272,   286,   232,   239,   233,   240,   165,   442,   443,
-     901,   360,  1057,  1049,  1151,  1059,   444,   442,   443,   513,
-     902,   515,     5,  1144,  1190,   901,  1191,  1354,   903,   904,
-     151,   152,   905,   906,   445,   902,   442,   443,   219,   221,
-     497,   227,   176,   903,   904,   442,   443,   905,   906,   177,
-     442,   443,   229,   455,   621,   294,   230,   979,   241,   622,
-     211,  1192,   456,  1193,    97,   248,  1194,   231,  1195,   457,
-     101,   102,   103,   212,   213,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   250,   164,  1400,   826,
-     827,   828,   829,   585,   237,   131,   132,   133,  1321,   170,
-    1058,   135,   136,  1060,   839,   167,   365,  1061,  1414,   251,
-     391,   393,   252,   361,   362,   253,   171,   254,   169,   151,
-     152,  1062,  1485,   181,   290,   181,   291,   497,   255,  -444,
-     182,   292,   821,   949,   281,    42,    43,    44,    45,    46,
-     238,   467,   186,    50,   270,   817,    53,   822,   283,   483,
-     287,   273,   442,   443,   172,   830,   623,   288,   839,   980,
-     981,   624,   585,   669,   670,   178,   589,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   498,   383,
-     384,   176,   138,   685,   173,   385,   215,   216,   820,   141,
-     142,   143,   442,   443,  1303,   707,   217,   188,   806,   437,
-     438,   708,   810,   218,   823,   450,  1309,   446,   671,   179,
-     150,   454,   382,   383,   384,   452,   174,   442,   443,   385,
-     156,   207,   218,   495,   208,   175,  1122,   144,   145,   146,
-     147,   183,  1517,   678,   731,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   151,
-     152,   184,   478,   385,   479,   196,   480,   189,   197,   157,
-     198,   292,  1322,   187,   371,   372,   373,   374,   375,   376,
-     377,   378,   379,   380,   381,   498,   383,   384,   419,   420,
-     421,   188,   385,   570,   571,   572,   573,   574,   575,   576,
-     577,   442,   443,   580,   581,   582,   144,   145,   146,   147,
-     144,   145,   146,   147,   295,   223,   296,   684,   224,   364,
-     591,   225,  1583,   190,   461,   462,   151,   152,   442,   443,
-     151,   152,   191,   809,    97,   248,   474,   475,   787,   192,
-     101,   102,   103,   788,  1045,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   250,   442,   443,   193,
-     144,   145,   146,   147,   194,   131,   132,   133,   442,   443,
-     790,   135,   136,  1063,   195,   791,   151,   152,   800,   251,
-     151,   152,   252,   788,  1307,   253,  -445,   254,   209,    42,
-      43,    44,    45,   365,   365,   199,   888,    50,   255,   210,
-      53,   215,   216,   390,    99,    42,    43,    44,    45,    46,
-     297,   217,   298,    50,   151,   152,    53,   235,   226,   516,
-    1421,   480,  1424,   299,  1427,   300,   292,   674,   675,   390,
-      99,   442,   443,   442,   443,   438,   214,   125,   126,   127,
-     128,   129,   130,   244,   442,   443,   245,  1369,   134,  1371,
-       7,     8,   138,   442,   443,   442,   443,   442,   443,   141,
-     142,   143,   222,   125,   126,   127,   128,   129,   130,  1373,
-     234,  1381,   743,  1383,   134,   148,   398,  1005,  1062,   243,
-     150,  1062,   633,   204,  1062,   257,   205,  1006,   206,   242,
-     156,  1094,   633,   495,   442,   443,   596,    19,    20,   597,
-      22,    23,   598,    25,   599,    27,   266,    28,   151,   152,
-    1384,    32,    33,   246,    35,    36,    37,   301,  -446,   302,
-      40,   442,   443,   247,  1508,   442,   443,   442,   443,   442,
-     443,   139,   140,   497,   812,   151,   152,  1462,   811,   442,
-     443,  1465,  1081,  1468,   303,  1476,   304,   160,   265,    60,
-      61,    62,   442,   443,   267,  1478,   200,   139,   140,   201,
-     151,   152,   202,   275,   203,  1062,   988,   954,  1538,   276,
-    1111,   305,   901,   306,   848,   633,  1549,   268,  1552,  1336,
-    1555,   307,   902,   308,  1337,   626,  1558,   274,   627,  1119,
-     903,   904,  1121,  1123,   905,   906,   629,   789,   792,   627,
-     788,   793,   878,   878,   878,   878,  1062,   277,   487,  1062,
-     699,   488,  1062,   278,   489,  1062,   490,    99,  1112,   279,
-     285,   633,   309,  1588,   310,  1590,   341,  1592,   371,   372,
+     162,   163,   434,    85,   453,   569,   289,   676,   677,   180,
+       4,  1322,   236,   185,   578,   269,   469,   180,   816,   185,
+     164,   280,   282,   482,   360,   286,   586,   825,   168,   590,
+     465,  1494,   466,   838,   272,   982,   951,   239,   176,   240,
+     228,   707,   165,   390,    99,   177,  1152,   708,  1061,   211,
+    1159,  1063,  1065,  1067,   442,   443,   419,   420,   421,   513,
+     159,   515,   212,   213,   219,   221,   621,   227,   442,   443,
+    1198,   622,  1199,  1364,   442,   443,     5,   125,   126,   127,
+     128,   129,   130,  1070,  1200,   166,  1201,   585,   134,   167,
+     671,   241,   461,   462,   229,   294,   151,   152,   230,   626,
+      97,   284,   627,  1089,   474,   475,   101,   102,   103,   231,
+     174,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   826,   827,   828,   829,   237,   151,   152,   361,
+     362,   131,   132,   133,  1410,   442,   443,   135,   136,  1062,
+     983,   984,  1064,  1066,  1068,   585,   207,   365,   497,   208,
+     391,   393,   244,  1052,  1424,   245,   151,   152,  1191,  1192,
+     456,   290,   181,   291,   139,   140,  -449,   457,   292,   182,
+     181,   839,   238,   186,   589,   270,   287,   821,   817,   822,
+     281,   283,   483,   288,   839,   467,   169,   273,   830,  1495,
+     952,   442,   443,   151,   152,   176,  1331,   232,   188,   233,
+     957,   170,   820,   669,   670,   823,   442,   443,   171,   629,
+     215,   216,   627,   160,   144,   145,   146,   147,   442,   443,
+     217,   138,  1202,   685,  1203,   437,   438,   218,   141,   142,
+     143,   442,   443,   446,   678,  1070,   172,   454,   442,   443,
+    1130,   442,   443,   806,   148,   149,   173,   810,   444,   150,
+     789,   442,   443,   788,   257,   445,   178,   357,   455,   156,
+     179,   358,   200,   442,   443,   201,   223,   684,   202,   224,
+     203,   623,   225,  1072,   731,   787,   624,   175,  1527,  1048,
+     788,   183,   144,   145,   146,   147,   285,   184,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   498,
+     383,   384,   151,   152,   442,   443,   385,   151,   152,   809,
+     189,   144,   145,   146,   147,  1313,   196,  -450,   187,   197,
+    1071,   198,   188,   570,   571,   572,   573,   574,   575,   576,
+     577,   151,   152,   580,   581,   582,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     792,   442,   443,   793,   385,   352,   353,   354,  1593,   204,
+     356,   359,   205,  1332,   206,   215,   216,  1317,   790,   800,
+    1235,  1236,   389,   791,   788,   217,   394,   144,   145,   146,
+     147,   190,   226,   397,   399,   402,   403,  1008,   405,   399,
+     407,   408,   633,   399,   411,   412,  1120,   151,   152,   633,
+     399,   442,   443,   192,   591,   442,   443,   442,   443,   191,
+     442,   443,   193,   390,    99,   431,   295,  1379,   296,   901,
+     194,  1381,  1009,  1383,   440,   441,  1391,   633,   199,   902,
+     442,   443,   195,   441,   365,   365,   888,   903,   904,   905,
+     442,   443,   906,   907,   908,   909,  1393,   125,   126,   127,
+     128,   129,   130,   674,   675,  1119,  1394,  1346,   134,   209,
+     633,   438,  1347,   492,   494,   399,   364,   210,   901,   442,
+     443,   442,   443,   501,   502,   503,   214,   505,   902,   222,
+     508,   509,   442,   443,   510,  1472,   903,   904,   905,   234,
+     235,   906,   907,   908,   909,   242,   243,   521,  1475,   879,
+     880,   881,   525,   526,   527,   528,   529,   530,   531,   532,
+     533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
+     543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
+     553,   554,   555,   556,   557,   558,   559,   560,   561,   562,
+     563,   564,   565,   566,   139,   140,    42,    43,    44,    45,
+     487,   442,   443,   488,    50,   579,   489,    53,   490,   442,
+     443,   246,   399,  1069,   370,   399,   743,  1478,   380,   381,
+     382,   383,   384,   247,   812,  1486,   265,   385,   602,   603,
+     604,   605,   606,   607,   608,   609,   610,   611,   612,   613,
+     614,   615,   616,   297,  1070,   298,   275,  1070,   991,   276,
+    1070,   442,   443,   442,   443,   492,   382,   383,   384,   266,
+     299,   637,   300,   385,   848,   267,   642,  1488,   301,  1548,
+     302,   647,   648,   268,   650,   651,   303,   274,   304,   656,
+     277,   305,   811,   306,   661,   662,   663,  1127,   151,   152,
+    1129,  1131,   878,   878,   878,   878,   278,   307,  -451,   308,
+     309,   311,   310,   312,   679,   680,   681,   352,   353,   682,
+     313,   279,   314,   686,   687,   688,   689,   690,   315,   341,
+     316,   695,   342,   343,   697,   698,   344,   345,   399,   399,
+     399,  1070,   891,   705,   706,   346,   711,   151,   152,   897,
+     714,   317,   516,   318,   480,   912,   347,   348,   399,   292,
+     319,   321,   320,   322,   722,   724,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     349,   350,  1070,   711,   385,  1070,   959,   741,  1070,   351,
+     744,  1070,   323,   363,   324,   151,   152,   386,   478,  1431,
+     479,  1434,   480,  1437,   325,   157,   326,   292,   369,  1301,
+    1302,   327,   329,   328,   330,   387,   743,    99,   331,   388,
+     332,  1070,   333,  1070,   334,  1070,   335,   337,   336,   338,
+    1136,   339,   969,   340,   619,   633,   620,   634,   972,   432,
+     404,   973,   974,   975,   409,   633,   958,   639,   977,   414,
+     125,   126,   127,   128,   129,   130,   901,   813,  1013,   417,
+    1014,   134,   401,   633,   418,   643,   902,   406,   633,   468,
+     649,   410,   415,   422,   903,   904,   905,   435,   416,   906,
+     907,   908,   909,   633,  1007,   721,   836,   436,   739,   399,
+     740,   399,   844,   633,   633,   805,   808,   427,   428,   724,
+     850,   429,   447,  1518,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,   864,   633,   476,   926,   385,   448,   870,
+    1012,   633,   470,   927,   877,   877,   877,   877,   633,   633,
+     928,   940,   399,  1019,   633,  1020,  1045,   449,   458,   892,
+     893,   633,   633,  1087,  1088,   896,   459,   139,   140,   460,
+     464,  1214,  1102,   477,   633,  1559,  1090,  1562,   920,  1565,
+     471,   922,     7,     8,   633,  1568,  1091,   472,   484,  1053,
+    1054,  1055,   633,   481,  1092,   399,   633,   399,  1093,  1250,
+     473,   485,   399,   399,   399,   399,   486,   368,  1426,   633,
+     399,  1095,  1138,   633,  1139,  1140,   633,   947,  1141,   949,
+     950,   633,  1598,  1142,  1600,   633,  1602,  1143,   596,    19,
+      20,   597,    22,    23,   598,    25,   599,    27,   413,    28,
+     633,   499,  1177,    32,    33,   500,    35,    36,    37,  1259,
+     504,  1260,    40,   507,   961,   962,   430,   958,   506,   433,
+     583,   511,  1291,   587,  1292,   633,   520,  1326,   963,   964,
+     965,   966,   967,   968,   512,  1352,  1158,  1353,   399,  1259,
+     399,  1392,   514,   463,    60,    61,    62,   522,  1259,   976,
+    1422,   523,  1439,   979,  1440,   524,   517,   985,   633,  1259,
+    1451,  1457,  1459,  1462,  1460,  1463,  1132,   399,   399,   399,
+     399,   998,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,  1259,   633,  1467,  1468,
+     385,   633,  1103,  1487,   385,   593,   518,   519,   592,  1352,
+     901,  1524,   633,   601,  1547,   699,   633,  1259,  1549,  1553,
+     902,  1577,   595,  1578,   399,   788,   594,  1580,   903,   904,
+     905,   646,  1213,   906,   907,   908,   909,   633,  1590,  1589,
+    1591,  1259,  1613,  1608,  1614,   652,   700,   701,   702,   157,
+     653,   657,   658,   901,   659,   660,  1240,   664,   666,   667,
+     668,   691,   693,   902,   694,  1243,   719,   696,   703,   704,
+     901,   903,   904,   905,  1404,   712,   906,   907,   908,   909,
+     902,   713,   715,   729,   716,  1084,   717,  1264,   903,   904,
+     905,  1267,   718,   906,   907,   908,   909,   732,  1094,   738,
+     618,   795,   794,  1239,   796,  1473,   814,  1442,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,   311,   342,   312,  1062,   385,  1062,  1095,  1062,
-     125,   126,   127,   128,   129,   130,   891,   343,   879,   880,
-     881,   134,   743,   897,  1204,   313,   315,   314,   316,   909,
-     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
-     381,   632,   383,   384,   344,   317,   956,   318,   385,   352,
-     353,   354,   955,   901,   356,   359,   380,   381,   382,   383,
-     384,  1183,  1184,   902,  1030,   385,   389,   319,   348,   320,
-     394,   903,   904,  1291,  1292,   905,   906,   397,   399,   402,
-     403,   363,   405,   399,   407,   408,   345,   399,   411,   412,
-     346,   321,   966,   322,   399,  1128,   347,   323,   969,   324,
-     349,   970,   971,   972,   139,   140,  1225,  1226,   974,   431,
-     325,   327,   326,   328,   329,   331,   330,   332,   440,   441,
-     333,   335,   334,   336,   337,   350,   338,   441,   351,   371,
+     383,   384,   797,  1270,   798,   799,   385,  1296,  1579,   497,
+     802,   803,   815,   837,   804,   819,   365,   365,   842,  1557,
+     845,   846,   847,   852,   857,   849,   853,  1137,  1476,   854,
+     856,   858,   859,   861,   862,   863,   867,  1145,  1146,  1303,
+     872,  1306,   887,  1309,   874,  1479,   921,  1155,  1157,   894,
+     895,  1336,   934,   943,   944,   945,   946,  1320,   953,   955,
+    1323,  1324,   978,   980,   986,   981,   400,   987,   990,   989,
+     993,   400,  1000,  1001,  1002,   400,  1004,   841,  1006,   843,
+     901,  1011,   400,  1519,  1017,  1193,  1194,  1195,  1023,  1028,
+     902,  1035,  1024,  1029,  1031,  1205,  1032,  1207,   903,   904,
+     905,  1239,  1036,   906,   907,   908,   909,  1037,  1212,  1041,
+    1042,  1043,  1038,  1039,  1040,  1044,   399,  1046,  1056,  1060,
+     886,  1057,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,  1058,  1231,  1232,  1233,
+     385,  1059,  1079,  1073,  1074,   493,  1075,   400,  1076,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   404,  1004,  1463,   339,   385,   340,   619,
-     633,   620,   634,  1010,   901,  1011,   369,   492,   494,   399,
-     633,   633,   639,   643,   902,   386,   387,   501,   502,   503,
-     901,   505,   903,   904,   508,   509,   905,   906,   510,   633,
-     902,   649,   633,   739,   721,   740,   388,   409,   903,   904,
-     414,   521,   905,   906,  1009,   415,   525,   526,   527,   528,
-     529,   530,   531,   532,   533,   534,   535,   536,   537,   538,
-     539,   540,   541,   542,   543,   544,   545,   546,   547,   548,
-     549,   550,   551,   552,   553,   554,   555,   556,   557,   558,
-     559,   560,   561,   562,   563,   564,   565,   566,   435,  1240,
-     955,   432,   901,  1050,  1051,  1052,  1466,   417,   901,   579,
-    1416,   633,   902,   805,   468,   633,   399,   808,   902,   399,
-     903,   904,  1469,   418,   905,   906,   903,   904,   422,   427,
-     905,   906,   602,   603,   604,   605,   606,   607,   608,   609,
-     610,   611,   612,   613,   614,   615,   616,   428,   429,  1124,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   492,
-     436,   447,   901,   385,   633,   637,   923,   633,   458,   924,
-     642,   459,   902,  1150,   448,   647,   648,   449,   650,   651,
-     903,   904,   460,   656,   905,   906,   471,   470,   661,   662,
-     663,   370,   472,   633,  1534,   925,   633,  1016,   937,  1017,
-    1572,   633,   464,  1042,   901,   633,   484,  1079,   679,   680,
-     681,   352,   353,   682,   902,   473,   476,   686,   687,   688,
-     689,   690,   903,   904,   477,   695,   905,   906,   697,   698,
-     481,   499,   399,   399,   399,   500,   504,   705,   706,   633,
-     711,  1080,   485,   633,   714,  1082,   633,   633,  1083,  1084,
-     486,   633,   399,  1085,  1574,   633,   511,  1087,   722,   724,
-    1130,   633,  1131,  1132,   633,   633,  1133,  1134,  1203,   506,
-     633,  1229,  1135,   507,   633,   901,  1169,   711,  1230,   512,
-     514,   741,   901,   520,   744,   902,  1249,  1233,  1250,   901,
-     522,   523,   902,   903,   904,   368,  1576,   905,   906,   902,
-     903,   904,  1394,   524,   905,   906,   901,   903,   904,  1254,
-     385,   905,   906,  1257,   592,  1281,   902,  1282,   633,  1342,
-    1316,  1343,   593,   594,   903,   904,   413,  1432,   905,   906,
+     632,   383,   384,   931,   901,   932,  1077,   385,  1244,  1080,
+     936,   937,   938,   939,   902,  1544,  1081,  1082,   942,  1085,
+    1083,  1256,   903,   904,   905,   807,  1262,   906,   907,   908,
+     909,  1086,  1099,  1266,  1104,   365,  1107,  1268,  1269,  1609,
+    1105,  1108,  1109,  1110,  1274,  1275,  1122,  1121,  1133,  1277,
+    1123,  1124,  1126,  1134,  1151,  1149,  1144,  1284,  1154,  1160,
+    1430,  1150,  1433,  1162,  1436,  1161,  1166,  1294,  1167,  1295,
+    1168,  1169,  1444,  1170,  1172,  1447,  1173,  1174,  1175,  1180,
+    1181,  1312,  1196,  1183,   400,  1184,   970,   400,   971,  1185,
+    1186,  1190,   871,   399,  1197,  1208,  1209,   399,  1210,  1582,
+    1327,  1204,  1211,   885,  1218,  1219,  1225,  1223,  1227,  1226,
+    1230,  1228,  1229,  1335,  1234,   994,   995,   996,   997,  1237,
+     901,  1238,  1245,  1246,  1248,  1263,  1251,   493,  1252,  1253,
+     902,   901,  1254,  1271,  1348,  1349,  1272,  1273,   903,   904,
+     905,   902,  1355,   906,   907,   908,   909,  1276,   901,   903,
+     904,   905,  1531,  1534,   906,   907,   908,   909,   902,  1278,
+    1280,  1279,  1030,  1281,  1282,  1285,   903,   904,   905,  1522,
+    1290,   906,   907,   908,   909,  1293,  1376,  1304,   954,  1307,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
-     381,   382,   383,   384,   430,   157,   601,   433,   385,  1286,
-    1249,   813,  1382,  1249,  1429,  1412,  1430,   365,   365,  1260,
-     517,   633,  1547,  1441,  1249,   595,  1447,  1578,  1449,   646,
-    1450,   463,   652,  1452,  1600,  1453,  1249,   633,  1457,  1458,
-     836,  1601,   633,   399,  1477,   399,   844,  1229,  1342,   653,
-    1514,  1326,   657,   724,   850,  1293,   658,  1296,  1602,  1299,
-     633,   633,  1537,  1539,  1249,   659,  1543,   864,  1567,   664,
-    1568,  1310,   660,   870,  1313,  1314,   666,   667,   877,   877,
-     877,   877,   691,  1509,   518,   519,   399,   788,   633,  1570,
-    1579,   668,   693,   892,   893,  1580,  1249,  1581,  1598,   896,
-     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,   917,   694,   696,   919,   385,   374,   375,   376,
-     377,   378,   379,   380,   381,   382,   383,   384,  1603,   399,
-    1604,   399,   385,   703,   704,   712,   399,   399,   399,   399,
-     713,   400,   729,   715,   399,   716,   400,   717,   718,   732,
-     400,   944,   738,   946,   947,   794,   795,   400,   796,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   797,   798,   799,   802,   385,   803,   804,
-     814,   815,   819,   837,   618,   852,   842,   845,   958,   959,
-     846,   847,   857,   861,   365,   849,   853,   854,   856,   858,
-     859,   862,   960,   961,   962,   963,   964,   965,   863,   867,
-     872,   874,   399,   887,   399,   894,   895,   918,   931,   940,
-     493,   941,   400,   973,   942,   943,   950,   976,   952,   975,
-     977,   982,   978,   983,  1420,   984,  1423,   986,  1426,   990,
-     997,   399,   399,   399,   399,   995,  1434,   987,   998,  1437,
-     999,    97,   284,  1001,  1003,  1034,  1008,   101,   102,   103,
-    1014,  1020,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,  1025,  1021,  1026,  1028,  1029,   399,  1032,
-    1035,  1033,   131,   132,   133,  1036,  1038,  1037,   135,   136,
-    1039,  1040,  1041,  1043,  1053,  1055,  1056,  1054,  1071,  1065,
-    1066,  1072,  1521,  1524,  1067,  1068,  1069,  1073,  1074,   400,
-    1075,  1077,   400,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,  1078,  1091,  1096,
-    1097,   385,  1099,  1512,  1100,  1102,  1076,  1101,  1113,  1115,
-    1154,  1126,  1114,  1143,   801,  1125,  1146,  1158,  1161,  1086,
-    1116,  1118,   493,  1136,  1162,  1563,  1142,  1165,  1141,  1166,
-    1167,  1152,  1172,  1153,  1159,  1160,  1173,  1200,  1164,   138,
-    1175,  1176,  1177,   807,  1178,  1182,   141,   142,   143,  1196,
-    1188,  1189,  1201,  1217,  1585,  1236,  1208,  1209,  1216,  1213,
-    1215,  1218,   148,   149,  1594,  1219,  1597,   150,  1129,  1224,
-    1220,  1227,   257,  1228,  1235,  1238,  1241,   156,  1137,  1138,
-    1242,  1243,  1244,  1253,  1606,  1272,  1261,  1610,  1147,  1149,
-    1262,  1263,  1266,  1268,  1270,   400,   400,   400,  1269,  1271,
-    1275,  1280,  1283,  1294,  1297,  1300,  1308,  1311,  1315,  1329,
-     871,  1304,  1328,  1330,  1331,   400,  1333,  1334,  1335,  1341,
-    1344,   885,   725,  1353,  1355,  1356,  1185,  1186,  1187,  1357,
-    1358,  1359,  1360,  1364,  1361,  1376,  1197,  1199,  1378,  1385,
-    1387,  1365,  1392,  1402,  1202,  1367,  1368,  1370,  1372,  1374,
-    1379,  1406,   399,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,  1395,  1407,  1393,
-    1408,   385,  1409,  1221,  1222,  1223,  1410,  1411,   401,  1428,
-    1413,  1435,  1442,   406,  1443,  1444,  1455,   410,  1459,  1471,
-    1472,  1475,  1480,  1487,   416,  1488,   951,   630,  1491,  1492,
-    1494,  1497,  1498,  1501,  1234,  1502,  1505,  1511,  1506,  1532,
-    1526,  1528,  1530,  1540,  1541,  1550,  1553,  1246,  1556,  1559,
-    1561,  1566,  1252,  1565,  1573,  1575,  1586,  1577,  1582,  1256,
-    1587,  1589,   985,  1258,  1259,  1591,  1593,  1595,  1605,  1607,
-    1264,  1265,  1608,  1609,  1611,  1267,   400,  1145,   400,  1156,
-    1481,    84,    92,  1274,   655,  1237,   725,   851,     0,     0,
-       0,     0,     0,  1284,     0,  1285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1302,     0,     0,
-       0,     0,     0,     0,     0,  1024,     0,   399,     0,   400,
-       0,   399,     0,     0,  1317,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1325,     0,     0,
-    1012,  1013,     0,  1015,     0,  1018,  1019,     0,     0,  1022,
-    1023,     0,     0,     0,     0,     0,     0,     0,  1338,  1339,
-       0,     0,   400,     0,   400,     0,  1345,     0,     0,   400,
-     400,   400,   400,     0,     0,     0,     0,   400,     0,     0,
-       0,     0,     0,     0,     0,     0,   583,     0,     0,   587,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1366,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,  1380,   385,
-     492,     0,     0,     0,     0,     0,     0,  1088,  1089,  1090,
-    1388,     0,  1389,     0,     0,   399,     0,  1098,     0,     0,
-       0,     0,     0,     0,     0,   400,     0,   400,  1397,     0,
-       0,     0,     0,  1401,   371,   372,   373,   374,   375,   376,
-     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,   399,   400,   400,   400,   400,     0,     0,
-    1419,     0,  1422,     0,  1425,     0,  1140,     0,     0,     0,
-       0,     0,     0,     0,   399,     0,     0,     0,  1438,     0,
-       0,  1157,   700,   701,   702,     0,     0,  1163,     0,  1445,
-    1446,     0,     0,  1168,  1448,  1170,  1171,     0,     0,     0,
-    1174,   400,   719,     0,  1456,  1179,  1180,  1181,  1460,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1198,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1207,     0,     0,  1252,  1211,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1489,     7,     8,     0,
-       0,     0,     0,  1496,     0,     0,  1500,     0,     0,  1504,
-       0,     0,     0,  1507,     0,     0,     0,   399,     0,   399,
-       0,     0,     0,     0,  1516,     0,     0,  1518,     0,  1523,
-       0,     0,     0,     0,     0,     0,  1231,     0,  1232,     0,
-       0,     0,     0,   596,    19,    20,   597,    22,    23,   598,
+     381,   382,   383,   384,  1390,  1310,   492,  1314,   385,  1318,
+     400,   400,   400,  1321,  1325,  1573,  1398,  1338,  1399,  1339,
+    1340,   399,   901,  1341,  1344,  1584,  1343,  1351,  1345,  1354,
+     400,  1363,   902,  1365,  1407,  1366,  1586,   725,  1367,  1411,
+     903,   904,   905,  1368,  1595,   906,   907,   908,   909,  1369,
+    1370,  1374,  1386,  1588,  1604,  1388,  1607,  1377,  1395,   399,
+    1397,  1371,  1402,  1375,  1405,  1378,  1429,  1412,  1432,  1380,
+    1435,  1382,  1384,  1416,  1616,  1389,  1417,  1620,  1403,  1423,
+     399,  1418,  1419,  1420,  1448,     7,     8,  1421,  1438,  1445,
+    1452,  1453,  1469,  1454,  1465,  1455,  1456,  1481,  1485,  1490,
+    1458,  1482,  1015,  1016,  1497,  1018,  1498,  1021,  1022,  1501,
+    1466,  1025,  1026,  1502,  1470,  1504,  1507,  1610,  1508,  1511,
+    1512,  1515,  1516,  1521,  1536,  1542,  1538,  1540,  1550,  1551,
+    1560,   596,    19,    20,   597,    22,    23,   598,    25,   599,
+      27,  1262,    28,  1563,  1566,  1569,    32,    33,  1571,    35,
+      36,    37,  1499,   497,  1575,    40,  1576,  1596,  1583,  1506,
+    1585,   400,  1510,   400,  1587,  1514,  1592,  1597,  1599,  1517,
+    1601,   725,   851,   399,  1603,   399,  1605,  1615,  1617,  1618,
+    1526,  1619,  1621,  1528,  1222,  1533,  1153,    60,    61,    62,
+    1491,   630,  1096,  1097,  1098,  1164,    84,    92,   655,     0,
+    1247,     0,  1106,     0,   400,     0,     0,     0,     0,     0,
+       0,     0,     0,   901,     0,     0,  1556,     0,     0,     0,
+       0,     0,  1558,   902,     0,     0,     0,     0,     0,     0,
+       0,   903,   904,   905,     0,   399,   906,   907,   908,   909,
+       0,     0,     0,     0,     0,     0,     0,   400,   736,   400,
+     801,  1148,     0,     0,   400,   400,   400,   400,     0,     0,
+       0,     0,   400,     0,  1594,     0,  1165,     0,     0,     0,
+       0,     0,  1171,     0,     0,     0,     0,     0,  1176,     0,
+    1178,  1179,     0,     0,     0,  1182,     0,     7,     8,     0,
+    1187,  1188,  1189,   371,   372,   373,   374,   375,   376,   377,
+     378,   379,   380,   381,   498,   383,   384,  1206,  1611,     0,
+       0,   385,     0,     0,     0,     0,     0,     0,     7,     8,
+       0,     0,  1217,     0,     0,     0,  1221,     0,     0,     0,
+     400,     0,   400,   596,    19,    20,   597,    22,    23,   598,
       25,   599,    27,     0,    28,     0,     0,     0,    32,    33,
-    1546,    35,    36,    37,     0,     0,  1548,    40,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   399,
-       0,     7,     8,   841,     0,   843,     0,     0,     0,     0,
-       0,     0,  1276,  1277,  1278,  1279,    60,    61,    62,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1584,     0,
+       0,    35,    36,    37,     0,     0,     0,    40,     0,   400,
+     400,   400,   400,     0,   596,    19,    20,   597,    22,    23,
+     598,    25,   599,    27,     0,    28,  1241,     0,  1242,    32,
+      33,     0,    35,    36,    37,     0,     0,     0,    40,    60,
+      61,    62,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,   400,     0,     7,     8,
+     385,     0,     0,     0,     0,     0,     0,     0,   901,     0,
+      60,    61,    62,     0,     0,     0,     0,     0,   902,     0,
+       0,     0,  1286,  1287,  1288,  1289,   903,   904,   905,  1400,
+       0,   906,   907,   908,   909,     0,     0,     0,     0,     0,
+     737,     0,     0,     0,   596,    19,    20,   597,    22,    23,
+     598,    25,   599,    27,     0,    28,     0,  1148,     0,    32,
+      33,     0,    35,    36,    37,     0,     0,  1425,    40,  1328,
+     988,   889,     0,     0,     0,     0,  1337,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,  1446,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,  1350,     0,
+      60,    61,    62,  1612,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    97,   248,     0,     0,  1148,
+       0,   101,   102,   103,     0,     0,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   250,     0,     0,
+       0,     0,     0,  1387,     0,     0,   131,   132,   133,     0,
+       0,   890,   135,   136,     0,     0,     0,     0,     0,     0,
+     251,     0,     0,   252,     0,     0,   253,     0,   254,     0,
+       0,  1520,     0,  1523,     0,     0,     0,     0,     0,   255,
+    1148,     0,     0,     0,     0,     0,    42,    43,    44,    45,
+      46,     0,     0,     0,    50,     0,     0,    53,   400,     0,
+    1148,     0,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,  1441,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1570,     0,     0,   138,  1027,     0,     0,
+       0,     0,     0,   141,   142,   143,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,   450,
+    1319,     0,   385,     0,   150,     0,     0,     0,  1480,   452,
+       0,     0,     0,     0,   156,     0,   218,   495,     0,     0,
+       0,     0,     0,     0,     0,     0,    97,   248,     0,     0,
+       0,     0,   101,   102,   103,     0,     0,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   250,  1078,
+       0,     0,     0,     0,  1148,     0,  1530,   131,   132,   133,
+       0,     0,     0,   135,   136,   400,     0,     0,     0,   400,
+       0,   251,     0,     0,   252,     0,     0,   253,     0,   254,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1140,   886,   596,    19,    20,
-     597,    22,    23,   598,    25,   599,    27,  1318,    28,     0,
-       0,     0,    32,    33,  1327,    35,    36,    37,     0,     0,
-       0,    40,     0,     0,     0,   400,     0,   736,  1070,     0,
-       0,     0,     0,     0,     0,     0,  1340,     0,     0,   928,
-       0,   929,     0,     0,     0,     0,   933,   934,   935,   936,
-      60,    61,    62,     0,   939,     0,     0,  1140,    97,   248,
-      99,     0,     0,     0,   101,   102,   103,     0,     0,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     250,  1377,     0,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,     0,     0,   134,   135,   136,     0,     0,     0,
-       0,   737,     0,   251,     0,     0,   252,     0,     0,   253,
-       0,   254,   967,     0,   968,     0,     0,     0,  1140,     0,
-       0,     0,   255,     0,     0,     0,     0,     0,     0,    42,
-      43,    44,    45,    46,     0,     0,     0,    50,  1140,     0,
-      53,   991,   992,   993,   994,     0,     0,     0,     0,     0,
-     400,     0,     0,     0,   400,  1431,     0,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,   138,   139,   140,     0,
-       0,     0,     0,   141,   142,   143,     0,     0,  1027,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
-     256,     0,     0,     0,   150,     0,  1470,     0,     0,   257,
-       0,     0,     0,     0,   156,     0,  1519,     0,    97,   284,
-       0,     0,     0,     0,   101,   102,   103,     0,     0,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-       0,     0,     0,   493,     0,     0,     0,     0,     0,   131,
-     132,   133,  1140,     0,  1520,   135,   136,     0,   400,     0,
-       0,     0,    97,    98,    99,     0,   100,     0,   101,   102,
-     103,     0,     0,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,  1120,     0,   400,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,     0,     0,   134,   135,
-     136,     0,     0,     0,     0,     0,     0,   400,     0,     0,
+     255,     0,     0,     0,     0,     0,     0,    42,    43,    44,
+      45,    46,     0,     0,     0,    50,     0,     0,    53,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
+       0,     0,     0,     0,  1148,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   138,     0,     0,
+       0,     0,     0,     0,   141,   142,   143,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   493,     0,
+     148,   398,     0,     0,     0,   150,     0,     0,     0,     0,
+     257,     0,     0,   400,     0,   156,     0,     0,   495,     0,
+       0,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     380,   381,   382,   383,   384,     0,  1128,     0,     0,   385,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1140,     0,     0,     0,   138,     0,     0,     0,
-       0,     0,     0,   141,   142,   143,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
-     149,     0,     0,     0,   150,     0,     0,     0,     0,   257,
-       0,     0,   357,     0,   156,     0,   358,     0,     0,     0,
-       0,     0,  1212,     0,   137,     0,     0,     0,     0,     0,
-     138,   139,   140,     0,     0,     0,     0,   141,   142,   143,
-     144,   145,   146,   147,     0,     0,     0,     0,     0,     0,
-     400,     0,   400,   148,   149,     0,  1127,     0,   150,     0,
-     151,   152,     0,   153,     0,   154,     0,   155,   156,     0,
-     157,     0,     0,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,   400,     0,     0,     0,     0,     0,     0,
-       0,     0,    97,   248,   249,     0,     0,     0,   101,   102,
+       0,   400,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    97,   248,    99,     0,     0,     0,   101,   102,
      103,     0,   400,   104,   105,   106,   107,   108,   109,   110,
      111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   250,     0,     0,     0,     0,     0,
-       0,     0,     0,   131,   132,   133,     0,     0,     0,   135,
+     121,   122,   123,   124,   250,     0,     0,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,     0,     0,   134,   135,
      136,     0,     0,     0,     0,     0,     0,   251,     0,     0,
      252,     0,     0,   253,     0,   254,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   255,     0,     0,     0,
+       0,     0,     0,     0,     0,  1135,   255,     0,     0,     0,
        0,     0,     0,    42,    43,    44,    45,    46,     0,     0,
-       0,    50,     0,     0,    53,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-     138,     0,     0,   385,     0,     0,     0,   141,   142,   143,
-    1289,     0,  1290,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   148,   256,     0,     0,     0,   150,     0,
-       0,     0,     0,   257,     0,     0,     0,     0,   156,     0,
-     258,     0,     0,     0,     0,  1390,     0,     0,     0,     0,
-      97,   248,  1205,     0,     0,     0,   101,   102,   103,     0,
+       0,    50,     0,     0,    53,  1224,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   400,     0,   400,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,   138,   139,   140,   385,     0,     0,     0,
+     141,   142,   143,     0,     0,     0,     0,     0,   400,     0,
+       0,     0,     0,     0,     0,     0,   148,   256,     0,     0,
+       0,   150,     0,     0,     0,     0,   257,   400,    97,    98,
+      99,   156,   100,  1529,   101,   102,   103,     0,     0,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+       0,     0,     0,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,     7,     8,   134,   135,   136,   371,   372,   373,
+     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
+     384,     0,     0,     0,     0,   385,     0,   371,   372,   373,
+     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
+     384,     0,     0,     0,     0,   385,     0,     0,   596,    19,
+      20,   597,    22,    23,   598,    25,   599,    27,     0,    28,
+       0,     0,     0,    32,    33,     0,    35,    36,    37,     0,
+       0,     0,    40,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   137,     0,     0,     0,     0,     0,   138,
+     139,   140,     0,     0,     0,     0,   141,   142,   143,   144,
+     145,   146,   147,     0,    60,    61,    62,     0,     0,     0,
+       0,     0,   148,   149,     0,     0,     0,   150,     0,   151,
+     152,     0,   153,     0,   154,     0,   155,   156,     0,   157,
+      97,   248,   249,     0,     0,     0,   101,   102,   103,     0,
        0,   104,   105,   106,   107,   108,   109,   110,   111,   112,
      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   250,  1415,     0,     0,     0,     0,     0,     0,
-       0,   131,   132,   133,     0,     0,     0,   135,   136,     0,
-       0,     0,     0,     0,  1436,   251,     0,     0,   252,     7,
-       8,   253,     0,   254,     0,     0,     0,     0,     0,     0,
+     123,   124,   250,     0,     0,   913,     0,     0,     0,     0,
+       0,   131,   132,   133,     0,     0,     0,   135,   136,     7,
+       8,     0,     0,     0,     0,   251,     0,     0,   252,     0,
+       0,   253,     0,   254,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   255,     0,     0,     0,     0,     0,
        0,    42,    43,    44,    45,    46,     0,     0,     0,    50,
-       0,     0,    53,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   596,    19,    20,   597,    22,
+       0,     0,    53,     0,     0,   596,    19,    20,   597,    22,
       23,   598,    25,   599,    27,     0,    28,     0,     0,     0,
-      32,    33,     0,    35,    36,    37,     0,     0,   138,    40,
-       0,     0,     0,     0,     0,   141,   142,   143,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1510,     0,  1513,
-       0,   148,   256,     0,     0,     0,   150,     0,    60,    61,
-      62,   257,     0,    97,   248,     0,   156,     0,  1206,   101,
-     102,   103,     0,     0,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   250,     0,     0,     0,     0,
-       0,     0,     0,     0,   131,   132,   133,     0,     0,  1560,
-     135,   136,     7,     8,     0,     0,     0,     0,   251,   889,
-       0,   252,     0,     0,   253,     0,   254,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   255,     0,     0,
-       0,     0,     0,     0,    42,    43,    44,    45,    46,     0,
-       0,     0,    50,     0,     0,    53,     0,     0,   596,    19,
-      20,   597,    22,    23,   598,    25,   599,    27,     0,    28,
-       0,     0,     0,    32,    33,     0,    35,    36,    37,     0,
-       0,     0,    40,     0,     0,     0,     0,     0,     0,     0,
+      32,    33,     0,    35,    36,    37,     0,     0,     0,    40,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,   138,     0,     0,     0,     0,     0,     0,   141,   142,
      143,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    60,    61,    62,   148,   256,     0,     0,     0,   150,
-       0,     0,     0,     0,   257,     0,    97,   248,     0,   156,
+       0,     0,     0,     0,   257,     0,    97,   248,  1215,   156,
        0,   258,   101,   102,   103,     0,     0,   104,   105,   106,
      107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
      117,   118,   119,   120,   121,   122,   123,   124,   250,     0,
        0,     0,     0,     0,     0,     0,     0,   131,   132,   133,
-       0,     0,   890,   135,   136,     7,     8,     0,     0,     0,
+       0,     0,   948,   135,   136,     7,     8,     0,     0,     0,
        0,   251,     0,     0,   252,     0,     0,   253,     0,   254,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      255,     0,     0,     0,     0,     0,     0,    42,    43,    44,
@@ -2066,854 +2056,875 @@ static const yytype_int16 yytable[] =
        0,   596,    19,    20,   597,    22,    23,   598,    25,   599,
       27,     0,    28,     0,     0,     0,    32,    33,     0,    35,
       36,    37,     0,     0,     0,    40,     0,     0,     0,     0,
-       0,     0,     0,     0,   138,     0,     0,     0,     0,     0,
-       0,   141,   142,   143,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    60,    61,    62,   148,   398,     0,
-       0,     0,   150,     0,     0,     0,     0,   257,     0,    97,
-     248,     0,   156,     0,   491,   101,   102,   103,     0,     0,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   250,     0,     0,     0,     0,     0,     0,     0,     0,
-     131,   132,   133,     0,     0,   910,   135,   136,     7,     8,
-       0,     0,     0,     0,   251,     0,     0,   252,     0,     0,
-     253,     0,   254,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   255,     0,     0,     0,     0,     0,     0,
-      42,    43,    44,    45,    46,     0,     0,     0,    50,     0,
-       0,    53,     0,     0,   596,    19,    20,   597,    22,    23,
-     598,    25,   599,    27,     0,    28,     0,     0,     0,    32,
-      33,     0,    35,    36,    37,     0,     0,     0,    40,     0,
        0,     0,     0,     0,     0,     0,     0,   138,     0,     0,
        0,     0,     0,     0,   141,   142,   143,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    60,    61,    62,
-     148,   398,     0,     0,     0,   150,     0,     0,     0,     0,
-     257,     0,    97,   248,     0,   156,     0,   723,   101,   102,
+     148,   256,     0,     0,     0,   150,     0,     0,     0,     0,
+     257,     0,    97,   248,     0,   156,     0,  1216,   101,   102,
      103,     0,     0,   104,   105,   106,   107,   108,   109,   110,
      111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
      121,   122,   123,   124,   250,     0,     0,     0,     0,     0,
-       0,     0,     0,   131,   132,   133,     0,     0,   945,   135,
+       0,     0,     0,   131,   132,   133,     0,     0,  1047,   135,
      136,     7,     8,     0,     0,     0,     0,   251,     0,     0,
      252,     0,     0,   253,     0,   254,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   255,     0,     0,     0,
        0,     0,     0,    42,    43,    44,    45,    46,     0,     0,
        0,    50,     0,     0,    53,     0,     0,   596,    19,    20,
      597,    22,    23,   598,    25,   599,    27,     0,    28,     0,
-       0,     0,    32,    33,     0,    35,    36,    37,     0,  1214,
+       0,     0,    32,    33,     0,    35,    36,    37,     0,     0,
        0,    40,     0,     0,     0,     0,     0,     0,     0,     0,
-     138,     0,     0,     0,     0,     0,     0,   141,   142,   143,
-    1332,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      60,    61,    62,   148,   256,     0,     0,     0,   150,     0,
-       0,     0,     0,   257,     0,    97,   248,     0,   156,     0,
-    1210,   101,   102,   103,     0,     0,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   250,     0,     0,
-       0,     0,     0,     0,     0,     0,   131,   132,   133,     0,
-       0,  1044,   135,   136,     0,     0,     0,     0,     0,     0,
-     251,     0,     0,   252,     0,     0,   253,     0,   254,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   255,
-       0,     0,     0,     0,     0,     0,    42,    43,    44,    45,
-      46,     0,     0,     0,    50,     0,     0,    53,   371,   372,
-     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,     0,     0,     0,     0,   385,     0,     0,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   138,  1363,     0,     0,   385,     0,     0,
+       0,     0,     0,   138,     0,     0,     0,     0,     0,     0,
      141,   142,   143,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   450,  1309,     0,     0,
-       0,   150,     0,     0,     0,     0,   452,     0,    97,   284,
-      99,   156,     0,   218,   101,   102,   103,     0,     0,   104,
+       0,     0,     0,    60,    61,    62,   148,   256,     0,     0,
+       0,   150,     0,     0,     0,     0,   257,     0,    97,   248,
+       0,   156,     0,   258,   101,   102,   103,     0,     0,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-       0,     0,     0,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,     0,     0,   134,   135,   136,    97,   284,    99,
-       0,     0,     0,   101,   102,   103,     0,     0,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,     0,
-       0,     0,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,     7,     8,   134,   135,   136,     0,     0,     0,     0,
-       0,     0,     0,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,   138,   139,   140,     0,
-       0,     0,     0,   141,   142,   143,     0,   596,    19,    20,
-     597,    22,    23,   598,    25,   599,    27,     0,    28,   148,
-     149,     0,    32,    33,   150,    35,    36,    37,     0,   257,
-       0,    40,     0,     0,   156,     0,  1148,  1391,     0,     0,
-       0,     0,     0,     0,     0,   138,   139,   140,     0,     0,
-       0,     0,   141,   142,   143,     0,     0,     0,     0,     0,
-      60,    61,    62,     0,     0,     0,     0,     0,   148,   149,
-       0,     0,     0,   150,     0,     0,     0,     0,   257,     0,
-      97,   284,    99,   156,     0,  1324,   101,   102,   103,     0,
-       0,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,     0,     0,     0,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,    97,   284,   134,   135,   136,     0,
+     250,     0,     0,     0,     0,     0,     0,     0,     0,   131,
+     132,   133,     0,     0,  1483,   135,   136,     7,     8,     0,
+       0,     0,     0,   251,     0,     0,   252,     0,     0,   253,
+       0,   254,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   255,     0,     0,     0,     0,     0,     0,    42,
+      43,    44,    45,    46,     0,     0,     0,    50,     0,     0,
+      53,     0,     0,   596,    19,    20,   597,    22,    23,   598,
+      25,   599,    27,     0,    28,     0,     0,     0,    32,    33,
+       0,    35,    36,    37,     0,  1342,     0,    40,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   138,
+       0,     0,     0,     0,  1373,     0,   141,   142,   143,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    60,
+      61,    62,   148,   398,     0,     0,     0,   150,     0,     0,
+       0,     0,   257,     0,    97,   248,     0,   156,     0,   491,
      101,   102,   103,     0,     0,   104,   105,   106,   107,   108,
      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,     0,     0,     0,     0,
+     119,   120,   121,   122,   123,   124,   250,     0,     0,     0,
        0,     0,     0,     0,     0,   131,   132,   133,     0,     0,
-       0,   135,   136,     7,     8,     0,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   138,   139,
-     140,     0,     0,     0,     0,   141,   142,   143,     0,   596,
-      19,    20,   597,    22,    23,   598,    25,   599,    27,     0,
-      28,   148,   149,     0,    32,    33,   150,    35,    36,    37,
-       0,   257,     0,    40,     0,     0,   156,     0,  1522,  1479,
-       0,     0,   138,     0,     0,     0,     0,     0,     0,   141,
-     142,   143,     0,     0,     0,     0,     0,     0,  1533,     0,
-       0,     0,    60,    61,    62,   148,   149,     0,     0,     0,
-     150,     0,     0,     0,     0,   257,     0,     0,   709,     0,
-     156,     0,   710,    97,   284,     0,     0,     0,     0,   101,
-     102,   103,     0,     0,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,     0,     0,     0,     0,     0,
-       0,     0,     0,  1473,   131,   132,   133,    97,   284,     0,
-     135,   136,     0,   101,   102,   103,     0,     0,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   131,   132,
-     133,     0,     0,     0,   135,   136,     7,     8,   371,   372,
-     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,     0,     0,     0,     0,   385,   371,   372,   373,
+    1545,   135,   136,     0,     0,     0,     0,     0,     0,   251,
+       0,     0,   252,     0,     0,   253,     0,   254,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   255,     0,
+       0,     0,     0,     0,     0,    42,    43,    44,    45,    46,
+       0,     0,     0,    50,     0,     0,    53,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   138,     0,     0,     0,   385,     0,     0,   141,   142,
-     143,     0,   596,    19,    20,   597,    22,    23,   598,    25,
-     599,    27,     0,    28,   148,   149,     0,    32,    33,   150,
-      35,    36,    37,     0,   257,     0,    40,  1569,   497,   156,
-       0,   355,     0,     0,     0,   138,     0,     0,     0,     0,
-       0,     0,   141,   142,   143,     0,  1599,     0,     0,     0,
-       0,     0,     0,     0,     0,    60,    61,    62,   450,   451,
-       0,     0,     0,   150,     0,     0,     0,     0,   452,     0,
-      97,   248,     0,   156,     0,   218,   101,   102,   103,     0,
+     384,     0,     0,     0,     0,   385,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+    1401,     0,     0,     0,   385,   138,     0,     0,     0,     0,
+       0,     0,   141,   142,   143,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   148,   398,
+       0,     0,     0,   150,     0,     0,     0,     0,   257,     0,
+      97,   248,     0,   156,     0,   723,   101,   102,   103,     0,
        0,   104,   105,   106,   107,   108,   109,   110,   111,   112,
      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
      123,   124,   250,     0,     0,     0,     0,     0,     0,     0,
-       0,   131,   132,   133,     0,     0,  1535,   135,   136,     0,
+       0,   131,   132,   133,     0,     0,     0,   135,   136,     0,
        0,     0,     0,     0,     0,   251,     0,     0,   252,     0,
-       0,   253,     0,   254,     0,     0,     0,     0,     0,   733,
+       0,   253,     0,   254,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   255,     0,     0,     0,     0,     0,
-       0,    42,    43,    44,    45,    46,     0,     0,   824,    50,
-       0,     0,    53,     0,     0,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   632,   383,   384,   938,
-       0,     0,     0,   385,   371,   372,   373,   374,   375,   376,
-     377,   378,   379,   380,   381,   382,   383,   384,   138,  1093,
-       0,     0,   385,     0,     0,   141,   142,   143,     0,     0,
+       0,    42,    43,    44,    45,    46,     0,     0,     0,    50,
+       0,     0,    53,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,  1489,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   138,     0,     0,     0,     0,  1543,     0,   141,   142,
+     143,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   148,   256,     0,     0,     0,   150,
+       0,     0,     0,     0,   257,     0,    97,   248,     0,   156,
+       0,  1220,   101,   102,   103,     0,     0,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   250,     0,
+       0,     0,     0,     0,     0,     0,     0,   131,   132,   133,
+       0,     0,     0,   135,   136,     0,     0,     0,     0,     0,
+       0,   251,     0,     0,   252,     0,     0,   253,     0,   254,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   148,   398,     0,     0,     0,   150,    97,   284,    99,
-       0,   257,     0,   101,   102,   103,   156,     0,   104,   105,
+     255,     0,     0,     0,     0,     0,     0,    42,    43,    44,
+      45,    46,     0,     0,     0,    50,     0,     0,    53,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,     0,     0,     0,     0,   385,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   497,     0,     0,     0,   385,   138,     0,     0,
+       0,     0,     0,     0,   141,   142,   143,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     450,  1319,     0,     0,     0,   150,     0,     0,     0,     0,
+     452,     0,    97,   284,    99,   156,     0,   218,   101,   102,
+     103,     0,     0,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,     0,     0,     0,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,     0,     0,   134,   135,
+     136,    97,   284,    99,     0,     0,     0,   101,   102,   103,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,     0,     0,     0,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,     0,     0,   134,   135,   136,
+       0,     0,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   632,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   138,   139,   140,     0,     0,     0,     0,
+     141,   142,   143,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   148,   149,     0,     0,
+       0,   150,     0,     0,     0,     0,   257,     0,     0,     0,
+       0,   156,     0,  1156,     0,     0,     0,     0,     0,     0,
+       0,     0,   138,   139,   140,     0,     0,     0,     0,   141,
+     142,   143,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   148,   149,     0,     0,     0,
+     150,     0,     0,     0,     0,   257,     0,    97,   284,    99,
+     156,     0,  1334,   101,   102,   103,     0,     0,   104,   105,
      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
      116,   117,   118,   119,   120,   121,   122,   123,   124,     0,
        0,     0,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,     0,     0,   134,   135,   136,   371,   372,   373,   374,
+     133,    97,   284,   134,   135,   136,     0,   101,   102,   103,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   131,   132,   133,     0,     0,     0,   135,   136,
+       0,    97,   284,     0,     0,     0,     0,   101,   102,   103,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,     0,     0,     0,     0,     0,   138,   139,
+     140,     0,   131,   132,   133,   141,   142,   143,   135,   136,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   148,   149,     0,     0,     0,   150,     0,     0,     0,
+       0,   257,     0,     0,     0,     0,   156,     0,  1532,     0,
+       0,     0,   138,     0,     0,     0,     0,     0,     0,   141,
+     142,   143,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   148,   149,     0,     0,     0,
+     150,     0,     0,     0,     0,   257,     0,     0,   709,     0,
+     156,     0,   710,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   138,     0,     0,     0,     0,     0,     0,   141,
+     142,   143,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   148,   149,     0,     0,     0,
+     150,     0,     0,     0,     0,   257,     0,    97,   284,     0,
+     156,     0,   355,   101,   102,   103,     0,     0,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   131,   132,
+     133,    97,   248,     0,   135,   136,     0,   101,   102,   103,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   250,     0,     0,     0,     0,     0,     0,
+       0,     0,   131,   132,   133,     0,     0,     0,   135,   136,
+       0,     0,     0,     0,     0,     0,   251,     0,     0,   252,
+       0,     0,   253,     0,   254,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   255,     0,     0,     0,     0,
+       0,     0,    42,    43,    44,    45,    46,     0,   138,     0,
+      50,     0,     0,    53,     0,   141,   142,   143,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   450,   451,     0,   733,     0,   150,     0,     0,     0,
+       0,   452,     0,     0,     0,     0,   156,     0,   218,     0,
+       0,     0,   138,   824,     0,     0,     0,     0,     0,   141,
+     142,   143,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   148,   398,     0,     0,     0,
+     150,    97,   284,    99,     0,   257,     0,   101,   102,   103,
+     156,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,     0,     0,     0,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,    97,   284,   134,   135,   136,
+       0,   101,   102,   103,     0,     0,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   941,     0,     0,
+       0,     0,     0,     0,     0,     0,   131,   132,   133,     0,
+       0,     0,   135,   136,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,  1101,     0,
+       0,     0,   385,   371,   372,   373,   374,   375,   376,   377,
+     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
+       0,   385,   138,   139,   140,     0,     0,     0,     0,   141,
+     142,   143,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   148,   149,     0,     0,     0,
+     150,     0,     0,     0,     0,   257,     0,     0,     0,     0,
+     156,     0,     0,     0,     0,     0,   138,     0,     0,     0,
+       0,     0,     0,   141,   142,   143,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
+     149,     0,     0,     0,   150,     0,     0,     0,     0,   257,
+       0,     0,     0,     0,   156,     0,     0,   371,   372,   373,
+     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
+     384,     0,    -4,     1,     0,   385,    -4,     0,     0,     0,
+       0,     0,     0,     0,    -4,    -4,     0,     0,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,    -4,    -4,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    -4,
+      -4,     0,     0,     0,    -4,    -4,    -4,     0,    -4,    -4,
+      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+      -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       0,     0,     0,    -4,    -4,     6,     0,     0,     0,     0,
+      -4,     0,     0,     7,     8,    -4,    -4,    -4,    -4,     0,
+       0,    -4,     0,    -4,     0,    -4,    -4,    -4,    -4,    -4,
+      -4,    -4,    -4,    -4,    -4,    -4,     0,     9,    10,    -4,
+      -4,    -4,    -4,     0,     0,     0,     0,     0,    11,    12,
+       0,     0,     0,    13,    14,    15,     0,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,     0,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,     7,
+       8,     0,    56,    57,  1033,     0,     0,     0,     0,    58,
+       0,     0,     0,     0,    59,    60,    61,    62,     0,     0,
+      63,     0,    64,     0,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,     0,     0,     0,    76,    77,
+      78,    79,     0,     0,     0,   596,    19,    20,   597,    22,
+      23,   598,    25,   599,    27,     0,    28,     0,     0,     0,
+      32,    33,     0,    35,    36,    37,     0,     0,     0,    40,
+       0,     0,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    60,    61,    62,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,  1299,
+       0,  1300,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,  1329,     0,  1330,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,  1427,     0,  1428,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,     0,     0,   866,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,   371,   372,   373,   374,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,     0,     0,   916,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,     0,
+       0,   935,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,   960,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,     0,     0,  1051,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,     0,     0,  1297,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,   371,   372,   373,   374,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,     0,     0,  1316,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,     0,
+       0,  1358,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,  1359,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,     0,     0,  1360,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,     0,     0,  1361,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,   138,   139,   140,     0,     0,
-       0,     0,   141,   142,   143,     0,     0,     0,    -4,     1,
-       0,     0,    -4,     0,     0,     0,     0,     0,   148,   149,
-      -4,    -4,     0,   150,     0,     0,     0,     0,   257,     0,
-       0,     0,     0,   156,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    -4,    -4,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    -4,    -4,     0,     0,     0,
-      -4,    -4,    -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,
-      -4,    -4,    -4,    -4,    -4,    -4,     0,    -4,    -4,    -4,
-      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,    -4,
-      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
-      -4,    -4,    -4,    -4,    -4,    -4,     0,     6,    -4,    -4,
-       0,     0,     0,    -4,     0,     7,     8,     0,    -4,    -4,
-      -4,    -4,     0,     0,    -4,     0,    -4,     0,    -4,    -4,
-      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     9,
-      10,     0,    -4,    -4,    -4,    -4,     0,     0,     0,     0,
-      11,    12,     0,     0,     0,    13,    14,    15,     0,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,     0,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,     0,     0,    56,    57,     0,     0,     0,    58,     0,
-       0,     0,     0,    59,    60,    61,    62,     0,     0,    63,
-       0,    64,     0,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,     0,     0,     0,    76,    77,    78,
-      79,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,  1319,     0,  1320,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,  1417,     0,  1418,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,   866,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-       0,     0,   913,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,     0,     0,
-     932,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,     0,     0,   957,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,     0,     0,  1048,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,  1287,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-       0,     0,  1306,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,     0,     0,
-    1348,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,     0,     0,  1349,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,     0,     0,  1350,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,  1351,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-       0,     0,  1352,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,     0,     0,
-    1386,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,     0,     0,  1433,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,     0,     0,  1439,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,  1440,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-       0,     0,  1461,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,     0,     0,
-    1464,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,     0,     0,  1467,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,     0,     0,  1490,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,  1493,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-       0,     0,  1527,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,     0,     0,
-    1529,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,     0,     0,  1531,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,     0,     0,  1544,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,  1571,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-       0,   665,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,     0,     0,  1362,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,     0,
+       0,  1396,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,     0,     0,     0,     0,     0,     0,  1362,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,   720,
-       0,     0,     0,     0,   672,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-     625,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,   672,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,   673,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,   730,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,   767,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-     768,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,   781,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,   782,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,   783,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,   784,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-     785,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,   786,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,   898,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,   899,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,   900,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-    1007,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,  1046,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,  1047,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,  1092,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,  1247,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-    1248,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,  1255,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,  1398,   371,   372,   373,   374,   375,   376,   377,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,  1443,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,     0,     0,  1449,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,     0,     0,  1450,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,     0,     0,  1471,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,     0,
+       0,  1474,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,  1477,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,     0,     0,  1500,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,     0,     0,  1503,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,     0,     0,  1537,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,     0,
+       0,  1539,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,     0,     0,  1541,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,     0,     0,  1554,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,     0,     0,  1581,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,     0,   665,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,     0,     0,     0,  1399,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,     0,     0,     0,  1403,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,     0,     0,     0,
-    1483,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,     0,     0,     0,  1486,   371,   372,   373,
+       0,   385,     0,     0,     0,     0,     0,     0,     0,  1372,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+     720,     0,     0,     0,     0,   672,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,   625,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,   672,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,   673,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,   730,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,   767,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,   768,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,   781,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,   782,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,   783,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,   784,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,   785,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,   786,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,   898,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,   899,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,   900,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,  1010,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,  1049,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,  1050,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,  1100,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,  1257,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,  1258,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,  1265,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,  1408,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,     0,     0,     0,  1409,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,     0,     0,     0,  1413,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+       0,     0,     0,     0,   385,     0,     0,     0,     0,     0,
+       0,  1493,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
+     385,     0,     0,     0,     0,     0,     0,  1496,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
+       0,     0,     0,  1535,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
+       0,     0,   385,     0,     0,     0,   588,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,     0,
-       0,     0,  1525,   371,   372,   373,   374,   375,   376,   377,
+     384,     0,     0,     0,     0,   385,     0,     0,     0,   735,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
+       0,     0,   742,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,   588,   371,   372,   373,   374,
+       0,   385,     0,     0,     0,   746,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,     0,     0,   735,   371,
+       0,     0,     0,     0,   385,     0,     0,     0,   748,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
      382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,   742,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,   750,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,     0,     0,   746,   371,   372,   373,   374,   375,
+     385,     0,     0,     0,   752,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,   748,   371,   372,
+       0,     0,     0,   385,     0,     0,     0,   754,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
      383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
-     750,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     756,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,   752,   371,   372,   373,   374,   375,   376,
+       0,     0,     0,   758,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,     0,     0,   754,   371,   372,   373,
+       0,     0,   385,     0,     0,     0,   760,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,   756,
+     384,     0,     0,     0,     0,   385,     0,     0,     0,   762,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-       0,     0,   758,   371,   372,   373,   374,   375,   376,   377,
+       0,     0,   764,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,   760,   371,   372,   373,   374,
+       0,   385,     0,     0,     0,   766,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,     0,     0,   762,   371,
+       0,     0,     0,     0,   385,     0,     0,     0,   770,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
      382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,   764,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,   772,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,     0,     0,   766,   371,   372,   373,   374,   375,
+     385,     0,     0,     0,   774,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,   770,   371,   372,
+       0,     0,     0,   385,     0,     0,     0,   776,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
      383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
-     772,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     778,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,   774,   371,   372,   373,   374,   375,   376,
+       0,     0,     0,   780,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,     0,     0,   776,   371,   372,   373,
+       0,     0,   385,     0,     0,     0,   924,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,   778,
+     384,     0,     0,     0,     0,   385,     0,     0,     0,   925,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-       0,     0,   780,   371,   372,   373,   374,   375,   376,   377,
+       0,     0,   929,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,   921,   371,   372,   373,   374,
+       0,   385,     0,     0,     0,   930,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,     0,     0,   922,   371,
+       0,     0,     0,     0,   385,     0,     0,     0,   933,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
      382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,   926,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,   956,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,     0,     0,   927,   371,   372,   373,   374,   375,
+     385,     0,     0,     0,  1005,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,     0,     0,   930,   371,   372,
+       0,     0,     0,   385,     0,     0,     0,  1112,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
      383,   384,     0,     0,     0,     0,   385,     0,     0,     0,
-     953,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+    1114,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,     0,     0,  1002,   371,   372,   373,   374,   375,   376,
+       0,     0,     0,  1116,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,     0,     0,  1104,   371,   372,   373,
+       0,     0,   385,     0,     0,     0,  1118,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,     0,     0,  1106,
+     384,     0,     0,     0,     0,   385,     0,     0,     0,  1249,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-       0,     0,  1108,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,     0,     0,  1110,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,     0,     0,  1239,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,     0,
-       0,  1375,   371,   372,   373,   374,   375,   376,   377,   378,
-     379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,   584,   371,   372,   373,   374,   375,   376,   377,
+       0,     0,  1385,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,   631,   371,   372,   373,   374,   375,   376,
+       0,   385,     0,   584,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,   635,   371,   372,   373,   374,   375,
+       0,     0,   385,     0,   631,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,   636,   371,   372,   373,   374,
+       0,     0,     0,   385,     0,   635,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,   638,   371,   372,   373,
+       0,     0,     0,     0,   385,     0,   636,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,   640,   371,   372,
+     384,     0,     0,     0,     0,   385,     0,   638,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,     0,     0,     0,     0,   385,     0,   641,   371,
+     383,   384,     0,     0,     0,     0,   385,     0,   640,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,   644,
+     382,   383,   384,     0,     0,     0,     0,   385,     0,   641,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-     645,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     644,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,   720,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,   645,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,   726,   371,   372,   373,   374,   375,   376,   377,
+     385,     0,   720,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,   727,   371,   372,   373,   374,   375,   376,
+       0,   385,     0,   726,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,   728,   371,   372,   373,   374,   375,
+       0,     0,   385,     0,   727,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,   734,   371,   372,   373,   374,
+       0,     0,     0,   385,     0,   728,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,   745,   371,   372,   373,
+       0,     0,     0,     0,   385,     0,   734,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,   747,   371,   372,
+     384,     0,     0,     0,     0,   385,     0,   745,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,     0,     0,     0,     0,   385,     0,   749,   371,
+     383,   384,     0,     0,     0,     0,   385,     0,   747,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,   751,
+     382,   383,   384,     0,     0,     0,     0,   385,     0,   749,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-     753,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     751,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,   755,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,   753,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,   757,   371,   372,   373,   374,   375,   376,   377,
+     385,     0,   755,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,   759,   371,   372,   373,   374,   375,   376,
+       0,   385,     0,   757,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,   761,   371,   372,   373,   374,   375,
+       0,     0,   385,     0,   759,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,   763,   371,   372,   373,   374,
+       0,     0,     0,   385,     0,   761,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,   765,   371,   372,   373,
+       0,     0,     0,     0,   385,     0,   763,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,   769,   371,   372,
+     384,     0,     0,     0,     0,   385,     0,   765,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,     0,     0,     0,     0,   385,     0,   771,   371,
+     383,   384,     0,     0,     0,     0,   385,     0,   769,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,   773,
+     382,   383,   384,     0,     0,     0,     0,   385,     0,   771,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-     775,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     773,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,   777,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,   775,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,   779,   371,   372,   373,   374,   375,   376,   377,
+     385,     0,   777,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,   855,   371,   372,   373,   374,   375,   376,
+       0,   385,     0,   779,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,   860,   371,   372,   373,   374,   375,
+       0,     0,   385,     0,   855,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,   865,   371,   372,   373,   374,
+       0,     0,     0,   385,     0,   860,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,   868,   371,   372,   373,
+       0,     0,     0,     0,   385,     0,   865,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,   869,   371,   372,
+     384,     0,     0,     0,     0,   385,     0,   868,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,     0,     0,     0,     0,   385,     0,   875,   371,
+     383,   384,     0,     0,     0,     0,   385,     0,   869,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,   882,
+     382,   383,   384,     0,     0,     0,     0,   385,     0,   875,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-     883,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     882,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
-       0,   884,   371,   372,   373,   374,   375,   376,   377,   378,
+       0,   883,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,   912,   371,   372,   373,   374,   375,   376,   377,
+     385,     0,   884,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,   914,   371,   372,   373,   374,   375,   376,
+       0,   385,     0,   915,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,   915,   371,   372,   373,   374,   375,
+       0,     0,   385,     0,   917,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,   916,   371,   372,   373,   374,
+       0,     0,     0,   385,     0,   918,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,   920,   371,   372,   373,
+       0,     0,     0,     0,   385,     0,   919,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385,     0,  1103,   371,   372,
+     384,     0,     0,     0,     0,   385,     0,   923,   371,   372,
      373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,     0,     0,     0,     0,   385,     0,  1105,   371,
+     383,   384,     0,     0,     0,     0,   385,     0,  1111,   371,
      372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,     0,     0,     0,     0,   385,     0,  1107,
+     382,   383,   384,     0,     0,     0,     0,   385,     0,  1113,
      371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
      381,   382,   383,   384,     0,     0,     0,     0,   385,     0,
-    1109,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+    1115,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,     0,     0,     0,     0,   385,
        0,  1117,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,     0,     0,     0,     0,
-     385,     0,  1288,   371,   372,   373,   374,   375,   376,   377,
+     385,     0,  1125,   371,   372,   373,   374,   375,   376,   377,
      378,   379,   380,   381,   382,   383,   384,     0,     0,     0,
-       0,   385,     0,  1305,   371,   372,   373,   374,   375,   376,
+       0,   385,     0,  1298,   371,   372,   373,   374,   375,   376,
      377,   378,   379,   380,   381,   382,   383,   384,     0,     0,
-       0,     0,   385,     0,  1323,   371,   372,   373,   374,   375,
+       0,     0,   385,     0,  1315,   371,   372,   373,   374,   375,
      376,   377,   378,   379,   380,   381,   382,   383,   384,     0,
-       0,     0,     0,   385,     0,  1482,   371,   372,   373,   374,
+       0,     0,     0,   385,     0,  1333,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-       0,     0,     0,     0,   385,     0,  1542,   371,   372,   373,
+       0,     0,     0,     0,   385,     0,  1492,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,     0,     0,     0,     0,   385
+     384,     0,     0,     0,     0,   385,     0,  1552,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,     0,     0,     0,     0,   385
 };
 
 static const yytype_int16 yycheck[] =
 {
-       6,     6,     3,     6,   226,  1208,     6,     6,   338,     6,
-     211,   911,     4,     4,   907,     4,   238,   347,     5,   444,
-     445,   357,     7,     4,   360,     4,     6,     4,     4,     4,
-       4,     6,     5,     5,   164,   154,   155,     4,     4,   154,
-     155,     4,     6,    64,     4,    66,     6,    64,   154,   155,
-      80,     4,     6,   172,     6,     6,   171,   154,   155,   281,
-      90,   283,     0,     6,   170,    80,   172,  1270,    98,    99,
-     161,   162,   102,   103,   171,    90,   154,   155,    43,    44,
-       8,    46,   164,    98,    99,   154,   155,   102,   103,   171,
-     154,   155,    58,   171,   165,   100,    62,     4,    58,   170,
-     116,   170,   164,   172,     3,     4,   170,    73,   172,   171,
-       9,    10,    11,   129,   130,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    13,  1341,   106,
-     107,   108,   109,     7,   125,    44,    45,    46,     8,     6,
-     104,    50,    51,   104,   151,   164,   157,   172,  1361,    58,
-     166,   167,    61,   116,   117,    64,     6,    66,   171,   161,
-     162,  1064,   171,   164,   166,   164,   168,     8,    77,   171,
-     171,   173,   171,   168,   171,    84,    85,    86,    87,    88,
-     171,   166,   171,    92,   171,   171,    95,   171,   171,   171,
-     164,   164,   154,   155,     6,   172,   165,   171,   151,   116,
-     117,   170,     7,   435,   436,   164,     7,   145,   146,   147,
+       6,     6,   211,     3,   226,   338,     4,   444,   445,     4,
+       6,  1218,     4,     4,   347,     4,   238,     4,     4,     4,
+      13,     5,     5,     5,     4,     6,   357,     4,     6,   360,
+       4,     6,     6,     6,     4,     4,     7,     4,   167,     6,
+       4,   168,    64,     4,     5,   174,     6,   174,     6,   119,
+       6,     6,     6,     6,   157,   158,   196,   197,   198,   281,
+       6,   283,   132,   133,    43,    44,   168,    46,   157,   158,
+     173,   173,   175,  1280,   157,   158,     0,    38,    39,    40,
+      41,    42,    43,   910,   173,   167,   175,     7,    49,   167,
+     173,    58,   232,   233,    58,   100,   164,   165,    62,   170,
+       3,     4,   173,   171,   244,   245,     9,    10,    11,    73,
+     169,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,   109,   110,   111,   112,   128,   164,   165,   119,
+     120,    44,    45,    46,  1351,   157,   158,    50,    51,   107,
+     119,   120,   107,   107,   107,     7,    61,   157,     8,    64,
+     166,   167,    61,   175,  1371,    64,   164,   165,     6,     7,
+     167,   169,   167,   171,   135,   136,   174,   174,   176,   174,
+     167,   154,   174,   174,     7,   174,   167,   174,   174,   174,
+     174,   174,   174,   174,   154,   169,   174,   167,   175,   174,
+     171,   157,   158,   164,   165,   167,     8,    64,   167,    66,
+     171,     6,   174,   435,   436,   174,   157,   158,     6,   170,
+     157,   158,   173,     6,   144,   145,   146,   147,   157,   158,
+     167,   134,   173,   455,   175,   214,   215,   174,   141,   142,
+     143,   157,   158,   222,   173,  1072,     6,   226,   157,   158,
+       7,   157,   158,   584,   157,   158,     6,   588,   174,   162,
+     170,   157,   158,   173,   167,   174,   167,   170,   174,   172,
+     167,   174,    58,   157,   158,    61,    58,   173,    64,    61,
+      66,   168,    64,   914,   506,   168,   173,   169,  1495,   173,
+     173,   167,   144,   145,   146,   147,    79,   167,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   164,   165,   157,   158,   166,   164,   165,   171,
+      68,   144,   145,   146,   147,   175,    61,   174,   167,    64,
+     173,    66,   167,   339,   340,   341,   342,   343,   344,   345,
+     346,   164,   165,   349,   350,   351,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     170,   157,   158,   173,   166,   148,   149,   150,  1575,    61,
+     153,   154,    64,   175,    66,   157,   158,   173,   168,   168,
+       6,     7,   165,   173,   173,   167,   169,   144,   145,   146,
+     147,    64,   174,   176,   177,   178,   179,   168,   181,   182,
+     183,   184,   173,   186,   187,   188,   170,   164,   165,   173,
+     193,   157,   158,     6,   360,   157,   158,   157,   158,    64,
+     157,   158,   174,     4,     5,   208,   167,   173,   169,    80,
+      64,   173,   168,   173,   217,   218,   173,   173,    66,    90,
+     157,   158,    64,   226,   444,   445,   668,    98,    99,   100,
+     157,   158,   103,   104,   105,   106,   173,    38,    39,    40,
+      41,    42,    43,   442,   443,   168,   173,   168,    49,   167,
+     173,   450,   173,   256,   257,   258,     4,    61,    80,   157,
+     158,   157,   158,   266,   267,   268,   174,   270,    90,   174,
+     273,   274,   157,   158,   277,   173,    98,    99,   100,    64,
+      61,   103,   104,   105,   106,    61,    64,   290,   173,   658,
+     659,   660,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,   135,   136,    84,    85,    86,    87,
+      58,   157,   158,    61,    92,   348,    64,    95,    66,   157,
+     158,     4,   355,   175,     6,   358,   522,   173,   157,   158,
+     159,   160,   161,     4,   589,   173,     4,   166,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,   167,  1431,   169,     6,  1434,   817,     6,
+    1437,   157,   158,   157,   158,   398,   159,   160,   161,   167,
+     167,   404,   169,   166,   630,   167,   409,   173,   167,   173,
+     169,   414,   415,   167,   417,   418,   167,   167,   169,   422,
+     169,   167,   588,   169,   427,   428,   429,   978,   164,   165,
+     981,   982,   657,   658,   659,   660,     4,   167,   174,   169,
+     167,   167,   169,   169,   447,   448,   449,   450,   451,   452,
+     167,     4,   169,   456,   457,   458,   459,   460,   167,   167,
+     169,   464,   167,   167,   467,   468,   167,   167,   471,   472,
+     473,  1518,   671,   476,   477,   167,   479,   164,   165,   678,
+     483,   167,   169,   169,   171,   684,   167,     7,   491,   176,
+     167,   167,   169,   169,   497,   498,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     167,   167,  1559,   516,   166,  1562,   742,   520,  1565,   167,
+     523,  1568,   167,     4,   169,   164,   165,   174,   167,  1380,
+     169,  1382,   171,  1384,   167,   174,   169,   176,     6,  1196,
+    1197,   167,   167,   169,   169,     6,   712,     5,   167,     6,
+     169,  1598,   167,  1600,   169,  1602,   167,   167,   169,   169,
+     989,   167,   788,   169,   169,   173,   171,   175,   794,     4,
+     167,   797,   798,   799,   167,   173,   742,   175,   804,   167,
+      38,    39,    40,    41,    42,    43,    80,   590,    64,   167,
+      66,    49,   177,   173,   167,   175,    90,   182,   173,   169,
+     175,   186,   174,   167,    98,    99,   100,   174,   193,   103,
+     104,   105,   106,   173,   840,   175,   619,   174,   173,   622,
+     175,   624,   625,   173,   173,   175,   175,   167,   167,   632,
+     633,   167,   174,  1484,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   646,   173,   169,   175,   166,   174,   652,
+     849,   173,     6,   175,   657,   658,   659,   660,   173,   173,
+     175,   175,   665,    64,   173,    66,   175,   174,   167,   672,
+     673,   173,   173,   175,   175,   678,   167,   135,   136,   167,
+     167,   175,     8,   169,   173,  1536,   175,  1538,   691,  1540,
+     174,   694,    12,    13,   173,  1546,   175,   174,     5,   898,
+     899,   900,   173,   169,   175,   708,   173,   710,   175,  1138,
+     174,     5,   715,   716,   717,   718,     5,   158,  1375,   173,
+     723,   175,   173,   173,   175,   175,   173,   730,   175,   732,
+     733,   173,  1583,   175,  1585,   173,  1587,   175,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,   189,    69,
+     173,     6,   175,    73,    74,     6,    76,    77,    78,   173,
+     171,   175,    82,   122,   767,   768,   207,   933,   174,   210,
+     355,     6,     4,   358,     6,   173,   169,   175,   781,   782,
+     783,   784,   785,   786,     6,   173,  1011,   175,   791,   173,
+     793,   175,     6,   234,   114,   115,   116,     4,   173,   802,
+     175,   174,   173,   806,   175,     6,     6,   810,   173,   173,
+     175,   175,   173,   173,   175,   175,   982,   820,   821,   822,
+     823,   824,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   173,   173,   175,   175,
+     166,   173,   168,   175,   166,     7,   287,   288,   171,   173,
+      80,   175,   173,     6,   175,   175,   173,   173,   175,   175,
+      90,   173,   175,   175,   867,   173,   169,   175,    98,    99,
+     100,     7,  1071,   103,   104,   105,   106,   173,   173,   175,
+     175,   173,   173,   175,   175,     7,   471,   472,   473,   174,
+       7,   167,   167,    80,   167,   167,  1122,     7,   168,     6,
+     174,     7,     6,    90,     7,  1130,   491,     6,     6,     6,
+      80,    98,    99,   100,  1343,     4,   103,   104,   105,   106,
+      90,     4,   174,   119,   174,   928,   174,  1153,    98,    99,
+     100,  1156,   174,   103,   104,   105,   106,   174,   941,   168,
+       6,   168,   173,  1109,   168,   175,     6,  1389,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   173,  1162,   173,   173,   166,  1192,     7,     8,
+     173,   168,     4,     4,   173,   170,  1196,  1197,     6,  1532,
+       6,     4,     6,   122,   122,     7,     7,   990,   175,     7,
+       7,     7,     7,   122,     7,     7,   174,  1000,  1001,  1198,
+       4,  1200,   171,  1202,     6,   175,     6,  1010,  1011,   175,
+     175,  1236,   170,     7,     7,     7,   171,  1216,   174,     6,
+    1219,  1220,   168,     6,     6,   170,   177,     6,   169,     7,
+       6,   182,   167,   167,   174,   186,     6,   622,   154,   624,
+      80,     7,   193,  1485,     7,  1048,  1049,  1050,     7,     7,
+      90,     6,    66,     7,     7,  1058,     7,  1060,    98,    99,
+     100,  1227,     7,   103,   104,   105,   106,   168,  1071,     7,
+       7,     7,   168,   168,   168,     6,  1079,     4,     4,   167,
+     665,     6,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   174,  1100,  1101,  1102,
+     166,     6,   174,     7,     6,   256,     7,   258,     7,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   708,    80,   710,     7,   166,  1131,     6,
+     715,   716,   717,   718,    90,   175,     6,     6,   723,     6,
+      64,  1144,    98,    99,   100,   586,  1149,   103,   104,   105,
+     106,     6,     4,  1156,     4,  1375,   175,  1160,  1161,     7,
+       4,     6,     4,     6,  1167,  1168,   173,   168,   171,  1172,
+     168,   168,   168,     7,     6,   174,   167,  1180,     6,   174,
+    1379,   171,  1381,    73,  1383,   174,     6,  1190,   174,  1192,
+     174,     6,  1391,     6,   174,  1394,     6,     6,     5,     4,
+       6,  1204,   174,     7,   355,     7,   791,   358,   793,     7,
+       7,     7,   653,  1216,   174,     6,     6,  1220,     6,   175,
+    1223,   169,     6,   664,   174,   174,   168,   174,     4,   170,
+     118,     6,     6,  1236,     6,   820,   821,   822,   823,   173,
+      80,     6,     6,     4,     6,     4,     6,   398,     6,     6,
+      90,    80,     6,     6,  1257,  1258,     6,     6,    98,    99,
+     100,    90,  1265,   103,   104,   105,   106,     6,    80,    98,
+      99,   100,  1497,  1498,   103,   104,   105,   106,    90,     5,
+     174,     6,   867,     6,   122,     6,    98,    99,   100,  1488,
+       6,   103,   104,   105,   106,     6,  1299,     6,   739,     6,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   164,   131,   455,     6,   163,   154,   155,   171,   138,
-     139,   140,   154,   155,   172,   165,   164,   164,   584,   214,
-     215,   171,   588,   171,   171,   154,   155,   222,   170,   164,
-     159,   226,   156,   157,   158,   164,   166,   154,   155,   163,
-     169,    61,   171,   172,    64,   166,     7,   141,   142,   143,
-     144,   164,  1485,   170,   506,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   161,
-     162,   164,   164,   163,   166,    61,   168,    68,    64,   171,
-      66,   173,   172,   164,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   196,   197,
-     198,   164,   163,   339,   340,   341,   342,   343,   344,   345,
-     346,   154,   155,   349,   350,   351,   141,   142,   143,   144,
-     141,   142,   143,   144,   164,    58,   166,   170,    61,     4,
-     360,    64,  1565,    64,   232,   233,   161,   162,   154,   155,
-     161,   162,    64,   168,     3,     4,   244,   245,   165,     6,
-       9,    10,    11,   170,   170,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,   154,   155,   171,
-     141,   142,   143,   144,    64,    44,    45,    46,   154,   155,
-     165,    50,    51,   170,    64,   170,   161,   162,   165,    58,
-     161,   162,    61,   170,   170,    64,   171,    66,   164,    84,
-      85,    86,    87,   444,   445,    66,   668,    92,    77,    61,
-      95,   154,   155,     4,     5,    84,    85,    86,    87,    88,
-     164,   164,   166,    92,   161,   162,    95,    61,   171,   166,
-    1370,   168,  1372,   164,  1374,   166,   173,   442,   443,     4,
-       5,   154,   155,   154,   155,   450,   171,    38,    39,    40,
-      41,    42,    43,    61,   154,   155,    64,   170,    49,   170,
-      12,    13,   131,   154,   155,   154,   155,   154,   155,   138,
-     139,   140,   171,    38,    39,    40,    41,    42,    43,   170,
-      64,   170,   522,   170,    49,   154,   155,   165,  1421,    64,
-     159,  1424,   170,    61,  1427,   164,    64,   165,    66,    61,
-     169,     8,   170,   172,   154,   155,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,   164,    69,   161,   162,
-     170,    73,    74,     4,    76,    77,    78,   164,   171,   166,
-      82,   154,   155,     4,  1474,   154,   155,   154,   155,   154,
-     155,   132,   133,     8,   589,   161,   162,   170,   588,   154,
-     155,   170,   168,   170,   164,   170,   166,     6,     4,   111,
-     112,   113,   154,   155,   164,   170,    58,   132,   133,    61,
-     161,   162,    64,     6,    66,  1508,   817,   168,   170,     6,
-     165,   164,    80,   166,   630,   170,  1526,   164,  1528,   165,
-    1530,   164,    90,   166,   170,   167,  1536,   164,   170,   975,
-      98,    99,   978,   979,   102,   103,   167,   167,   167,   170,
-     170,   170,   657,   658,   659,   660,  1549,   166,    58,  1552,
-     172,    61,  1555,     4,    64,  1558,    66,     5,   167,     4,
-      79,   170,   164,  1573,   166,  1575,   164,  1577,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   164,   164,   166,  1588,   163,  1590,   165,  1592,
-      38,    39,    40,    41,    42,    43,   671,   164,   658,   659,
-     660,    49,   712,   678,   172,   164,   164,   166,   166,   684,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   164,   164,   742,   166,   163,   148,
-     149,   150,   742,    80,   153,   154,   154,   155,   156,   157,
-     158,     6,     7,    90,    80,   163,   165,   164,     7,   166,
-     169,    98,    99,  1188,  1189,   102,   103,   176,   177,   178,
-     179,     4,   181,   182,   183,   184,   164,   186,   187,   188,
-     164,   164,   788,   166,   193,   986,   164,   164,   794,   166,
-     164,   797,   798,   799,   132,   133,     6,     7,   804,   208,
-     164,   164,   166,   166,   164,   164,   166,   166,   217,   218,
-     164,   164,   166,   166,   164,   164,   166,   226,   164,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   164,   840,   172,   164,   163,   166,   166,
-     170,   168,   172,    64,    80,    66,     6,   256,   257,   258,
-     170,   170,   172,   172,    90,   171,     6,   266,   267,   268,
-      80,   270,    98,    99,   273,   274,   102,   103,   277,   170,
-      90,   172,   170,   170,   172,   172,     6,   164,    98,    99,
-     164,   290,   102,   103,   849,   171,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   171,  1130,
-     930,     4,    80,   898,   899,   900,   172,   164,    80,   348,
-    1365,   170,    90,   172,   166,   170,   355,   172,    90,   358,
-      98,    99,   172,   164,   102,   103,    98,    99,   164,   164,
-     102,   103,   371,   372,   373,   374,   375,   376,   377,   378,
-     379,   380,   381,   382,   383,   384,   385,   164,   164,   979,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   398,
-     171,   171,    80,   163,   170,   404,   172,   170,   164,   172,
-     409,   164,    90,  1008,   171,   414,   415,   171,   417,   418,
-      98,    99,   164,   422,   102,   103,   171,     6,   427,   428,
-     429,     6,   171,   170,   172,   172,   170,    64,   172,    66,
-     172,   170,   164,   172,    80,   170,     5,   172,   447,   448,
-     449,   450,   451,   452,    90,   171,   166,   456,   457,   458,
-     459,   460,    98,    99,   166,   464,   102,   103,   467,   468,
-     166,     6,   471,   472,   473,     6,   168,   476,   477,   170,
-     479,   172,     5,   170,   483,   172,   170,   170,   172,   172,
-       5,   170,   491,   172,   172,   170,     6,   172,   497,   498,
-     170,   170,   172,   172,   170,   170,   172,   172,  1063,   171,
-     170,  1101,   172,   119,   170,    80,   172,   516,  1114,     6,
-       6,   520,    80,   166,   523,    90,   170,  1122,   172,    80,
-       4,   171,    90,    98,    99,   158,   172,   102,   103,    90,
-      98,    99,  1333,     6,   102,   103,    80,    98,    99,  1145,
-     163,   102,   103,  1148,   168,     4,    90,     6,   170,   170,
-     172,   172,     7,   166,    98,    99,   189,  1379,   102,   103,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   207,   171,     6,   210,   163,  1184,
-     170,   590,   172,   170,   170,   172,   172,  1188,  1189,  1154,
-       6,   170,  1522,   172,   170,   172,   172,   172,   170,     7,
-     172,   234,     7,   170,   172,   172,   170,   170,   172,   172,
-     619,   172,   170,   622,   172,   624,   625,  1217,   170,     7,
-     172,  1226,   164,   632,   633,  1190,   164,  1192,   172,  1194,
-     170,   170,   172,   172,   170,   164,   172,   646,   170,     7,
-     172,  1206,   164,   652,  1209,  1210,   165,     6,   657,   658,
-     659,   660,     7,  1475,   287,   288,   665,   170,   170,   172,
-     172,   171,     6,   672,   673,   170,   170,   172,   172,   678,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   691,     7,     6,   694,   163,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   170,   708,
-     172,   710,   163,     6,     6,     4,   715,   716,   717,   718,
-       4,   177,   116,   171,   723,   171,   182,   171,   171,   171,
-     186,   730,   165,   732,   733,   170,   165,   193,   165,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   170,   170,   170,   170,   163,   165,   170,
-       6,     4,   167,     4,     6,   119,     6,     6,   767,   768,
-       4,     6,   119,   119,  1365,     7,     7,     7,     7,     7,
-       7,     7,   781,   782,   783,   784,   785,   786,     7,   171,
-       4,     6,   791,   168,   793,   172,   172,     6,   167,     7,
-     256,     7,   258,   802,     7,   168,   171,   806,     6,   165,
-       6,   810,   167,     6,  1369,     6,  1371,     7,  1373,     6,
-     164,   820,   821,   822,   823,   824,  1381,   166,   164,  1384,
-     171,     3,     4,     6,   151,   165,     7,     9,    10,    11,
-       7,     7,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,     7,    66,     7,     7,     7,   867,     6,
-     165,     7,    44,    45,    46,   165,     7,   165,    50,    51,
-       7,     7,     6,     4,     4,   171,   164,     6,   171,     7,
-       6,     6,  1487,  1488,     7,     7,     7,     6,     6,   355,
-      64,     6,   358,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,     6,     4,     4,
-       4,   163,   172,  1478,     6,     6,   925,     4,   165,   165,
-      73,     7,   170,     6,     6,   168,     6,     6,     6,   938,
-     165,   165,   398,   164,     6,  1541,   168,     6,   171,     6,
-       5,   171,     4,   171,   171,   171,     6,     6,   171,   131,
-       7,     7,     7,   586,     7,     7,   138,   139,   140,   166,
-     171,   171,     6,     4,  1569,     4,   171,   171,   167,   171,
-     165,     6,   154,   155,  1580,     6,  1582,   159,   987,     6,
-     115,   170,   164,     6,     6,     6,     6,   169,   997,   998,
-       6,     6,     6,     4,  1599,   119,     6,  1603,  1007,  1008,
-       6,     6,     6,     5,   171,   471,   472,   473,     6,     6,
-       6,     6,     6,     6,     6,     6,     6,     6,     6,     6,
-     653,   170,   165,     6,     6,   491,     7,     6,   168,   171,
-       6,   664,   498,     5,    62,     6,  1045,  1046,  1047,     6,
-       6,     6,     6,     6,   171,     6,  1055,  1056,     7,     6,
-     114,   171,     6,     6,  1063,   172,   172,   171,   171,   171,
-     171,     6,  1071,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   117,     6,   172,
-       6,   163,     6,  1092,  1093,  1094,     6,     6,   177,     6,
-     171,     6,     6,   182,     6,   171,   171,   186,   172,     6,
-      80,   171,     6,     4,   193,     4,   739,   396,     6,     6,
-       6,     6,     6,     6,  1123,     6,     6,     6,   172,     6,
-     171,   171,   171,     6,   171,     6,     6,  1136,     6,     6,
-       6,     6,  1141,   171,   171,   171,     6,   171,   171,  1148,
-       6,     6,     6,  1152,  1153,     6,     6,     6,     6,     6,
-    1159,  1160,     6,     6,     6,  1164,   622,  1005,   624,  1013,
-    1444,     3,     3,  1172,   421,  1126,   632,   633,    -1,    -1,
-      -1,    -1,    -1,  1182,    -1,  1184,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1196,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     6,    -1,  1206,    -1,   665,
-      -1,  1210,    -1,    -1,  1213,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1226,    -1,    -1,
-     853,   854,    -1,   856,    -1,   858,   859,    -1,    -1,   862,
-     863,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1247,  1248,
-      -1,    -1,   708,    -1,   710,    -1,  1255,    -1,    -1,   715,
-     716,   717,   718,    -1,    -1,    -1,    -1,   723,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   355,    -1,    -1,   358,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1289,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,  1307,   163,
-    1309,    -1,    -1,    -1,    -1,    -1,    -1,   940,   941,   942,
-    1319,    -1,  1321,    -1,    -1,  1324,    -1,   950,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   791,    -1,   793,  1337,    -1,
-      -1,    -1,    -1,  1342,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,  1362,   820,   821,   822,   823,    -1,    -1,
-    1369,    -1,  1371,    -1,  1373,    -1,   999,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1383,    -1,    -1,    -1,  1387,    -1,
-      -1,  1014,   471,   472,   473,    -1,    -1,  1020,    -1,  1398,
-    1399,    -1,    -1,  1026,  1403,  1028,  1029,    -1,    -1,    -1,
-    1033,   867,   491,    -1,  1413,  1038,  1039,  1040,  1417,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1055,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1065,    -1,    -1,  1444,  1069,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1455,    12,    13,    -1,
-      -1,    -1,    -1,  1462,    -1,    -1,  1465,    -1,    -1,  1468,
-      -1,    -1,    -1,  1472,    -1,    -1,    -1,  1476,    -1,  1478,
-      -1,    -1,    -1,    -1,  1483,    -1,    -1,  1486,    -1,  1488,
-      -1,    -1,    -1,    -1,    -1,    -1,  1119,    -1,  1121,    -1,
-      -1,    -1,    -1,    58,    59,    60,    61,    62,    63,    64,
+     158,   159,   160,   161,  1317,     6,  1319,   173,   166,     6,
+     471,   472,   473,     6,     6,  1551,  1329,   168,  1331,     6,
+       6,  1334,    80,     6,     6,   175,     7,   174,   171,     6,
+     491,     5,    90,    62,  1347,     6,   175,   498,     6,  1352,
+      98,    99,   100,     6,  1579,   103,   104,   105,   106,     6,
+       6,     6,     6,   175,  1590,     7,  1592,   175,     6,  1372,
+     117,   174,     6,   174,   120,   175,  1379,     6,  1381,   174,
+    1383,   174,   174,     6,  1609,   174,     6,  1613,   175,   174,
+    1393,     6,     6,     6,  1397,    12,    13,     6,     6,     6,
+       6,     6,   175,   174,   174,  1408,  1409,     6,   174,     6,
+    1413,    80,   853,   854,     4,   856,     4,   858,   859,     6,
+    1423,   862,   863,     6,  1427,     6,     6,   175,     6,     6,
+       6,     6,   175,     6,   174,     6,   174,   174,     6,   174,
+       6,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,  1454,    69,     6,     6,     6,    73,    74,     6,    76,
+      77,    78,  1465,     8,   174,    82,     6,     6,   174,  1472,
+     174,   622,  1475,   624,   174,  1478,   174,     6,     6,  1482,
+       6,   632,   633,  1486,     6,  1488,     6,     6,     6,     6,
+    1493,     6,     6,  1496,  1079,  1498,  1008,   114,   115,   116,
+    1454,   396,   943,   944,   945,  1016,     3,     3,   421,    -1,
+    1134,    -1,   953,    -1,   665,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    80,    -1,    -1,  1529,    -1,    -1,    -1,
+      -1,    -1,  1535,    90,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    98,    99,   100,    -1,  1548,   103,   104,   105,   106,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   708,   175,   710,
+       6,  1002,    -1,    -1,   715,   716,   717,   718,    -1,    -1,
+      -1,    -1,   723,    -1,  1577,    -1,  1017,    -1,    -1,    -1,
+      -1,    -1,  1023,    -1,    -1,    -1,    -1,    -1,  1029,    -1,
+    1031,  1032,    -1,    -1,    -1,  1036,    -1,    12,    13,    -1,
+    1041,  1042,  1043,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,  1058,   175,    -1,
+      -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,    12,    13,
+      -1,    -1,  1073,    -1,    -1,    -1,  1077,    -1,    -1,    -1,
+     791,    -1,   793,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    -1,    69,    -1,    -1,    -1,    73,    74,
-    1519,    76,    77,    78,    -1,    -1,  1525,    82,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1538,
-      -1,    12,    13,   622,    -1,   624,    -1,    -1,    -1,    -1,
-      -1,    -1,  1175,  1176,  1177,  1178,   111,   112,   113,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1567,    -1,
+      -1,    76,    77,    78,    -1,    -1,    -1,    82,    -1,   820,
+     821,   822,   823,    -1,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,  1127,    -1,  1129,    73,
+      74,    -1,    76,    77,    78,    -1,    -1,    -1,    82,   114,
+     115,   116,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   867,    -1,    12,    13,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
+     114,   115,   116,    -1,    -1,    -1,    -1,    -1,    90,    -1,
+      -1,    -1,  1183,  1184,  1185,  1186,    98,    99,   100,  1334,
+      -1,   103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
+     175,    -1,    -1,    -1,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    -1,    69,    -1,  1218,    -1,    73,
+      74,    -1,    76,    77,    78,    -1,    -1,  1372,    82,  1230,
+       6,   175,    -1,    -1,    -1,    -1,  1237,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,  1393,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,  1259,    -1,
+     114,   115,   116,   175,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,  1280,
+      -1,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
+      -1,    -1,    -1,  1314,    -1,    -1,    44,    45,    46,    -1,
+      -1,   175,    50,    51,    -1,    -1,    -1,    -1,    -1,    -1,
+      58,    -1,    -1,    61,    -1,    -1,    64,    -1,    66,    -1,
+      -1,  1486,    -1,  1488,    -1,    -1,    -1,    -1,    -1,    77,
+    1351,    -1,    -1,    -1,    -1,    -1,    84,    85,    86,    87,
+      88,    -1,    -1,    -1,    92,    -1,    -1,    95,  1079,    -1,
+    1371,    -1,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,  1388,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1548,    -1,    -1,   134,     6,    -1,    -1,
+      -1,    -1,    -1,   141,   142,   143,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,   157,
+     158,    -1,   166,    -1,   162,    -1,    -1,    -1,  1439,   167,
+      -1,    -1,    -1,    -1,   172,    -1,   174,   175,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,
+      -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,     6,
+      -1,    -1,    -1,    -1,  1495,    -1,  1497,    44,    45,    46,
+      -1,    -1,    -1,    50,    51,  1216,    -1,    -1,    -1,  1220,
+      -1,    58,    -1,    -1,    61,    -1,    -1,    64,    -1,    66,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1208,   665,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,  1220,    69,    -1,
-      -1,    -1,    73,    74,  1227,    76,    77,    78,    -1,    -1,
-      -1,    82,    -1,    -1,    -1,  1071,    -1,   172,     6,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1249,    -1,    -1,   708,
-      -1,   710,    -1,    -1,    -1,    -1,   715,   716,   717,   718,
-     111,   112,   113,    -1,   723,    -1,    -1,  1270,     3,     4,
-       5,    -1,    -1,    -1,     9,    10,    11,    -1,    -1,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,  1304,    -1,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    -1,    -1,    49,    50,    51,    -1,    -1,    -1,
-      -1,   172,    -1,    58,    -1,    -1,    61,    -1,    -1,    64,
-      -1,    66,   791,    -1,   793,    -1,    -1,    -1,  1341,    -1,
-      -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
-      85,    86,    87,    88,    -1,    -1,    -1,    92,  1361,    -1,
-      95,   820,   821,   822,   823,    -1,    -1,    -1,    -1,    -1,
-    1206,    -1,    -1,    -1,  1210,  1378,    -1,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,   139,   140,    -1,    -1,   867,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,
-     155,    -1,    -1,    -1,   159,    -1,  1429,    -1,    -1,   164,
-      -1,    -1,    -1,    -1,   169,    -1,   171,    -1,     3,     4,
-      -1,    -1,    -1,    -1,     9,    10,    11,    -1,    -1,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      -1,    -1,    -1,  1309,    -1,    -1,    -1,    -1,    -1,    44,
-      45,    46,  1485,    -1,  1487,    50,    51,    -1,  1324,    -1,
-      -1,    -1,     3,     4,     5,    -1,     7,    -1,     9,    10,
-      11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,     6,    -1,  1362,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
-      51,    -1,    -1,    -1,    -1,    -1,    -1,  1383,    -1,    -1,
+      77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    85,    86,
+      87,    88,    -1,    -1,    -1,    92,    -1,    -1,    95,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,
+      -1,    -1,    -1,    -1,  1575,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,    -1,    -1,
+      -1,    -1,    -1,    -1,   141,   142,   143,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1319,    -1,
+     157,   158,    -1,    -1,    -1,   162,    -1,    -1,    -1,    -1,
+     167,    -1,    -1,  1334,    -1,   172,    -1,    -1,   175,    -1,
+      -1,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,     6,    -1,    -1,   166,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1565,    -1,    -1,    -1,   131,    -1,    -1,    -1,
-      -1,    -1,    -1,   138,   139,   140,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,
-     155,    -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,   164,
-      -1,    -1,   167,    -1,   169,    -1,   171,    -1,    -1,    -1,
-      -1,    -1,  1071,    -1,   125,    -1,    -1,    -1,    -1,    -1,
-     131,   132,   133,    -1,    -1,    -1,    -1,   138,   139,   140,
-     141,   142,   143,   144,    -1,    -1,    -1,    -1,    -1,    -1,
-    1476,    -1,  1478,   154,   155,    -1,     6,    -1,   159,    -1,
-     161,   162,    -1,   164,    -1,   166,    -1,   168,   169,    -1,
-     171,    -1,    -1,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,  1519,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,     3,     4,     5,    -1,    -1,    -1,     9,    10,
-      11,    -1,  1538,    14,    15,    16,    17,    18,    19,    20,
+      11,    -1,  1393,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,
+      31,    32,    33,    34,    35,    -1,    -1,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
       51,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,    -1,
       61,    -1,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     6,    77,    -1,    -1,    -1,
       -1,    -1,    -1,    84,    85,    86,    87,    88,    -1,    -1,
-      -1,    92,    -1,    -1,    95,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-     131,    -1,    -1,   163,    -1,    -1,    -1,   138,   139,   140,
-     170,    -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   154,   155,    -1,    -1,    -1,   159,    -1,
-      -1,    -1,    -1,   164,    -1,    -1,    -1,    -1,   169,    -1,
-     171,    -1,    -1,    -1,    -1,  1324,    -1,    -1,    -1,    -1,
+      -1,    92,    -1,    -1,    95,     6,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1486,    -1,  1488,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,   134,   135,   136,   166,    -1,    -1,    -1,
+     141,   142,   143,    -1,    -1,    -1,    -1,    -1,  1529,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   157,   158,    -1,    -1,
+      -1,   162,    -1,    -1,    -1,    -1,   167,  1548,     3,     4,
+       5,   172,     7,   174,     9,    10,    11,    -1,    -1,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      -1,    -1,    -1,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    12,    13,    49,    50,    51,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    -1,    73,    74,    -1,    76,    77,    78,    -1,
+      -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   128,    -1,    -1,    -1,    -1,    -1,   134,
+     135,   136,    -1,    -1,    -1,    -1,   141,   142,   143,   144,
+     145,   146,   147,    -1,   114,   115,   116,    -1,    -1,    -1,
+      -1,    -1,   157,   158,    -1,    -1,    -1,   162,    -1,   164,
+     165,    -1,   167,    -1,   169,    -1,   171,   172,    -1,   174,
        3,     4,     5,    -1,    -1,    -1,     9,    10,    11,    -1,
       -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,  1362,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,    -1,
-      -1,    -1,    -1,    -1,  1383,    58,    -1,    -1,    61,    12,
-      13,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
+      33,    34,    35,    -1,    -1,   175,    -1,    -1,    -1,    -1,
+      -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,    12,
+      13,    -1,    -1,    -1,    -1,    58,    -1,    -1,    61,    -1,
+      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
       -1,    84,    85,    86,    87,    88,    -1,    -1,    -1,    92,
-      -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    62,
+      -1,    -1,    95,    -1,    -1,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    -1,
-      73,    74,    -1,    76,    77,    78,    -1,    -1,   131,    82,
-      -1,    -1,    -1,    -1,    -1,   138,   139,   140,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1476,    -1,  1478,
-      -1,   154,   155,    -1,    -1,    -1,   159,    -1,   111,   112,
-     113,   164,    -1,     3,     4,    -1,   169,    -1,   171,     9,
-      10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    44,    45,    46,    -1,    -1,  1538,
-      50,    51,    12,    13,    -1,    -1,    -1,    -1,    58,   172,
-      -1,    61,    -1,    -1,    64,    -1,    66,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    84,    85,    86,    87,    88,    -1,
-      -1,    -1,    92,    -1,    -1,    95,    -1,    -1,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    -1,    69,
-      -1,    -1,    -1,    73,    74,    -1,    76,    77,    78,    -1,
-      -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   131,    -1,    -1,    -1,    -1,    -1,    -1,   138,   139,
-     140,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,   112,   113,   154,   155,    -1,    -1,    -1,   159,
-      -1,    -1,    -1,    -1,   164,    -1,     3,     4,    -1,   169,
-      -1,   171,     9,    10,    11,    -1,    -1,    14,    15,    16,
+      73,    74,    -1,    76,    77,    78,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   134,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
+     143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   114,   115,   116,   157,   158,    -1,    -1,    -1,   162,
+      -1,    -1,    -1,    -1,   167,    -1,     3,     4,     5,   172,
+      -1,   174,     9,    10,    11,    -1,    -1,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,
-      -1,    -1,   172,    50,    51,    12,    13,    -1,    -1,    -1,
+      -1,    -1,   175,    50,    51,    12,    13,    -1,    -1,    -1,
       -1,    58,    -1,    -1,    61,    -1,    -1,    64,    -1,    66,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    85,    86,
@@ -2921,696 +2932,739 @@ static const yytype_int16 yycheck[] =
       -1,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    -1,    69,    -1,    -1,    -1,    73,    74,    -1,    76,
       77,    78,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   131,    -1,    -1,    -1,    -1,    -1,
-      -1,   138,   139,   140,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,   112,   113,   154,   155,    -1,
-      -1,    -1,   159,    -1,    -1,    -1,    -1,   164,    -1,     3,
-       4,    -1,   169,    -1,   171,     9,    10,    11,    -1,    -1,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      44,    45,    46,    -1,    -1,   172,    50,    51,    12,    13,
-      -1,    -1,    -1,    -1,    58,    -1,    -1,    61,    -1,    -1,
-      64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
-      84,    85,    86,    87,    88,    -1,    -1,    -1,    92,    -1,
-      -1,    95,    -1,    -1,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    -1,    69,    -1,    -1,    -1,    73,
-      74,    -1,    76,    77,    78,    -1,    -1,    -1,    82,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   131,    -1,    -1,
-      -1,    -1,    -1,    -1,   138,   139,   140,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,   113,
-     154,   155,    -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,
-     164,    -1,     3,     4,    -1,   169,    -1,   171,     9,    10,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,    -1,    -1,
+      -1,    -1,    -1,    -1,   141,   142,   143,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,
+     157,   158,    -1,    -1,    -1,   162,    -1,    -1,    -1,    -1,
+     167,    -1,     3,     4,    -1,   172,    -1,   174,     9,    10,
       11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    45,    46,    -1,    -1,   172,    50,
+      -1,    -1,    -1,    44,    45,    46,    -1,    -1,   175,    50,
       51,    12,    13,    -1,    -1,    -1,    -1,    58,    -1,    -1,
       61,    -1,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,
       -1,    -1,    -1,    84,    85,    86,    87,    88,    -1,    -1,
       -1,    92,    -1,    -1,    95,    -1,    -1,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
-      -1,    -1,    73,    74,    -1,    76,    77,    78,    -1,     6,
+      -1,    -1,    73,    74,    -1,    76,    77,    78,    -1,    -1,
       -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     131,    -1,    -1,    -1,    -1,    -1,    -1,   138,   139,   140,
-       6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,   112,   113,   154,   155,    -1,    -1,    -1,   159,    -1,
-      -1,    -1,    -1,   164,    -1,     3,     4,    -1,   169,    -1,
-     171,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,    -1,
-      -1,   172,    50,    51,    -1,    -1,    -1,    -1,    -1,    -1,
-      58,    -1,    -1,    61,    -1,    -1,    64,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      -1,    -1,    -1,    -1,    -1,    -1,    84,    85,    86,    87,
-      88,    -1,    -1,    -1,    92,    -1,    -1,    95,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   131,     6,    -1,    -1,   163,    -1,    -1,
-     138,   139,   140,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   154,   155,    -1,    -1,
-      -1,   159,    -1,    -1,    -1,    -1,   164,    -1,     3,     4,
-       5,   169,    -1,   171,     9,    10,    11,    -1,    -1,    14,
+      -1,    -1,    -1,   134,    -1,    -1,    -1,    -1,    -1,    -1,
+     141,   142,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   114,   115,   116,   157,   158,    -1,    -1,
+      -1,   162,    -1,    -1,    -1,    -1,   167,    -1,     3,     4,
+      -1,   172,    -1,   174,     9,    10,    11,    -1,    -1,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      -1,    -1,    -1,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    -1,    -1,    49,    50,    51,     3,     4,     5,
-      -1,    -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    12,    13,    49,    50,    51,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,   131,   132,   133,    -1,
-      -1,    -1,    -1,   138,   139,   140,    -1,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    -1,    69,   154,
-     155,    -1,    73,    74,   159,    76,    77,    78,    -1,   164,
-      -1,    82,    -1,    -1,   169,    -1,   171,     6,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,   139,   140,    -1,    -1,    -1,    -1,    -1,
-     111,   112,   113,    -1,    -1,    -1,    -1,    -1,   154,   155,
-      -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,   164,    -1,
-       3,     4,     5,   169,    -1,   171,     9,    10,    11,    -1,
-      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    -1,    -1,    -1,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,     3,     4,    49,    50,    51,    -1,
+      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
+      45,    46,    -1,    -1,   175,    50,    51,    12,    13,    -1,
+      -1,    -1,    -1,    58,    -1,    -1,    61,    -1,    -1,    64,
+      -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    84,
+      85,    86,    87,    88,    -1,    -1,    -1,    92,    -1,    -1,
+      95,    -1,    -1,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    -1,    69,    -1,    -1,    -1,    73,    74,
+      -1,    76,    77,    78,    -1,     6,    -1,    82,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,
+      -1,    -1,    -1,    -1,     6,    -1,   141,   142,   143,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+     115,   116,   157,   158,    -1,    -1,    -1,   162,    -1,    -1,
+      -1,    -1,   167,    -1,     3,     4,    -1,   172,    -1,   174,
        9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+      29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    44,    45,    46,    -1,    -1,
-      -1,    50,    51,    12,    13,    -1,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   131,   132,
-     133,    -1,    -1,    -1,    -1,   138,   139,   140,    -1,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
-      69,   154,   155,    -1,    73,    74,   159,    76,    77,    78,
-      -1,   164,    -1,    82,    -1,    -1,   169,    -1,   171,     6,
-      -1,    -1,   131,    -1,    -1,    -1,    -1,    -1,    -1,   138,
-     139,   140,    -1,    -1,    -1,    -1,    -1,    -1,     6,    -1,
-      -1,    -1,   111,   112,   113,   154,   155,    -1,    -1,    -1,
-     159,    -1,    -1,    -1,    -1,   164,    -1,    -1,   167,    -1,
-     169,    -1,   171,     3,     4,    -1,    -1,    -1,    -1,     9,
-      10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   172,    44,    45,    46,     3,     4,    -1,
-      50,    51,    -1,     9,    10,    11,    -1,    -1,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,
-      46,    -1,    -1,    -1,    50,    51,    12,    13,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   131,    -1,    -1,    -1,   163,    -1,    -1,   138,   139,
-     140,    -1,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    -1,    69,   154,   155,    -1,    73,    74,   159,
-      76,    77,    78,    -1,   164,    -1,    82,     7,     8,   169,
-      -1,   171,    -1,    -1,    -1,   131,    -1,    -1,    -1,    -1,
-      -1,    -1,   138,   139,   140,    -1,     7,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,   112,   113,   154,   155,
-      -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,   164,    -1,
-       3,     4,    -1,   169,    -1,   171,     9,    10,    11,    -1,
+     175,    50,    51,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+      -1,    -1,    61,    -1,    -1,    64,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
+      -1,    -1,    -1,    -1,    -1,    84,    85,    86,    87,    88,
+      -1,    -1,    -1,    92,    -1,    -1,    95,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+       6,    -1,    -1,    -1,   166,   134,    -1,    -1,    -1,    -1,
+      -1,    -1,   141,   142,   143,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   157,   158,
+      -1,    -1,    -1,   162,    -1,    -1,    -1,    -1,   167,    -1,
+       3,     4,    -1,   172,    -1,   174,     9,    10,    11,    -1,
       -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    44,    45,    46,    -1,    -1,   172,    50,    51,    -1,
+      -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,    -1,
       -1,    -1,    -1,    -1,    -1,    58,    -1,    -1,    61,    -1,
-      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,     8,
+      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
-      -1,    84,    85,    86,    87,    88,    -1,    -1,     8,    92,
-      -1,    -1,    95,    -1,    -1,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,     8,
-      -1,    -1,    -1,   163,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   131,     8,
-      -1,    -1,   163,    -1,    -1,   138,   139,   140,    -1,    -1,
+      -1,    84,    85,    86,    87,    88,    -1,    -1,    -1,    92,
+      -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,     6,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   134,    -1,    -1,    -1,    -1,     6,    -1,   141,   142,
+     143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   157,   158,    -1,    -1,    -1,   162,
+      -1,    -1,    -1,    -1,   167,    -1,     3,     4,    -1,   172,
+      -1,   174,     9,    10,    11,    -1,    -1,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,
+      -1,    -1,    -1,    50,    51,    -1,    -1,    -1,    -1,    -1,
+      -1,    58,    -1,    -1,    61,    -1,    -1,    64,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    85,    86,
+      87,    88,    -1,    -1,    -1,    92,    -1,    -1,    95,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,     8,    -1,    -1,    -1,   166,   134,    -1,    -1,
+      -1,    -1,    -1,    -1,   141,   142,   143,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   154,   155,    -1,    -1,    -1,   159,     3,     4,     5,
-      -1,   164,    -1,     9,    10,    11,   169,    -1,    14,    15,
+     157,   158,    -1,    -1,    -1,   162,    -1,    -1,    -1,    -1,
+     167,    -1,     3,     4,     5,   172,    -1,   174,     9,    10,
+      11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    -1,    -1,    -1,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
+      51,     3,     4,     5,    -1,    -1,    -1,     9,    10,    11,
+      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    -1,    -1,    49,    50,    51,
+      -1,    -1,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   134,   135,   136,    -1,    -1,    -1,    -1,
+     141,   142,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   157,   158,    -1,    -1,
+      -1,   162,    -1,    -1,    -1,    -1,   167,    -1,    -1,    -1,
+      -1,   172,    -1,   174,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   134,   135,   136,    -1,    -1,    -1,    -1,   141,
+     142,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,   158,    -1,    -1,    -1,
+     162,    -1,    -1,    -1,    -1,   167,    -1,     3,     4,     5,
+     172,    -1,   174,     9,    10,    11,    -1,    -1,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
       -1,    -1,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    -1,    -1,    49,    50,    51,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,   131,   132,   133,    -1,    -1,
-      -1,    -1,   138,   139,   140,    -1,    -1,    -1,     0,     1,
-      -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,   154,   155,
-      12,    13,    -1,   159,    -1,    -1,    -1,    -1,   164,    -1,
-      -1,    -1,    -1,   169,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    47,    48,    -1,    -1,    -1,
-      52,    53,    54,    -1,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    -1,     4,   100,   101,
-      -1,    -1,    -1,   105,    -1,    12,    13,    -1,   110,   111,
-     112,   113,    -1,    -1,   116,    -1,   118,    -1,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,    36,
-      37,    -1,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
-      47,    48,    -1,    -1,    -1,    52,    53,    54,    -1,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    -1,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    -1,    -1,   100,   101,    -1,    -1,    -1,   105,    -1,
-      -1,    -1,    -1,   110,   111,   112,   113,    -1,    -1,   116,
-      -1,   118,    -1,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,    -1,    -1,    -1,   134,   135,   136,
-     137,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,    -1,   172,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,   170,    -1,   172,   145,   146,   147,
+      46,     3,     4,    49,    50,    51,    -1,     9,    10,    11,
+      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,
+      -1,     3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,
+      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,   134,   135,
+     136,    -1,    44,    45,    46,   141,   142,   143,    50,    51,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   157,   158,    -1,    -1,    -1,   162,    -1,    -1,    -1,
+      -1,   167,    -1,    -1,    -1,    -1,   172,    -1,   174,    -1,
+      -1,    -1,   134,    -1,    -1,    -1,    -1,    -1,    -1,   141,
+     142,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,   158,    -1,    -1,    -1,
+     162,    -1,    -1,    -1,    -1,   167,    -1,    -1,   170,    -1,
+     172,    -1,   174,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   134,    -1,    -1,    -1,    -1,    -1,    -1,   141,
+     142,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,   158,    -1,    -1,    -1,
+     162,    -1,    -1,    -1,    -1,   167,    -1,     3,     4,    -1,
+     172,    -1,   174,     9,    10,    11,    -1,    -1,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,
+      46,     3,     4,    -1,    50,    51,    -1,     9,    10,    11,
+      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,
+      -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,    -1,    61,
+      -1,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
+      -1,    -1,    84,    85,    86,    87,    88,    -1,   134,    -1,
+      92,    -1,    -1,    95,    -1,   141,   142,   143,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   157,   158,    -1,     8,    -1,   162,    -1,    -1,    -1,
+      -1,   167,    -1,    -1,    -1,    -1,   172,    -1,   174,    -1,
+      -1,    -1,   134,     8,    -1,    -1,    -1,    -1,    -1,   141,
+     142,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,   158,    -1,    -1,    -1,
+     162,     3,     4,     5,    -1,   167,    -1,     9,    10,    11,
+     172,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,     3,     4,    49,    50,    51,
+      -1,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    46,    -1,
+      -1,    -1,    50,    51,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,     8,    -1,
+      -1,    -1,   166,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,   134,   135,   136,    -1,    -1,    -1,    -1,   141,
+     142,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,   158,    -1,    -1,    -1,
+     162,    -1,    -1,    -1,    -1,   167,    -1,    -1,    -1,    -1,
+     172,    -1,    -1,    -1,    -1,    -1,   134,    -1,    -1,    -1,
+      -1,    -1,    -1,   141,   142,   143,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   157,
+     158,    -1,    -1,    -1,   162,    -1,    -1,    -1,    -1,   167,
+      -1,    -1,    -1,    -1,   172,    -1,    -1,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,     0,     1,    -1,   166,     4,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    12,    13,    -1,    -1,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    36,    37,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,
+      48,    -1,    -1,    -1,    52,    53,    54,    -1,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      -1,    -1,    -1,   101,   102,     4,    -1,    -1,    -1,    -1,
+     108,    -1,    -1,    12,    13,   113,   114,   115,   116,    -1,
+      -1,   119,    -1,   121,    -1,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,    -1,    36,    37,   137,
+     138,   139,   140,    -1,    -1,    -1,    -1,    -1,    47,    48,
+      -1,    -1,    -1,    52,    53,    54,    -1,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    12,
+      13,    -1,   101,   102,    80,    -1,    -1,    -1,    -1,   108,
+      -1,    -1,    -1,    -1,   113,   114,   115,   116,    -1,    -1,
+     119,    -1,   121,    -1,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,    -1,    -1,    -1,   137,   138,
+     139,   140,    -1,    -1,    -1,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    -1,
+      73,    74,    -1,    76,    77,    78,    -1,    -1,    -1,    82,
+      -1,    -1,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   114,   115,   116,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,   173,
+      -1,   175,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,   173,    -1,   175,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   172,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   172,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     172,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   172,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   172,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,   173,    -1,   175,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   175,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   175,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   175,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   172,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   172,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     172,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   172,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   172,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   175,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   175,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   175,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   172,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   172,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     172,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   172,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   172,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   175,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   175,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   175,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   172,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   172,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     172,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   172,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   172,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   175,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   175,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   175,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   172,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   172,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     172,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   172,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   172,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   175,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   175,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   175,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   172,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   171,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   171,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,
-      -1,    -1,    -1,    -1,   170,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-     170,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   175,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   175,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   174,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   174,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,   170,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,   170,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,   170,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-     170,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+     168,    -1,    -1,    -1,    -1,   173,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,   173,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,   173,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,   173,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,   173,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,   170,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,   170,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,   170,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-     170,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,   173,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,   173,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,   173,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,   173,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,   173,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,   170,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,   170,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,   170,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-     170,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,   173,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,   173,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,   173,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,   173,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,   173,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,   170,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,   170,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,   170,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-     170,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,   173,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,   173,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,   173,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,   173,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,   173,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,   170,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,   170,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,    -1,    -1,    -1,   170,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
-     170,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,   173,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,   173,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,   173,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,   173,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,    -1,   173,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,
-      -1,    -1,   170,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,   167,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,   167,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,   167,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,    -1,    -1,   167,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,   167,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,
-     167,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,   167,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,    -1,    -1,   167,   145,   146,   147,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,    -1,    -1,    -1,   173,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,
+      -1,   173,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,    -1,    -1,    -1,   173,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+      -1,    -1,    -1,   173,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,   170,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,   170,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,   167,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-      -1,    -1,   167,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,   167,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,   170,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,    -1,    -1,   170,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,   170,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,   167,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,   167,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,    -1,    -1,   167,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,   167,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,
-     167,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,   167,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,    -1,    -1,   167,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,
+      -1,   170,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,   170,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,    -1,    -1,   170,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+     170,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,    -1,    -1,   170,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,   170,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,   170,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,   167,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-      -1,    -1,   167,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,   167,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,   170,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,    -1,    -1,   170,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,   170,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,   167,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,   167,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,    -1,    -1,   167,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,    -1,    -1,   167,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,
-     167,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,    -1,    -1,   167,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,    -1,    -1,   167,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,
+      -1,   170,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,   170,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,    -1,    -1,   170,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+     170,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,    -1,    -1,   170,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,   170,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,   170,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,   167,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-      -1,    -1,   167,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,    -1,    -1,   167,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,   167,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,    -1,
-      -1,   167,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,   165,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,   165,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,   165,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,   170,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,    -1,    -1,   170,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,   170,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,
+      -1,   170,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,    -1,    -1,   170,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,    -1,    -1,   170,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,
+     170,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,    -1,    -1,   170,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,    -1,    -1,   170,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,    -1,    -1,   170,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-     165,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,   165,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,   165,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,   165,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,   165,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+      -1,    -1,   170,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,   168,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,   168,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-     165,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,   165,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,   165,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,   165,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,   165,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+     168,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,   168,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,   168,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,   168,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,   168,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-     165,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,   165,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,   165,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,   165,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,   165,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+     168,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,   168,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,   168,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,   168,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,   168,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-     165,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,   165,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,   165,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,   165,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,   165,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+     168,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,   168,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,   168,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,   168,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,   168,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,   165,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,    -1,
-     165,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,   163,
-      -1,   165,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,    -1,    -1,    -1,    -1,
-     163,    -1,   165,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,    -1,    -1,    -1,
-      -1,   163,    -1,   165,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,    -1,    -1,
-      -1,    -1,   163,    -1,   165,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,    -1,
-      -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,   148,
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+     168,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,   168,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,   168,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,   168,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,   168,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,
      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-      -1,    -1,    -1,    -1,   163,    -1,   165,   145,   146,   147,
+     159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,   168,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,    -1,    -1,    -1,    -1,   163
+     158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,    -1,
+     168,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,   166,
+      -1,   168,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,    -1,    -1,    -1,    -1,
+     166,    -1,   168,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,    -1,    -1,    -1,
+      -1,   166,    -1,   168,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,    -1,    -1,
+      -1,    -1,   166,    -1,   168,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,    -1,
+      -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+      -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,    -1,    -1,    -1,    -1,   166,    -1,   168,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,    -1,    -1,    -1,    -1,   166
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,     1,   175,   176,     6,     0,     4,    12,    13,    36,
+       0,     1,   178,   179,     6,     0,     4,    12,    13,    36,
       37,    47,    48,    52,    53,    54,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,   100,   101,   105,   110,
-     111,   112,   113,   116,   118,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   134,   135,   136,   137,
-     177,   179,   180,   198,   212,   217,   220,   221,   222,   223,
-     224,   225,   226,   246,   247,   248,   249,     3,     4,     5,
+      92,    93,    94,    95,    96,    97,   101,   102,   108,   113,
+     114,   115,   116,   119,   121,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   137,   138,   139,   140,
+     180,   182,   183,   201,   215,   220,   223,   224,   225,   226,
+     227,   228,   229,   249,   250,   251,   252,     3,     4,     5,
        7,     9,    10,    11,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    49,    50,    51,   125,   131,   132,
-     133,   138,   139,   140,   141,   142,   143,   144,   154,   155,
-     159,   161,   162,   164,   166,   168,   169,   171,   196,   197,
-     250,   251,   262,   263,    13,    64,   164,   164,     6,   171,
-       6,     6,     6,     6,   166,   166,   164,   171,   164,   164,
-       4,   164,   171,   164,   164,     4,   171,   164,   164,    68,
-      64,    64,     6,   171,    64,    64,    61,    64,    66,    66,
-      58,    61,    64,    66,    61,    64,    66,    61,    64,   164,
-      61,   116,   129,   130,   171,   154,   155,   164,   171,   252,
-     253,   252,   171,    58,    61,    64,   171,   252,     4,    58,
-      62,    73,    64,    66,    64,    61,     4,   125,   171,     4,
+      43,    44,    45,    46,    49,    50,    51,   128,   134,   135,
+     136,   141,   142,   143,   144,   145,   146,   147,   157,   158,
+     162,   164,   165,   167,   169,   171,   172,   174,   199,   200,
+     253,   254,   265,   266,    13,    64,   167,   167,     6,   174,
+       6,     6,     6,     6,   169,   169,   167,   174,   167,   167,
+       4,   167,   174,   167,   167,     4,   174,   167,   167,    68,
+      64,    64,     6,   174,    64,    64,    61,    64,    66,    66,
+      58,    61,    64,    66,    61,    64,    66,    61,    64,   167,
+      61,   119,   132,   133,   174,   157,   158,   167,   174,   255,
+     256,   255,   174,    58,    61,    64,   174,   255,     4,    58,
+      62,    73,    64,    66,    64,    61,     4,   128,   174,     4,
        6,    58,    61,    64,    61,    64,     4,     4,     4,     5,
-      35,    58,    61,    64,    66,    77,   155,   164,   171,   217,
-     226,   250,   255,   256,   257,     4,   164,   164,   164,     4,
-     171,   259,     4,   164,   164,     6,     6,   166,     4,     4,
-       5,   171,     5,   171,     4,   250,     6,   164,   171,     4,
-     166,   168,   173,   197,   263,   164,   166,   164,   166,   164,
-     166,   164,   166,   164,   166,   164,   166,   164,   166,   164,
-     166,   164,   166,   164,   166,   164,   166,   164,   166,   164,
-     166,   164,   166,   164,   166,   164,   166,   164,   166,   164,
-     166,   164,   166,   164,   166,   164,   166,   164,   166,   164,
-     166,   164,   164,   164,   164,   164,   164,   164,     7,   164,
-     164,   164,   250,   250,   250,   171,   250,   167,   171,   250,
-       4,   116,   117,     4,     4,   217,   218,   219,   255,     6,
-       6,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   163,   171,     6,     6,   250,
-       4,   262,   263,   262,   250,   200,   203,   250,   155,   250,
-     257,   258,   250,   250,   164,   250,   258,   250,   250,   164,
-     258,   250,   250,   255,   164,   171,   258,   164,   164,   256,
-     256,   256,   164,   213,   214,   215,   216,   164,   164,   164,
-     255,   250,     4,   255,   259,   171,   171,   252,   252,   252,
-     250,   250,   154,   155,   171,   171,   252,   171,   171,   171,
-     154,   155,   164,   219,   252,   171,   164,   171,   164,   164,
-     164,   256,   256,   255,   164,     4,     6,   166,   166,   219,
-       6,   171,   171,   171,   256,   256,   166,   166,   164,   166,
-     168,   166,     5,   171,     5,     5,     5,    58,    61,    64,
-      66,   171,   250,   257,   250,   172,   258,     8,   156,     6,
-       6,   250,   250,   250,   168,   250,   171,   119,   250,   250,
-     250,     6,     6,   219,     6,   219,   166,     6,   255,   255,
-     166,   250,     4,   171,     6,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   262,   264,   264,
-     262,   262,   262,   262,   262,   262,   262,   262,   264,   250,
-     262,   262,   262,   258,   165,     7,   196,   258,   167,     7,
-     196,   197,   168,     7,   166,   172,    58,    61,    64,    66,
-     212,     6,   250,   250,   250,   250,   250,   250,   250,   250,
-     250,   250,   250,   250,   250,   250,   250,   181,     6,   166,
-     168,   165,   170,   165,   170,   170,   167,   170,   199,   167,
-     199,   165,   156,   170,   172,   165,   165,   250,   165,   172,
-     165,   165,   250,   172,   165,   165,     7,   250,   250,   172,
-     250,   250,     7,     7,   244,   244,   250,   164,   164,   164,
-     164,   250,   250,   250,     7,   171,   165,     6,   171,   219,
-     219,   170,   170,   170,   252,   252,   218,   218,   170,   250,
-     250,   250,   250,   230,   170,   219,   250,   250,   250,   250,
-     250,     7,   245,     6,     7,   250,     6,   250,   250,   172,
-     258,   258,   258,     6,     6,   250,   250,   165,   171,   167,
-     171,   250,     4,     4,   250,   171,   171,   171,   171,   258,
-     165,   172,   250,   171,   250,   257,   165,   165,   165,   116,
-     170,   219,   171,     8,   165,   167,   172,   172,   165,   170,
-     172,   250,   167,   197,   250,   165,   167,   165,   167,   165,
-     167,   165,   167,   165,   167,   165,   167,   165,   167,   165,
-     167,   165,   167,   165,   167,   165,   167,   170,   170,   165,
-     167,   165,   167,   165,   167,   165,   167,   165,   167,   165,
-     167,   170,   170,   170,   170,   170,   170,   165,   170,   167,
-     165,   170,   167,   170,   170,   165,   165,   170,   170,   170,
-     165,     6,   170,   165,   170,   172,   196,   255,   172,   168,
-     196,   197,   263,   250,     6,     4,     4,   171,   260,   167,
-     171,   171,   171,   171,     8,     4,   106,   107,   108,   109,
-     172,   184,   188,   191,   193,   194,   250,     4,     6,   151,
-     178,   258,     6,   258,   250,     6,     4,     6,   262,     7,
-     250,   257,   119,     7,     7,   165,     7,   119,     7,     7,
-     165,   119,     7,     7,   250,   165,   172,   171,   165,   165,
-     250,   255,     4,   243,     6,   165,   209,   250,   263,   209,
-     209,   209,   165,   165,   165,   255,   258,   168,   219,   172,
-     172,   252,   250,   250,   172,   172,   250,   252,   170,   170,
-     170,    80,    90,    98,    99,   102,   103,   240,   241,   252,
-     172,   227,   165,   172,   165,   165,   165,   250,     6,   250,
-     165,   167,   167,   172,   172,   172,   167,   167,   258,   258,
-     167,   167,   172,   258,   258,   258,   258,   172,     8,   258,
-       7,     7,     7,   168,   250,   172,   250,   250,     7,   168,
-     171,   255,     6,   167,   168,   197,   262,   172,   250,   250,
-     250,   250,   250,   250,   250,   250,   262,   258,   258,   262,
-     262,   262,   262,   250,   262,   165,   250,     6,   167,     4,
-     116,   117,   250,     6,     6,     6,     7,   166,   259,   261,
-       6,   258,   258,   258,   258,   250,   185,   164,   164,   171,
-     195,     6,   167,   151,   262,   165,   165,   170,     7,   252,
-      64,    66,   255,   255,     7,   255,    64,    66,   255,   255,
-       7,    66,   255,   255,     6,     7,     7,   258,     7,     7,
-      80,   242,     6,     7,   165,   165,   165,   165,     7,     7,
-       7,     6,   172,     4,   172,   170,   170,   170,   172,   172,
-     252,   252,   252,     4,     6,   171,   164,     6,   104,     6,
-     104,   172,   241,   170,   240,     7,     6,     7,     7,     7,
-       6,   171,     6,     6,     6,    64,   250,     6,     6,   172,
-     172,   168,   172,   172,   172,   172,   250,   172,   255,   255,
-     255,     4,   170,     8,     8,   165,     4,     4,   255,   172,
-       6,     4,     6,   165,   167,   165,   167,   165,   167,   165,
-     167,   165,   167,   165,   170,   165,   165,   165,   165,   196,
-       6,   196,     7,   196,   197,   168,     7,     6,   259,   250,
-     170,   172,   172,   172,   172,   172,   164,   250,   250,   254,
-     255,   171,   168,     6,     6,   178,     6,   250,   171,   250,
-     263,     6,   171,   171,    73,   211,   211,   255,     6,   171,
-     171,     6,     6,   255,   171,     6,     6,     5,   255,   172,
-     255,   255,     4,     6,   255,     7,     7,     7,     7,   255,
-     255,   255,     7,     6,     7,   250,   250,   250,   171,   171,
-     170,   172,   170,   172,   170,   172,   166,   250,   255,   250,
-       6,     6,   250,   252,   172,     5,   171,   255,   171,   171,
-     171,   255,   258,   171,     6,   165,   167,     4,     6,     6,
-     115,   250,   250,   250,     6,     6,     7,   170,     6,   197,
-     262,   255,   255,   263,   250,     6,     4,   260,     6,   167,
-     259,     6,     6,     6,     6,   182,   250,   170,   170,   170,
-     172,   183,   250,     4,   262,   170,   250,   263,   250,   250,
-     252,     6,     6,     6,   250,   250,     6,   250,     5,     6,
-     171,     6,   119,   210,   250,     6,   255,   255,   255,   255,
-       6,     4,     6,     6,   250,   250,   263,   172,   165,   170,
-     172,   218,   218,   252,     6,   231,   252,     6,   232,   252,
-       6,   233,   250,   172,   170,   165,   172,   170,     6,   155,
-     252,     6,   254,   252,   252,     6,   172,   250,   255,   170,
-     172,     8,   172,   165,   171,   250,   263,   255,   165,     6,
-       6,     6,     6,     7,     6,   168,   165,   170,   250,   250,
-     255,   171,   170,   172,     6,   250,   201,   202,   172,   172,
-     172,   172,   172,     5,   254,    62,     6,     6,     6,     6,
-       6,   171,   171,     6,     6,   171,   250,   172,   172,   170,
-     171,   170,   171,   170,   171,   167,     6,   255,     7,   171,
-     250,   170,   172,   170,   170,     6,   172,   114,   250,   250,
-     258,     6,     6,   172,   259,   117,   186,   250,   170,   170,
-     254,   250,     6,   170,   205,   207,     6,     6,     6,     6,
-       6,     6,   172,   171,   254,   258,   218,   170,   172,   250,
-     252,   240,   250,   252,   240,   250,   252,   240,     6,   170,
-     172,   255,   219,   172,   252,     6,   258,   252,   250,   172,
-     172,   172,     6,     6,   171,   250,   250,   172,   250,   170,
-     172,   206,   170,   172,   208,   171,   250,   172,   172,   172,
-     250,   172,   170,   172,   172,   170,   172,   172,   170,   172,
-     255,     6,    80,   172,   228,   171,   170,   172,   170,     6,
-       6,   183,   165,   170,     6,   171,   170,     4,     4,   250,
-     172,     6,     6,   172,     6,   234,   250,     6,     6,   235,
-     250,     6,     6,   236,   250,     6,   172,   250,   240,   219,
-     258,     6,   252,   258,   172,   189,   250,   254,   250,   171,
-     255,   263,   171,   250,   263,   170,   171,   172,   171,   172,
-     171,   172,     6,     6,   172,   172,   229,   172,   170,   172,
-       6,   171,   165,   172,   172,   204,   250,   264,   250,   240,
-       6,   237,   240,     6,   238,   240,     6,   239,   240,     6,
-     258,     6,   187,   262,   192,   171,     6,   170,   172,     7,
-     172,   172,   172,   171,   172,   171,   172,   171,   172,   172,
-     170,   172,   171,   254,   250,   263,     6,     6,   240,     6,
-     240,     6,   240,     6,   262,     6,   190,   262,   172,     7,
-     172,   172,   172,   170,   172,     6,   263,     6,     6,     6,
-     262,     6
+      35,    58,    61,    64,    66,    77,   158,   167,   174,   220,
+     229,   253,   258,   259,   260,     4,   167,   167,   167,     4,
+     174,   262,     4,   167,   167,     6,     6,   169,     4,     4,
+       5,   174,     5,   174,     4,   253,     6,   167,   174,     4,
+     169,   171,   176,   200,   266,   167,   169,   167,   169,   167,
+     169,   167,   169,   167,   169,   167,   169,   167,   169,   167,
+     169,   167,   169,   167,   169,   167,   169,   167,   169,   167,
+     169,   167,   169,   167,   169,   167,   169,   167,   169,   167,
+     169,   167,   169,   167,   169,   167,   169,   167,   169,   167,
+     169,   167,   167,   167,   167,   167,   167,   167,     7,   167,
+     167,   167,   253,   253,   253,   174,   253,   170,   174,   253,
+       4,   119,   120,     4,     4,   220,   221,   222,   258,     6,
+       6,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   166,   174,     6,     6,   253,
+       4,   265,   266,   265,   253,   203,   206,   253,   158,   253,
+     260,   261,   253,   253,   167,   253,   261,   253,   253,   167,
+     261,   253,   253,   258,   167,   174,   261,   167,   167,   259,
+     259,   259,   167,   216,   217,   218,   219,   167,   167,   167,
+     258,   253,     4,   258,   262,   174,   174,   255,   255,   255,
+     253,   253,   157,   158,   174,   174,   255,   174,   174,   174,
+     157,   158,   167,   222,   255,   174,   167,   174,   167,   167,
+     167,   259,   259,   258,   167,     4,     6,   169,   169,   222,
+       6,   174,   174,   174,   259,   259,   169,   169,   167,   169,
+     171,   169,     5,   174,     5,     5,     5,    58,    61,    64,
+      66,   174,   253,   260,   253,   175,   261,     8,   159,     6,
+       6,   253,   253,   253,   171,   253,   174,   122,   253,   253,
+     253,     6,     6,   222,     6,   222,   169,     6,   258,   258,
+     169,   253,     4,   174,     6,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   265,   267,   267,
+     265,   265,   265,   265,   265,   265,   265,   265,   267,   253,
+     265,   265,   265,   261,   168,     7,   199,   261,   170,     7,
+     199,   200,   171,     7,   169,   175,    58,    61,    64,    66,
+     215,     6,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   253,   253,   253,   253,   253,   184,     6,   169,
+     171,   168,   173,   168,   173,   173,   170,   173,   202,   170,
+     202,   168,   159,   173,   175,   168,   168,   253,   168,   175,
+     168,   168,   253,   175,   168,   168,     7,   253,   253,   175,
+     253,   253,     7,     7,   247,   247,   253,   167,   167,   167,
+     167,   253,   253,   253,     7,   174,   168,     6,   174,   222,
+     222,   173,   173,   173,   255,   255,   221,   221,   173,   253,
+     253,   253,   253,   233,   173,   222,   253,   253,   253,   253,
+     253,     7,   248,     6,     7,   253,     6,   253,   253,   175,
+     261,   261,   261,     6,     6,   253,   253,   168,   174,   170,
+     174,   253,     4,     4,   253,   174,   174,   174,   174,   261,
+     168,   175,   253,   174,   253,   260,   168,   168,   168,   119,
+     173,   222,   174,     8,   168,   170,   175,   175,   168,   173,
+     175,   253,   170,   200,   253,   168,   170,   168,   170,   168,
+     170,   168,   170,   168,   170,   168,   170,   168,   170,   168,
+     170,   168,   170,   168,   170,   168,   170,   173,   173,   168,
+     170,   168,   170,   168,   170,   168,   170,   168,   170,   168,
+     170,   173,   173,   173,   173,   173,   173,   168,   173,   170,
+     168,   173,   170,   173,   173,   168,   168,   173,   173,   173,
+     168,     6,   173,   168,   173,   175,   199,   258,   175,   171,
+     199,   200,   266,   253,     6,     4,     4,   174,   263,   170,
+     174,   174,   174,   174,     8,     4,   109,   110,   111,   112,
+     175,   187,   191,   194,   196,   197,   253,     4,     6,   154,
+     181,   261,     6,   261,   253,     6,     4,     6,   265,     7,
+     253,   260,   122,     7,     7,   168,     7,   122,     7,     7,
+     168,   122,     7,     7,   253,   168,   175,   174,   168,   168,
+     253,   258,     4,   246,     6,   168,   212,   253,   266,   212,
+     212,   212,   168,   168,   168,   258,   261,   171,   222,   175,
+     175,   255,   253,   253,   175,   175,   253,   255,   173,   173,
+     173,    80,    90,    98,    99,   100,   103,   104,   105,   106,
+     243,   244,   255,   175,   230,   168,   175,   168,   168,   168,
+     253,     6,   253,   168,   170,   170,   175,   175,   175,   170,
+     170,   261,   261,   170,   170,   175,   261,   261,   261,   261,
+     175,     8,   261,     7,     7,     7,   171,   253,   175,   253,
+     253,     7,   171,   174,   258,     6,   170,   171,   200,   265,
+     175,   253,   253,   253,   253,   253,   253,   253,   253,   265,
+     261,   261,   265,   265,   265,   265,   253,   265,   168,   253,
+       6,   170,     4,   119,   120,   253,     6,     6,     6,     7,
+     169,   262,   264,     6,   261,   261,   261,   261,   253,   188,
+     167,   167,   174,   198,     6,   170,   154,   265,   168,   168,
+     173,     7,   255,    64,    66,   258,   258,     7,   258,    64,
+      66,   258,   258,     7,    66,   258,   258,     6,     7,     7,
+     261,     7,     7,    80,   245,     6,     7,   168,   168,   168,
+     168,     7,     7,     7,     6,   175,     4,   175,   173,   173,
+     173,   175,   175,   255,   255,   255,     4,     6,   174,     6,
+     167,     6,   107,     6,   107,     6,   107,     6,   107,   175,
+     244,   173,   243,     7,     6,     7,     7,     7,     6,   174,
+       6,     6,     6,    64,   253,     6,     6,   175,   175,   171,
+     175,   175,   175,   175,   253,   175,   258,   258,   258,     4,
+     173,     8,     8,   168,     4,     4,   258,   175,     6,     4,
+       6,   168,   170,   168,   170,   168,   170,   168,   170,   168,
+     170,   168,   173,   168,   168,   168,   168,   199,     6,   199,
+       7,   199,   200,   171,     7,     6,   262,   253,   173,   175,
+     175,   175,   175,   175,   167,   253,   253,   257,   258,   174,
+     171,     6,     6,   181,     6,   253,   174,   253,   266,     6,
+     174,   174,    73,   214,   214,   258,     6,   174,   174,     6,
+       6,   258,   174,     6,     6,     5,   258,   175,   258,   258,
+       4,     6,   258,     7,     7,     7,     7,   258,   258,   258,
+       7,     6,     7,   253,   253,   253,   174,   174,   173,   175,
+     173,   175,   173,   175,   169,   253,   258,   253,     6,     6,
+       6,     6,   253,   255,   175,     5,   174,   258,   174,   174,
+     174,   258,   261,   174,     6,   168,   170,     4,     6,     6,
+     118,   253,   253,   253,     6,     6,     7,   173,     6,   200,
+     265,   258,   258,   266,   253,     6,     4,   263,     6,   170,
+     262,     6,     6,     6,     6,   185,   253,   173,   173,   173,
+     175,   186,   253,     4,   265,   173,   253,   266,   253,   253,
+     255,     6,     6,     6,   253,   253,     6,   253,     5,     6,
+     174,     6,   122,   213,   253,     6,   258,   258,   258,   258,
+       6,     4,     6,     6,   253,   253,   266,   175,   168,   173,
+     175,   221,   221,   255,     6,   234,   255,     6,   235,   255,
+       6,   236,   253,   175,   173,   168,   175,   173,     6,   158,
+     255,     6,   257,   255,   255,     6,   175,   253,   258,   173,
+     175,     8,   175,   168,   174,   253,   266,   258,   168,     6,
+       6,     6,     6,     7,     6,   171,   168,   173,   253,   253,
+     258,   174,   173,   175,     6,   253,   204,   205,   175,   175,
+     175,   175,   175,     5,   257,    62,     6,     6,     6,     6,
+       6,   174,   174,     6,     6,   174,   253,   175,   175,   173,
+     174,   173,   174,   173,   174,   170,     6,   258,     7,   174,
+     253,   173,   175,   173,   173,     6,   175,   117,   253,   253,
+     261,     6,     6,   175,   262,   120,   189,   253,   173,   173,
+     257,   253,     6,   173,   208,   210,     6,     6,     6,     6,
+       6,     6,   175,   174,   257,   261,   221,   173,   175,   253,
+     255,   243,   253,   255,   243,   253,   255,   243,     6,   173,
+     175,   258,   222,   175,   255,     6,   261,   255,   253,   175,
+     175,   175,     6,     6,   174,   253,   253,   175,   253,   173,
+     175,   209,   173,   175,   211,   174,   253,   175,   175,   175,
+     253,   175,   173,   175,   175,   173,   175,   175,   173,   175,
+     258,     6,    80,   175,   231,   174,   173,   175,   173,     6,
+       6,   186,   168,   173,     6,   174,   173,     4,     4,   253,
+     175,     6,     6,   175,     6,   237,   253,     6,     6,   238,
+     253,     6,     6,   239,   253,     6,   175,   253,   243,   222,
+     261,     6,   255,   261,   175,   192,   253,   257,   253,   174,
+     258,   266,   174,   253,   266,   173,   174,   175,   174,   175,
+     174,   175,     6,     6,   175,   175,   232,   175,   173,   175,
+       6,   174,   168,   175,   175,   207,   253,   267,   253,   243,
+       6,   240,   243,     6,   241,   243,     6,   242,   243,     6,
+     261,     6,   190,   265,   195,   174,     6,   173,   175,     7,
+     175,   175,   175,   174,   175,   174,   175,   174,   175,   175,
+     173,   175,   174,   257,   253,   266,     6,     6,   243,     6,
+     243,     6,   243,     6,   265,     6,   193,   265,   175,     7,
+     175,   175,   175,   173,   175,     6,   266,     6,     6,     6,
+     265,     6
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -6352,6 +6406,8 @@ yyreduce:
         for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
           s->compound.push_back((int)*(double*)List_Pointer((yyvsp[(7) - (8)].l), i));
 	}
+        // Added by Trevor Strickler
+	setSurfaceGeneratrices(s, (List_T*) 0 );
 	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
       }
       List_Delete((yyvsp[(7) - (8)].l));
@@ -6361,7 +6417,7 @@ yyreduce:
     break;
 
   case 148:
-#line 1857 "Gmsh.y"
+#line 1859 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (12)].d);
       if(FindSurface(num)){
@@ -6381,6 +6437,9 @@ yyreduce:
             s->compoundBoundary[i].push_back((int)*(double*)List_Pointer(l, j));
 	  }
 	}
+        // Added by Trevor Strickler
+        setSurfaceGeneratrices(s, (List_T*) 0 );
+
 	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
       }
       List_Delete((yyvsp[(7) - (12)].l));
@@ -6394,14 +6453,14 @@ yyreduce:
     break;
 
   case 149:
-#line 1887 "Gmsh.y"
+#line 1892 "Gmsh.y"
     {
       curPhysDim = 2;
     ;}
     break;
 
   case 150:
-#line 1891 "Gmsh.y"
+#line 1896 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
@@ -6420,7 +6479,7 @@ yyreduce:
     break;
 
   case 151:
-#line 1911 "Gmsh.y"
+#line 1916 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -6441,7 +6500,7 @@ yyreduce:
     break;
 
   case 152:
-#line 1929 "Gmsh.y"
+#line 1934 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -6461,7 +6520,7 @@ yyreduce:
     break;
 
   case 153:
-#line 1946 "Gmsh.y"
+#line 1951 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindVolume(num)){
@@ -6480,14 +6539,14 @@ yyreduce:
     break;
 
   case 154:
-#line 1962 "Gmsh.y"
+#line 1967 "Gmsh.y"
     {
       curPhysDim = 3;
     ;}
     break;
 
   case 155:
-#line 1966 "Gmsh.y"
+#line 1971 "Gmsh.y"
     {
       int num = (int)(yyvsp[(5) - (9)].i);
       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
@@ -6506,7 +6565,7 @@ yyreduce:
     break;
 
   case 156:
-#line 1988 "Gmsh.y"
+#line 1993 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -6514,7 +6573,7 @@ yyreduce:
     break;
 
   case 157:
-#line 1993 "Gmsh.y"
+#line 1998 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
       (yyval.l) = (yyvsp[(10) - (11)].l);
@@ -6522,7 +6581,7 @@ yyreduce:
     break;
 
   case 158:
-#line 1998 "Gmsh.y"
+#line 2003 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -6530,7 +6589,7 @@ yyreduce:
     break;
 
   case 159:
-#line 2003 "Gmsh.y"
+#line 2008 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -6538,7 +6597,7 @@ yyreduce:
     break;
 
   case 160:
-#line 2008 "Gmsh.y"
+#line 2013 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].v)[0], (yyvsp[(5) - (9)].v)[1], (yyvsp[(5) - (9)].v)[2], (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -6546,7 +6605,7 @@ yyreduce:
     break;
 
   case 161:
-#line 2013 "Gmsh.y"
+#line 2018 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@ -6572,7 +6631,7 @@ yyreduce:
     break;
 
   case 162:
-#line 2036 "Gmsh.y"
+#line 2041 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -6581,7 +6640,7 @@ yyreduce:
     break;
 
   case 163:
-#line 2042 "Gmsh.y"
+#line 2047 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
@@ -6592,31 +6651,31 @@ yyreduce:
     break;
 
   case 164:
-#line 2052 "Gmsh.y"
+#line 2057 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 165:
-#line 2053 "Gmsh.y"
+#line 2058 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 166:
-#line 2058 "Gmsh.y"
+#line 2063 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 167:
-#line 2062 "Gmsh.y"
+#line 2067 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 168:
-#line 2066 "Gmsh.y"
+#line 2071 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6642,7 +6701,7 @@ yyreduce:
     break;
 
   case 169:
-#line 2089 "Gmsh.y"
+#line 2094 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6668,7 +6727,7 @@ yyreduce:
     break;
 
   case 170:
-#line 2112 "Gmsh.y"
+#line 2117 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6694,7 +6753,7 @@ yyreduce:
     break;
 
   case 171:
-#line 2135 "Gmsh.y"
+#line 2140 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6720,7 +6779,7 @@ yyreduce:
     break;
 
   case 172:
-#line 2163 "Gmsh.y"
+#line 2168 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
@@ -6744,7 +6803,7 @@ yyreduce:
     break;
 
   case 173:
-#line 2184 "Gmsh.y"
+#line 2189 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       int t = (int)(yyvsp[(4) - (10)].d);
@@ -6773,7 +6832,7 @@ yyreduce:
     break;
 
   case 174:
-#line 2211 "Gmsh.y"
+#line 2216 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
@@ -6796,7 +6855,7 @@ yyreduce:
     break;
 
   case 175:
-#line 2232 "Gmsh.y"
+#line 2237 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
@@ -6820,7 +6879,7 @@ yyreduce:
     break;
 
   case 176:
-#line 2253 "Gmsh.y"
+#line 2258 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
@@ -6843,7 +6902,7 @@ yyreduce:
     break;
 
   case 177:
-#line 2273 "Gmsh.y"
+#line 2278 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
@@ -6958,7 +7017,7 @@ yyreduce:
     break;
 
   case 178:
-#line 2385 "Gmsh.y"
+#line 2390 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
@@ -6980,7 +7039,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2404 "Gmsh.y"
+#line 2409 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@ -7021,7 +7080,7 @@ yyreduce:
     break;
 
   case 180:
-#line 2443 "Gmsh.y"
+#line 2448 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -7127,7 +7186,7 @@ yyreduce:
     break;
 
   case 181:
-#line 2551 "Gmsh.y"
+#line 2556 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -7139,7 +7198,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2560 "Gmsh.y"
+#line 2565 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
@@ -7148,7 +7207,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2566 "Gmsh.y"
+#line 2571 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -7166,7 +7225,7 @@ yyreduce:
     break;
 
   case 184:
-#line 2581 "Gmsh.y"
+#line 2586 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         ClearProject();
@@ -7197,7 +7256,7 @@ yyreduce:
     break;
 
   case 185:
-#line 2609 "Gmsh.y"
+#line 2614 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -7212,7 +7271,7 @@ yyreduce:
     break;
 
   case 186:
-#line 2626 "Gmsh.y"
+#line 2631 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -7224,7 +7283,7 @@ yyreduce:
     break;
 
   case 187:
-#line 2635 "Gmsh.y"
+#line 2640 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
 	Shape TheShape;
@@ -7236,7 +7295,7 @@ yyreduce:
     break;
 
   case 188:
-#line 2649 "Gmsh.y"
+#line 2654 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1, false);
@@ -7245,7 +7304,7 @@ yyreduce:
     break;
 
   case 189:
-#line 2655 "Gmsh.y"
+#line 2660 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0, false);
@@ -7254,7 +7313,7 @@ yyreduce:
     break;
 
   case 190:
-#line 2661 "Gmsh.y"
+#line 2666 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -7266,7 +7325,7 @@ yyreduce:
     break;
 
   case 191:
-#line 2670 "Gmsh.y"
+#line 2675 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -7278,7 +7337,7 @@ yyreduce:
     break;
 
   case 192:
-#line 2679 "Gmsh.y"
+#line 2684 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -7290,7 +7349,7 @@ yyreduce:
     break;
 
   case 193:
-#line 2688 "Gmsh.y"
+#line 2693 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -7302,7 +7361,7 @@ yyreduce:
     break;
 
   case 194:
-#line 2702 "Gmsh.y"
+#line 2707 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@ -7350,7 +7409,7 @@ yyreduce:
     break;
 
   case 195:
-#line 2747 "Gmsh.y"
+#line 2752 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -7370,7 +7429,7 @@ yyreduce:
     break;
 
   case 196:
-#line 2764 "Gmsh.y"
+#line 2769 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -7388,7 +7447,7 @@ yyreduce:
     break;
 
   case 197:
-#line 2779 "Gmsh.y"
+#line 2784 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -7410,7 +7469,7 @@ yyreduce:
     break;
 
   case 198:
-#line 2798 "Gmsh.y"
+#line 2803 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -7425,7 +7484,7 @@ yyreduce:
     break;
 
   case 199:
-#line 2810 "Gmsh.y"
+#line 2815 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -7452,14 +7511,14 @@ yyreduce:
     break;
 
   case 200:
-#line 2834 "Gmsh.y"
+#line 2839 "Gmsh.y"
     {
       Msg::Exit(0);
     ;}
     break;
 
   case 201:
-#line 2838 "Gmsh.y"
+#line 2843 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -7467,7 +7526,7 @@ yyreduce:
     break;
 
   case 202:
-#line 2843 "Gmsh.y"
+#line 2848 "Gmsh.y"
     {
       // FIXME: this is a hack to force a transfer from the old DB to
       // the new DB. This will become unnecessary if/when we fill the
@@ -7477,7 +7536,7 @@ yyreduce:
     break;
 
   case 203:
-#line 2850 "Gmsh.y"
+#line 2855 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -7486,7 +7545,7 @@ yyreduce:
     break;
 
   case 204:
-#line 2856 "Gmsh.y"
+#line 2861 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -7494,7 +7553,7 @@ yyreduce:
     break;
 
   case 205:
-#line 2861 "Gmsh.y"
+#line 2866 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -7503,21 +7562,21 @@ yyreduce:
     break;
 
   case 206:
-#line 2867 "Gmsh.y"
+#line 2872 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 207:
-#line 2871 "Gmsh.y"
+#line 2876 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     ;}
     break;
 
   case 208:
-#line 2875 "Gmsh.y"
+#line 2880 "Gmsh.y"
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
@@ -7525,7 +7584,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2881 "Gmsh.y"
+#line 2886 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -7582,7 +7641,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2935 "Gmsh.y"
+#line 2940 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       SetOrderN(GModel::current(), (yyvsp[(2) - (3)].d), CTX::instance()->mesh.secondOrderLinear,
@@ -7593,7 +7652,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2948 "Gmsh.y"
+#line 2953 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -7613,7 +7672,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2965 "Gmsh.y"
+#line 2970 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -7633,7 +7692,7 @@ yyreduce:
     break;
 
   case 213:
-#line 2982 "Gmsh.y"
+#line 2987 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -7657,7 +7716,7 @@ yyreduce:
     break;
 
   case 214:
-#line 3003 "Gmsh.y"
+#line 3008 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -7681,7 +7740,7 @@ yyreduce:
     break;
 
   case 215:
-#line 3024 "Gmsh.y"
+#line 3029 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -7719,7 +7778,7 @@ yyreduce:
     break;
 
   case 216:
-#line 3059 "Gmsh.y"
+#line 3064 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -7730,7 +7789,7 @@ yyreduce:
     break;
 
   case 217:
-#line 3067 "Gmsh.y"
+#line 3072 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -7739,7 +7798,7 @@ yyreduce:
     break;
 
   case 218:
-#line 3073 "Gmsh.y"
+#line 3078 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -7749,20 +7808,20 @@ yyreduce:
     break;
 
   case 219:
-#line 3080 "Gmsh.y"
+#line 3085 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 220:
-#line 3084 "Gmsh.y"
+#line 3089 "Gmsh.y"
     {
     ;}
     break;
 
   case 221:
-#line 3093 "Gmsh.y"
+#line 3098 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l),
@@ -7773,7 +7832,7 @@ yyreduce:
     break;
 
   case 222:
-#line 3101 "Gmsh.y"
+#line 3106 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l),
@@ -7784,7 +7843,7 @@ yyreduce:
     break;
 
   case 223:
-#line 3109 "Gmsh.y"
+#line 3114 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -7795,15 +7854,16 @@ yyreduce:
     break;
 
   case 224:
-#line 3117 "Gmsh.y"
+#line 3122 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 225:
-#line 3122 "Gmsh.y"
+#line 3128 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -7814,15 +7874,16 @@ yyreduce:
     break;
 
   case 226:
-#line 3130 "Gmsh.y"
+#line 3136 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 227:
-#line 3135 "Gmsh.y"
+#line 3142 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -7833,15 +7894,16 @@ yyreduce:
     break;
 
   case 228:
-#line 3143 "Gmsh.y"
+#line 3150 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 229:
-#line 3148 "Gmsh.y"
+#line 3156 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -7852,15 +7914,16 @@ yyreduce:
     break;
 
   case 230:
-#line 3156 "Gmsh.y"
+#line 3164 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 231:
-#line 3161 "Gmsh.y"
+#line 3170 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -7870,7 +7933,7 @@ yyreduce:
     break;
 
   case 232:
-#line 3169 "Gmsh.y"
+#line 3178 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -7880,7 +7943,7 @@ yyreduce:
     break;
 
   case 233:
-#line 3176 "Gmsh.y"
+#line 3185 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -7890,7 +7953,7 @@ yyreduce:
     break;
 
   case 234:
-#line 3183 "Gmsh.y"
+#line 3192 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -7900,7 +7963,7 @@ yyreduce:
     break;
 
   case 235:
-#line 3190 "Gmsh.y"
+#line 3199 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -7910,7 +7973,7 @@ yyreduce:
     break;
 
   case 236:
-#line 3197 "Gmsh.y"
+#line 3206 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -7920,7 +7983,7 @@ yyreduce:
     break;
 
   case 237:
-#line 3204 "Gmsh.y"
+#line 3213 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -7930,7 +7993,7 @@ yyreduce:
     break;
 
   case 238:
-#line 3211 "Gmsh.y"
+#line 3220 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -7940,7 +8003,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3218 "Gmsh.y"
+#line 3227 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -7950,7 +8013,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3225 "Gmsh.y"
+#line 3234 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -7960,15 +8023,16 @@ yyreduce:
     break;
 
   case 241:
-#line 3232 "Gmsh.y"
+#line 3241 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 242:
-#line 3237 "Gmsh.y"
+#line 3247 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -7978,15 +8042,16 @@ yyreduce:
     break;
 
   case 243:
-#line 3244 "Gmsh.y"
+#line 3254 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 244:
-#line 3249 "Gmsh.y"
+#line 3260 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -7996,15 +8061,16 @@ yyreduce:
     break;
 
   case 245:
-#line 3256 "Gmsh.y"
+#line 3267 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 246:
-#line 3261 "Gmsh.y"
+#line 3273 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -8014,15 +8080,16 @@ yyreduce:
     break;
 
   case 247:
-#line 3268 "Gmsh.y"
+#line 3280 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 248:
-#line 3273 "Gmsh.y"
+#line 3286 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -8032,15 +8099,16 @@ yyreduce:
     break;
 
   case 249:
-#line 3280 "Gmsh.y"
+#line 3293 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 250:
-#line 3285 "Gmsh.y"
+#line 3299 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -8050,15 +8118,16 @@ yyreduce:
     break;
 
   case 251:
-#line 3292 "Gmsh.y"
+#line 3306 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 252:
-#line 3297 "Gmsh.y"
+#line 3312 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -8068,15 +8137,16 @@ yyreduce:
     break;
 
   case 253:
-#line 3304 "Gmsh.y"
+#line 3319 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 254:
-#line 3309 "Gmsh.y"
+#line 3325 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -8086,15 +8156,16 @@ yyreduce:
     break;
 
   case 255:
-#line 3316 "Gmsh.y"
+#line 3332 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 256:
-#line 3321 "Gmsh.y"
+#line 3338 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -8104,15 +8175,16 @@ yyreduce:
     break;
 
   case 257:
-#line 3328 "Gmsh.y"
+#line 3345 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     ;}
     break;
 
   case 258:
-#line 3333 "Gmsh.y"
+#line 3351 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -8122,19 +8194,19 @@ yyreduce:
     break;
 
   case 259:
-#line 3344 "Gmsh.y"
+#line 3362 "Gmsh.y"
     {
     ;}
     break;
 
   case 260:
-#line 3347 "Gmsh.y"
+#line 3365 "Gmsh.y"
     {
     ;}
     break;
 
   case 261:
-#line 3353 "Gmsh.y"
+#line 3371 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -8149,7 +8221,7 @@ yyreduce:
     break;
 
   case 262:
-#line 3365 "Gmsh.y"
+#line 3383 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -8172,7 +8244,7 @@ yyreduce:
     break;
 
   case 263:
-#line 3385 "Gmsh.y"
+#line 3403 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -8198,42 +8270,77 @@ yyreduce:
     break;
 
   case 264:
-#line 3408 "Gmsh.y"
+#line 3427 "Gmsh.y"
     {
-      extr.mesh.Recombine = true;
+      extr.mesh.ScaleLast = true;
     ;}
     break;
 
   case 265:
-#line 3412 "Gmsh.y"
+#line 3432 "Gmsh.y"
     {
-      extr.mesh.QuadToTri = QUADTRI_DBL_1;
+      extr.mesh.Recombine = true;
     ;}
     break;
 
   case 266:
-#line 3416 "Gmsh.y"
+#line 3436 "Gmsh.y"
     {
-      extr.mesh.QuadToTri = QUADTRI_DBL_1_RECOMB;
+      yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 267:
-#line 3420 "Gmsh.y"
+#line 3440 "Gmsh.y"
     {
-      extr.mesh.QuadToTri = QUADTRI_SNGL_1;
+      yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 268:
-#line 3424 "Gmsh.y"
+#line 3444 "Gmsh.y"
     {
-      extr.mesh.QuadToTri = QUADTRI_SNGL_1_RECOMB;
+      yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, which has no requirement for the number of extrusion layers and meshes with body-centered vertices.");
     ;}
     break;
 
   case 269:
-#line 3428 "Gmsh.y"
+#line 3448 "Gmsh.y"
+    {
+      yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, which has no requirement for the number of extrusion layers and meshes with body-centered vertices.");
+    ;}
+    break;
+
+  case 270:
+#line 3452 "Gmsh.y"
+    {
+      extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
+    ;}
+    break;
+
+  case 271:
+#line 3456 "Gmsh.y"
+    {
+      extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
+    ;}
+    break;
+
+  case 272:
+#line 3460 "Gmsh.y"
+    {
+      extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
+    ;}
+    break;
+
+  case 273:
+#line 3464 "Gmsh.y"
+    {
+      extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
+    ;}
+    break;
+
+  case 274:
+#line 3468 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -8254,8 +8361,8 @@ yyreduce:
     ;}
     break;
 
-  case 270:
-#line 3447 "Gmsh.y"
+  case 275:
+#line 3487 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -8265,15 +8372,15 @@ yyreduce:
     ;}
     break;
 
-  case 271:
-#line 3459 "Gmsh.y"
+  case 276:
+#line 3499 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
-  case 272:
-#line 3463 "Gmsh.y"
+  case 277:
+#line 3503 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -8288,15 +8395,15 @@ yyreduce:
     ;}
     break;
 
-  case 273:
-#line 3478 "Gmsh.y"
+  case 278:
+#line 3518 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
-  case 274:
-#line 3482 "Gmsh.y"
+  case 279:
+#line 3522 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -8312,36 +8419,36 @@ yyreduce:
     ;}
     break;
 
-  case 275:
-#line 3498 "Gmsh.y"
+  case 280:
+#line 3538 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
-  case 276:
-#line 3502 "Gmsh.y"
+  case 281:
+#line 3542 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
-  case 277:
-#line 3507 "Gmsh.y"
+  case 282:
+#line 3547 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
-  case 278:
-#line 3511 "Gmsh.y"
+  case 283:
+#line 3551 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
-  case 279:
-#line 3518 "Gmsh.y"
+  case 284:
+#line 3558 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -8399,8 +8506,8 @@ yyreduce:
     ;}
     break;
 
-  case 280:
-#line 3574 "Gmsh.y"
+  case 285:
+#line 3614 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -8472,16 +8579,16 @@ yyreduce:
     ;}
     break;
 
-  case 281:
-#line 3644 "Gmsh.y"
+  case 286:
+#line 3684 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
     ;}
     break;
 
-  case 282:
-#line 3649 "Gmsh.y"
+  case 287:
+#line 3689 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -8550,8 +8657,8 @@ yyreduce:
     ;}
     break;
 
-  case 283:
-#line 3716 "Gmsh.y"
+  case 288:
+#line 3756 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -8589,8 +8696,8 @@ yyreduce:
     ;}
     break;
 
-  case 284:
-#line 3752 "Gmsh.y"
+  case 289:
+#line 3792 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (7)].l)); i++){
 	double d;
@@ -8600,8 +8707,8 @@ yyreduce:
     ;}
     break;
 
-  case 285:
-#line 3760 "Gmsh.y"
+  case 290:
+#line 3800 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -8646,8 +8753,8 @@ yyreduce:
     ;}
     break;
 
-  case 286:
-#line 3803 "Gmsh.y"
+  case 291:
+#line 3843 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -8688,8 +8795,8 @@ yyreduce:
     ;}
     break;
 
-  case 287:
-#line 3842 "Gmsh.y"
+  case 292:
+#line 3882 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -8711,8 +8818,8 @@ yyreduce:
     ;}
     break;
 
-  case 288:
-#line 3862 "Gmsh.y"
+  case 293:
+#line 3902 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(5) - (6)].l)) != List_Nbr((yyvsp[(3) - (6)].l))){
 	yymsg(0, "Number of master (%d) different from number of slave (%d) lines",
@@ -8741,8 +8848,8 @@ yyreduce:
     ;}
     break;
 
-  case 289:
-#line 3890 "Gmsh.y"
+  case 294:
+#line 3930 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
 	yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -8783,8 +8890,8 @@ yyreduce:
     ;}
     break;
 
-  case 290:
-#line 3929 "Gmsh.y"
+  case 295:
+#line 3969 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -8809,8 +8916,8 @@ yyreduce:
     ;}
     break;
 
-  case 291:
-#line 3952 "Gmsh.y"
+  case 296:
+#line 3992 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -8835,22 +8942,22 @@ yyreduce:
     ;}
     break;
 
-  case 292:
-#line 3975 "Gmsh.y"
+  case 297:
+#line 4015 "Gmsh.y"
     {
       Msg::Error("Point in Volume not implemented yet");
     ;}
     break;
 
-  case 293:
-#line 3979 "Gmsh.y"
+  case 298:
+#line 4019 "Gmsh.y"
     {
       Msg::Error("Line in Volume not implemented yet");
     ;}
     break;
 
-  case 294:
-#line 3983 "Gmsh.y"
+  case 299:
+#line 4023 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -8875,8 +8982,8 @@ yyreduce:
     ;}
     break;
 
-  case 295:
-#line 4006 "Gmsh.y"
+  case 300:
+#line 4046 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -8917,8 +9024,8 @@ yyreduce:
     ;}
     break;
 
-  case 296:
-#line 4045 "Gmsh.y"
+  case 301:
+#line 4085 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -8959,15 +9066,15 @@ yyreduce:
     ;}
     break;
 
-  case 297:
-#line 4090 "Gmsh.y"
+  case 302:
+#line 4130 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     ;}
     break;
 
-  case 298:
-#line 4094 "Gmsh.y"
+  case 303:
+#line 4134 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -8979,8 +9086,8 @@ yyreduce:
     ;}
     break;
 
-  case 299:
-#line 4104 "Gmsh.y"
+  case 304:
+#line 4144 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -9012,23 +9119,23 @@ yyreduce:
     ;}
     break;
 
-  case 300:
-#line 4138 "Gmsh.y"
+  case 305:
+#line 4178 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; ;}
     break;
 
-  case 301:
-#line 4139 "Gmsh.y"
+  case 306:
+#line 4179 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; ;}
     break;
 
-  case 302:
-#line 4140 "Gmsh.y"
+  case 307:
+#line 4180 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; ;}
     break;
 
-  case 303:
-#line 4145 "Gmsh.y"
+  case 308:
+#line 4185 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -9036,8 +9143,8 @@ yyreduce:
     ;}
     break;
 
-  case 304:
-#line 4151 "Gmsh.y"
+  case 309:
+#line 4191 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -9051,8 +9158,8 @@ yyreduce:
     ;}
     break;
 
-  case 305:
-#line 4163 "Gmsh.y"
+  case 310:
+#line 4203 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -9072,8 +9179,8 @@ yyreduce:
     ;}
     break;
 
-  case 306:
-#line 4181 "Gmsh.y"
+  case 311:
+#line 4221 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -9098,48 +9205,48 @@ yyreduce:
     ;}
     break;
 
-  case 307:
-#line 4208 "Gmsh.y"
+  case 312:
+#line 4248 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
-  case 308:
-#line 4209 "Gmsh.y"
+  case 313:
+#line 4249 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
-  case 309:
-#line 4210 "Gmsh.y"
+  case 314:
+#line 4250 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
-  case 310:
-#line 4211 "Gmsh.y"
+  case 315:
+#line 4251 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
-  case 311:
-#line 4212 "Gmsh.y"
+  case 316:
+#line 4252 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
-  case 312:
-#line 4213 "Gmsh.y"
+  case 317:
+#line 4253 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 313:
-#line 4214 "Gmsh.y"
+  case 318:
+#line 4254 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 314:
-#line 4215 "Gmsh.y"
+  case 319:
+#line 4255 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 315:
-#line 4217 "Gmsh.y"
+  case 320:
+#line 4257 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -9148,318 +9255,318 @@ yyreduce:
     ;}
     break;
 
-  case 316:
-#line 4223 "Gmsh.y"
+  case 321:
+#line 4263 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
-  case 317:
-#line 4224 "Gmsh.y"
+  case 322:
+#line 4264 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
-  case 318:
-#line 4225 "Gmsh.y"
+  case 323:
+#line 4265 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 319:
-#line 4226 "Gmsh.y"
+  case 324:
+#line 4266 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
-  case 320:
-#line 4227 "Gmsh.y"
+  case 325:
+#line 4267 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 321:
-#line 4228 "Gmsh.y"
+  case 326:
+#line 4268 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 322:
-#line 4229 "Gmsh.y"
+  case 327:
+#line 4269 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 323:
-#line 4230 "Gmsh.y"
+  case 328:
+#line 4270 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 324:
-#line 4231 "Gmsh.y"
+  case 329:
+#line 4271 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 325:
-#line 4232 "Gmsh.y"
+  case 330:
+#line 4272 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
-  case 326:
-#line 4233 "Gmsh.y"
+  case 331:
+#line 4273 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
-  case 327:
-#line 4234 "Gmsh.y"
+  case 332:
+#line 4274 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 328:
-#line 4235 "Gmsh.y"
+  case 333:
+#line 4275 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 329:
-#line 4236 "Gmsh.y"
+  case 334:
+#line 4276 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 330:
-#line 4237 "Gmsh.y"
+  case 335:
+#line 4277 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 331:
-#line 4238 "Gmsh.y"
+  case 336:
+#line 4278 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 332:
-#line 4239 "Gmsh.y"
+  case 337:
+#line 4279 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 333:
-#line 4240 "Gmsh.y"
+  case 338:
+#line 4280 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 334:
-#line 4241 "Gmsh.y"
+  case 339:
+#line 4281 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 335:
-#line 4242 "Gmsh.y"
+  case 340:
+#line 4282 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 336:
-#line 4243 "Gmsh.y"
+  case 341:
+#line 4283 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 337:
-#line 4244 "Gmsh.y"
+  case 342:
+#line 4284 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
-  case 338:
-#line 4245 "Gmsh.y"
+  case 343:
+#line 4285 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 339:
-#line 4246 "Gmsh.y"
+  case 344:
+#line 4286 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 340:
-#line 4247 "Gmsh.y"
+  case 345:
+#line 4287 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 341:
-#line 4248 "Gmsh.y"
+  case 346:
+#line 4288 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 342:
-#line 4249 "Gmsh.y"
+  case 347:
+#line 4289 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 343:
-#line 4250 "Gmsh.y"
+  case 348:
+#line 4290 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 344:
-#line 4251 "Gmsh.y"
+  case 349:
+#line 4291 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 345:
-#line 4252 "Gmsh.y"
+  case 350:
+#line 4292 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 346:
-#line 4253 "Gmsh.y"
+  case 351:
+#line 4293 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 347:
-#line 4254 "Gmsh.y"
+  case 352:
+#line 4294 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
-  case 348:
-#line 4257 "Gmsh.y"
+  case 353:
+#line 4297 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 349:
-#line 4258 "Gmsh.y"
+  case 354:
+#line 4298 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 350:
-#line 4259 "Gmsh.y"
+  case 355:
+#line 4299 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 351:
-#line 4260 "Gmsh.y"
+  case 356:
+#line 4300 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 352:
-#line 4261 "Gmsh.y"
+  case 357:
+#line 4301 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 353:
-#line 4262 "Gmsh.y"
+  case 358:
+#line 4302 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 354:
-#line 4263 "Gmsh.y"
+  case 359:
+#line 4303 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 355:
-#line 4264 "Gmsh.y"
+  case 360:
+#line 4304 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 356:
-#line 4265 "Gmsh.y"
+  case 361:
+#line 4305 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
-  case 357:
-#line 4266 "Gmsh.y"
+  case 362:
+#line 4306 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 358:
-#line 4267 "Gmsh.y"
+  case 363:
+#line 4307 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
-  case 359:
-#line 4268 "Gmsh.y"
+  case 364:
+#line 4308 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 360:
-#line 4269 "Gmsh.y"
+  case 365:
+#line 4309 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 361:
-#line 4270 "Gmsh.y"
+  case 366:
+#line 4310 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 362:
-#line 4271 "Gmsh.y"
+  case 367:
+#line 4311 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 363:
-#line 4272 "Gmsh.y"
+  case 368:
+#line 4312 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
-  case 364:
-#line 4273 "Gmsh.y"
+  case 369:
+#line 4313 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
-  case 365:
-#line 4274 "Gmsh.y"
+  case 370:
+#line 4314 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 366:
-#line 4275 "Gmsh.y"
+  case 371:
+#line 4315 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 367:
-#line 4276 "Gmsh.y"
+  case 372:
+#line 4316 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
-  case 368:
-#line 4277 "Gmsh.y"
+  case 373:
+#line 4317 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
-  case 369:
-#line 4286 "Gmsh.y"
+  case 374:
+#line 4326 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
-  case 370:
-#line 4287 "Gmsh.y"
+  case 375:
+#line 4327 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
-  case 371:
-#line 4288 "Gmsh.y"
+  case 376:
+#line 4328 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
-  case 372:
-#line 4289 "Gmsh.y"
+  case 377:
+#line 4329 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
-  case 373:
-#line 4290 "Gmsh.y"
+  case 378:
+#line 4330 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
-  case 374:
-#line 4291 "Gmsh.y"
+  case 379:
+#line 4331 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
-  case 375:
-#line 4292 "Gmsh.y"
+  case 380:
+#line 4332 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
-  case 376:
-#line 4293 "Gmsh.y"
+  case 381:
+#line 4333 "Gmsh.y"
     { (yyval.d) = Cpu(); ;}
     break;
 
-  case 377:
-#line 4294 "Gmsh.y"
+  case 382:
+#line 4334 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; ;}
     break;
 
-  case 378:
-#line 4299 "Gmsh.y"
+  case 383:
+#line 4339 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -9478,8 +9585,8 @@ yyreduce:
     ;}
     break;
 
-  case 379:
-#line 4320 "Gmsh.y"
+  case 384:
+#line 4360 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -9500,8 +9607,8 @@ yyreduce:
     ;}
     break;
 
-  case 380:
-#line 4339 "Gmsh.y"
+  case 385:
+#line 4379 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -9521,8 +9628,8 @@ yyreduce:
     ;}
     break;
 
-  case 381:
-#line 4357 "Gmsh.y"
+  case 386:
+#line 4397 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -9536,8 +9643,8 @@ yyreduce:
     ;}
     break;
 
-  case 382:
-#line 4369 "Gmsh.y"
+  case 387:
+#line 4409 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -9556,8 +9663,8 @@ yyreduce:
     ;}
     break;
 
-  case 383:
-#line 4386 "Gmsh.y"
+  case 388:
+#line 4426 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -9577,24 +9684,24 @@ yyreduce:
     ;}
     break;
 
-  case 384:
-#line 4407 "Gmsh.y"
+  case 389:
+#line 4447 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
     ;}
     break;
 
-  case 385:
-#line 4412 "Gmsh.y"
+  case 390:
+#line 4452 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
     ;}
     break;
 
-  case 386:
-#line 4417 "Gmsh.y"
+  case 391:
+#line 4457 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -9606,8 +9713,8 @@ yyreduce:
     ;}
     break;
 
-  case 387:
-#line 4427 "Gmsh.y"
+  case 392:
+#line 4467 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -9619,16 +9726,16 @@ yyreduce:
     ;}
     break;
 
-  case 388:
-#line 4437 "Gmsh.y"
+  case 393:
+#line 4477 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
     ;}
     break;
 
-  case 389:
-#line 4442 "Gmsh.y"
+  case 394:
+#line 4482 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -9639,16 +9746,16 @@ yyreduce:
     ;}
     break;
 
-  case 390:
-#line 4451 "Gmsh.y"
+  case 395:
+#line 4491 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
     ;}
     break;
 
-  case 391:
-#line 4456 "Gmsh.y"
+  case 396:
+#line 4496 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -9674,116 +9781,116 @@ yyreduce:
     ;}
     break;
 
-  case 392:
-#line 4483 "Gmsh.y"
+  case 397:
+#line 4523 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
-  case 393:
-#line 4487 "Gmsh.y"
+  case 398:
+#line 4527 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
-  case 394:
-#line 4491 "Gmsh.y"
+  case 399:
+#line 4531 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
-  case 395:
-#line 4495 "Gmsh.y"
+  case 400:
+#line 4535 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
-  case 396:
-#line 4499 "Gmsh.y"
+  case 401:
+#line 4539 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
-  case 397:
-#line 4506 "Gmsh.y"
+  case 402:
+#line 4546 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
-  case 398:
-#line 4510 "Gmsh.y"
+  case 403:
+#line 4550 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
-  case 399:
-#line 4514 "Gmsh.y"
+  case 404:
+#line 4554 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
-  case 400:
-#line 4518 "Gmsh.y"
+  case 405:
+#line 4558 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
-  case 401:
-#line 4525 "Gmsh.y"
+  case 406:
+#line 4565 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
     ;}
     break;
 
-  case 402:
-#line 4530 "Gmsh.y"
+  case 407:
+#line 4570 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
-  case 403:
-#line 4537 "Gmsh.y"
+  case 408:
+#line 4577 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
     ;}
     break;
 
-  case 404:
-#line 4542 "Gmsh.y"
+  case 409:
+#line 4582 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
-  case 405:
-#line 4546 "Gmsh.y"
+  case 410:
+#line 4586 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
     ;}
     break;
 
-  case 406:
-#line 4551 "Gmsh.y"
+  case 411:
+#line 4591 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
-  case 407:
-#line 4555 "Gmsh.y"
+  case 412:
+#line 4595 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9793,8 +9900,8 @@ yyreduce:
     ;}
     break;
 
-  case 408:
-#line 4563 "Gmsh.y"
+  case 413:
+#line 4603 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9804,15 +9911,15 @@ yyreduce:
     ;}
     break;
 
-  case 409:
-#line 4574 "Gmsh.y"
+  case 414:
+#line 4614 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
-  case 410:
-#line 4578 "Gmsh.y"
+  case 415:
+#line 4618 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -9823,8 +9930,8 @@ yyreduce:
     ;}
     break;
 
-  case 411:
-#line 4590 "Gmsh.y"
+  case 416:
+#line 4630 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9834,8 +9941,8 @@ yyreduce:
     ;}
     break;
 
-  case 412:
-#line 4598 "Gmsh.y"
+  case 417:
+#line 4638 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -9845,8 +9952,8 @@ yyreduce:
     ;}
     break;
 
-  case 413:
-#line 4606 "Gmsh.y"
+  case 418:
+#line 4646 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -9855,8 +9962,8 @@ yyreduce:
     ;}
     break;
 
-  case 414:
-#line 4613 "Gmsh.y"
+  case 419:
+#line 4653 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -9868,8 +9975,8 @@ yyreduce:
    ;}
     break;
 
-  case 415:
-#line 4623 "Gmsh.y"
+  case 420:
+#line 4663 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -9891,36 +9998,36 @@ yyreduce:
     ;}
     break;
 
-  case 416:
-#line 4643 "Gmsh.y"
+  case 421:
+#line 4683 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(0);
     ;}
     break;
 
-  case 417:
-#line 4647 "Gmsh.y"
+  case 422:
+#line 4687 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(1);
     ;}
     break;
 
-  case 418:
-#line 4651 "Gmsh.y"
+  case 423:
+#line 4691 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(2);
     ;}
     break;
 
-  case 419:
-#line 4655 "Gmsh.y"
+  case 424:
+#line 4695 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(3);
     ;}
     break;
 
-  case 420:
-#line 4659 "Gmsh.y"
+  case 425:
+#line 4699 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -9951,8 +10058,8 @@ yyreduce:
     ;}
     break;
 
-  case 421:
-#line 4688 "Gmsh.y"
+  case 426:
+#line 4728 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -9983,8 +10090,8 @@ yyreduce:
     ;}
     break;
 
-  case 422:
-#line 4717 "Gmsh.y"
+  case 427:
+#line 4757 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10015,8 +10122,8 @@ yyreduce:
     ;}
     break;
 
-  case 423:
-#line 4746 "Gmsh.y"
+  case 428:
+#line 4786 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10047,8 +10154,8 @@ yyreduce:
     ;}
     break;
 
-  case 424:
-#line 4775 "Gmsh.y"
+  case 429:
+#line 4815 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -10060,8 +10167,8 @@ yyreduce:
     ;}
     break;
 
-  case 425:
-#line 4785 "Gmsh.y"
+  case 430:
+#line 4825 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -10073,8 +10180,8 @@ yyreduce:
     ;}
     break;
 
-  case 426:
-#line 4795 "Gmsh.y"
+  case 431:
+#line 4835 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -10088,8 +10195,8 @@ yyreduce:
     ;}
     break;
 
-  case 427:
-#line 4808 "Gmsh.y"
+  case 432:
+#line 4848 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -10103,8 +10210,8 @@ yyreduce:
     ;}
     break;
 
-  case 428:
-#line 4820 "Gmsh.y"
+  case 433:
+#line 4860 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -10118,8 +10225,8 @@ yyreduce:
     ;}
     break;
 
-  case 429:
-#line 4832 "Gmsh.y"
+  case 434:
+#line 4872 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -10139,8 +10246,8 @@ yyreduce:
     ;}
     break;
 
-  case 430:
-#line 4851 "Gmsh.y"
+  case 435:
+#line 4891 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -10160,30 +10267,30 @@ yyreduce:
     ;}
     break;
 
-  case 431:
-#line 4872 "Gmsh.y"
+  case 436:
+#line 4912 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
     ;}
     break;
 
-  case 432:
-#line 4877 "Gmsh.y"
+  case 437:
+#line 4917 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
-  case 433:
-#line 4881 "Gmsh.y"
+  case 438:
+#line 4921 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
-  case 434:
-#line 4885 "Gmsh.y"
+  case 439:
+#line 4925 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -10194,22 +10301,22 @@ yyreduce:
     ;}
     break;
 
-  case 435:
-#line 4897 "Gmsh.y"
+  case 440:
+#line 4937 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
-  case 436:
-#line 4901 "Gmsh.y"
+  case 441:
+#line 4941 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
-  case 437:
-#line 4913 "Gmsh.y"
+  case 442:
+#line 4953 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(-1, (yyvsp[(1) - (1)].c), &flag);
@@ -10218,8 +10325,8 @@ yyreduce:
     ;}
     break;
 
-  case 438:
-#line 4920 "Gmsh.y"
+  case 443:
+#line 4960 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -10228,15 +10335,15 @@ yyreduce:
     ;}
     break;
 
-  case 439:
-#line 4930 "Gmsh.y"
+  case 444:
+#line 4970 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
-  case 440:
-#line 4934 "Gmsh.y"
+  case 445:
+#line 4974 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -10250,30 +10357,30 @@ yyreduce:
     ;}
     break;
 
-  case 441:
-#line 4949 "Gmsh.y"
+  case 446:
+#line 4989 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
     ;}
     break;
 
-  case 442:
-#line 4954 "Gmsh.y"
+  case 447:
+#line 4994 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
-  case 443:
-#line 4961 "Gmsh.y"
+  case 448:
+#line 5001 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
-  case 444:
-#line 4965 "Gmsh.y"
+  case 449:
+#line 5005 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -10288,8 +10395,8 @@ yyreduce:
     ;}
     break;
 
-  case 445:
-#line 4978 "Gmsh.y"
+  case 450:
+#line 5018 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -10299,8 +10406,8 @@ yyreduce:
     ;}
     break;
 
-  case 446:
-#line 4986 "Gmsh.y"
+  case 451:
+#line 5026 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -10310,15 +10417,15 @@ yyreduce:
     ;}
     break;
 
-  case 447:
-#line 4997 "Gmsh.y"
+  case 452:
+#line 5037 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
-  case 448:
-#line 5001 "Gmsh.y"
+  case 453:
+#line 5041 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -10328,8 +10435,8 @@ yyreduce:
     ;}
     break;
 
-  case 449:
-#line 5009 "Gmsh.y"
+  case 454:
+#line 5049 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -10339,8 +10446,8 @@ yyreduce:
     ;}
     break;
 
-  case 450:
-#line 5017 "Gmsh.y"
+  case 455:
+#line 5057 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -10350,8 +10457,8 @@ yyreduce:
     ;}
     break;
 
-  case 451:
-#line 5025 "Gmsh.y"
+  case 456:
+#line 5065 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -10361,8 +10468,8 @@ yyreduce:
     ;}
     break;
 
-  case 452:
-#line 5033 "Gmsh.y"
+  case 457:
+#line 5073 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -10378,8 +10485,8 @@ yyreduce:
     ;}
     break;
 
-  case 453:
-#line 5047 "Gmsh.y"
+  case 458:
+#line 5087 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -10395,8 +10502,8 @@ yyreduce:
     ;}
     break;
 
-  case 454:
-#line 5061 "Gmsh.y"
+  case 459:
+#line 5101 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -10410,8 +10517,8 @@ yyreduce:
     ;}
     break;
 
-  case 455:
-#line 5073 "Gmsh.y"
+  case 460:
+#line 5113 "Gmsh.y"
     {
       int size = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -10429,8 +10536,8 @@ yyreduce:
     ;}
     break;
 
-  case 456:
-#line 5090 "Gmsh.y"
+  case 461:
+#line 5130 "Gmsh.y"
     {
       int size = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -10448,22 +10555,22 @@ yyreduce:
     ;}
     break;
 
-  case 457:
-#line 5106 "Gmsh.y"
+  case 462:
+#line 5146 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
-  case 458:
-#line 5111 "Gmsh.y"
+  case 463:
+#line 5151 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
-  case 459:
-#line 5115 "Gmsh.y"
+  case 464:
+#line 5155 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -10484,8 +10591,8 @@ yyreduce:
     ;}
     break;
 
-  case 460:
-#line 5135 "Gmsh.y"
+  case 465:
+#line 5175 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -10506,22 +10613,22 @@ yyreduce:
     ;}
     break;
 
-  case 461:
-#line 5157 "Gmsh.y"
+  case 466:
+#line 5197 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
     ;}
     break;
 
-  case 462:
-#line 5162 "Gmsh.y"
+  case 467:
+#line 5202 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 10525 "Gmsh.tab.cpp"
+#line 10632 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -10735,7 +10842,7 @@ yyreturn:
 }
 
 
-#line 5165 "Gmsh.y"
+#line 5205 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.tab.hpp b/Parser/Gmsh.tab.hpp
index bae21f58ff..7b06aead30 100644
--- a/Parser/Gmsh.tab.hpp
+++ b/Parser/Gmsh.tab.hpp
@@ -135,61 +135,64 @@
      tMeshAlgorithm = 351,
      tReverse = 352,
      tLayers = 353,
-     tHole = 354,
-     tAlias = 355,
-     tAliasWithOptions = 356,
-     tQuadTriDbl = 357,
-     tQuadTriSngl = 358,
-     tRecombLaterals = 359,
-     tTransfQuadTri = 360,
-     tText2D = 361,
-     tText3D = 362,
-     tInterpolationScheme = 363,
-     tTime = 364,
-     tCombine = 365,
-     tBSpline = 366,
-     tBezier = 367,
-     tNurbs = 368,
-     tNurbsOrder = 369,
-     tNurbsKnots = 370,
-     tColor = 371,
-     tColorTable = 372,
-     tFor = 373,
-     tIn = 374,
-     tEndFor = 375,
-     tIf = 376,
-     tEndIf = 377,
-     tExit = 378,
-     tAbort = 379,
-     tField = 380,
-     tReturn = 381,
-     tCall = 382,
-     tFunction = 383,
-     tShow = 384,
-     tHide = 385,
-     tGetValue = 386,
-     tGetEnv = 387,
-     tGetString = 388,
-     tHomology = 389,
-     tCohomology = 390,
-     tBetti = 391,
-     tSetOrder = 392,
-     tGMSH_MAJOR_VERSION = 393,
-     tGMSH_MINOR_VERSION = 394,
-     tGMSH_PATCH_VERSION = 395,
-     tAFFECTDIVIDE = 396,
-     tAFFECTTIMES = 397,
-     tAFFECTMINUS = 398,
-     tAFFECTPLUS = 399,
-     tOR = 400,
-     tAND = 401,
-     tNOTEQUAL = 402,
-     tEQUAL = 403,
-     tGREATEROREQUAL = 404,
-     tLESSOREQUAL = 405,
-     UNARYPREC = 406,
-     tMINUSMINUS = 407,
-     tPLUSPLUS = 408
+     tScaleLast = 354,
+     tHole = 355,
+     tAlias = 356,
+     tAliasWithOptions = 357,
+     tQuadTriAddVerts = 358,
+     tQuadTriNoNewVerts = 359,
+     tQuadTriSngl = 360,
+     tQuadTriDbl = 361,
+     tRecombLaterals = 362,
+     tTransfQuadTri = 363,
+     tText2D = 364,
+     tText3D = 365,
+     tInterpolationScheme = 366,
+     tTime = 367,
+     tCombine = 368,
+     tBSpline = 369,
+     tBezier = 370,
+     tNurbs = 371,
+     tNurbsOrder = 372,
+     tNurbsKnots = 373,
+     tColor = 374,
+     tColorTable = 375,
+     tFor = 376,
+     tIn = 377,
+     tEndFor = 378,
+     tIf = 379,
+     tEndIf = 380,
+     tExit = 381,
+     tAbort = 382,
+     tField = 383,
+     tReturn = 384,
+     tCall = 385,
+     tFunction = 386,
+     tShow = 387,
+     tHide = 388,
+     tGetValue = 389,
+     tGetEnv = 390,
+     tGetString = 391,
+     tHomology = 392,
+     tCohomology = 393,
+     tBetti = 394,
+     tSetOrder = 395,
+     tGMSH_MAJOR_VERSION = 396,
+     tGMSH_MINOR_VERSION = 397,
+     tGMSH_PATCH_VERSION = 398,
+     tAFFECTDIVIDE = 399,
+     tAFFECTTIMES = 400,
+     tAFFECTMINUS = 401,
+     tAFFECTPLUS = 402,
+     tOR = 403,
+     tAND = 404,
+     tNOTEQUAL = 405,
+     tEQUAL = 406,
+     tGREATEROREQUAL = 407,
+     tLESSOREQUAL = 408,
+     UNARYPREC = 409,
+     tMINUSMINUS = 410,
+     tPLUSPLUS = 411
    };
 #endif
 /* Tokens.  */
@@ -289,61 +292,64 @@
 #define tMeshAlgorithm 351
 #define tReverse 352
 #define tLayers 353
-#define tHole 354
-#define tAlias 355
-#define tAliasWithOptions 356
-#define tQuadTriDbl 357
-#define tQuadTriSngl 358
-#define tRecombLaterals 359
-#define tTransfQuadTri 360
-#define tText2D 361
-#define tText3D 362
-#define tInterpolationScheme 363
-#define tTime 364
-#define tCombine 365
-#define tBSpline 366
-#define tBezier 367
-#define tNurbs 368
-#define tNurbsOrder 369
-#define tNurbsKnots 370
-#define tColor 371
-#define tColorTable 372
-#define tFor 373
-#define tIn 374
-#define tEndFor 375
-#define tIf 376
-#define tEndIf 377
-#define tExit 378
-#define tAbort 379
-#define tField 380
-#define tReturn 381
-#define tCall 382
-#define tFunction 383
-#define tShow 384
-#define tHide 385
-#define tGetValue 386
-#define tGetEnv 387
-#define tGetString 388
-#define tHomology 389
-#define tCohomology 390
-#define tBetti 391
-#define tSetOrder 392
-#define tGMSH_MAJOR_VERSION 393
-#define tGMSH_MINOR_VERSION 394
-#define tGMSH_PATCH_VERSION 395
-#define tAFFECTDIVIDE 396
-#define tAFFECTTIMES 397
-#define tAFFECTMINUS 398
-#define tAFFECTPLUS 399
-#define tOR 400
-#define tAND 401
-#define tNOTEQUAL 402
-#define tEQUAL 403
-#define tGREATEROREQUAL 404
-#define tLESSOREQUAL 405
-#define UNARYPREC 406
-#define tMINUSMINUS 407
-#define tPLUSPLUS 408
+#define tScaleLast 354
+#define tHole 355
+#define tAlias 356
+#define tAliasWithOptions 357
+#define tQuadTriAddVerts 358
+#define tQuadTriNoNewVerts 359
+#define tQuadTriSngl 360
+#define tQuadTriDbl 361
+#define tRecombLaterals 362
+#define tTransfQuadTri 363
+#define tText2D 364
+#define tText3D 365
+#define tInterpolationScheme 366
+#define tTime 367
+#define tCombine 368
+#define tBSpline 369
+#define tBezier 370
+#define tNurbs 371
+#define tNurbsOrder 372
+#define tNurbsKnots 373
+#define tColor 374
+#define tColorTable 375
+#define tFor 376
+#define tIn 377
+#define tEndFor 378
+#define tIf 379
+#define tEndIf 380
+#define tExit 381
+#define tAbort 382
+#define tField 383
+#define tReturn 384
+#define tCall 385
+#define tFunction 386
+#define tShow 387
+#define tHide 388
+#define tGetValue 389
+#define tGetEnv 390
+#define tGetString 391
+#define tHomology 392
+#define tCohomology 393
+#define tBetti 394
+#define tSetOrder 395
+#define tGMSH_MAJOR_VERSION 396
+#define tGMSH_MINOR_VERSION 397
+#define tGMSH_PATCH_VERSION 398
+#define tAFFECTDIVIDE 399
+#define tAFFECTTIMES 400
+#define tAFFECTMINUS 401
+#define tAFFECTPLUS 402
+#define tOR 403
+#define tAND 404
+#define tNOTEQUAL 405
+#define tEQUAL 406
+#define tGREATEROREQUAL 407
+#define tLESSOREQUAL 408
+#define UNARYPREC 409
+#define tMINUSMINUS 410
+#define tPLUSPLUS 411
 
 
 
@@ -361,7 +367,7 @@ typedef union YYSTYPE
   List_T *l;
 }
 /* Line 1529 of yacc.c.  */
-#line 365 "Gmsh.tab.hpp"
+#line 371 "Gmsh.tab.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index b00180bbba..90ebb82c38 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -120,8 +120,9 @@ struct doubleXstring{
 %token tRotate tTranslate tSymmetry tDilate tExtrude tLevelset
 %token tRecombine tSmoother tSplit tDelete tCoherence
 %token tIntersect tMeshAlgorithm tReverse
-%token tLayers tHole tAlias tAliasWithOptions
-%token tQuadTriDbl tQuadTriSngl tRecombLaterals tTransfQuadTri
+%token tLayers tScaleLast tHole tAlias tAliasWithOptions
+%token tQuadTriAddVerts tQuadTriNoNewVerts tQuadTriSngl tQuadTriDbl
+%token tRecombLaterals tTransfQuadTri
 %token tText2D tText3D tInterpolationScheme  tTime tCombine
 %token tBSpline tBezier tNurbs tNurbsOrder tNurbsKnots
 %token tColor tColorTable tFor tIn tEndFor tIf tEndIf tExit tAbort
@@ -1846,6 +1847,8 @@ Shape :
         for(int i = 0; i < List_Nbr($7); i++){
           s->compound.push_back((int)*(double*)List_Pointer($7, i));
 	}
+        // Added by Trevor Strickler
+	setSurfaceGeneratrices(s, (List_T*) 0 );
 	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
       }
       List_Delete($7);
@@ -1873,6 +1876,9 @@ Shape :
             s->compoundBoundary[i].push_back((int)*(double*)List_Pointer(l, j));
 	  }
 	}
+        // Added by Trevor Strickler
+        setSurfaceGeneratrices(s, (List_T*) 0 );
+
 	Tree_Add(GModel::current()->getGEOInternals()->Surfaces, &s);
       }
       List_Delete($7);
@@ -3117,6 +3123,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                        ExtrudeParameters '}'
     {
@@ -3130,6 +3137,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                                                    ExtrudeParameters '}'
     {
@@ -3143,6 +3151,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                                                              ExtrudeParameters '}'
     {
@@ -3156,6 +3165,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                        ExtrudeParameters '}'
     {
@@ -3232,6 +3242,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                     '{' ExtrudeParameters '}' tEND
     {
@@ -3244,6 +3255,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                    '{' ExtrudeParameters '}' tEND
     {
@@ -3256,6 +3268,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                       '{' ExtrudeParameters '}' tEND
     {
@@ -3268,6 +3281,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                     '{' ExtrudeParameters '}' tEND
     {
@@ -3280,6 +3294,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                    '{' ExtrudeParameters '}' tEND
     {
@@ -3292,6 +3307,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                       '{' ExtrudeParameters '}' tEND
     {
@@ -3304,6 +3320,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                     '{' ExtrudeParameters '}' tEND
     {
@@ -3316,6 +3333,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                    '{' ExtrudeParameters '}' tEND
     {
@@ -3328,6 +3346,7 @@ Extrude :
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
+      extr.mesh.ScaleLast = false;
     }
                       '{' ExtrudeParameters '}' tEND
     {
@@ -3404,25 +3423,47 @@ ExtrudeParameter :
       List_Delete($5);
       List_Delete($7);
     }
+//Added by Trevor Strickler 07/07/2013
+  | tScaleLast tEND
+    {
+      extr.mesh.ScaleLast = true;
+    }
+
   | tRecombine tEND
     {
       extr.mesh.Recombine = true;
     }
+  | tQuadTriSngl tEND
+    {
+      yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
+    }
+  | tQuadTriSngl tRecombLaterals tEND
+    {
+      yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
+    }
   | tQuadTriDbl tEND
     {
-      extr.mesh.QuadToTri = QUADTRI_DBL_1;
+      yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, which has no requirement for the number of extrusion layers and meshes with body-centered vertices.");
     }
   | tQuadTriDbl tRecombLaterals tEND
     {
-      extr.mesh.QuadToTri = QUADTRI_DBL_1_RECOMB;
+      yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, which has no requirement for the number of extrusion layers and meshes with body-centered vertices.");
     }
-  | tQuadTriSngl tEND
+  | tQuadTriAddVerts tEND
     {
-      extr.mesh.QuadToTri = QUADTRI_SNGL_1;
+      extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     }
-  | tQuadTriSngl tRecombLaterals tEND
+  | tQuadTriAddVerts tRecombLaterals tEND
+    {
+      extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
+    }
+  | tQuadTriNoNewVerts tEND
+    {
+      extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
+    }
+  | tQuadTriNoNewVerts tRecombLaterals tEND
     {
-      extr.mesh.QuadToTri = QUADTRI_SNGL_1_RECOMB;
+      extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     }
   | tHole '(' FExpr ')' tAFFECT ListOfDouble tUsing FExpr tEND
     {
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index fd17a133c6..88951d2c2f 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -380,8 +380,8 @@ static void yy_fatal_error (yyconst char msg[]  );
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 174
-#define YY_END_OF_BUFFER 175
+#define YY_NUM_RULES 177
+#define YY_END_OF_BUFFER 178
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -389,97 +389,100 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[806] =
+static yyconst flex_int16_t yy_accept[837] =
     {   0,
-        0,    0,  175,  173,    1,    1,  173,    5,  173,    6,
-      173,  173,  173,  173,  173,  168,   21,    2,  173,   16,
-      173,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  173,   28,   24,   19,   25,   17,
-       26,   18,    0,  170,    3,    4,   20,  169,  168,    0,
-       29,   27,   30,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-
-      172,   97,   96,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  117,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  155,  156,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,   23,   22,    0,  169,    0,
-        0,  171,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,   53,   64,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,   70,  172,  172,  172,  172,
-      172,   84,  172,  172,  172,  172,  172,  172,  172,  172,
-
-      172,  172,  172,  172,  172,  172,  172,  104,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  138,  172,  172,  172,  172,  172,  144,  172,
-      172,  172,  172,  163,  172,  172,  172,  172,  172,  172,
-      172,    0,  170,    0,    0,  169,  172,   32,  172,  172,
-      172,  172,  172,   37,   39,  172,  172,  172,  172,   61,
-      172,   47,  172,  172,  172,  172,  172,  172,  172,  172,
-       52,  172,  172,  172,  172,  172,   69,  172,  172,  172,
-      172,  172,   79,  172,   80,  172,  172,   83,  172,  172,
-
-      172,  172,  172,   92,   93,  172,  172,  172,  172,  172,
-      172,  172,  172,  102,  103,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  131,  172,  172,  172,  172,  172,  172,  172,  172,
-      152,  139,  172,  172,  172,  172,  137,  172,  172,  172,
-      172,  172,  172,  172,  158,  162,  172,  172,  172,  172,
-      172,  172,   10,   15,    9,    8,  172,   12,   14,    0,
-      169,   31,  172,   35,  172,  172,  172,   41,  172,   43,
-      172,  172,  172,  172,  172,  172,  172,   56,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,   76,
-
-       78,  172,  172,   81,   82,  172,  172,  172,  172,  172,
-      172,   95,  172,  172,  100,  172,  172,  172,  105,  172,
-      172,  172,  172,  172,  113,  114,  172,  172,  172,  118,
-      172,  119,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  130,  172,  172,  172,  172,  142,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  164,  172,  172,
-      166,  172,   11,  172,   13,  172,  172,   34,   38,   40,
-      172,   44,  172,  172,  172,   48,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,   66,   68,  172,  172,
-       75,  172,  172,  172,  172,  172,   86,  172,  172,  172,
-
-      172,  172,  106,  101,  172,  172,  172,  112,  172,  109,
-      172,  172,  172,  123,  172,  122,  172,  172,  172,  172,
-      133,  172,  129,  172,  172,  140,  141,  172,  146,  151,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  167,    7,  172,  172,   42,   45,  172,  172,  172,
-      172,  172,  172,   51,   55,  172,  172,  172,  172,  172,
-       72,  172,  172,  172,   73,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  134,  172,  172,
-      145,  150,  172,  172,  172,  143,  172,  172,  172,  172,
-
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,   58,  172,  172,  172,  172,   71,   74,  172,   85,
-      172,  172,  172,  172,   88,   94,  172,  172,  107,  110,
-      111,  172,  172,  115,  116,  172,  172,  172,  172,  172,
-      172,  172,  136,  135,  172,  172,  172,  153,  172,  172,
-      172,  172,  172,  172,   33,  172,  172,  172,  172,   49,
-      172,  172,  172,  172,  172,  172,   77,  172,  172,  172,
-       87,  172,   98,  172,  172,  172,  172,  172,  172,  126,
-      128,  172,  148,  172,  172,  154,  172,  172,  172,  161,
-      172,  172,  172,   60,  172,   50,   57,  172,  172,  172,
-
-      172,  172,  172,  172,  172,  172,  120,  172,  124,  172,
-      172,  132,  172,  147,  172,  172,  172,  172,  172,   46,
-      172,   59,  172,  172,   67,  172,  172,  172,  172,  172,
-      121,  125,  172,  149,  172,  172,  159,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  172,  172,  172,  172,  108,
-      172,  172,  160,  172,  172,   54,   62,   65,  172,  172,
-      172,  172,  127,  157,  172,  172,  172,  172,  172,  172,
-      172,  172,   36,  172,  172,  172,  172,  172,  165,  172,
-      172,  172,  172,  172,  172,   89,   90,   91,  172,  172,
-
-      172,  172,   99,   63,    0
+        0,    0,  178,  176,    1,    1,  176,    5,  176,    6,
+      176,  176,  176,  176,  176,  171,   21,    2,  176,   16,
+      176,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  176,   28,   24,   19,   25,   17,
+       26,   18,    0,  173,    3,    4,   20,  172,  171,    0,
+       29,   27,   30,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+
+      175,   97,   96,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  117,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  158,  159,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,   23,   22,    0,  172,
+        0,    0,  174,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,   53,   64,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,   70,  175,  175,  175,
+      175,  175,   84,  175,  175,  175,  175,  175,  175,  175,
+
+      175,  175,  175,  175,  175,  175,  175,  175,  104,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  141,  175,  175,  175,  175,  175,
+      147,  175,  175,  175,  175,  166,  175,  175,  175,  175,
+      175,  175,  175,    0,  173,    0,    0,  172,  175,   32,
+      175,  175,  175,  175,  175,   37,   39,  175,  175,  175,
+      175,   61,  175,   47,  175,  175,  175,  175,  175,  175,
+      175,  175,   52,  175,  175,  175,  175,  175,   69,  175,
+      175,  175,  175,  175,   79,  175,   80,  175,  175,   83,
+
+      175,  175,  175,  175,  175,   92,   93,  175,  175,  175,
+      175,  175,  175,  175,  175,  102,  103,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  133,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  155,  142,  175,  175,  175,  175,  140,
+      175,  175,  175,  175,  175,  175,  175,  161,  165,  175,
+      175,  175,  175,  175,  175,   10,   15,    9,    8,  175,
+       12,   14,    0,  172,   31,  175,   35,  175,  175,  175,
+       41,  175,   43,  175,  175,  175,  175,  175,  175,  175,
+       56,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+
+      175,  175,   76,   78,  175,  175,   81,   82,  175,  175,
+      175,  175,  175,  175,   95,  175,  175,  100,  175,  175,
+      175,  105,  175,  175,  175,  175,  175,  113,  114,  175,
+      175,  175,  118,  175,  119,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  132,  175,  175,  175,  175,  175,
+      145,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  167,  175,  175,  169,  175,   11,  175,   13,  175,
+      175,   34,   38,   40,  175,   44,  175,  175,  175,   48,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+       66,   68,  175,  175,   75,  175,  175,  175,  175,  175,
+
+       86,  175,  175,  175,  175,  175,  106,  101,  175,  175,
+      175,  112,  175,  109,  175,  175,  175,  123,  175,  122,
+      175,  175,  175,  175,  135,  175,  131,  175,  175,  175,
+      143,  144,  175,  149,  154,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  170,    7,  175,  175,
+       42,   45,  175,  175,  175,  175,  175,  175,   51,   55,
+      175,  175,  175,  175,  175,   72,  175,  175,  175,   73,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  136,  175,  175,  175,  148,  153,  175,  175,
+
+      175,  146,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,   58,  175,  175,
+      175,  175,   71,   74,  175,   85,  175,  175,  175,  175,
+       88,   94,  175,  175,  107,  110,  111,  175,  175,  115,
+      116,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  139,  138,  175,  175,  175,  156,  175,  175,  175,
+      175,  175,  175,   33,  175,  175,  175,  175,   49,  175,
+      175,  175,  175,  175,  175,   77,  175,  175,  175,   87,
+      175,   98,  175,  175,  175,  175,  175,  175,  175,  175,
+      128,  130,  175,  175,  151,  175,  175,  157,  175,  175,
+
+      175,  164,  175,  175,  175,   60,  175,   50,   57,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  120,  175,
+      175,  126,  175,  175,  175,  134,  175,  175,  150,  175,
+      175,  175,  175,  175,   46,  175,   59,  175,  175,   67,
+      175,  175,  175,  175,  175,  121,  175,  175,  127,  175,
+      175,  152,  175,  175,  162,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
+      108,  175,  175,  175,  175,  175,  163,  175,  175,   54,
+       62,   65,  175,  175,  175,  175,  175,  175,  129,  137,
+
+      160,  175,  175,  175,  175,  175,  175,  175,  124,  175,
+      175,   36,  175,  175,  175,  175,  175,  175,  168,  175,
+      175,  175,  175,  175,  125,  175,   89,   90,   91,  175,
+      175,  175,  175,   99,   63,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -526,193 +529,199 @@ static yyconst flex_int32_t yy_meta[74] =
         2,    2,    1
     } ;
 
-static yyconst flex_int16_t yy_base[807] =
+static yyconst flex_int16_t yy_base[838] =
     {   0,
-        0,    0,  933,  934,  934,  934,  911,  934,  925,  934,
-      909,   65,   66,   64,   76,   78,  934,  934,  908,  907,
-      906,   49,   49,   56,   67,   68,   81,   50,   80,   97,
-        0,  866,   97,  108,  858,  860,  107,  856,  118,  121,
-      159,   56,  861,  869,  847,  934,  934,  934,  934,  934,
-      934,  934,  908,  181,  934,  934,  934,  186,  201,  226,
-      934,  934,  934,    0,  857,  856,  868,  859,  864,  857,
-      864,  849,   37,  843,   86,  853,  860,  843,  166,  839,
-      853,  128,  846,  855,  844,  850,  836,  849,  188,  849,
-      845,  835,  834,  830,  833,  851,  825,  839,   24,  827,
-
-      846,    0,  821,  825,  814,   96,   62,  830,  852,  102,
-      831,  817,  829,  815,  814,  806,    0,   58,  133,  820,
-      827,  814,  179,  807,  814,  805,  809,  809,  807,  191,
-      803,  802,  801,  145,    0,    0,  829,  803,  792,  810,
-      812,  808,  802,  799,  787,  934,  934,  247,  252,  261,
-      267,  272,  791,  789,  791,  804,  168,  791,  790,  791,
-      782,  791,  786,  787,  785,  785,  778,  791,   82,  779,
-      157,  775,  783,    0,  789,  780,  783,  782,  785,  763,
-      775,  206,  769,  771,  762,    0,  763,  761,  767,  763,
-      772,    0,  772,  791,  264,  768,  767,  757,  756,  789,
-
-      763,  748,  761,  758,  759,  758,  743,  794,  760,  745,
-      750,  737,  754,  750,  753,  744,  734,  738,  743,  736,
-      747,  734,  742,  741,  111,  735,  723,  737,  740,  735,
-      749,  716,  729,  722,  730,  725,  724,  713,  269,  725,
-      718,  726,  748,  719,  707,  724,  711,  718,  709,  701,
-      248,  304,  309,  318,  323,  328,  701,    0,  700,  700,
-      703,  707,  714,    0,  746,  704,  703,  706,  706,    0,
-      689,    0,  707,  696,  689,  693,  687,  694,  190,  698,
-        0,  682,  687,  686,  679,  678,    0,  681,  681,  688,
-      676,  683,    0,  671,    0,  686,  672,    0,  669,  687,
-
-      673,  666,  683,    0,    0,  672,  663,  688,  663,  661,
-      661,  658,  665,    0,    0,  709,  218,  657,  697,  661,
-      653,  653,  657,  654,  658,  661,  656,  645,  646,  643,
-      230,    0,  649,  643,  646,  641,  640,  637,  651,  637,
-        0,    0,  634,  635,  233,  638,    0,  244,  641,  632,
-      643,  646,  641,  657,    0,    0,  668,  619,  624,  635,
-      633,  627,    0,    0,  627,    0,  632,  625,    0,  333,
-      338,    0,  647,  636,  615,  619,  618,    0,  617,    0,
-      612,  619,  616,  623,  620,  619,  609,  627,  608,  615,
-      599,  609,  612,  611,  610,  609,  608,  249,  595,    0,
-
-        0,  607,  606,    0,    0,  600,  321,  587,  590,  595,
-      591,    0,  613,  585,    0,  584,  593,  582,    0,  598,
-      589,  573,  585,  581,    0,    0,  589,  589,  589,    0,
-      578,    0,  596,  583,  571,  585,  568,  580,  571,  565,
-      577,    0,  577,  572,  574,  573,    0,  558,  557,  560,
-      561,  568,  164,  569,  552,  556,  550,    0,  237,  559,
-        0,  562,    0,  559,    0,  560,  555,    0,    0,  595,
-      557,    0,  548,  549,  540,    0,  545,  546,  555,  550,
-      531,  540,  539,  556,  572,  532,    0,    0,  305,  539,
-        0,  538,  541,  531,  335,  568,    0,  534,  522,  534,
-
-      550,  534,    0,    0,  533,  524,  511,    0,  528,    0,
-      515,  524,  531,    0,  516,    0,  521,  326,  520,  540,
-        0,  522,    0,  521,  520,    0,    0,  518,    0,    0,
-      519,  516,  520,  509,  514,  501,  513,  497,  323,  514,
-      501,    0,    0,  495,  493,    0,    0,  504,  517,  504,
-      505,  493,  504,    0,    0,  501,  503,  489,  488,  500,
-        0,  482,  496,  497,    0,  484,  511,  506,  499,  480,
-      487,  467,  503,  486,  469,  477,  481,  471,  467,  480,
-      471,  473,  337,  479,  466,  457,  472,    0,  459,  458,
-        0,    0,  465,  454,  471,    0,  447,  465,  452,  448,
-
-      454,  447,  460,  456,  455,  485,  447,  443,  454,  451,
-      446,    0,  437,  440,  441,  434,    0,    0,  439,    0,
-      461,  460,  471,  441,    0,    0,  471,  427,    0,    0,
-        0,  428,  435,    0,    0,  438,  440,  428,  421,  434,
-      433,  419,    0,    0,  413,  426,  431,    0,  422,  423,
-      430,  421,  424,  450,    0,  437,  412,  413,  415,    0,
-      399,  417,  416,  406,  401,  413,    0,  424,  423,  432,
-        0,  419,    0,  404,  409,  394,  399,  402,  403,    0,
-        0,  399,    0,  385,  400,    0,  402,  399,  383,    0,
-      387,  385,  376,    0,  380,    0,    0,  379,  385,  376,
-
-      390,  393,  392,  391,  406,  370,    0,  383,    0,   38,
-       60,    0,   95,    0,   87,  323,  178,  192,  207,    0,
-      234,    0,  241,  263,    0,  285,  286,  320,  330,  313,
-        0,    0,  321,    0,  304,  307,    0,  307,  317,  318,
-      321,  316,  350,  353,  354,  347,  326,  329,  338,  335,
-      326,  332,  344,  324,  330,  357,  358,  359,  353,    0,
-      336,  338,    0,  356,  345,    0,  370,    0,  366,  367,
-      368,  369,    0,    0,  351,  347,  352,  383,  384,  385,
-      392,  352,    0,  389,  383,  384,  385,  393,    0,  363,
-      389,  390,  391,  401,  371,    0,    0,    0,  395,  379,
-
-      405,  368,    0,    0,  934,  432
+        0,    0,  969,  970,  970,  970,  947,  970,  961,  970,
+      945,   65,   66,   64,   76,   78,  970,  970,  944,  943,
+      942,   49,   49,   56,   67,   68,   81,   50,   80,   97,
+        0,  902,   97,  108,  894,  896,  107,  892,  118,  125,
+      158,   56,  897,  905,  883,  970,  970,  970,  970,  970,
+      970,  970,  944,  184,  970,  970,  970,  199,  214,  229,
+      970,  970,  970,    0,  893,  892,  904,  895,  900,  893,
+      900,  885,   37,  879,   86,  889,  896,  879,  194,  875,
+      889,  149,  882,  891,  880,  886,  872,  885,  116,  885,
+      881,  871,  870,  866,  869,  887,  861,  875,   24,  863,
+
+      882,    0,  857,  861,  850,   96,   62,  866,  888,  102,
+      867,  853,  865,  851,  850,  842,    0,   58,  137,  856,
+      863,  850,  155,  843,  850,  859,  840,  844,  844,  842,
+      192,  838,  837,  836,  158,    0,    0,  864,  838,  827,
+      845,  847,  843,  837,  834,  822,  970,  970,  248,  254,
+      263,  269,  274,  826,  824,  826,  839,  267,  826,  825,
+      826,  817,  826,  821,  822,  820,  820,  813,  826,   82,
+      814,  171,  810,  818,    0,  824,  815,  818,  817,  820,
+      798,  810,  155,  804,  806,  797,    0,  798,  796,  802,
+      798,  807,    0,  807,  826,  266,  803,  802,  792,  791,
+
+      824,  798,  783,  796,  793,  794,  793,  778,  829,  795,
+      780,  785,  772,  789,  785,  788,  779,  769,  773,  778,
+      771,  782,  769,  777,  776,  173,  770,  758,  772,  775,
+      770,  763,  783,  750,  763,  756,  764,  759,  758,  747,
+      273,  759,  752,  760,  782,  753,  741,  758,  745,  752,
+      743,  735,  262,  318,  323,  332,  337,  342,  735,    0,
+      734,  734,  737,  741,  748,    0,  780,  738,  737,  740,
+      740,    0,  723,    0,  741,  730,  723,  727,  721,  728,
+      174,  732,    0,  716,  721,  720,  713,  712,    0,  715,
+      715,  722,  710,  717,    0,  705,    0,  720,  706,    0,
+
+      703,  721,  707,  700,  717,    0,    0,  706,  697,  722,
+      697,  695,  695,  692,  699,    0,    0,  743,  234,  691,
+      731,  695,  687,  687,  691,  688,  692,  695,  690,  679,
+      680,  677,  182,    0,  683,  677,  680,  675,  674,  671,
+      685,  683,  670,    0,    0,  667,  668,  194,  671,    0,
+      246,  674,  665,  676,  679,  674,  690,    0,    0,  701,
+      652,  657,  668,  666,  660,    0,    0,  660,    0,  665,
+      658,    0,  347,  352,    0,  680,  669,  648,  652,  651,
+        0,  650,    0,  645,  652,  649,  656,  653,  652,  642,
+      660,  641,  648,  632,  642,  645,  644,  643,  642,  641,
+
+      230,  628,    0,    0,  640,  639,    0,    0,  633,  262,
+      620,  623,  628,  624,    0,  646,  618,    0,  617,  626,
+      615,    0,  631,  622,  606,  618,  614,    0,    0,  622,
+      622,  622,    0,  611,    0,  629,  616,  604,  618,  601,
+      613,  604,  598,  610,    0,  627,  609,  604,  606,  605,
+        0,  590,  589,  592,  593,  600,  132,  601,  584,  588,
+      582,    0,  151,  591,    0,  594,    0,  591,    0,  592,
+      587,    0,    0,  627,  589,    0,  580,  581,  572,    0,
+      577,  578,  587,  582,  563,  572,  571,  588,  604,  564,
+        0,    0,  247,  571,    0,  570,  573,  563,  291,  600,
+
+        0,  566,  554,  566,  582,  566,    0,    0,  565,  556,
+      543,    0,  560,    0,  547,  556,  563,    0,  548,    0,
+      553,  336,  552,  572,    0,  554,    0,  557,  552,  551,
+        0,    0,  549,    0,    0,  550,  547,  551,  540,  545,
+      532,  544,  528,  265,  545,  532,    0,    0,  526,  524,
+        0,    0,  535,  548,  535,  536,  524,  535,    0,    0,
+      532,  534,  520,  519,  531,    0,  513,  527,  528,    0,
+      515,  542,  537,  530,  511,  518,  498,  534,  517,  500,
+      508,  512,  502,  498,  511,  502,  504,  348,  510,  497,
+      488,  503,    0,  489,  489,  488,    0,    0,  495,  484,
+
+      501,    0,  477,  495,  482,  478,  484,  477,  490,  486,
+      485,  515,  477,  473,  484,  481,  476,    0,  467,  470,
+      471,  464,    0,    0,  469,    0,  491,  490,  501,  471,
+        0,    0,  501,  457,    0,    0,    0,  458,  465,    0,
+        0,  468,  468,  469,  456,  456,  449,  462,  461,  447,
+      445,    0,    0,  440,  453,  458,    0,  449,  450,  457,
+      448,  451,  477,    0,  464,  439,  440,  442,    0,  426,
+      444,  443,  433,  428,  440,    0,  451,  450,  459,    0,
+      446,    0,  431,  436,  421,  433,  425,  283,  428,  429,
+        0,    0,  425,  445,    0,  410,  425,    0,  427,  424,
+
+      408,    0,  412,  410,  401,    0,   31,    0,    0,   59,
+       89,   88,  125,  190,  255,  269,  286,  252,    0,  271,
+      329,    0,  273,  271,  280,    0,  324,  323,    0,  309,
+      335,  326,  319,  314,    0,  315,    0,  321,  335,    0,
+      341,  342,  343,  351,  335,    0,  339,  324,    0,  347,
+      327,    0,  334,  338,    0,  338,  348,  349,  352,  347,
+      382,  383,  384,  376,  355,  351,  372,  359,  366,  367,
+      364,  355,  361,  373,  353,  359,  386,  387,  388,  382,
+        0,  364,  379,  367,  369,  369,    0,  387,  376,    0,
+      401,    0,  397,  398,  400,  401,  378,  380,    0,    0,
+
+        0,  385,  381,  386,  417,  418,  419,  426,    0,  386,
+      387,    0,  424,  418,  419,  420,  428,  394,    0,  399,
+      425,  426,  427,  437,    0,  407,    0,    0,    0,  431,
+      415,  441,  404,    0,    0,  970,  468
     } ;
 
-static yyconst flex_int16_t yy_def[807] =
+static yyconst flex_int16_t yy_def[838] =
     {   0,
-      805,    1,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  805,  805,  805,  805,  805,
-      805,  805,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  805,  805,  805,  805,  805,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  805,
-      805,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
-
-      806,  806,  806,  806,    0,  805
+      836,    1,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  836,  836,  836,  836,
+      836,  836,  836,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  836,  836,  836,  836,  836,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  836,  836,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,  837,  837,  837,  837,  837,
+      837,  837,  837,  837,  837,    0,  836
     } ;
 
-static yyconst flex_int16_t yy_nxt[1008] =
+static yyconst flex_int16_t yy_nxt[1044] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   16,   16,   16,   16,   17,   18,   19,
@@ -722,112 +731,116 @@ static yyconst flex_int16_t yy_nxt[1008] =
        31,   31,   31,   31,   31,   31,   31,   31,   31,   44,
        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
        31,   31,   45,   49,   53,   51,   54,   54,   54,   54,
-       54,  197,  198,   55,   96,   50,   52,   56,   58,   72,
-       59,   59,   59,   59,   59,  732,   57,   65,   66,   67,
-
-       73,   97,  161,   75,   60,  218,   68,   76,  162,   74,
-       77,   78,   69,   70,   71,  142,   79,   80,   82,   81,
-      143,  206,   83,  733,  219,   85,  207,   86,   90,   60,
-       84,   87,  101,  275,   88,   98,   91,   89,   92,   93,
-       99,   94,  276,  164,  105,  109,  734,   95,  106,  102,
-      100,  165,  107,  735,  114,  204,  103,  108,  115,  110,
-      210,  116,  117,  205,  118,  122,  211,  119,  111,  123,
-      120,  333,  126,  135,  136,  127,  128,  334,  124,  129,
-      176,  177,  130,  131,  125,  178,  132,  133,  220,  137,
-      221,  134,  261,   54,   54,   54,   54,   54,  149,  149,
-
-      149,  149,  149,  241,  242,  278,  138,  148,  262,  263,
-      139,   58,  150,   59,   59,   59,   59,   59,  279,  140,
-      169,  533,  141,  170,  171,  534,  172,   60,  225,  737,
-      173,  226,  148,  289,  151,  151,  290,  150,  152,  152,
-      152,  152,  152,  185,  227,  235,  228,  390,  236,  186,
-      391,  738,   60,  187,  237,  252,  252,  420,  421,  253,
-      253,  253,  253,  253,  149,  149,  149,  149,  149,  255,
-      255,  435,  739,  256,  256,  256,  256,  256,  254,  152,
-      152,  152,  152,  152,  152,  152,  152,  152,  152,  539,
-      301,  449,  446,  348,  540,  435,  349,  363,  447,  740,
-
-      364,  741,  450,  254,  302,  365,  350,  303,  351,  366,
-      742,  367,  368,  489,  490,  369,  253,  253,  253,  253,
-      253,  253,  253,  253,  253,  253,  370,  370,  743,  744,
-      371,  371,  371,  371,  371,  256,  256,  256,  256,  256,
-      256,  256,  256,  256,  256,  371,  371,  371,  371,  371,
-      371,  371,  371,  371,  371,  495,  561,  567,  496,  584,
-      562,  600,  637,  745,  736,  568,  746,  747,  748,  749,
-      750,  751,  752,  753,  754,  755,  756,  638,  601,  757,
-      758,  585,  759,  584,  760,  600,  761,  637,  736,  762,
-      763,  764,  765,  766,  767,  768,  769,  770,  771,  772,
-
-      773,  638,  774,  775,  776,  777,  778,  779,  780,  781,
-      782,  783,  784,  785,  786,  787,  788,  789,  790,  791,
-      792,  793,  794,  795,  796,  797,  798,  799,  800,  801,
-      802,  803,  804,   64,  731,  730,  729,  728,  727,  726,
-      725,  724,  723,  722,  721,  720,  719,  718,  717,  716,
-      715,  714,  713,  712,  711,  710,  709,  708,  707,  706,
-      705,  704,  703,  702,  701,  700,  699,  698,  697,  696,
-      695,  694,  693,  692,  691,  690,  689,  688,  687,  686,
-      685,  684,  683,  682,  681,  680,  679,  678,  677,  676,
-      675,  674,  673,  672,  671,  670,  669,  668,  667,  666,
-
-      665,  664,  663,  662,  661,  660,  659,  658,  657,  656,
-      655,  654,  653,  652,  651,  650,  649,  648,  647,  646,
-      645,  644,  643,  642,  641,  640,  639,  636,  635,  634,
-      633,  632,  631,  630,  629,  628,  627,  626,  625,  624,
-      623,  622,  621,  620,  619,  618,  617,  616,  615,  614,
-      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
-      603,  602,  599,  598,  597,  596,  595,  594,  593,  592,
-      591,  590,  589,  588,  587,  586,  583,  582,  581,  580,
-      579,  578,  577,  576,  575,  574,  573,  572,  571,  570,
-      569,  566,  565,  564,  563,  560,  559,  558,  557,  556,
-
-      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
-      545,  544,  543,  542,  541,  538,  537,  536,  535,  532,
-      531,  530,  529,  528,  527,  526,  525,  524,  523,  522,
-      521,  520,  519,  518,  517,  516,  515,  514,  513,  512,
-      511,  510,  509,  508,  507,  506,  505,  504,  503,  502,
-      501,  500,  499,  498,  497,  494,  493,  492,  491,  488,
-      487,  486,  485,  484,  483,  482,  481,  480,  479,  478,
-      477,  476,  475,  474,  473,  472,  471,  470,  469,  468,
-      467,  466,  465,  464,  463,  462,  461,  460,  459,  458,
-      457,  456,  455,  454,  453,  452,  451,  448,  445,  444,
-
-      443,  442,  441,  440,  439,  438,  437,  436,  434,  433,
-      432,  431,  430,  429,  428,  427,  426,  425,  424,  423,
-      422,  419,  418,  417,  416,  415,  414,  413,  412,  411,
-      410,  409,  408,  407,  406,  405,  404,  403,  402,  401,
-      400,  399,  398,  397,  396,  395,  394,  393,  392,  389,
-      388,  387,  386,  385,  384,  383,  382,  381,  380,  379,
-      378,  377,  376,  375,  374,  373,  372,  362,  361,  360,
-      359,  358,  357,  356,  355,  354,  353,  352,  347,  346,
-      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
-      335,  332,  331,  330,  329,  328,  327,  326,  325,  324,
-
-      323,  322,  321,  320,  319,  318,  317,  316,  315,  314,
-      313,  312,  311,  310,  309,  308,  307,  306,  305,  304,
-      300,  299,  298,  297,  296,  295,  294,  293,  292,  291,
-      288,  287,  286,  285,  284,  283,  282,  281,  280,  277,
-      274,  273,  272,  271,  270,  269,  268,  267,  266,  265,
-      264,  260,  259,  258,  257,  251,  250,  249,  248,  247,
-      246,  245,  244,  243,  240,  239,  238,  234,  233,  232,
-      231,  230,  229,  224,  223,  222,  217,  216,  215,  214,
-      213,  212,  209,  208,  203,  202,  201,  200,  199,  196,
-      195,  194,  193,  192,  191,  190,  189,  188,  184,  183,
-
-      182,  181,  180,  179,  175,  174,  168,  167,  166,  163,
-      160,  159,  158,  157,  156,  155,  154,  153,  147,  146,
-      145,  144,  121,  113,  112,  104,   63,   62,   61,   48,
-       47,   46,  805,    3,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-
-      805,  805,  805,  805,  805,  805,  805
+       54,  198,  199,   55,   96,   50,   52,   56,   58,   72,
+       59,   59,   59,   59,   59,  736,   57,   65,   66,   67,
+
+       73,   97,  162,   75,   60,  219,   68,   76,  163,   74,
+       77,   78,   69,   70,   71,  143,   79,   80,   82,   81,
+      144,  207,   83,  737,  220,   85,  208,   86,   90,   60,
+       84,   87,  101,  277,   88,   98,   91,   89,   92,   93,
+       99,   94,  278,  165,  105,  109,  738,   95,  106,  102,
+      100,  166,  107,  739,  114,  205,  103,  108,  115,  110,
+      211,  116,  117,  206,  118,  122,  212,  119,  111,  123,
+      120,  186,  136,  137,  126,  740,  127,  187,  124,  128,
+      129,  188,  291,  130,  125,  292,  131,  132,  138,  538,
+      133,  134,  221,  539,  222,  135,   54,   54,   54,   54,
+
+       54,  177,  178,  544,  226,  139,  179,  227,  545,  140,
+      149,  150,  150,  150,  150,  150,  243,  244,  141,  280,
+      228,  142,  229,  438,   58,  151,   59,   59,   59,   59,
+       59,  393,  281,  335,  394,  149,  741,  152,  152,  336,
+       60,  153,  153,  153,  153,  153,  237,  438,  170,  238,
+      151,  171,  172,  450,  173,  239,  254,  254,  174,  451,
+      255,  255,  255,  255,  255,   60,  150,  150,  150,  150,
+      150,  257,  257,  423,  424,  258,  258,  258,  258,  258,
+      256,  153,  153,  153,  153,  153,  153,  153,  153,  153,
+      153,  263,  303,  453,  493,  494,  499,  351,  566,  500,
+
+      352,  742,  567,  606,  454,  256,  304,  264,  265,  305,
+      353,  366,  354,  572,  367,  743,  744,  745,  723,  368,
+      607,  573,  746,  369,  748,  370,  371,  606,  749,  372,
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+      373,  373,  723,  750,  374,  374,  374,  374,  374,  258,
+      258,  258,  258,  258,  258,  258,  258,  258,  258,  374,
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  589,
+      643,  751,  747,  644,  752,  753,  754,  755,  756,  757,
+      758,  759,  760,  645,  761,  762,  763,  764,  646,  765,
+      766,  590,  767,  589,  768,  643,  747,  769,  644,  770,
+
+      754,  771,  772,  773,  774,  775,  776,  645,  777,  778,
+      779,  780,  646,  781,  782,  783,  784,  785,  786,  787,
+      788,  789,  790,  791,  792,  793,  794,  795,  796,  797,
+      798,  799,  800,  801,  802,  803,  804,  805,  806,  783,
+      807,  808,  809,  810,  811,  812,  813,  814,  815,  816,
+      817,  818,  819,  820,  821,  822,  823,  824,  825,  826,
+      827,  828,  829,  830,  831,  832,  833,  834,  835,   64,
+      735,  734,  733,  732,  731,  730,  729,  728,  727,  726,
+      725,  724,  722,  721,  720,  719,  718,  717,  716,  715,
+      714,  713,  712,  711,  710,  709,  708,  707,  706,  705,
+
+      704,  703,  702,  701,  700,  699,  698,  697,  696,  695,
+      694,  693,  692,  691,  690,  689,  688,  687,  686,  685,
+      684,  683,  682,  681,  680,  679,  678,  677,  676,  675,
+      674,  673,  672,  671,  670,  669,  668,  667,  666,  665,
+      664,  663,  662,  661,  660,  659,  658,  657,  656,  655,
+      654,  653,  652,  651,  650,  649,  648,  647,  642,  641,
+      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
+      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
+      620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
+      610,  609,  608,  605,  604,  603,  602,  601,  600,  599,
+
+      598,  597,  596,  595,  594,  593,  592,  591,  588,  587,
+      586,  585,  584,  583,  582,  581,  580,  579,  578,  577,
+      576,  575,  574,  571,  570,  569,  568,  565,  564,  563,
+      562,  561,  560,  559,  558,  557,  556,  555,  554,  553,
+      552,  551,  550,  549,  548,  547,  546,  543,  542,  541,
+      540,  537,  536,  535,  534,  533,  532,  531,  530,  529,
+      528,  527,  526,  525,  524,  523,  522,  521,  520,  519,
+      518,  517,  516,  515,  514,  513,  512,  511,  510,  509,
+      508,  507,  506,  505,  504,  503,  502,  501,  498,  497,
+      496,  495,  492,  491,  490,  489,  488,  487,  486,  485,
+
+      484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
+      474,  473,  472,  471,  470,  469,  468,  467,  466,  465,
+      464,  463,  462,  461,  460,  459,  458,  457,  456,  455,
+      452,  449,  448,  447,  446,  445,  444,  443,  442,  441,
+      440,  439,  437,  436,  435,  434,  433,  432,  431,  430,
+      429,  428,  427,  426,  425,  422,  421,  420,  419,  418,
+      417,  416,  415,  414,  413,  412,  411,  410,  409,  408,
+      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
+      397,  396,  395,  392,  391,  390,  389,  388,  387,  386,
+      385,  384,  383,  382,  381,  380,  379,  378,  377,  376,
+
+      375,  365,  364,  363,  362,  361,  360,  359,  358,  357,
+      356,  355,  350,  349,  348,  347,  346,  345,  344,  343,
+      342,  341,  340,  339,  338,  337,  334,  333,  332,  331,
+      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
+      320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
+      310,  309,  308,  307,  306,  302,  301,  300,  299,  298,
+      297,  296,  295,  294,  293,  290,  289,  288,  287,  286,
+      285,  284,  283,  282,  279,  276,  275,  274,  273,  272,
+      271,  270,  269,  268,  267,  266,  262,  261,  260,  259,
+      253,  252,  251,  250,  249,  248,  247,  246,  245,  242,
+
+      241,  240,  236,  235,  234,  233,  232,  231,  230,  225,
+      224,  223,  218,  217,  216,  215,  214,  213,  210,  209,
+      204,  203,  202,  201,  200,  197,  196,  195,  194,  193,
+      192,  191,  190,  189,  185,  184,  183,  182,  181,  180,
+      176,  175,  169,  168,  167,  164,  161,  160,  159,  158,
+      157,  156,  155,  154,  148,  147,  146,  145,  121,  113,
+      112,  104,   63,   62,   61,   48,   47,   46,  836,    3,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836
     } ;
 
-static yyconst flex_int16_t yy_chk[1008] =
+static yyconst flex_int16_t yy_chk[1044] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -838,108 +851,112 @@ static yyconst flex_int16_t yy_chk[1008] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,   12,   14,   13,   14,   14,   14,   14,
        14,   99,   99,   15,   28,   12,   13,   15,   16,   23,
-       16,   16,   16,   16,   16,  710,   15,   22,   22,   22,
+       16,   16,   16,   16,   16,  707,   15,   22,   22,   22,
 
        23,   28,   73,   24,   16,  118,   22,   24,   73,   23,
        24,   24,   22,   22,   22,   42,   24,   24,   25,   24,
-       42,  107,   25,  711,  118,   26,  107,   26,   27,   16,
-       25,   26,   30,  169,   26,   29,   27,   26,   27,   27,
-       29,   27,  169,   75,   33,   34,  713,   27,   33,   30,
-       29,   75,   33,  715,   37,  106,   30,   33,   37,   34,
+       42,  107,   25,  710,  118,   26,  107,   26,   27,   16,
+       25,   26,   30,  170,   26,   29,   27,   26,   27,   27,
+       29,   27,  170,   75,   33,   34,  711,   27,   33,   30,
+       29,   75,   33,  712,   37,  106,   30,   33,   37,   34,
       110,   37,   37,  106,   37,   39,  110,   37,   34,   39,
-       37,  225,   40,   41,   41,   40,   40,  225,   39,   40,
-       82,   82,   40,   40,   39,   82,   40,   40,  119,   41,
-      119,   40,  157,   54,   54,   54,   54,   54,   58,   58,
-
-       58,   58,   58,  134,  134,  171,   41,   54,  157,  157,
-       41,   59,   58,   59,   59,   59,   59,   59,  171,   41,
-       79,  453,   41,   79,   79,  453,   79,   59,  123,  717,
-       79,  123,   54,  182,   60,   60,  182,   58,   60,   60,
-       60,   60,   60,   89,  123,  130,  123,  279,  130,   89,
-      279,  718,   59,   89,  130,  148,  148,  317,  317,  148,
-      148,  148,  148,  148,  149,  149,  149,  149,  149,  150,
-      150,  331,  719,  150,  150,  150,  150,  150,  149,  151,
-      151,  151,  151,  151,  152,  152,  152,  152,  152,  459,
-      195,  348,  345,  239,  459,  331,  239,  251,  345,  721,
-
-      251,  723,  348,  149,  195,  251,  239,  195,  239,  251,
-      724,  251,  251,  398,  398,  251,  252,  252,  252,  252,
-      252,  253,  253,  253,  253,  253,  254,  254,  726,  727,
+       37,   89,   41,   41,   40,  713,   40,   89,   39,   40,
+       40,   89,  183,   40,   39,  183,   40,   40,   41,  457,
+       40,   40,  119,  457,  119,   40,   54,   54,   54,   54,
+
+       54,   82,   82,  463,  123,   41,   82,  123,  463,   41,
+       54,   58,   58,   58,   58,   58,  135,  135,   41,  172,
+      123,   41,  123,  333,   59,   58,   59,   59,   59,   59,
+       59,  281,  172,  226,  281,   54,  714,   60,   60,  226,
+       59,   60,   60,   60,   60,   60,  131,  333,   79,  131,
+       58,   79,   79,  348,   79,  131,  149,  149,   79,  348,
+      149,  149,  149,  149,  149,   59,  150,  150,  150,  150,
+      150,  151,  151,  319,  319,  151,  151,  151,  151,  151,
+      150,  152,  152,  152,  152,  152,  153,  153,  153,  153,
+      153,  158,  196,  351,  401,  401,  410,  241,  493,  410,
+
+      241,  715,  493,  544,  351,  150,  196,  158,  158,  196,
+      241,  253,  241,  499,  253,  716,  717,  718,  688,  253,
+      544,  499,  720,  253,  723,  253,  253,  544,  724,  253,
       254,  254,  254,  254,  254,  255,  255,  255,  255,  255,
-      256,  256,  256,  256,  256,  370,  370,  370,  370,  370,
-      371,  371,  371,  371,  371,  407,  489,  495,  407,  518,
-      489,  539,  583,  728,  716,  495,  729,  730,  733,  735,
-      736,  738,  739,  740,  741,  742,  743,  583,  539,  744,
-      745,  518,  746,  518,  747,  539,  748,  583,  716,  749,
-      750,  751,  752,  753,  754,  755,  756,  757,  758,  759,
-
-      761,  583,  762,  764,  765,  767,  769,  770,  771,  772,
-      775,  776,  777,  778,  779,  780,  781,  782,  784,  785,
-      786,  787,  788,  790,  791,  792,  793,  794,  795,  799,
-      800,  801,  802,  806,  708,  706,  705,  704,  703,  702,
-      701,  700,  699,  698,  695,  693,  692,  691,  689,  688,
-      687,  685,  684,  682,  679,  678,  677,  676,  675,  674,
-      672,  670,  669,  668,  666,  665,  664,  663,  662,  661,
-      659,  658,  657,  656,  654,  653,  652,  651,  650,  649,
-      647,  646,  645,  642,  641,  640,  639,  638,  637,  636,
-      633,  632,  628,  627,  624,  623,  622,  621,  619,  616,
-
-      615,  614,  613,  611,  610,  609,  608,  607,  606,  605,
-      604,  603,  602,  601,  600,  599,  598,  597,  595,  594,
-      593,  590,  589,  587,  586,  585,  584,  582,  581,  580,
-      579,  578,  577,  576,  575,  574,  573,  572,  571,  570,
-      569,  568,  567,  566,  564,  563,  562,  560,  559,  558,
-      557,  556,  553,  552,  551,  550,  549,  548,  545,  544,
-      541,  540,  538,  537,  536,  535,  534,  533,  532,  531,
-      528,  525,  524,  522,  520,  519,  517,  515,  513,  512,
-      511,  509,  507,  506,  505,  502,  501,  500,  499,  498,
-      496,  494,  493,  492,  490,  486,  485,  484,  483,  482,
-
-      481,  480,  479,  478,  477,  475,  474,  473,  471,  470,
-      467,  466,  464,  462,  460,  457,  456,  455,  454,  452,
-      451,  450,  449,  448,  446,  445,  444,  443,  441,  440,
-      439,  438,  437,  436,  435,  434,  433,  431,  429,  428,
-      427,  424,  423,  422,  421,  420,  418,  417,  416,  414,
-      413,  411,  410,  409,  408,  406,  403,  402,  399,  397,
-      396,  395,  394,  393,  392,  391,  390,  389,  388,  387,
-      386,  385,  384,  383,  382,  381,  379,  377,  376,  375,
-      374,  373,  368,  367,  365,  362,  361,  360,  359,  358,
-      357,  354,  353,  352,  351,  350,  349,  346,  344,  343,
-
-      340,  339,  338,  337,  336,  335,  334,  333,  330,  329,
-      328,  327,  326,  325,  324,  323,  322,  321,  320,  319,
-      318,  316,  313,  312,  311,  310,  309,  308,  307,  306,
-      303,  302,  301,  300,  299,  297,  296,  294,  292,  291,
-      290,  289,  288,  286,  285,  284,  283,  282,  280,  278,
-      277,  276,  275,  274,  273,  271,  269,  268,  267,  266,
-      265,  263,  262,  261,  260,  259,  257,  250,  249,  248,
-      247,  246,  245,  244,  243,  242,  241,  240,  238,  237,
-      236,  235,  234,  233,  232,  231,  230,  229,  228,  227,
-      226,  224,  223,  222,  221,  220,  219,  218,  217,  216,
-
-      215,  214,  213,  212,  211,  210,  209,  208,  207,  206,
-      205,  204,  203,  202,  201,  200,  199,  198,  197,  196,
-      194,  193,  191,  190,  189,  188,  187,  185,  184,  183,
-      181,  180,  179,  178,  177,  176,  175,  173,  172,  170,
-      168,  167,  166,  165,  164,  163,  162,  161,  160,  159,
-      158,  156,  155,  154,  153,  145,  144,  143,  142,  141,
-      140,  139,  138,  137,  133,  132,  131,  129,  128,  127,
-      126,  125,  124,  122,  121,  120,  116,  115,  114,  113,
-      112,  111,  109,  108,  105,  104,  103,  101,  100,   98,
-       97,   96,   95,   94,   93,   92,   91,   90,   88,   87,
-
-       86,   85,   84,   83,   81,   80,   78,   77,   76,   74,
-       72,   71,   70,   69,   68,   67,   66,   65,   53,   45,
-       44,   43,   38,   36,   35,   32,   21,   20,   19,   11,
-        9,    7,    3,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
-
-      805,  805,  805,  805,  805,  805,  805
+      256,  256,  688,  725,  256,  256,  256,  256,  256,  257,
+      257,  257,  257,  257,  258,  258,  258,  258,  258,  373,
+      373,  373,  373,  373,  374,  374,  374,  374,  374,  522,
+      588,  727,  721,  588,  728,  730,  731,  732,  733,  734,
+      736,  738,  739,  588,  741,  742,  743,  744,  588,  745,
+      747,  522,  748,  522,  750,  588,  721,  751,  588,  753,
+
+      731,  754,  756,  757,  758,  759,  760,  588,  761,  762,
+      763,  764,  588,  765,  766,  767,  768,  769,  770,  771,
+      772,  773,  774,  775,  776,  777,  778,  779,  780,  782,
+      783,  784,  785,  786,  788,  789,  791,  793,  794,  767,
+      795,  796,  797,  798,  802,  803,  804,  805,  806,  807,
+      808,  810,  811,  813,  814,  815,  816,  817,  818,  820,
+      821,  822,  823,  824,  826,  830,  831,  832,  833,  837,
+      705,  704,  703,  701,  700,  699,  697,  696,  694,  693,
+      690,  689,  687,  686,  685,  684,  683,  681,  679,  678,
+      677,  675,  674,  673,  672,  671,  670,  668,  667,  666,
+
+      665,  663,  662,  661,  660,  659,  658,  656,  655,  654,
+      651,  650,  649,  648,  647,  646,  645,  644,  643,  642,
+      639,  638,  634,  633,  630,  629,  628,  627,  625,  622,
+      621,  620,  619,  617,  616,  615,  614,  613,  612,  611,
+      610,  609,  608,  607,  606,  605,  604,  603,  601,  600,
+      599,  596,  595,  594,  592,  591,  590,  589,  587,  586,
+      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
+      575,  574,  573,  572,  571,  569,  568,  567,  565,  564,
+      563,  562,  561,  558,  557,  556,  555,  554,  553,  550,
+      549,  546,  545,  543,  542,  541,  540,  539,  538,  537,
+
+      536,  533,  530,  529,  528,  526,  524,  523,  521,  519,
+      517,  516,  515,  513,  511,  510,  509,  506,  505,  504,
+      503,  502,  500,  498,  497,  496,  494,  490,  489,  488,
+      487,  486,  485,  484,  483,  482,  481,  479,  478,  477,
+      475,  474,  471,  470,  468,  466,  464,  461,  460,  459,
+      458,  456,  455,  454,  453,  452,  450,  449,  448,  447,
+      446,  444,  443,  442,  441,  440,  439,  438,  437,  436,
+      434,  432,  431,  430,  427,  426,  425,  424,  423,  421,
+      420,  419,  417,  416,  414,  413,  412,  411,  409,  406,
+      405,  402,  400,  399,  398,  397,  396,  395,  394,  393,
+
+      392,  391,  390,  389,  388,  387,  386,  385,  384,  382,
+      380,  379,  378,  377,  376,  371,  370,  368,  365,  364,
+      363,  362,  361,  360,  357,  356,  355,  354,  353,  352,
+      349,  347,  346,  343,  342,  341,  340,  339,  338,  337,
+      336,  335,  332,  331,  330,  329,  328,  327,  326,  325,
+      324,  323,  322,  321,  320,  318,  315,  314,  313,  312,
+      311,  310,  309,  308,  305,  304,  303,  302,  301,  299,
+      298,  296,  294,  293,  292,  291,  290,  288,  287,  286,
+      285,  284,  282,  280,  279,  278,  277,  276,  275,  273,
+      271,  270,  269,  268,  267,  265,  264,  263,  262,  261,
+
+      259,  252,  251,  250,  249,  248,  247,  246,  245,  244,
+      243,  242,  240,  239,  238,  237,  236,  235,  234,  233,
+      232,  231,  230,  229,  228,  227,  225,  224,  223,  222,
+      221,  220,  219,  218,  217,  216,  215,  214,  213,  212,
+      211,  210,  209,  208,  207,  206,  205,  204,  203,  202,
+      201,  200,  199,  198,  197,  195,  194,  192,  191,  190,
+      189,  188,  186,  185,  184,  182,  181,  180,  179,  178,
+      177,  176,  174,  173,  171,  169,  168,  167,  166,  165,
+      164,  163,  162,  161,  160,  159,  157,  156,  155,  154,
+      146,  145,  144,  143,  142,  141,  140,  139,  138,  134,
+
+      133,  132,  130,  129,  128,  127,  126,  125,  124,  122,
+      121,  120,  116,  115,  114,  113,  112,  111,  109,  108,
+      105,  104,  103,  101,  100,   98,   97,   96,   95,   94,
+       93,   92,   91,   90,   88,   87,   86,   85,   84,   83,
+       81,   80,   78,   77,   76,   74,   72,   71,   70,   69,
+       68,   67,   66,   65,   53,   45,   44,   43,   38,   36,
+       35,   32,   21,   20,   19,   11,    9,    7,    3,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836,  836,  836,  836,  836,  836,  836,  836,
+      836,  836,  836
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -996,7 +1013,7 @@ void   skipline(void);
 #define YY_NO_UNISTD_H
 #endif
 
-#line 1000 "Gmsh.yy.cpp"
+#line 1017 "Gmsh.yy.cpp"
 
 #define INITIAL 0
 
@@ -1181,7 +1198,7 @@ YY_DECL
 #line 49 "Gmsh.l"
 
 
-#line 1185 "Gmsh.yy.cpp"
+#line 1202 "Gmsh.yy.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1234,13 +1251,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 806 )
+				if ( yy_current_state >= 837 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 934 );
+		while ( yy_base[yy_current_state] != 970 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1883,250 +1900,265 @@ return tPlugin;
 case 124:
 YY_RULE_SETUP
 #line 190 "Gmsh.l"
-return tQuadTriDbl;
+return tQuadTriAddVerts;
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 191 "Gmsh.l"
-return tQuadTriSngl;
+return tQuadTriNoNewVerts;
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 193 "Gmsh.l"
-return tRecombine;
+return tQuadTriDbl;
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 194 "Gmsh.l"
-return tRecombLaterals;
+return tQuadTriSngl;
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 195 "Gmsh.l"
-return tRecursive;
+#line 196 "Gmsh.l"
+return tRecombine;
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 196 "Gmsh.l"
-return tRotate;
+#line 197 "Gmsh.l"
+return tRecombLaterals;
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 197 "Gmsh.l"
-return tRuled;
+#line 198 "Gmsh.l"
+return tRecursive;
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 198 "Gmsh.l"
-return tRand;
+#line 199 "Gmsh.l"
+return tRotate;
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 199 "Gmsh.l"
-return tRefineMesh;
+#line 200 "Gmsh.l"
+return tRuled;
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 200 "Gmsh.l"
-return tReturn;
+#line 201 "Gmsh.l"
+return tRand;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 201 "Gmsh.l"
-return tReverse;
+#line 202 "Gmsh.l"
+return tRefineMesh;
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 203 "Gmsh.l"
-return tSmoother;
+return tReturn;
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 204 "Gmsh.l"
-return tSetOrder;
+return tReverse;
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 205 "Gmsh.l"
-return tSqrt;
+#line 206 "Gmsh.l"
+return tScaleLast;
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 206 "Gmsh.l"
-return tSin;
+#line 207 "Gmsh.l"
+return tSmoother;
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 207 "Gmsh.l"
-return tSinh;
+#line 208 "Gmsh.l"
+return tSetOrder;
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 208 "Gmsh.l"
-return tSphere;
+#line 209 "Gmsh.l"
+return tSqrt;
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 209 "Gmsh.l"
-return tSpline;
+#line 210 "Gmsh.l"
+return tSin;
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 210 "Gmsh.l"
-return tSplit;
+#line 211 "Gmsh.l"
+return tSinh;
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 211 "Gmsh.l"
-return tSurface;
+#line 212 "Gmsh.l"
+return tSphere;
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 212 "Gmsh.l"
-return tStr;
+#line 213 "Gmsh.l"
+return tSpline;
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 213 "Gmsh.l"
-return tSprintf;
+#line 214 "Gmsh.l"
+return tSplit;
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 214 "Gmsh.l"
-return tStrCat;
+#line 215 "Gmsh.l"
+return tSurface;
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 215 "Gmsh.l"
-return tStrReplace;
+#line 216 "Gmsh.l"
+return tStr;
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 216 "Gmsh.l"
-return tStrPrefix;
+#line 217 "Gmsh.l"
+return tSprintf;
 	YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 217 "Gmsh.l"
-return tStrRelative;
+#line 218 "Gmsh.l"
+return tStrCat;
 	YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 218 "Gmsh.l"
-return tStrFind;
+#line 219 "Gmsh.l"
+return tStrReplace;
 	YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 219 "Gmsh.l"
-return tStrCmp;
+#line 220 "Gmsh.l"
+return tStrPrefix;
 	YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 220 "Gmsh.l"
-return tShow;
+#line 221 "Gmsh.l"
+return tStrRelative;
 	YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 221 "Gmsh.l"
-return tSymmetry;
+#line 222 "Gmsh.l"
+return tStrFind;
 	YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 222 "Gmsh.l"
-return tSyncModel;
+#line 223 "Gmsh.l"
+return tStrCmp;
 	YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 224 "Gmsh.l"
-return tText2D;
+return tShow;
 	YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 225 "Gmsh.l"
-return tText3D;
+return tSymmetry;
 	YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 226 "Gmsh.l"
-return tTextAttributes;
+return tSyncModel;
 	YY_BREAK
 case 158:
 YY_RULE_SETUP
-#line 227 "Gmsh.l"
-return tTime;
+#line 228 "Gmsh.l"
+return tText2D;
 	YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 228 "Gmsh.l"
-return tTransfinite;
+#line 229 "Gmsh.l"
+return tText3D;
 	YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 229 "Gmsh.l"
-return tTransfQuadTri;
+#line 230 "Gmsh.l"
+return tTextAttributes;
 	YY_BREAK
 case 161:
 YY_RULE_SETUP
-#line 230 "Gmsh.l"
-return tTranslate;
+#line 231 "Gmsh.l"
+return tTime;
 	YY_BREAK
 case 162:
 YY_RULE_SETUP
-#line 231 "Gmsh.l"
-return tTanh;
+#line 232 "Gmsh.l"
+return tTransfinite;
 	YY_BREAK
 case 163:
 YY_RULE_SETUP
-#line 232 "Gmsh.l"
-return tTan;
+#line 233 "Gmsh.l"
+return tTransfQuadTri;
 	YY_BREAK
 case 164:
 YY_RULE_SETUP
-#line 233 "Gmsh.l"
-return tToday;
+#line 234 "Gmsh.l"
+return tTranslate;
 	YY_BREAK
 case 165:
 YY_RULE_SETUP
 #line 235 "Gmsh.l"
-return tUndefineConstant;
+return tTanh;
 	YY_BREAK
 case 166:
 YY_RULE_SETUP
 #line 236 "Gmsh.l"
-return tUsing;
+return tTan;
 	YY_BREAK
 case 167:
 YY_RULE_SETUP
-#line 238 "Gmsh.l"
-return tVolume;
+#line 237 "Gmsh.l"
+return tToday;
 	YY_BREAK
 case 168:
-#line 241 "Gmsh.l"
+YY_RULE_SETUP
+#line 239 "Gmsh.l"
+return tUndefineConstant;
+	YY_BREAK
 case 169:
-#line 242 "Gmsh.l"
+YY_RULE_SETUP
+#line 240 "Gmsh.l"
+return tUsing;
+	YY_BREAK
 case 170:
-#line 243 "Gmsh.l"
+YY_RULE_SETUP
+#line 242 "Gmsh.l"
+return tVolume;
+	YY_BREAK
 case 171:
+#line 245 "Gmsh.l"
+case 172:
+#line 246 "Gmsh.l"
+case 173:
+#line 247 "Gmsh.l"
+case 174:
 YY_RULE_SETUP
-#line 243 "Gmsh.l"
+#line 247 "Gmsh.l"
 { gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; }
 	YY_BREAK
-case 172:
+case 175:
 YY_RULE_SETUP
-#line 245 "Gmsh.l"
+#line 249 "Gmsh.l"
 { gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; }
 	YY_BREAK
-case 173:
+case 176:
 YY_RULE_SETUP
-#line 247 "Gmsh.l"
+#line 251 "Gmsh.l"
 return gmsh_yytext[0];
 	YY_BREAK
-case 174:
+case 177:
 YY_RULE_SETUP
-#line 249 "Gmsh.l"
+#line 253 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 2130 "Gmsh.yy.cpp"
+#line 2162 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2418,7 +2450,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 806 )
+			if ( yy_current_state >= 837 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2446,11 +2478,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 806 )
+		if ( yy_current_state >= 837 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 805);
+	yy_is_jam = (yy_current_state == 836);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3123,7 +3155,7 @@ void gmsh_yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 249 "Gmsh.l"
+#line 253 "Gmsh.l"
 
 
 
diff --git a/benchmarks/extrude_quadtri/3sidedruled.stl.gz b/benchmarks/extrude_quadtri/3sidedruled.stl.gz
new file mode 100644
index 0000000000000000000000000000000000000000..421c8ef4715ded22274283e07a305838245a0178
GIT binary patch
literal 113230
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%0D>y?9CuD@kAT?>p2-4<6BsbO|v
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

literal 0
HcmV?d00001

diff --git a/benchmarks/extrude_quadtri/READMEQUADTRI.txt b/benchmarks/extrude_quadtri/READMEQUADTRI.txt
new file mode 100644
index 0000000000..6298e81b3f
--- /dev/null
+++ b/benchmarks/extrude_quadtri/READMEQUADTRI.txt
@@ -0,0 +1,253 @@
+INFORMATION FOR QUADTRI PATCH VERSION 2.0 (August 23, 2013) 
+
+All new code is written by Trevor S. Strickler 
+<trevor.strickler@gmail.com>
+
+Trevor S. Strickler hereby transfers copyright of QuadTri files to 
+Christophe Geuzaine and J.-F. Remacle with the understanding that 
+his contribution shall be cited appropriately.
+
+All code reused from Gmsh is Copyright (C) 1997-2013 C. Geuzaine, 
+J.-F. Remacle 
+
+Gmsh is available at: www.geuz.org/gmsh
+
+See licensing information below.
+
+
+CONTENTS:
+
+1. Copyright and Licensing
+
+2. Introduction
+
+3. How QuadTri works.
+   a. For Transfinite Volumes.
+   b. For Structured Extrusions.
+
+4. Invoking QuadTri.
+   a. For Transfinite Volumes.
+   b. For Structured Extrusions.
+
+5. How to modify Gmsh to use QuadTri.
+
+
+COPYRIGHT AND LICENSING
+-----------------------
+
+QuadTri was written by Trevor S. Strickler 
+<trevor.strickler@gmail.com>. It is written as an addition to the
+meshing code Gmsh, which is copyrighted by C. Geuzaine and J.-F. 
+Remacle and distributed under the GNU Public License version 2 with 
+an exception. QuadTri is released under the GNU Public License 
+Version 2 with the SAME exceptions as for the current release of Gmsh 
+as of August 23, 2013.  See LICENSE.txt for more information.
+
+Trevor S. Strickler hereby transfers copyright of QuadTri files to 
+Christophe Geuzaine and J.-F. Remacle with the understanding that 
+his contribution shall be cited appropriately.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License, Version 2,
+as published by the Free Software Foundation, or (at your option) 
+any later version, with or without the exception given in the 
+LICENSE.txt file supplied with this code and with Gmsh.
+
+This program 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.
+
+
+INTRODUCTION
+----------------------------
+
+The Quadrangle-to-Triangle (QuadToTri) interface allows the user to connect 
+structured regions containing quadrangle-bounded mesh elements (hexahedra, 
+prisms, or pyramids) to regions that contain tetrahedra. The QuadToTri 
+feature may be applied to both structured extrusions and tranfinite regions. 
+
+
+HOW QUADTRI WORKS
+-----------------
+
+The QuadToTri algorithms create a conformal interface between structured 
+regions that contain quadrangle-bounded mesh elements and tetrahedral regions
+by subdividing elements in the quadrangle-containing region. First, on the 
+boundaries that the quad-containing region shares with a tetrahedral region, 
+all 2D quadrangle elements are divided into triangles. Then, the 3D volume 
+elements in the quad-containing region that touch these triangles are 
+subdivided into pyramids, tetrahedra, or prisms as necessary for the mesh to 
+remain conformal.
+
+a. FOR TRANSFINITE VOLUMES:  
+
+The QuadTri algorithm for transfinite volumes is very simple. 
+A transfinite region with any combination of recombined and 
+un-recombined transfinite boundary surfaces is valid when meshed with 
+Transfinite QuadTri. Any mesh elements in a QuadToTri transfinite region 
+that are adjacent to unrecombined, 2D boundary surface elements will 
+be divided with a body-centered internal vertex, conformal to the 
+surface mesh. This method works for both 5- and 6-sided transfinite
+regions. 
+
+
+b. STRUCTURED EXTRUSIONS: 
+
+QuadToTri may also be applied to structured extrusions.
+The QuadToTri algorithms for structured extrusions ( from here on referred to 
+as 'QuadTriExtruded') work for any structured, extruded region. Source surfaces
+may be structured or unstructured; the sources may also be all quadrangles, 
+all triangles, or mixed. Recently, the ability was added to apply QuadToTri to 
+a region extruded in a toroidal loop in which the 'top' surface coincides with
+the source. The user also has the option to keep free lateral boundaries 
+recombined (where possible) and only divide the top surface into triangles.  
+
+There are two variations of QuadToTri for structured extrusions: the
+'Add Vertices' method (method 1), and the 'No New Vertices' method (method 2).
+
+Method 1 (No New Vertices): In 2D, this method subdivides the quadrangles
+on the following boundary surfaces of an extruded, structured region: the top
+surface of the extruded region, the boundaries that the region shares with
+tetrahedral regions, and free lateral boundaries if the user has selected to
+do so. In 3D, the method attempts to subdivide 3D elements in the region that 
+touch the boundary surface triangles WITHOUT adding any additional vertices. 
+This subdivision is accomplished by creating pyramids, prisms, or tetrahedra 
+such that the mesh remains valid. In some cases, due to certain lateral 
+boundary conditions, it may not be possible make a valid element subdivision 
+without adding additional vertices. In this case, an internal vertex is 
+created at the vertex-based centroid of the element. The element is then 
+divided using that vertex. When an internal vertex is created in the 'No New 
+Vertices' method, the user is alerted by a warning message sent for each 
+instance--however, the mesh will still be valid and conformal.
+
+Method 2: (Add Vertices) In 2D, as in method 1, this method subdivides the
+quadrangles on the following boundary surfaces of an extruded, structured 
+region: the top surface of the extruded region, the boundaries the region 
+shares with tetrahedral regions, and free lateral boundaries if the user has 
+selected to do so.  In 3D, body-centered vertices are added at the centroids 
+of any 3D elements in the region that are adjacent to the subdivided 2D 
+boundaries. The elements are then subdivided using the internal vertex into 
+pyramids, prisms, or tetrahedra such that the mesh remains valid.
+
+There are advantages and disadvantages to each of these two methods:
+
+The 'No New Vertices' method creates the least number of mesh elements,
+but the quality of the elements is sometimes slightly worse than for the 
+'Add Vertices' method when hexahedra are being divided.  Also, in rare 
+instances, the 'No New Vertices' method may be unable to divide an element 
+without adding a body-centered vertex; however, this is rare and *should* 
+only be possible when the source surface has 2D elements with all vertices 
+on a boundary AND if there are both recombined and unrecombined lateral 
+surfaces in the extrusion--but even then it is unlikely. Even if a new 
+vertex is created by the 'No New Vertices' method, the mesh will still be 
+conformal--but some users may not want an irregular vertex pattern in their
+structured extrusions.
+
+
+Recommendations: For considerations of element quality, use 'No New Vertices'
+when only prisms are being divided (ie, when the extrusion  source is a 
+surface with all triangles). Use 'Add New Vertices' whenever hexahedra are 
+involved, or when the user does not care if new vertices are added to the 
+mesh.
+
+If the user has a quad-containing, structured mesh to interface to 
+a tetrahedral region but would also like the structured mesh to remain 
+unchanged, interface regions may be built around the primary structured 
+region and those regions may have QuadToTri applied in order to create the
+interface.
+
+
+As a last note on QuadTriExtruded: The algorithms are 'smart' about the
+boundary requirements of neighboring regions and will resolve lateral surface 
+mesh conflicts where ever necessary. The default behavior is to divide 
+free lateral boundaries into triangles when possible. Alternatively, the user
+may choose to have as many laterals as possible remain as quadrangles. 
+However, regardless of user preference, the algorithms will do what they 
+have to do to maintain conformal meshes on the laterals. In other words, do 
+not worry about conformality with lateral neighbors--QuadTriExtruded will not 
+divide a lateral surface that must remain meshed as quadrangles, and it will 
+not recombine a lateral surface that must remain as triangles. However, NOTE:
+the 'top' surface of a structured region is always divided by 
+QuadTriExtruded. Also, laterals between two QuadTriExtruded regions are 
+always recombined as quadrangles.
+
+
+
+INVOKING QUADTRI 
+----------------
+
+a. FOR TRANSFINITE VOLUMES:
+
+The transfinite QuadTri algorithm may be applied by using the following
+command:
+
+TransfQuadTri { expression-list } | "*";
+
+Where 'expression-list' is a list of volume numbers to apply QuadTri to.
+"*" is used to apply TransfQuadTri to all existing volumes.  A transfinite
+volume with any combination of recombined and un-recombined transfinite boundary
+surfaces is valid when meshed with TransfQuadTri. When applied to 
+non-Transfinite volumes, TransfQuadTri has NO effect on those volumes.
+
+
+
+b. FOR STRUCTURED EXTRUSIONS:
+
+QuadTri for structured extrusions (QuadTriExtruded) is invoked by using 
+the appropriate keywords in the 'extrude-list layers' part of an 'Extrude' 
+command for structured meshes. (see Gmsh manual for description of the 
+'Extrude' command for structured meshes). Note that the QuadTriExtruded 
+commands only have an effect for the extrusion of a surface to create a 
+region, AND only if the 'Recombine' option is used (there is no point 
+in applying QuadTriExtruded to a fully subdivided region). 
+
+The keywords (note that only the first letter must be capitalized):
+
+     QuadTriNoNewVerts; (for 'No New Vertices' method)
+     QuadTriAddVerts;  (for 'Add Vertices' method)
+
+Permissible variants (shown here as regular expressions (regexp) ):
+
+     Quad[tT]ri[nN]o[nN]ew[vV]erts;
+     Quad[tT]ri[aA]dd[vV]erts;
+
+Optionally, for each of the two QuadTriExtruded methods, the user may choose
+to keep free lateral surfaces of the region recombined (where possible) by
+using:
+
+     QuadTriNoNewVerts Recomblaterals; 
+     QuadTriAddVerts Recomblaterals;
+
+
+Examples of Usage:
+
+'No New Vertices' method, recombine laterals:
+
+     Extrude {0.0, 0.0, 1.0} {Surface {surf_num}; Layers {10}; Recombine; 
+                              QuadTriNoNewVerts Recomblaterals; };
+
+'Add Vertices' method not using the recombine laterals option:
+
+     Extrude {0.0, 0.0, 1.0} {Surface {surf_num}; Layers {10}; QuadTriAddVerts;
+                              Recombine; };
+ 
+Let it be repeated: If the QuadTriExtruded region shares a lateral with another 
+region, QuadTriExtruded will only divide (or not divide) that surface in a way 
+that does not create conflicts between the regions, regardless of 
+whether Recomblaterals was used or not. In other words, do not worry
+about conformality with lateral neighbors--QuadTriExtruded will not divide 
+a lateral surface that must remain quadrangles, nor will it recombine
+a lateral surface that must remain triangles.
+
+
+HOW TO MODIFY GMSH TO USE QUADTRI
+---------------------------------------
+
+One may simply copy the files distributed with the QuadTri patch 
+directly into the appropriate Gmsh directories (replacing any old copies with 
+the patched versions) and the changes to the source will be complete. The 
+user can then compile the source as for the regular Gmsh version. Be careful
+not to get the /Mesh/CMakeLists.txt file confused with the CMakeLists.txt 
+file in other directories!!!!	
+
diff --git a/benchmarks/extrude_quadtri/TransfiniteQuadTriExample.geo b/benchmarks/extrude_quadtri/TransfiniteQuadTriExample.geo
new file mode 100644
index 0000000000..74f1dff5d9
--- /dev/null
+++ b/benchmarks/extrude_quadtri/TransfiniteQuadTriExample.geo
@@ -0,0 +1,162 @@
+//set options
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Mesh.RecombinationAlgorithm = 0;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6; // mesh algorithm
+Mesh.Algorithm3D=4; // mesh algorithm
+Geometry.OldRuledSurface=1;
+
+
+length1 = 1.0;
+outer_length  = 2.0;
+
+interface_width = 0.07;
+
+transf1 = 15;
+transf2 = 2;
+transf_outer = 30;
+
+Point (newp) = {0.0, 0.0, 0.0};
+Point (newp) = {length1, 0.0, 0.0};
+Point (newp) = {length1, length1, 0.0};
+Point (newp) = {0.0, length1, 0.0};
+
+source_pts[] = {newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {source_pts[0], source_pts[1]};
+Line (newl) = {source_pts[1], source_pts[2]};
+Line (newl) = {source_pts[2], source_pts[3]};
+Line (newl) = {source_pts[3], source_pts[0]};
+
+source_lines[] = {newl-4, newl-3, newl-2, newl-1};
+Transfinite Line {source_lines[]} = transf1;
+Line Loop (newll) = {source_lines[]};
+source_loop = newll-1;
+
+Ruled Surface (news) = {source_loop};
+source_surf = news-1;
+Transfinite Surface {source_surf};
+Recombine Surface {source_surf};
+
+vol1[] = Extrude { 0.0, 0.0, 1.0 }  { Surface{source_surf}; };
+
+
+lines1[] = Boundary { Surface{ vol1[{0,2,3,4,5}] }; };
+Transfinite Line { lines1[] } = transf1;
+
+Transfinite Surface { vol1[{0,2:5}] };
+Recombine Surface { vol1[{0,2:5}] };
+Transfinite Volume { vol1[1] };
+Recombine Volume { vol1[1] };
+
+// transfinite QuadTri volumes start here
+
+vol2[] = Extrude { 0.0, 0.0, -interface_width }  { Surface{source_surf}; };
+lines2[] = Boundary { Surface{ vol2[{0,2,3,4,5}] }; };
+Transfinite Line { lines2[] } = transf2;
+// have to correct some of the previous tranfinite lines:
+Transfinite Line { lines1[], Boundary{Surface{vol2[0]};} } = transf1;
+
+Transfinite Surface { vol2[{0,2:5}] };
+//Recombine Surface { vol2[{2:5}] };
+Transfinite Volume { vol2[1] };
+Recombine Volume { vol2[1] };
+
+vol3[] = Extrude { 0.0, 0.0, interface_width }  { Surface{vol1[0]}; };
+lines3[] = Boundary { Surface{ vol3[{0,2,3,4,5}] }; };
+Transfinite Line { lines3[] } = transf2;
+// have to correct some of the previous tranfinite lines:
+Transfinite Line { lines1[], Boundary{Surface{vol3[0]};} } = transf1;
+
+Transfinite Surface { vol3[{0,2:5}] };
+//Recombine Surface { vol3[{2:5}] };
+Transfinite Volume { vol3[1] };
+Recombine Volume { vol3[1] };
+
+vol4[] = Extrude { 0.0, -interface_width, 0.0 }  { Surface{vol1[2]}; };
+lines4[] = Boundary { Surface{ vol4[{0,2,3,4,5}] }; };
+Transfinite Line { lines4[] } = transf2;
+// have to correct some of the previous tranfinite lines:
+Transfinite Line { lines1[], Boundary{Surface{vol4[0]};} } = transf1;
+
+Transfinite Surface { vol4[{0,2:5}] };
+//Recombine Surface { vol4[{2:5}] };
+Transfinite Volume { vol4[1] };
+Recombine Volume { vol4[1] };
+
+vol5[] = Extrude { 0.0, interface_width, 0.0 }  { Surface{vol1[4]}; };
+lines5[] = Boundary { Surface{ vol5[{0,2,3,4,5}] }; };
+Transfinite Line { lines5[] } = transf2;
+// have to correct some of the previous tranfinite lines:
+Transfinite Line { lines1[], Boundary{Surface{vol5[0]};} } = transf1;
+
+Transfinite Surface { vol5[{0,2:5}] };
+//Recombine Surface { vol5[{2:5}] };
+Transfinite Volume { vol5[1] };
+Recombine Volume { vol5[1] };
+
+vol6[] = Extrude { interface_width,  0.0, 0.0 }  { Surface{vol1[3]}; };
+lines6[] = Boundary { Surface{ vol6[{0,2,3,4,5}] }; };
+Transfinite Line { lines6[] } = transf2;
+// have to correct some of the previous tranfinite lines:
+Transfinite Line { lines1[], Boundary{Surface{vol6[0]};} } = transf1;
+
+Transfinite Surface { vol6[{0,2:5}] };
+//Recombine Surface { vol6[{2:5}] };
+Transfinite Volume { vol6[1] };
+Recombine Volume { vol6[1] };
+
+vol7[] = Extrude { -interface_width,  0.0, 0.0 }  { Surface{vol1[5]}; };
+lines7[] = Boundary { Surface{ vol7[{0,2,3,4,5}] }; };
+Transfinite Line { lines7[] } = transf2;
+// have to correct some of the previous tranfinite lines:
+Transfinite Line { lines1[], Boundary{Surface{vol7[0]};} } = transf1;
+
+Transfinite Surface { vol7[{0,2:5}] };
+//Recombine Surface { vol7[{2:5}] };
+Transfinite Volume { vol7[1] };
+Recombine Volume { vol7[1] };
+
+//Here is the application of Transfinite QuadTri
+TransfQuadTri { vol2[1], vol3[1], vol4[1], vol5[1], vol6[1], vol7[1]  };
+
+
+// outer volume
+Point (newp) = {-(outer_length-length1)/2.0, -(outer_length-length1)/2.0, -(outer_length-length1)/2.0};
+Point (newp) = {(outer_length+length1)/2.0, -(outer_length-length1)/2.0, -(outer_length-length1)/2.0};
+Point (newp) = {(outer_length+length1)/2.0, (outer_length+length1)/2.0, -(outer_length-length1)/2.0};
+Point (newp) = {-(outer_length-length1)/2.0, (outer_length+length1)/2.0, -(outer_length-length1)/2.0};
+
+outer_pts[] = {newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {outer_pts[0], outer_pts[1]};
+Line (newl) = {outer_pts[1], outer_pts[2]};
+Line (newl) = {outer_pts[2], outer_pts[3]};
+Line (newl) = {outer_pts[3], outer_pts[0]};
+
+outer_source_lines[] = {newl-4, newl-3, newl-2, newl-1};
+Transfinite Line {outer_source_lines[]} = transf_outer;
+
+Line Loop (newll) = {outer_source_lines[]};
+
+Ruled Surface (news) = {newll-1};
+outer_source = news-1;
+
+outer_vol[] = Extrude { 0.0, 0.0, outer_length } { Surface { outer_source }; };
+Delete { Volume {outer_vol[1]}; }
+Transfinite Line { Boundary{ Surface{ outer_vol[{0,2:5}] }; } } = transf_outer;
+
+Surface Loop (newsl) = {outer_source, outer_vol[{0,2:5}]};
+outer_surf_loop = newsl-1;
+
+Surface Loop (newsl) = { vol2[{0,2:5}], vol3[{0,2:5}], vol4[{0,2:5}], vol5[{0,2:5}], vol6[{0,2:5}],
+                         vol7[{0,2:5}] };
+inner_surf_loop = newsl-1;
+
+Volume (newv) = { outer_surf_loop, inner_surf_loop };
+
+Characteristic Length { Boundary{ Line{ Boundary{ Surface{outer_vol[{0,2:5}] }; } }; } } = outer_length / transf_outer ;
+Characteristic Length { Boundary{ Line{ Boundary{ Surface{vol1[{0,2:5}], vol2[{0,2:5}], vol3[{0,2:5}], vol4[{0,2:5}],
+                        vol5[{0,2:5}], vol6[{0,2:5}], vol7[{0,2:5}] }; } }; } } = length1 / transf1 ;
+
diff --git a/benchmarks/extrude_quadtri/compound_extrude_annular_example.geo b/benchmarks/extrude_quadtri/compound_extrude_annular_example.geo
new file mode 100644
index 0000000000..f05c7a39ec
--- /dev/null
+++ b/benchmarks/extrude_quadtri/compound_extrude_annular_example.geo
@@ -0,0 +1,74 @@
+// an annulus in 4 parts to test extruding compound surface with a hole
+
+
+//set options
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Mesh.RecombinationAlgorithm = 0;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6; // mesh algorithm
+Mesh.Algorithm3D=4; // mesh algorithm
+Geometry.AutoCoherence = 1;
+Geometry.OldRuledSurface=1;
+  
+  
+// center
+Point (newp) = {0, 0, 0};  
+circle_center = newp-1;
+
+//inner circle
+Point (newp) = {1, 0, -.2};
+inner_point1 = newp-1;
+Point (newp) = {-1, 0, 0};
+Point (newp) = {0, 1, 0 };
+Point (newp) = {0, -1, 0};
+
+
+//outer circle
+Point (newp) = {2, 0, -.2};
+outer_point1 = newp-1;
+Point (newp) = {-2, 0, 0};
+Point (newp) = {0, 2, 0 };
+Point (newp) = {0, -2, 0};
+
+//inner circle lines
+Circle (newl) = {inner_point1, circle_center, inner_point1+2};
+inner_line1 = newl-1;
+Circle (newl) = {inner_point1+2, circle_center, inner_point1+1};
+Circle (newl) = {inner_point1+1, circle_center, inner_point1+3};
+Circle (newl) = {inner_point1+3, circle_center, inner_point1};
+
+//outer circle lines
+Circle (newl) = {outer_point1, circle_center, outer_point1+2};
+outer_line1 = newl-1;
+Circle (newl) = {outer_point1+2, circle_center, outer_point1+1};
+Circle (newl) = {outer_point1+1, circle_center, outer_point1+3};
+Circle (newl) = {outer_point1+3, circle_center, outer_point1};
+
+//cross lines
+Line (newl) = {inner_point1, outer_point1};
+cross_line1 = newl-1;
+Line (newl) = {inner_point1+2, outer_point1+2};
+Line (newl) = {inner_point1+1, outer_point1+1};
+Line (newl) = {inner_point1+3, outer_point1+3};
+
+
+// Transfinite Lines
+Transfinite Line {outer_line1, outer_line1+1, outer_line1+2,outer_line1+3} = 10;
+Transfinite Line {inner_line1, inner_line1+1, inner_line1+2,inner_line1+3} = 6;
+Transfinite Line {cross_line1, cross_line1+1, cross_line1+2, cross_line1+3} = 5;
+
+// line loops and surfaces
+Line Loop (newll) = {cross_line1, outer_line1, -(cross_line1+1), -inner_line1};
+lineloop1=newll-1;
+Line Loop (newll) = {cross_line1+1, outer_line1+1, -(cross_line1+2), -(inner_line1+1)};
+Line Loop (newll) = {cross_line1+2, outer_line1+2, -(cross_line1+3), -(inner_line1+2)};
+Line Loop (newll) = {cross_line1+3, outer_line1+3, -cross_line1, -(inner_line1+3)};
+Ruled Surface (news) = lineloop1;
+Ruled Surface (news) = lineloop1+1;
+Ruled Surface (news) = lineloop1+2;
+Ruled Surface (news) = lineloop1+3;
+ind_surfaces = {news-3, news-4, news-2, news-1};
+Compound Surface (news) = {ind_surfaces[]};
+//Hide {Surface{ind_surfaces[]};}
+Extrude {0, 0 , 1} {Surface{news-1}; Layers{{5},{1}};Recombine; }
diff --git a/benchmarks/extrude_quadtri/compound_extrude_example.geo b/benchmarks/extrude_quadtri/compound_extrude_example.geo
new file mode 100644
index 0000000000..bf39ba9ac0
--- /dev/null
+++ b/benchmarks/extrude_quadtri/compound_extrude_example.geo
@@ -0,0 +1,18 @@
+// Example of compoud surface extrusion from .msh file
+
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Geometry.AutoCoherence = 1;
+Geometry.OldRuledSurface=1;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6;
+
+Merge "3sidedruled.stl";
+
+CreateTopology;
+
+Compound Surface (news) = {1};
+
+Hide {Surface{1};}
+
+Extrude { Surface{-(news-1)}; Layers{{1},{0.001}}; Recombine; }
diff --git a/benchmarks/extrude_quadtri/compound_extrude_from_stl_example.geo b/benchmarks/extrude_quadtri/compound_extrude_from_stl_example.geo
new file mode 100644
index 0000000000..bf39ba9ac0
--- /dev/null
+++ b/benchmarks/extrude_quadtri/compound_extrude_from_stl_example.geo
@@ -0,0 +1,18 @@
+// Example of compoud surface extrusion from .msh file
+
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Geometry.AutoCoherence = 1;
+Geometry.OldRuledSurface=1;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6;
+
+Merge "3sidedruled.stl";
+
+CreateTopology;
+
+Compound Surface (news) = {1};
+
+Hide {Surface{1};}
+
+Extrude { Surface{-(news-1)}; Layers{{1},{0.001}}; Recombine; }
diff --git a/benchmarks/extrude_quadtri/nico_torus.geo b/benchmarks/extrude_quadtri/nico_torus.geo
new file mode 100644
index 0000000000..e5fcdd3ecb
--- /dev/null
+++ b/benchmarks/extrude_quadtri/nico_torus.geo
@@ -0,0 +1,79 @@
+// This file was originally written by Nico Schloemer,
+// Citation: http://geuz.org/pipermail/gmsh/2012/007576.html
+
+//set options
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Mesh.RecombinationAlgorithm = 0;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6; // mesh algorithm
+Mesh.Algorithm3D=4; // mesh algorithm
+Geometry.AutoCoherence = 1;
+Geometry.OldRuledSurface=1;
+
+Function Torus
+  // Given a zshift and two radii irad and orad, and a zshift, this
+  // creates a torus parallel to the x-y-plane.
+  // The points:
+  tp1 = newp;
+  Point(tp1) = {0,orad,zshift,lcar};
+  tp2 = newp;
+  Point(tp2) = {0,irad+orad,zshift,lcar};
+  tp3 = newp;
+  Point(tp3) = {0,orad,zshift+irad,lcar};
+  tp4 = newp;
+  Point(tp4) = {0,orad,zshift-irad,lcar};
+  tp5 = newp;
+  Point(tp5) = {0,-irad+orad,zshift,lcar};
+  // One cirle:
+  tc1 = newreg;
+  Circle(tc1) = {tp2,tp1,tp3};
+  tc2 = newreg;
+  Circle(tc2) = {tp3,tp1,tp5};
+  tc3 = newreg;
+  Circle(tc3) = {tp5,tp1,tp4};
+  tc4 = newreg;
+  Circle(tc4) = {tp4,tp1,tp2};
+  // The extrusion to the torus:
+  tll1 = newreg;
+  Line Loop(tll1) = {tc1,tc2,tc3,tc4};
+  ts1 = newreg;
+  Plane Surface(ts1) = {tll1};
+  // Gmsh cannot rotate beyond PI, so split the extrusion up in three parts.
+  ts2[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts1};};
+  ts3[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts2[0]};};
+  ts4[] = Extrude {{0,0,1}, {0,0,0}, 2*Pi/3}{Surface{ts3[0]};};
+
+  // Delete the unneeded entities.
+  Delete {
+    Volume{1};
+    Volume{2};
+    Volume{3};
+    Surface{ts1};
+    Surface{ts2[0]};
+    Surface{ts3[0]};
+  }
+
+  // Define outer surface.
+  // We then store the surface loops identification numbers in a list
+  // for later reference (we will need these to define the final
+  // volume).
+  theloops[t] = newreg;
+  Surface Loop(theloops[t]) = {ts2[2], ts2[3], ts2[4], ts2[5],
+                               ts3[2], ts3[3], ts3[4], ts3[5],
+                               ts4[2], ts4[3], ts4[4], ts4[5]};
+//                                   71, ts4[3], ts4[4], ts4[5]};
+
+  thetorus = newreg;
+  Volume(thetorus) = {theloops[t]};
+
+  Physical Volume(Sprintf("coil %g", t)) = thetorus;
+Return
+
+// Actual creation starts here.
+t = 1;
+lcar = 0.05;
+orad = 0.5;
+irad = 0.15;
+zshift = 0.04;
+Call Torus;
\ No newline at end of file
diff --git a/benchmarks/extrude_quadtri/quadtri_extruded_square_torus_interfaced_example.geo b/benchmarks/extrude_quadtri/quadtri_extruded_square_torus_interfaced_example.geo
new file mode 100644
index 0000000000..2dcec7e609
--- /dev/null
+++ b/benchmarks/extrude_quadtri/quadtri_extruded_square_torus_interfaced_example.geo
@@ -0,0 +1,113 @@
+//set options
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Mesh.RecombinationAlgorithm = 0;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6; // mesh algorithm
+Mesh.Algorithm3D=4; // mesh algorithm
+Geometry.AutoCoherence = 1;
+  Geometry.OldRuledSurface=1;
+  
+  
+r = .70;
+a = .4;
+b = 0.1;
+big = 2.5;
+big_transf = 12;
+
+Point (newp) = { r-a/2.0, -a/2, 0.0};
+Point (newp) = { r-a/2.0, a/2, 0.0};
+Point (newp) = { r+a/2.0, -a/2, 0.0};
+Point (newp) = { r+a/2.0, a/2, 0.0};
+Point (newp) = { r-a/2.0-b, -a/2-b, 0.0 };
+Point (newp) = { r-a/2.0-b, a/2+b, 0.0 };
+Point (newp) = { r+a/2.0+b, a/2+b, 0.0 };
+Point (newp) = { r+a/2.0+b, -a/2-b, 0.0 };
+
+list_points[] = {newp-8, newp-7, newp-6, newp-5, newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {list_points[0], list_points[1]};
+Line (newl) = {list_points[1], list_points[3]};
+Line (newl) = {list_points[3], list_points[2]};
+Line (newl) = {list_points[2], list_points[0]};
+
+Line (newl) = {list_points[4], list_points[5]};
+Line (newl) = {list_points[5], list_points[6]};
+Line (newl) = {list_points[6], list_points[7]};
+Line (newl) = {list_points[7], list_points[4]};
+
+
+list_lines_sq[] = {newl-8, newl-7, newl-6, newl-5};
+list_lines_outer[] = {newl-4, newl-3, newl-2, newl-1};
+
+
+Transfinite Line { list_lines_sq[], list_lines_outer[]} = 10;
+
+Line Loop (newll) = {list_lines_sq[]};
+Ruled Surface (news) = newll-1;
+Transfinite Surface {news-1} = {1, 2, 4, 3};
+Recombine Surface {news-1};
+surf1 = news-1;
+
+Line Loop (newll) = {list_lines_outer[]};
+Ruled Surface (news) = {newll-1,-(newll-3)};
+//Transfinite Surface {news-1} = {1, 2, 4, 3};
+Recombine Surface {news-1};
+surf2 = news-1;
+
+Mesh.Smoothing = 100;
+
+first[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {surf1}; Layers{20}; Recombine; };
+
+second[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {first[0]};Layers{20}; Recombine;};
+
+third[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {second[0]};Layers{20}; Recombine;};
+
+fourth[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {third[0]}; Layers{20}; Recombine; };
+
+
+outer_first[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {surf2}; Layers{20}; Recombine; QuadTriAddVerts;};
+quadtri_laterals[] += outer_first[{2:5}];
+
+outer_second[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {outer_first[0]};Layers{20}; Recombine;QuadTriAddVerts;};
+quadtri_laterals[] += outer_second[{2:5}];
+
+outer_third[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {outer_second[0]};Layers{20}; Recombine;QuadTriAddVerts;};
+quadtri_laterals[] += outer_third[{2:5}];
+
+outer_fourth[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {outer_third[0]}; Layers{20}; Recombine; QuadTriAddVerts;};
+quadtri_laterals[] += outer_fourth[{2:5}];
+
+
+//outer big unstructured volume 
+Point (newp) = {-big/2, -big/2, -big/2};
+Point (newp) = {big/2, -big/2, -big/2};
+Point (newp) = {big/2, big/2, -big/2};
+Point (newp) = {-big/2, big/2, -big/2};
+unstr_source_pts[] = { newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {unstr_source_pts[0], unstr_source_pts[1]};
+Line (newl) = {unstr_source_pts[1], unstr_source_pts[2]};
+Line (newl) = {unstr_source_pts[2], unstr_source_pts[3]};
+Line (newl) = {unstr_source_pts[3], unstr_source_pts[0]};
+unstr_source_lines[] = { newl-4, newl-3, newl-2, newl-1};
+
+Line Loop (newll) = {unstr_source_lines[]};
+
+Ruled Surface (news) = {newll-1};
+unstr_source = news-1;
+
+unstr_extr[] = Extrude {0.0, 0.0, big} { Surface{unstr_source}; };
+
+Transfinite Line {Boundary{Boundary{Volume{unstr_extr[1]};}}} = big_transf;
+Characteristic Length { Boundary{Boundary{Boundary{Volume{unstr_extr[1]};}}}} = .001;
+
+outer_big_bnd_surfs[] = Boundary{Volume{unstr_extr[1]};};
+Delete{ Volume{unstr_extr[1]};}
+
+Surface Loop (newsl) = {outer_big_bnd_surfs[]};
+Surface Loop (newsl) = {quadtri_laterals[]};
+Volume (newv) = { newsl-2, -(newsl-1) };
+unstr_vol = newv-1;
+
+
diff --git a/benchmarks/extrude_quadtri/quadtri_square_torus_compound_interfaced.geo b/benchmarks/extrude_quadtri/quadtri_square_torus_compound_interfaced.geo
new file mode 100644
index 0000000000..6819b69074
--- /dev/null
+++ b/benchmarks/extrude_quadtri/quadtri_square_torus_compound_interfaced.geo
@@ -0,0 +1,96 @@
+//set options
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Mesh.RecombinationAlgorithm = 0;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6; // mesh algorithm
+Mesh.Algorithm3D=4; // mesh algorithm
+Geometry.AutoCoherence = 1;
+  Geometry.OldRuledSurface=1;
+  
+  
+r = .70;
+a = .4;
+b = 0.1;
+
+Point (newp) = { r-a/2.0, -a/2, 0.0};
+Point (newp) = { r-a/2.0, a/2, 0.0};
+Point (newp) = { r+a/2.0, a/2, 0.0};
+Point (newp) = { r+a/2.0, -a/2, 0.0};
+Point (newp) = { r-a/2.0-b, -a/2-b, 0.0 };
+Point (newp) = { r-a/2.0-b, a/2+b, 0.0 };
+Point (newp) = { r+a/2.0+b, a/2+b, 0.0 };
+Point (newp) = { r+a/2.0+b, -a/2-b, 0.0 };
+
+list_points[] = {newp-8, newp-7, newp-6, newp-5, newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {list_points[0], list_points[1]};
+Line (newl) = {list_points[1], list_points[2]};
+Line (newl) = {list_points[2], list_points[3]};
+Line (newl) = {list_points[3], list_points[0]};
+
+Line (newl) = {list_points[4], list_points[5]};
+Line (newl) = {list_points[5], list_points[6]};
+Line (newl) = {list_points[6], list_points[7]};
+Line (newl) = {list_points[7], list_points[4]};
+
+
+list_lines_sq[] = {newl-8, newl-7, newl-6, newl-5};
+list_lines_outer[] = {newl-4, newl-3, newl-2, newl-1};
+ 
+Line (newl) = {list_points[0], list_points[4]};
+Line (newl) = {list_points[1], list_points[5]};
+Line (newl) = {list_points[2], list_points[6]};
+Line (newl) = {list_points[3], list_points[7]};
+
+cross_lines[] = {newl-4, newl-3, newl-2, newl-1};
+
+Transfinite Line { list_lines_sq[], list_lines_outer[]} = 10;
+Transfinite Line { cross_lines[] } = 4;
+
+Line Loop (newll) = { list_lines_sq[] };
+Ruled Surface (news) = newll-1;
+surf0 = news-1;
+Transfinite Surface {news-1};
+Recombine Surface {news-1};
+
+Line Loop (newll) = {list_lines_sq[0], cross_lines[1], -list_lines_outer[0], -cross_lines[0]};
+Ruled Surface (news) = newll-1;
+surf1 = news-1;
+
+Line Loop (newll) = {list_lines_sq[1], cross_lines[2], -list_lines_outer[1], -cross_lines[1]};
+Ruled Surface (news) = newll-1;
+surf2 = news-1;
+
+Line Loop (newll) = {list_lines_sq[2], cross_lines[3], -list_lines_outer[2], -cross_lines[2]};
+Ruled Surface (news) = newll-1;
+surf3 = news-1;
+
+Line Loop (newll) = {list_lines_sq[3], cross_lines[0], -list_lines_outer[3], -cross_lines[3]};
+Ruled Surface (news) = newll-1;
+surf4 = news-1;
+
+
+Compound Surface (news) = {surf1, surf2, surf3, surf4} Boundary {{list_lines_outer[]},{list_lines_sq[]}};
+//Recombine Surface {news-1};
+surfc = news-1;
+Hide {Surface {surf1, surf2, surf3, surf4};}
+Mesh.Smoothing = 100;
+
+
+first[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {surf0}; Layers{20}; Recombine;};
+
+second[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {first[0]};Layers{20}; Recombine;};
+
+third[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {second[0]};Layers{20}; Recombine;};
+
+fourth[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {third[0]}; Layers{20}; Recombine;};
+
+
+outer_first[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {surfc}; Layers{20}; Recombine; QuadTriNoNewVerts;};
+
+outer_second[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {outer_first[0]};Layers{20}; Recombine; QuadTriNoNewVerts RecombLaterals;};
+
+outer_third[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {outer_second[0]};Layers{20}; Recombine; QuadTriAddVerts; };
+
+outer_fourth[] = Extrude { {0, 1, 0}, {0, 0, 0}, Pi/2 }{ Surface {outer_third[0]}; Layers{20}; Recombine; QuadTriAddVerts RecombLaterals;};
diff --git a/benchmarks/extrude_quadtri/scaledBoundaryLayerTest.geo b/benchmarks/extrude_quadtri/scaledBoundaryLayerTest.geo
new file mode 100644
index 0000000000..a1181e8c52
--- /dev/null
+++ b/benchmarks/extrude_quadtri/scaledBoundaryLayerTest.geo
@@ -0,0 +1,61 @@
+//set options
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Mesh.RecombinationAlgorithm = 0;
+Mesh.RemeshAlgorithm = 1;
+Mesh.Algorithm=6; // mesh algorithm
+Mesh.Algorithm3D=4; // mesh algorithm
+Geometry.AutoCoherence = 1;
+Geometry.OldRuledSurface=1;
+  
+  
+curve_radius = .50;
+
+Point(newp) = { 0.0, 0.0, 0.0};
+Point(newp) = { 1.0, 0.0, 0.20};
+Point(newp) = { 2.0, 0.0, 0.0};
+Point(newp) = { 1.0, 1.0, 0.20};
+Point(newp) = { 2.0, 1.0, 0.0};
+Point(newp) = { 0.0, 1.0, 0.0};
+
+Point(newp) = { 1.0, 0.5, -curve_radius};
+
+Line (newl) = { 1, 2 };
+Line (newl) = { 2, 3 };
+Circle (newl) = { 2, 7, 4 };
+Line (newl) = { 4, 6 };
+Line (newl) = { 5, 4 };
+Line (newl) = { 3, 5 };
+Line (newl) = { 6, 1 };
+
+Transfinite Line { 3 } = 20;
+Transfinite Line { 1 } = 10 Using Progression 0.8;
+Transfinite Line { 2 } = 10 Using Progression 1/.8;
+Transfinite Line { 4, 5, 6, 7 } = 10;
+
+Line Loop (newll) = {1, 3,4,7};
+Line Loop (newll) = {2, 6, 5,-3};
+
+Ruled Surface (news) = { 8 };
+Ruled Surface (news) = { 9 };
+Recombine Surface {news-2, news-1};
+
+Extrude { Surface { 10}; Layers{{1,1},{0.05,1.2}}; Recombine; Using Index[0]; ScaleLastLayer; QuadTriAddVerts;}
+Extrude { Surface { 11}; Layers{{1,1},{0.05,1.2}}; Recombine;  Using Index[0]; ScaleLastLayer; QuadTriAddVerts;}
+
+
+// A third surface to show that when not connected to the previous two surfaces, a surface in the same boundary layer
+// can be meshed normally without ScaleLastLayer and still be valid.
+Point (newp) = { -1, 0, 0 };
+Point (newp) = { -1, 1 ,0};
+Point (newp) = { -2, 1, 0};
+Point (newp) = { -2, 0, 0};
+Line (newl) = { newp-4, newp-3};
+Line (newl) = { newp-3, newp-2};
+Line (newl) = { newp-2, newp-1};
+Line (newl) = { newp-1, newp-4};
+
+Line Loop (newll) = {newl-4, newl-3, newl-2, newl-1};
+Ruled Surface (news) = newll-1;
+
+Extrude { Surface { news-1}; Layers{{1},{.5}}; Recombine; Using Index[0];QuadTriNoNewVerts RecombLaterals;}
diff --git a/benchmarks/extrude_quadtri/tunnel_test.geo b/benchmarks/extrude_quadtri/tunnel_test.geo
new file mode 100644
index 0000000000..7287c31a73
--- /dev/null
+++ b/benchmarks/extrude_quadtri/tunnel_test.geo
@@ -0,0 +1,169 @@
+
+/***********************************************
+ *                                             *
+ *  tunnel_test.geo                            *
+ *  by Trevor Strickler                        *
+ *  <trevor.strickler.gmail.com>               *
+ *                                             *
+ ***********************************************/
+
+//set options
+Geometry.Surfaces=1;
+Mesh.SurfaceFaces=1;
+Mesh.Algorithm=5; // mesh algorithm
+Mesh.Algorithm3D=4; // mesh algorithm
+General.InitialModule=2; 	//start in Mesh mode.
+pi=Pi;
+
+
+// geometric parameters
+width = 1.0;
+height = 1.0;
+length = 3.0;
+patch_width = 0.3;
+patch_length = 0.3;
+patch_height = height - 0.3;
+
+num_trans_face_1 = 10;
+num_trans_length = 20;
+num_trans_patch = 5;
+
+Point (newp) = { -width / 2.0, -height / 2.0, 0.0 };
+Point (newp) = {  width / 2.0, -height / 2.0, 0.0 };
+Point (newp) = {  width / 2.0,  height / 2.0, 0.0 };
+Point (newp) = { -width / 2.0,  height / 2.0, 0.0 };
+
+face_1_corners[] = {newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {face_1_corners[0], face_1_corners[1]};
+Line (newl) = {face_1_corners[1], face_1_corners[2]};
+Line (newl) = {face_1_corners[2], face_1_corners[3]};
+Line (newl) = {face_1_corners[3], face_1_corners[0]};
+
+face_1_lines[] = {newl-4, newl-3, newl-2, newl-1};
+Transfinite Line {face_1_lines[]} = num_trans_face_1;
+
+Line Loop (newll) = {face_1_lines[]};
+face_1_line_loop = newll-1;
+
+Plane Surface (news) = face_1_line_loop;
+face_1_surface = news-1;
+Transfinite Surface (face_1_surface) Left;
+
+Recombine Surface (face_1_surface);
+
+extrude_1[] = Extrude { 0.0, 0.0, -0.3 } { Surface{ face_1_surface }; Layers{3}; QuadTriAddVerts RecombLaterals; Recombine; };
+
+top_lines_extr_1[] = Boundary{ Surface{ extrude_1[0] }; };
+
+top_points_extr_1[] += Boundary{ Line{ top_lines_extr_1[0] }; };
+top_points_extr_1[] += Boundary{ Line{ top_lines_extr_1[1] }; };
+top_points_extr_1[] += Boundary{ Line{ top_lines_extr_1[2] }; };
+top_points_extr_1[] += Boundary{ Line{ top_lines_extr_1[3] }; };
+
+Characteristic Length {top_points_extr_1[]} = length / (6 + num_trans_length);
+
+Point (newp) = { -width / 2, -height / 2, -length };
+Point (newp) = {  width / 2, -height / 2, -length };
+Point (newp) = {  width / 2,  height / 2, -length };
+Point (newp) = { -width / 2,  height / 2, -length };
+
+face_2_corners[] = {newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {face_2_corners[0], face_2_corners[1]};
+Line (newl) = {face_2_corners[1], face_2_corners[2]};
+Line (newl) = {face_2_corners[2], face_2_corners[3]};
+Line (newl) = {face_2_corners[3], face_2_corners[0]};
+
+face_2_lines[] = {newl-4, newl-3, newl-2, newl-1};
+
+Transfinite Line {face_2_lines[]} = num_trans_face_1;
+
+Line Loop (newll) = {face_2_lines[]};
+face_2_line_loop = newll-1;
+
+Plane Surface (news) = face_2_line_loop;
+face_2_surface = news-1;
+Transfinite Surface (face_2_surface) Left;
+
+Recombine Surface (face_2_surface);
+
+extrude_2[] = Extrude { 0.0, 0.0, 0.3 } { Surface{ face_2_surface }; Layers{3}; QuadTriAddVerts RecombLaterals; Recombine;};
+
+top_lines_extr_2[] = Boundary{ Surface{ extrude_2[0] }; };
+
+top_points_extr_2[] += Boundary{ Line{ top_lines_extr_2[0] }; };
+top_points_extr_2[] += Boundary{ Line{ top_lines_extr_2[1] }; };
+top_points_extr_2[] += Boundary{ Line{ top_lines_extr_2[2] }; };
+top_points_extr_2[] += Boundary{ Line{ top_lines_extr_2[3] }; };
+
+Characteristic Length {top_points_extr_2[]} = length / (6 + num_trans_length);
+
+Line (newl) = {top_points_extr_1[0], top_points_extr_2[0]};
+Line (newl) = {top_points_extr_1[1], top_points_extr_2[1]};
+Line (newl) = {top_points_extr_1[3], top_points_extr_2[3]};
+Line (newl) = {14, 28};
+
+length_lines[] = {newl-4, newl-3, newl-2, newl-1};
+Transfinite Line { length_lines[] } = num_trans_length;
+
+// create the little square patch at bottom lateral surface
+Point (newp) = {-patch_width / 2.0, -height / 2.0, -length / 2.0 + patch_length / 2.0 };
+Point (newp) = { patch_width / 2.0, -height / 2.0, -length / 2.0 + patch_length / 2.0 };
+Point (newp) = { patch_width / 2.0, -height / 2.0, -length / 2.0 - patch_length / 2.0 };
+Point (newp) = {-patch_width / 2.0, -height / 2.0, -length / 2.0 - patch_length / 2.0 };
+
+patch_points[] = {newp-4, newp-3, newp-2, newp-1};
+
+Line (newl) = {patch_points[0], patch_points[1]};
+Line (newl) = {patch_points[1], patch_points[2]};
+Line (newl) = {patch_points[2], patch_points[3]};
+Line (newl) = {patch_points[3], patch_points[0]};
+
+patch_lines[] = {newl-4, newl-3, newl-2, newl-1};
+
+Transfinite Line {patch_lines[]} = num_trans_patch;
+
+Line Loop (newll) = {patch_lines[]};
+patch_loop = newll-1;
+Plane Surface (news) = patch_loop;
+patch_surface = news-1;
+Transfinite Surface (patch_surface);
+Recombine Surface patch_surface;  
+
+extrude_patch[] = Extrude { 0.0, patch_height, 0.0 } { Surface { patch_surface }; 
+                            Layers{ {1,2,2,2,1}, {0.125, 0.375, 0.625, 0.875, 1.0}}; 
+                            QuadTriAddVerts; Recombine; }; 
+
+//now mesh surfaces along length
+
+Line Loop (newll) = {length_lines[0], top_lines_extr_2[0], -length_lines[1], -top_lines_extr_1[0]};
+Line Loop (newll) = {length_lines[1], top_lines_extr_2[1], -length_lines[2], -top_lines_extr_1[1]};
+Line Loop (newll) = {length_lines[2], top_lines_extr_2[2], -length_lines[3], -top_lines_extr_1[2]};
+Line Loop (newll) = {length_lines[3], top_lines_extr_2[3], -length_lines[0], -top_lines_extr_1[3]};
+
+length_loops[] = {newll-4, newll-3, newll-2, newll-1};
+
+Plane Surface (news) = {length_loops[0], patch_loop};
+Plane Surface (news) = length_loops[1]; 
+Plane Surface (news) = length_loops[2];
+Plane Surface (news) = length_loops[3];
+
+lateral_surfaces[] = { news-4, news-3, news-2, news-1 };
+Transfinite Surface { news-3, news-2, news-1};
+
+// Create volume ( a little messy )
+
+Surface Loop (newsl) = { -lateral_surfaces[], extrude_1[0], extrude_2[0], extrude_patch[{0,2:5}] }; 
+
+//Volume (newv) = newsl-1;
+//volume = newv-1;
+
+// create physicals
+Physical Surface ("inlet") = {face_1_surface};
+Physical Surface ("outlet") = {face_2_surface};
+Physical Surface ("laterals") = { lateral_surfaces[], extrude_1[{2:5}], extrude_2[{2:5}], patch_surface };
+Physical Volume ("volume") = {extrude_1[1], extrude_2[1], extrude_patch[1]};
+
+Mesh.CharacteristicLengthMax = length / (8+num_trans_length);
+
-- 
GitLab