[gmsh] 06/07: Merge.

Anton Gladky gladk at moszumanska.debian.org
Wed May 20 22:04:01 UTC 2015


This is an automated email from the git hooks/post-receive script.

gladk pushed a commit to branch master
in repository gmsh.

commit b44561c81db709827ee1af7cb15c63a741d4ddf7
Merge: 1a675ed 15c506b
Author: Anton Gladky <gladk at debian.org>
Date:   Thu May 21 00:02:28 2015 +0200

    Merge.

 CMakeLists.txt                                     |   170 +-
 CTestConfig.cmake                                  |     8 +-
 Common/CMakeLists.txt                              |     5 +-
 Common/Colors.h                                    |     2 +-
 Common/CommandLine.cpp                             |   120 +-
 Common/CommandLine.h                               |     2 +-
 Common/Context.cpp                                 |    13 +-
 Common/Context.h                                   |    32 +-
 Common/CreateFile.cpp                              |    45 +-
 Common/CreateFile.h                                |     2 +-
 Common/DefaultOptions.h                            |   186 +-
 Common/GamePad.cpp                                 |     3 +-
 Common/GamePad.h                                   |     2 +-
 Common/Gmsh.cpp                                    |    78 +-
 Common/Gmsh.h                                      |    17 +-
 Common/GmshConfig.h.in                             |     5 +-
 Common/GmshDefines.h                               |     9 +-
 Common/GmshIO.h                                    |     4 +
 Common/GmshMessage.cpp                             |   229 +-
 Common/GmshMessage.h                               |    38 +-
 Common/GmshRemote.cpp                              |     4 +-
 Common/GmshRemote.h                                |     2 +-
 Common/GmshSocket.h                                |    18 +-
 Common/GmshVersion.h.in                            |     2 +-
 Common/Hash.h                                      |     2 +-
 Common/HashMap.h                                   |     2 +-
 Common/ListUtils.cpp                               |     2 +-
 Common/ListUtils.h                                 |     2 +-
 Common/Main.cpp                                    |     2 +-
 Common/MallocUtils.cpp                             |     2 +-
 Common/MallocUtils.h                               |     2 +-
 Common/OS.cpp                                      |   148 +-
 Common/OS.h                                        |     5 +-
 Common/Octree.cpp                                  |     2 +-
 Common/Octree.h                                    |     2 +-
 Common/OctreeInternals.cpp                         |     2 +-
 Common/OctreeInternals.h                           |     2 +-
 Common/OpenFile.cpp                                |    99 +-
 Common/OpenFile.h                                  |     4 +-
 Common/Options.cpp                                 |   250 +-
 Common/Options.h                                   |    24 +-
 Common/SmoothData.cpp                              |     2 +-
 Common/SmoothData.h                                |     2 +-
 Common/StringUtils.cpp                             |    28 +-
 Common/StringUtils.h                               |     2 +-
 Common/TreeUtils.cpp                               |     2 +-
 Common/TreeUtils.h                                 |     2 +-
 Common/VertexArray.cpp                             |     2 +-
 Common/VertexArray.h                               |     2 +-
 Common/gmshLocalNetworkClient.cpp                  |   858 +
 Common/gmshLocalNetworkClient.h                    |    86 +
 Common/gmshPopplerWrapper.cpp                      |     2 +-
 Common/gmshPopplerWrapper.h                        |     2 +-
 Common/onelab.h                                    |   389 +-
 Common/onelabUtils.cpp                             |   188 +-
 Common/onelabUtils.h                               |     8 +-
 Common/rtree.h                                     |  1639 +
 Fltk/CMakeLists.txt                                |    14 +-
 Fltk/FlGui.cpp                                     |   129 +-
 Fltk/FlGui.h                                       |    12 +-
 Fltk/Main.cpp                                      |     8 +-
 Fltk/Navigator.cpp                                 |     5 +-
 Fltk/Navigator.h                                   |     2 +-
 Fltk/classificationEditor.cpp                      |     2 +-
 Fltk/classificationEditor.h                        |     2 +-
 Fltk/clippingWindow.cpp                            |     3 +-
 Fltk/clippingWindow.h                              |     2 +-
 Fltk/colorbarWindow.cpp                            |     2 +-
 Fltk/colorbarWindow.h                              |     2 +-
 Fltk/contextWindow.cpp                             |     2 +-
 Fltk/contextWindow.h                               |     2 +-
 Fltk/drawContextFltk.h                             |     6 +-
 Fltk/drawContextFltkCairo.cpp                      |     2 +-
 Fltk/drawContextFltkCairo.h                        |     2 +-
 Fltk/drawContextFltkStringTexture.cpp              |     3 +-
 Fltk/drawContextFltkStringTexture.h                |     2 +-
 Fltk/extraDialogs.cpp                              |     2 +-
 Fltk/extraDialogs.h                                |     2 +-
 Fltk/fieldWindow.cpp                               |     2 +-
 Fltk/fieldWindow.h                                 |     2 +-
 Fltk/fileDialogs.cpp                               |     2 +-
 Fltk/fileDialogs.h                                 |     2 +-
 Fltk/gamepadWindow.cpp                             |     5 +-
 Fltk/gamepadWindow.h                               |     2 +-
 Fltk/gmshLocalNetworkClient.h                      |    66 -
 Fltk/graphicWindow.cpp                             |   104 +-
 Fltk/graphicWindow.h                               |     8 +-
 Fltk/helpWindow.cpp                                |    37 +-
 Fltk/helpWindow.h                                  |     2 +-
 Fltk/highOrderToolsWindow.cpp                      |    29 +-
 Fltk/highOrderToolsWindow.h                        |     2 +-
 Fltk/inputRange.h                                  |    19 +-
 Fltk/inputRegion.cpp                               |     2 +-
 Fltk/inputRegion.h                                 |     2 +-
 Fltk/inputValue.cpp                                |     2 +-
 Fltk/inputValue.h                                  |     2 +-
 Fltk/mainWindow.h                                  |     2 +-
 Fltk/manipWindow.cpp                               |     2 +-
 Fltk/manipWindow.h                                 |     2 +-
 Fltk/onelab2Group.cpp                              |  1030 +
 Fltk/onelab2Group.h                                |    95 +
 Fltk/onelabGroup.cpp                               |   166 +-
 Fltk/onelabGroup.h                                 |     2 +-
 Fltk/openglWindow.cpp                              |    84 +-
 Fltk/openglWindow.h                                |    10 +-
 Fltk/optionWindow.cpp                              |   102 +-
 Fltk/optionWindow.h                                |     6 +-
 Fltk/outputRange.h                                 |    18 +-
 Fltk/paletteWindow.h                               |     2 +-
 Fltk/partitionDialog.cpp                           |     2 +-
 Fltk/partitionDialog.h                             |     2 +-
 Fltk/pluginWindow.cpp                              |     2 +-
 Fltk/pluginWindow.h                                |     2 +-
 Fltk/projectionEditor.cpp                          |     2 +-
 Fltk/projectionEditor.h                            |     2 +-
 Fltk/solverButton.cpp                              |     5 +-
 Fltk/solverButton.h                                |     2 +-
 Fltk/spherePositionWidget.h                        |     2 +-
 Fltk/statisticsWindow.cpp                          |   275 +-
 Fltk/statisticsWindow.h                            |     4 +-
 Fltk/treeIcons.h                                   |    94 +
 Fltk/viewButton.cpp                                |    92 +-
 Fltk/viewButton.h                                  |     2 +-
 Fltk/visibilityWindow.cpp                          |     2 +-
 Fltk/visibilityWindow.h                            |     2 +-
 Geo/ACISEdge.cpp                                   |     2 +-
 Geo/ACISEdge.h                                     |     2 +-
 Geo/ACISFace.cpp                                   |     2 +-
 Geo/ACISFace.h                                     |     2 +-
 Geo/ACISVertex.h                                   |     2 +-
 Geo/CGNSOptions.h                                  |     2 +-
 Geo/CMakeLists.txt                                 |     6 +-
 Geo/Cell.cpp                                       |     2 +-
 Geo/Cell.h                                         |     2 +-
 Geo/CellComplex.cpp                                |     2 +-
 Geo/CellComplex.h                                  |     2 +-
 Geo/Chain.cpp                                      |     2 +-
 Geo/Chain.h                                        |     2 +-
 Geo/ChainComplex.cpp                               |     2 +-
 Geo/ChainComplex.h                                 |     2 +-
 Geo/Curvature.cpp                                  |     2 +-
 Geo/Curvature.h                                    |     2 +-
 Geo/CustomContainer.h                              |     2 +-
 Geo/ExtrudeParams.cpp                              |     2 +-
 Geo/ExtrudeParams.h                                |     2 +-
 Geo/GEdge.cpp                                      |     8 +-
 Geo/GEdge.h                                        |     8 +-
 Geo/GEdgeCompound.cpp                              |     2 +-
 Geo/GEdgeCompound.h                                |     2 +-
 Geo/GEdgeLoop.cpp                                  |     2 +-
 Geo/GEdgeLoop.h                                    |     2 +-
 Geo/GEntity.cpp                                    |     2 +-
 Geo/GEntity.h                                      |     6 +-
 Geo/GFace.cpp                                      |   169 +-
 Geo/GFace.h                                        |    14 +-
 Geo/GFaceCompound.cpp                              |    67 +-
 Geo/GFaceCompound.h                                |     2 +-
 Geo/GModel.cpp                                     |   190 +-
 Geo/GModel.h                                       |    40 +-
 Geo/GModelFactory.cpp                              |   142 +-
 Geo/GModelFactory.h                                |     9 +-
 Geo/GModelIO_ACIS.cpp                              |     2 +-
 Geo/GModelIO_ACTRAN.cpp                            |     2 +-
 Geo/GModelIO_BDF.cpp                               |     2 +-
 Geo/GModelIO_CGNS.cpp                              |     2 +-
 Geo/GModelIO_DIFF.cpp                              |     2 +-
 Geo/GModelIO_Fourier.cpp                           |     2 +-
 Geo/GModelIO_Fourier.h                             |     2 +-
 Geo/GModelIO_GEO.cpp                               |   238 +-
 Geo/GModelIO_GEOM.cpp                              |     2 +-
 Geo/GModelIO_INP.cpp                               |     7 +-
 Geo/GModelIO_IR3.cpp                               |     2 +-
 Geo/GModelIO_MAIL.cpp                              |     2 +-
 Geo/GModelIO_MED.cpp                               |    11 +-
 Geo/GModelIO_MESH.cpp                              |     2 +-
 Geo/GModelIO_MSH.cpp                               |     4 +-
 Geo/GModelIO_MSH2.cpp                              |     2 +-
 Geo/GModelIO_OCC.cpp                               |    59 +-
 Geo/GModelIO_OCC.h                                 |     9 +-
 Geo/GModelIO_P3D.cpp                               |     2 +-
 Geo/GModelIO_PLY.cpp                               |     2 +-
 Geo/GModelIO_POS.cpp                               |    10 +-
 Geo/GModelIO_SGEOM.cpp                             |   267 +-
 Geo/GModelIO_SGEOM.h                               |     7 +-
 Geo/GModelIO_STL.cpp                               |    18 +-
 Geo/GModelIO_SU2.cpp                               |     2 +-
 Geo/GModelIO_UNV.cpp                               |     8 +-
 Geo/GModelIO_VRML.cpp                              |     2 +-
 Geo/GModelIO_VTK.cpp                               |     2 +-
 Geo/GModelVertexArrays.cpp                         |     6 +-
 Geo/GPoint.h                                       |     2 +-
 Geo/GRbf.cpp                                       |    51 +-
 Geo/GRbf.h                                         |     2 +-
 Geo/GRegion.cpp                                    |     4 +-
 Geo/GRegion.h                                      |     2 +-
 Geo/GRegionCompound.cpp                            |     2 +-
 Geo/GRegionCompound.h                              |     2 +-
 Geo/GVertex.cpp                                    |     9 +-
 Geo/GVertex.h                                      |     7 +-
 Geo/GenericEdge.cpp                                |   210 +
 Geo/GenericEdge.h                                  |   111 +
 Geo/GenericFace.cpp                                |   266 +
 Geo/GenericFace.h                                  |   104 +
 Geo/GenericRegion.cpp                              |    28 +
 Geo/GenericRegion.h                                |    41 +
 Geo/GenericVertex.cpp                              |    64 +
 Geo/GenericVertex.h                                |    73 +
 Geo/Geo.cpp                                        |   136 +-
 Geo/Geo.h                                          |     7 +-
 Geo/GeoInterpolation.cpp                           |    49 +-
 Geo/GeoInterpolation.h                             |     2 +-
 Geo/GeoStringInterface.cpp                         |     8 +-
 Geo/GeoStringInterface.h                           |     2 +-
 Geo/GeomMeshMatcher.cpp                            |   173 +-
 Geo/GeomMeshMatcher.h                              |     2 +-
 Geo/Homology.cpp                                   |     2 +-
 Geo/Homology.h                                     |     2 +-
 Geo/MEdge.cpp                                      |     3 +-
 Geo/MEdge.h                                        |     2 +-
 Geo/MEdgeHash.h                                    |     2 +-
 Geo/MElement.cpp                                   |   301 +-
 Geo/MElement.h                                     |    65 +-
 Geo/MElementCut.cpp                                |    35 +-
 Geo/MElementCut.h                                  |    10 +-
 Geo/MElementOctree.cpp                             |     3 +-
 Geo/MElementOctree.h                               |     2 +-
 Geo/MFace.cpp                                      |     2 +-
 Geo/MFace.h                                        |     2 +-
 Geo/MFaceHash.h                                    |     2 +-
 Geo/MHexahedron.cpp                                |    67 +-
 Geo/MHexahedron.h                                  |    22 +-
 Geo/MLine.cpp                                      |    12 +-
 Geo/MLine.h                                        |    11 +-
 Geo/MPoint.h                                       |     4 +-
 Geo/MPrism.cpp                                     |    93 +-
 Geo/MPrism.h                                       |     8 +-
 Geo/MPyramid.cpp                                   |    23 +-
 Geo/MPyramid.h                                     |    10 +-
 Geo/MQuadrangle.cpp                                |   102 +-
 Geo/MQuadrangle.h                                  |    10 +-
 Geo/MSubElement.cpp                                |    18 +-
 Geo/MSubElement.h                                  |    18 +-
 Geo/MTetrahedron.cpp                               |    18 +-
 Geo/MTetrahedron.h                                 |    15 +-
 Geo/MTriangle.cpp                                  |    37 +-
 Geo/MTriangle.h                                    |    13 +-
 Geo/MVertex.cpp                                    |    44 +-
 Geo/MVertex.h                                      |    31 +-
 Geo/MVertexBoundaryLayerData.cpp                   |     2 +-
 Geo/MVertexBoundaryLayerData.h                     |     2 +-
 Geo/MVertexRTree.h                                 |    75 +
 Geo/MZone.cpp                                      |     2 +-
 Geo/MZone.h                                        |     2 +-
 Geo/MZoneBoundary.cpp                              |     2 +-
 Geo/MZoneBoundary.h                                |     2 +-
 Geo/OCCEdge.cpp                                    |    12 +-
 Geo/OCCEdge.h                                      |     3 +-
 Geo/OCCFace.cpp                                    |    40 +-
 Geo/OCCFace.h                                      |     3 +-
 Geo/OCCIncludes.h                                  |     2 +-
 Geo/OCCRegion.cpp                                  |    12 +-
 Geo/OCCRegion.h                                    |     3 +-
 Geo/OCCVertex.cpp                                  |     2 +-
 Geo/OCCVertex.h                                    |     2 +-
 Geo/OCC_Connect.cpp                                |     4 +-
 Geo/OCC_Connect.h                                  |     2 +-
 Geo/Pair.h                                         |     2 +-
 Geo/Range.h                                        |     2 +-
 Geo/SBoundingBox3d.h                               |     2 +-
 Geo/SGEOMIncludes.h                                |     2 +-
 Geo/SOrientedBoundingBox.cpp                       |     9 +-
 Geo/SOrientedBoundingBox.h                         |     2 +-
 Geo/SPoint2.h                                      |     6 +-
 Geo/SPoint3.h                                      |     4 +-
 Geo/STensor3.cpp                                   |     9 +-
 Geo/STensor3.h                                     |    19 +-
 Geo/SVector3.h                                     |    10 +-
 Geo/boundaryLayersData.cpp                         |    55 +-
 Geo/boundaryLayersData.h                           |     2 +-
 Geo/closestPoint.cpp                               |     8 +
 Geo/closestPoint.h                                 |    19 +
 Geo/discreteEdge.cpp                               |     2 +-
 Geo/discreteEdge.h                                 |     2 +-
 Geo/discreteFace.cpp                               |     2 +-
 Geo/discreteFace.h                                 |     2 +-
 Geo/discreteRegion.cpp                             |     2 +-
 Geo/discreteRegion.h                               |     2 +-
 Geo/discreteVertex.h                               |     2 +-
 Geo/findLinks.cpp                                  |     2 +-
 Geo/findLinks.h                                    |     2 +-
 Geo/fourierEdge.cpp                                |     2 +-
 Geo/fourierEdge.h                                  |     2 +-
 Geo/fourierFace.cpp                                |     2 +-
 Geo/fourierFace.h                                  |     2 +-
 Geo/fourierProjectionFace.cpp                      |     2 +-
 Geo/fourierProjectionFace.h                        |     2 +-
 Geo/fourierVertex.h                                |     2 +-
 Geo/gmshEdge.cpp                                   |     2 +-
 Geo/gmshEdge.h                                     |     2 +-
 Geo/gmshEdgeDiscretize.cpp                         |   148 +
 Geo/gmshFace.cpp                                   |     3 +-
 Geo/gmshFace.h                                     |     2 +-
 Geo/gmshLevelset.cpp                               |   279 +-
 Geo/gmshLevelset.h                                 |   460 +-
 Geo/gmshRegion.cpp                                 |     2 +-
 Geo/gmshRegion.h                                   |     2 +-
 Geo/gmshSurface.cpp                                |     2 +-
 Geo/gmshSurface.h                                  |     2 +-
 Geo/gmshVertex.cpp                                 |    20 +-
 Geo/gmshVertex.h                                   |     7 +-
 Geo/intersectCurveSurface.cpp                      |     4 +
 Geo/intersectCurveSurface.h                        |     2 +-
 Geo/partitionEdge.h                                |     2 +-
 Geo/partitionFace.h                                |     2 +-
 Geo/partitionVertex.h                              |     2 +-
 Graphics/CMakeLists.txt                            |     2 +-
 Graphics/Camera.cpp                                |    75 +-
 Graphics/Camera.h                                  |     2 +-
 Graphics/PixelBuffer.h                             |     2 +-
 Graphics/ReadImg.cpp                               |     2 +-
 Graphics/ReadImg.h                                 |     2 +-
 Graphics/drawAxes.cpp                              |     2 +-
 Graphics/drawContext.cpp                           |   105 +-
 Graphics/drawContext.h                             |    21 +-
 Graphics/drawGeom.cpp                              |    22 +-
 Graphics/drawGlyph.cpp                             |    73 +-
 Graphics/drawGraph2d.cpp                           |   143 +-
 Graphics/drawMesh.cpp                              |     2 +-
 Graphics/drawPost.cpp                              |     2 +-
 Graphics/drawScales.cpp                            |    33 +-
 Graphics/gl2gif.cpp                                |     2 +-
 Graphics/gl2gif.h                                  |     2 +-
 Graphics/gl2jpeg.cpp                               |     2 +-
 Graphics/gl2jpeg.h                                 |     2 +-
 Graphics/gl2pgf.cpp                                |     4 +
 Graphics/gl2pgf.h                                  |     4 +
 Graphics/gl2png.cpp                                |     2 +-
 Graphics/gl2png.h                                  |     2 +-
 Graphics/gl2ppm.cpp                                |     2 +-
 Graphics/gl2ppm.h                                  |     2 +-
 Graphics/gl2yuv.cpp                                |     2 +-
 Graphics/gl2yuv.h                                  |     2 +-
 Mesh/BDS.cpp                                       |    35 +-
 Mesh/BDS.h                                         |     2 +-
 Mesh/BGMBase.cpp                                   |   289 +
 Mesh/BGMBase.h                                     |    97 +
 Mesh/BackgroundMesh.cpp                            |   589 +-
 Mesh/BackgroundMesh.h                              |    47 +-
 Mesh/BackgroundMesh2D.cpp                          |   734 +
 Mesh/BackgroundMesh2D.h                            |   140 +
 Mesh/BackgroundMesh3D.cpp                          |  1170 +
 Mesh/BackgroundMesh3D.h                            |   163 +
 Mesh/BackgroundMeshManager.cpp                     |    65 +
 Mesh/BackgroundMeshManager.h                       |    30 +
 Mesh/BackgroundMeshTools.cpp                       |   411 +
 Mesh/BackgroundMeshTools.h                         |    30 +
 Mesh/BoundaryLayers.cpp                            |     2 +-
 Mesh/BoundaryLayers.h                              |     2 +-
 Mesh/CMakeLists.txt                                |     9 +-
 Mesh/CenterlineField.cpp                           |   137 +-
 Mesh/CenterlineField.h                             |     2 +-
 Mesh/DivideAndConquer.cpp                          |    25 +-
 Mesh/Field.cpp                                     |   128 +-
 Mesh/Field.h                                       |    26 +-
 Mesh/FieldPython.h                                 |     7 +
 Mesh/Generator.cpp                                 |   191 +-
 Mesh/Generator.h                                   |     2 +-
 Mesh/HighOrder.cpp                                 |   359 +-
 Mesh/HighOrder.h                                   |     2 +-
 Mesh/Levy3D.cpp                                    |     2 +-
 Mesh/Levy3D.h                                      |     2 +-
 Mesh/QuadTriExtruded2D.cpp                         |   349 +-
 Mesh/QuadTriExtruded2D.h                           |    85 +-
 Mesh/QuadTriExtruded3D.cpp                         |   850 +-
 Mesh/QuadTriExtruded3D.h                           |    70 +-
 Mesh/QuadTriTransfinite3D.cpp                      |     2 +-
 Mesh/QuadTriTransfinite3D.h                        |     2 +-
 Mesh/QuadTriUtils.cpp                              |   274 +-
 Mesh/QuadTriUtils.h                                |    69 +-
 Mesh/Voronoi3D.cpp                                 |     2 +-
 Mesh/Voronoi3D.h                                   |     2 +-
 Mesh/cross3D.h                                     |   157 +-
 Mesh/directions3D.cpp                              |   311 +-
 Mesh/directions3D.h                                |     4 +-
 Mesh/filterElements.cpp                            |    31 +-
 Mesh/filterElements.h                              |    31 +-
 Mesh/meshGEdge.cpp                                 |     9 +-
 Mesh/meshGEdge.h                                   |     2 +-
 Mesh/meshGEdgeExtruded.cpp                         |     2 +-
 Mesh/meshGFace.cpp                                 |   527 +-
 Mesh/meshGFace.h                                   |     2 +-
 Mesh/meshGFaceBDS.cpp                              |    42 +-
 Mesh/meshGFaceBDS.h                                |     2 +-
 Mesh/meshGFaceBamg.cpp                             |     4 +-
 Mesh/meshGFaceBamg.h                               |     2 +-
 Mesh/meshGFaceDelaunayInsertion.cpp                |   606 +-
 Mesh/meshGFaceDelaunayInsertion.h                  |     2 +-
 Mesh/meshGFaceElliptic.cpp                         |   102 +-
 Mesh/meshGFaceElliptic.h                           |     2 +-
 Mesh/meshGFaceExtruded.cpp                         |   129 +-
 Mesh/meshGFaceLloyd.cpp                            |     2 +-
 Mesh/meshGFaceOptimize.cpp                         |   156 +-
 Mesh/meshGFaceOptimize.h                           |     2 +-
 Mesh/meshGFaceQuadrilateralize.cpp                 |     2 +-
 Mesh/meshGFaceQuadrilateralize.h                   |     2 +-
 Mesh/meshGFaceTransfinite.cpp                      |     2 +-
 Mesh/meshGRegion.cpp                               |   267 +-
 Mesh/meshGRegion.h                                 |     2 +-
 Mesh/meshGRegionCarveHole.cpp                      |     2 +-
 Mesh/meshGRegionDelaunayInsertion.cpp              |   136 +-
 Mesh/meshGRegionDelaunayInsertion.h                |    10 +-
 Mesh/meshGRegionExtruded.cpp                       |    82 +-
 Mesh/meshGRegionLocalMeshMod.cpp                   |    38 +-
 Mesh/meshGRegionLocalMeshMod.h                     |    16 +-
 Mesh/meshGRegionMMG3D.cpp                          |     4 +-
 Mesh/meshGRegionMMG3D.h                            |     2 +-
 Mesh/meshGRegionTransfinite.cpp                    |     2 +-
 Mesh/meshMetric.cpp                                |     2 +-
 Mesh/meshMetric.h                                  |     2 +-
 Mesh/meshPartition.cpp                             |     2 +-
 Mesh/meshPartition.h                               |     2 +-
 Mesh/meshPartitionObjects.h                        |     2 +-
 Mesh/meshPartitionOptions.h                        |     2 +-
 Mesh/meshRefine.cpp                                |   586 +-
 Mesh/multiscalePartition.cpp                       |    42 +-
 Mesh/multiscalePartition.h                         |     2 +-
 Mesh/periodical.cpp                                |   338 +-
 Mesh/periodical.h                                  |     8 +-
 Mesh/pointInsertion.cpp                            |   778 +
 Mesh/pointInsertion.h                              |    43 +
 Mesh/pointInsertionRTreeTools.cpp                  |   199 +
 Mesh/pointInsertionRTreeTools.h                    |   254 +
 Mesh/qualityMeasures.cpp                           |   806 +-
 Mesh/qualityMeasures.h                             |   148 +-
 Mesh/simple3D.cpp                                  |   206 +-
 Mesh/simple3D.h                                    |    10 +-
 Mesh/surfaceFiller.cpp                             |   523 +-
 Mesh/surfaceFiller.h                               |    18 +-
 Mesh/yamakawa.cpp                                  |  3350 ++-
 Mesh/yamakawa.h                                    |   420 +-
 Numeric/BasisFactory.cpp                           |    99 +-
 Numeric/BasisFactory.h                             |    74 +-
 Numeric/BergotBasis.cpp                            |     2 +-
 Numeric/BergotBasis.h                              |     2 +-
 Numeric/CMakeLists.txt                             |    12 +-
 Numeric/CondNumBasis.cpp                           |   566 +
 Numeric/CondNumBasis.h                             |   125 +
 Numeric/ConjugateGradients.cpp                     |   137 +
 Numeric/ConjugateGradients.h                       |    18 +
 Numeric/ElementType.cpp                            |    30 +-
 Numeric/ElementType.h                              |     2 +-
 Numeric/FuncSpaceData.cpp                          |   107 +
 Numeric/FuncSpaceData.h                            |   102 +
 Numeric/GaussIntegration.cpp                       |     2 +-
 Numeric/GaussIntegration.h                         |     2 +-
 Numeric/GaussJacobi1D.cpp                          |     2 +-
 Numeric/GaussJacobi1D.h                            |     2 +-
 Numeric/GaussLegendre1D.h                          |     2 +-
 Numeric/GaussLegendreSimplex.cpp                   |     2 +-
 Numeric/GaussQuadratureHex.cpp                     |    77 +-
 Numeric/GaussQuadratureLin.cpp                     |    13 +-
 Numeric/GaussQuadraturePri.cpp                     |    13 +-
 Numeric/GaussQuadraturePyr.cpp                     |    16 +-
 Numeric/GaussQuadratureQuad.cpp                    |    63 +-
 Numeric/GaussQuadratureTet.cpp                     |     2 +-
 Numeric/GaussQuadratureTri.cpp                     |    25 +-
 Numeric/HilbertCurve.cpp                           |     4 +
 Numeric/HilbertCurve.h                             |     4 +
 Numeric/Iso.cpp                                    |     2 +-
 Numeric/Iso.h                                      |     2 +-
 Numeric/JacobianBasis.cpp                          |   665 +-
 Numeric/JacobianBasis.h                            |   234 +-
 Numeric/MetricBasis.cpp                            |  1125 +
 Numeric/MetricBasis.h                              |   112 +
 Numeric/Numeric.cpp                                |   416 +-
 Numeric/Numeric.h                                  |    24 +-
 Numeric/approximationError.cpp                     |    32 +
 Numeric/approximationError.h                       |    19 +
 Numeric/bezierBasis.cpp                            |   388 +-
 Numeric/bezierBasis.h                              |    65 +-
 Numeric/cartesian.h                                |     2 +-
 Numeric/decasteljau.cpp                            |     8 +
 Numeric/decasteljau.h                              |     4 +
 Numeric/discreteFrechetDistance.cpp                |    13 +
 Numeric/discreteFrechetDistance.h                  |    17 +
 Numeric/fullMatrix.cpp                             |     3 +-
 Numeric/fullMatrix.h                               |    12 +-
 Numeric/hausdorffDistance.cpp                      |    61 +
 Numeric/jacobiPolynomials.cpp                      |    18 +-
 Numeric/jacobiPolynomials.h                        |     2 +-
 Numeric/legendrePolynomials.cpp                    |     2 +-
 Numeric/legendrePolynomials.h                      |     2 +-
 Numeric/mathEvaluator.cpp                          |     2 +-
 Numeric/mathEvaluator.h                            |     2 +-
 Numeric/miniBasis.cpp                              |    89 +
 Numeric/miniBasis.h                                |    24 +
 Numeric/nodalBasis.cpp                             |    29 +-
 Numeric/nodalBasis.h                               |    26 +-
 Numeric/pointsGenerators.cpp                       |   270 +-
 Numeric/pointsGenerators.h                         |    15 +-
 Numeric/polynomialBasis.cpp                        |     2 +-
 Numeric/polynomialBasis.h                          |     3 +-
 Numeric/pyramidalBasis.cpp                         |    40 +-
 Numeric/pyramidalBasis.h                           |     7 +-
 Numeric/robustPredicates.h                         |     2 +-
 Numeric/simpleFunction.h                           |    29 +-
 Numeric/simpleFunctionPython.h                     |     7 +
 Parser/CMakeLists.txt                              |     2 +-
 Parser/FunctionManager.cpp                         |    27 +-
 Parser/FunctionManager.h                           |     9 +-
 Parser/Gmsh.l                                      |    13 +-
 Parser/Gmsh.tab.cpp                                |  8100 ++++-
 Parser/Gmsh.tab.hpp                                |   199 +-
 Parser/Gmsh.y                                      |   564 +-
 Parser/Gmsh.yy.cpp                                 |  1141 +-
 Parser/Parser.h                                    |     2 +-
 Plugin/AnalyseCurvedMesh.cpp                       |   311 +-
 Plugin/AnalyseCurvedMesh.h                         |    54 +-
 Plugin/Annotate.cpp                                |     2 +-
 Plugin/Annotate.h                                  |     2 +-
 Plugin/Bubbles.cpp                                 |     2 +-
 Plugin/Bubbles.h                                   |     2 +-
 Plugin/CMakeLists.txt                              |     5 +-
 Plugin/Crack.cpp                                   |     2 +-
 Plugin/Crack.h                                     |     2 +-
 Plugin/Curl.cpp                                    |     2 +-
 Plugin/Curl.h                                      |     2 +-
 Plugin/CutBox.cpp                                  |     2 +-
 Plugin/CutBox.h                                    |     2 +-
 Plugin/CutGrid.cpp                                 |     2 +-
 Plugin/CutGrid.h                                   |     2 +-
 Plugin/CutMesh.cpp                                 |     2 +-
 Plugin/CutMesh.h                                   |     2 +-
 Plugin/CutParametric.cpp                           |     2 +-
 Plugin/CutParametric.h                             |     2 +-
 Plugin/CutPlane.cpp                                |     2 +-
 Plugin/CutPlane.h                                  |     2 +-
 Plugin/CutSphere.cpp                               |     2 +-
 Plugin/CutSphere.h                                 |     2 +-
 Plugin/DiscretizationError.cpp                     |     2 +-
 Plugin/DiscretizationError.h                       |     2 +-
 Plugin/Distance.cpp                                |     2 +-
 Plugin/Distance.h                                  |     2 +-
 Plugin/Divergence.cpp                              |     2 +-
 Plugin/Divergence.h                                |     2 +-
 Plugin/DuplicateBoundaries.cpp                     |  4840 +++
 Plugin/DuplicateBoundaries.h                       |    39 +
 Plugin/Eigenvalues.cpp                             |     2 +-
 Plugin/Eigenvalues.h                               |     2 +-
 Plugin/Eigenvectors.cpp                            |     2 +-
 Plugin/Eigenvectors.h                              |     2 +-
 Plugin/ExtractEdges.cpp                            |     2 +-
 Plugin/ExtractEdges.h                              |     2 +-
 Plugin/ExtractElements.cpp                         |     2 +-
 Plugin/ExtractElements.h                           |     2 +-
 Plugin/FaultZone.cpp                               |   111 +-
 Plugin/FaultZone.h                                 |     2 +-
 Plugin/FieldFromAmplitudePhase.cpp                 |     2 +-
 Plugin/FieldFromAmplitudePhase.h                   |     2 +-
 Plugin/Gradient.cpp                                |     2 +-
 Plugin/Gradient.h                                  |     2 +-
 Plugin/HarmonicToTime.cpp                          |     2 +-
 Plugin/HarmonicToTime.h                            |     2 +-
 Plugin/HomologyComputation.cpp                     |     2 +-
 Plugin/HomologyComputation.h                       |     2 +-
 Plugin/HomologyPostProcessing.cpp                  |     2 +-
 Plugin/HomologyPostProcessing.h                    |     2 +-
 Plugin/Integrate.cpp                               |    21 +-
 Plugin/Integrate.h                                 |     2 +-
 Plugin/Isosurface.cpp                              |     2 +-
 Plugin/Isosurface.h                                |     2 +-
 Plugin/Lambda2.cpp                                 |     2 +-
 Plugin/Lambda2.h                                   |     2 +-
 Plugin/Levelset.cpp                                |    50 +-
 Plugin/Levelset.h                                  |     2 +-
 Plugin/LongitudeLatitude.cpp                       |     3 +-
 Plugin/LongitudeLatitude.h                         |     2 +-
 Plugin/MakeSimplex.cpp                             |     2 +-
 Plugin/MakeSimplex.h                               |     2 +-
 Plugin/MathEval.cpp                                |     2 +-
 Plugin/MathEval.h                                  |     2 +-
 Plugin/MeshSubEntities.cpp                         |   151 +
 Plugin/MeshSubEntities.h                           |    31 +
 Plugin/MinMax.cpp                                  |    26 +-
 Plugin/MinMax.h                                    |     2 +-
 Plugin/ModifyComponent.cpp                         |     3 +-
 Plugin/ModifyComponent.h                           |     2 +-
 Plugin/ModulusPhase.cpp                            |     2 +-
 Plugin/ModulusPhase.h                              |     2 +-
 Plugin/NearToFarField.cpp                          |     2 +-
 Plugin/NearToFarField.h                            |     2 +-
 Plugin/NearestNeighbor.cpp                         |     2 +-
 Plugin/NearestNeighbor.h                           |     2 +-
 Plugin/NewView.cpp                                 |     2 +-
 Plugin/NewView.h                                   |     2 +-
 Plugin/Particles.cpp                               |     2 +-
 Plugin/Particles.h                                 |     2 +-
 Plugin/Plugin.cpp                                  |     2 +-
 Plugin/Plugin.h                                    |     2 +-
 Plugin/PluginManager.cpp                           |    12 +-
 Plugin/PluginManager.h                             |     2 +-
 Plugin/Probe.cpp                                   |     2 +-
 Plugin/Probe.h                                     |     2 +-
 Plugin/Remove.cpp                                  |     2 +-
 Plugin/Remove.h                                    |     2 +-
 Plugin/Scal2Tens.cpp                               |     4 +
 Plugin/Scal2Tens.h                                 |     4 +
 Plugin/Scal2Vec.cpp                                |     2 +-
 Plugin/Scal2Vec.h                                  |     2 +-
 Plugin/SimplePartition.cpp                         |     2 +-
 Plugin/SimplePartition.h                           |     2 +-
 Plugin/Skin.cpp                                    |     2 +-
 Plugin/Skin.h                                      |     2 +-
 Plugin/Smooth.cpp                                  |     2 +-
 Plugin/Smooth.h                                    |     2 +-
 Plugin/SphericalRaise.cpp                          |     2 +-
 Plugin/SphericalRaise.h                            |     2 +-
 Plugin/StreamLines.cpp                             |     2 +-
 Plugin/StreamLines.h                               |     2 +-
 Plugin/Tetrahedralize.cpp                          |     2 +-
 Plugin/Tetrahedralize.h                            |     2 +-
 Plugin/Transform.cpp                               |     2 +-
 Plugin/Transform.h                                 |     2 +-
 Plugin/Triangulate.cpp                             |   151 +-
 Plugin/Triangulate.h                               |     2 +-
 Plugin/Warp.cpp                                    |     2 +-
 Plugin/Warp.h                                      |     2 +-
 Post/CMakeLists.txt                                |     2 +-
 Post/ColorTable.cpp                                |     3 +-
 Post/ColorTable.h                                  |     2 +-
 Post/OctreePost.cpp                                |   172 +-
 Post/OctreePost.h                                  |    27 +-
 Post/PView.cpp                                     |     2 +-
 Post/PView.h                                       |     2 +-
 Post/PViewAsSimpleFunction.cpp                     |     2 +-
 Post/PViewAsSimpleFunction.h                       |     2 +-
 Post/PViewData.cpp                                 |    50 +-
 Post/PViewData.h                                   |    21 +-
 Post/PViewDataGModel.cpp                           |    69 +-
 Post/PViewDataGModel.h                             |     3 +-
 Post/PViewDataGModelIO.cpp                         |     3 +-
 Post/PViewDataIO.cpp                               |     2 +-
 Post/PViewDataList.cpp                             |     6 +-
 Post/PViewDataList.h                               |     2 +-
 Post/PViewDataListIO.cpp                           |    65 +-
 Post/PViewDataRemote.h                             |     2 +-
 Post/PViewFactory.cpp                              |     2 +-
 Post/PViewFactory.h                                |     2 +-
 Post/PViewIO.cpp                                   |     2 +-
 Post/PViewOptions.cpp                              |     2 +-
 Post/PViewOptions.h                                |     6 +-
 Post/PViewVertexArrays.cpp                         |     3 +-
 Post/adaptiveData.cpp                              |   276 +-
 Post/adaptiveData.h                                |    81 +-
 Post/shapeFunctions.cpp                            |     2 +-
 Post/shapeFunctions.h                              |     2 +-
 Qt/CMakeLists.txt                                  |     2 +-
 Qt/GLWidget.cpp                                    |     2 +-
 Qt/GLWidget.h                                      |     2 +-
 Qt/Main.cpp                                        |     2 +-
 Qt/QGui.cpp                                        |     2 +-
 Qt/QGui.h                                          |     2 +-
 Qt/graphicWindow.cpp                               |     2 +-
 Qt/graphicWindow.h                                 |     2 +-
 README.txt                                         |     5 +-
 Solver/CMakeLists.txt                              |     3 +-
 Solver/FuncGradDisc.h                              |     2 +-
 Solver/FuncHeaviside.h                             |     2 +-
 Solver/SElement.cpp                                |     2 +-
 Solver/SElement.h                                  |     2 +-
 Solver/STensor33.cpp                               |     2 +-
 Solver/STensor33.h                                 |     5 +-
 Solver/STensor43.cpp                               |     2 +-
 Solver/STensor43.h                                 |     9 +-
 Solver/STensor53.cpp                               |     2 +-
 Solver/STensor53.h                                 |     2 +-
 Solver/STensor63.cpp                               |     2 +-
 Solver/STensor63.h                                 |     2 +-
 Solver/crossConfTerm.h                             |     2 +-
 Solver/distanceTerm.h                              |     2 +-
 Solver/dofManager.cpp                              |     2 +-
 Solver/dofManager.h                                |     2 +-
 Solver/eigenSolver.cpp                             |    27 +-
 Solver/eigenSolver.h                               |    19 +-
 Solver/elasticitySolver.cpp                        |   528 +-
 Solver/elasticitySolver.h                          |    18 +-
 Solver/elasticityTerm.cpp                          |     2 +-
 Solver/elasticityTerm.h                            |     2 +-
 Solver/femTerm.h                                   |    80 +-
 Solver/filters.cpp                                 |     2 +-
 Solver/filters.h                                   |     2 +-
 Solver/frameSolver.h                               |     2 +-
 Solver/functionSpace.cpp                           |     2 +-
 Solver/functionSpace.h                             |    17 +-
 Solver/groupOfElements.cpp                         |     2 +-
 Solver/groupOfElements.h                           |     2 +-
 Solver/helmholtzTerm.h                             |     5 +-
 Solver/laplaceTerm.h                               |     2 +-
 Solver/linearSystem.cpp                            |     2 +-
 Solver/linearSystem.h                              |     2 +-
 Solver/linearSystemCSR.cpp                         |     2 +-
 Solver/linearSystemCSR.h                           |     2 +-
 Solver/linearSystemFull.h                          |     2 +-
 Solver/linearSystemGMM.h                           |     2 +-
 Solver/linearSystemMUMPS.cpp                       |     2 +-
 Solver/linearSystemMUMPS.h                         |     2 +-
 Solver/linearSystemPETSc.cpp                       |     2 +-
 Solver/linearSystemPETSc.h                         |    18 +-
 Solver/linearSystemPETSc.hpp                       |    26 +-
 Solver/materialLaw.h                               |     2 +-
 Solver/multiscaleLaplace.cpp                       |    42 +-
 Solver/multiscaleLaplace.h                         |     2 +-
 Solver/orthogonalTerm.h                            |     2 +-
 Solver/quadratureRules.h                           |     2 +-
 Solver/solverAlgorithms.h                          |     2 +-
 Solver/solverField.h                               |     2 +-
 Solver/sparsityPattern.cpp                         |     2 +-
 Solver/sparsityPattern.h                           |     2 +-
 Solver/terms.cpp                                   |    27 +-
 Solver/terms.h                                     |    32 +-
 Solver/terms.hpp                                   |    40 +-
 Solver/thermicSolver.cpp                           |   318 +
 Solver/thermicSolver.h                             |   100 +
 contrib/ANN/CMakeLists.txt                         |     2 +-
 contrib/Chaco/CMakeLists.txt                       |     2 +-
 contrib/Chaco/main/Gmsh_printf.cpp                 |     1 +
 contrib/DiscreteIntegration/CMakeLists.txt         |     2 +-
 contrib/DiscreteIntegration/README.txt             |    23 +
 contrib/HighOrderMeshOptimizer/CADDistances.cpp    |   589 +
 contrib/HighOrderMeshOptimizer/CADDistances.h      |    43 +
 contrib/HighOrderMeshOptimizer/CMakeLists.txt      |     7 +-
 contrib/HighOrderMeshOptimizer/OptHOM.cpp          |   317 +-
 contrib/HighOrderMeshOptimizer/OptHOM.h            |    28 +-
 contrib/HighOrderMeshOptimizer/OptHomCADDist.cpp   |   246 +
 contrib/HighOrderMeshOptimizer/OptHomCADDist.h     |    31 +
 contrib/HighOrderMeshOptimizer/OptHomElastic.cpp   |     2 +-
 .../HighOrderMeshOptimizer/OptHomFastCurving.cpp   |     7 +
 .../OptHomIntegralBoundaryDist.cpp                 |    48 +
 .../OptHomIntegralBoundaryDist.h                   |     4 +
 contrib/HighOrderMeshOptimizer/OptHomMesh.cpp      |   128 +-
 contrib/HighOrderMeshOptimizer/OptHomMesh.h        |    17 +
 .../OptHomObjContribCADDist.h                      |   108 +
 .../OptHomObjContribCADDistOld.h                   |    96 +
 .../OptHomObjContribMetricMin.h                    |    98 +
 .../OptHomObjContribScaledJac.h                    |    98 +
 contrib/HighOrderMeshOptimizer/OptHomRun.cpp       |   523 +-
 contrib/HighOrderMeshOptimizer/OptHomRun.h         |    19 +-
 contrib/HighOrderMeshOptimizer/README.txt          |    23 +
 contrib/MathEx/CMakeLists.txt                      |     2 +-
 contrib/MeshOptimizer/CMakeLists.txt               |    18 +
 contrib/MeshOptimizer/MeshOpt.cpp                  |   254 +
 contrib/MeshOptimizer/MeshOpt.h                    |    77 +
 contrib/MeshOptimizer/MeshOptCommon.cpp            |   136 +
 contrib/MeshOptimizer/MeshOptCommon.h              |    93 +
 contrib/MeshOptimizer/MeshOptObjContrib.cpp        |    19 +
 contrib/MeshOptimizer/MeshOptObjContrib.h          |    41 +
 contrib/MeshOptimizer/MeshOptObjContribFunc.cpp    |   101 +
 contrib/MeshOptimizer/MeshOptObjContribFunc.h      |   190 +
 .../MeshOptObjContribScaledNodeDispSq.h            |    95 +
 contrib/MeshOptimizer/MeshOptObjectiveFunction.cpp |   108 +
 contrib/MeshOptimizer/MeshOptObjectiveFunction.h   |    31 +
 contrib/MeshOptimizer/MeshOptPatch.cpp             |   837 +
 contrib/MeshOptimizer/MeshOptPatch.h               |   187 +
 contrib/MeshOptimizer/MeshOptVertexCoord.cpp       |   223 +
 contrib/MeshOptimizer/MeshOptVertexCoord.h         |   144 +
 contrib/MeshOptimizer/MeshOptimizer.cpp            |   624 +
 contrib/MeshOptimizer/MeshOptimizer.h              |    41 +
 .../MeshOptimizer/doc/figures/log_barrier/Makefile |     4 +
 .../doc/figures/log_barrier/log_barrier.pdf        |   Bin 0 -> 28796 bytes
 .../doc/figures/log_barrier/log_barrier.tex        |    16 +
 .../doc/figures/log_barrier/log_barrier_max.pdf    |   Bin 0 -> 28746 bytes
 .../doc/figures/log_barrier/log_barrier_max.tex    |    17 +
 .../doc/figures/opti_process/Makefile              |     4 +
 .../doc/figures/opti_process/opti2.dat             |    71 +
 .../doc/figures/opti_process/opti_process.pdf      |   Bin 0 -> 60448 bytes
 .../doc/figures/opti_process/opti_process.tex      |    40 +
 .../doc/figures/patches/patch_def.png              |   Bin 0 -> 15744 bytes
 .../doc/figures/patches/patch_tangled.png          |   Bin 0 -> 16690 bytes
 .../doc/figures/patches/patch_untangled.png        |   Bin 0 -> 15945 bytes
 .../MeshOptimizer/doc/figures/patches/patchdef.xcf |   Bin 0 -> 86327 bytes
 .../doc/figures/untangling/linear.pdf              |   Bin 0 -> 18894 bytes
 .../MeshOptimizer/doc/figures/untangling/p2.pdf    |   Bin 0 -> 19114 bytes
 .../doc/figures/untangling/p2_bad.pdf              |   Bin 0 -> 18933 bytes
 contrib/MeshOptimizer/doc/mesh_optimization.tex    |   831 +
 contrib/MeshQualityOptimizer/CMakeLists.txt        |    11 +
 .../MeshQualityObjContribIdealJac.h                |    98 +
 .../MeshQualityObjContribInvCond.h                 |    98 +
 .../MeshQualityOptimizer/MeshQualityOptimizer.cpp  |   171 +
 .../MeshQualityOptimizer/MeshQualityOptimizer.h    |    73 +
 contrib/MeshQualityOptimizer/README.txt            |    23 +
 contrib/Netgen/CMakeLists.txt                      |     2 +-
 contrib/Parasolid/CMakeLists.txt                   |     6 +
 contrib/Parasolid/interface_parasolid/Makefile     |    50 +
 .../interface_parasolid/ParasolidDataBase.cpp      |   731 +
 .../interface_parasolid/ParasolidDataBase.h        |   100 +
 .../interface_parasolid/ParasolidGModelBuilder.cpp |   818 +
 .../interface_parasolid/ParasolidGModelBuilder.h   |    52 +
 .../Parasolid/interface_parasolid/callbacks.cpp    |  1037 +
 contrib/Parasolid/interface_parasolid/callbacks.h  |    55 +
 contrib/Parasolid/interface_parasolid/fg.c         |   827 +
 contrib/Parasolid/interface_parasolid/frustrum.c   |  2720 ++
 .../Parasolid/interface_parasolid/frustrum_delta.c |   415 +
 .../interface_parasolid/include/frustrum_ifails.h  |    47 +
 .../include/frustrum_interface.h                   |    43 +
 .../interface_parasolid/include/frustrum_tokens.h  |   153 +
 .../interface_parasolid/include/kernel_interface.h |  3259 ++
 .../interface_parasolid/include/parasolid_debug.h  |   504 +
 .../interface_parasolid/include/parasolid_ifails.h |   657 +
 .../interface_parasolid/include/parasolid_kernel.h | 29735 +++++++++++++++++++
 .../interface_parasolid/include/parasolid_tokens.h |   737 +
 .../include/parasolid_typedefs.h                   |   181 +
 contrib/Parasolid/interface_parasolid/main.c       |   386 +
 .../interface_parasolid/schema/sch_0_15.sch_txt    |   584 +
 .../interface_parasolid/schema/sch_10002.sch_txt   |  1236 +
 .../interface_parasolid/schema/sch_10004.sch_txt   |  1238 +
 .../schema/sch_100_1000.sch_txt                    |   586 +
 .../interface_parasolid/schema/sch_10100.sch_txt   |  1252 +
 .../interface_parasolid/schema/sch_1022.sch_txt    |   738 +
 .../interface_parasolid/schema/sch_11003.sch_txt   |  1254 +
 .../interface_parasolid/schema/sch_11004.sch_txt   |  1254 +
 .../interface_parasolid/schema/sch_110_0.sch_txt   |   586 +
 .../interface_parasolid/schema/sch_12006.sch_txt   |  1274 +
 .../interface_parasolid/schema/sch_120_0.sch_txt   |   586 +
 .../interface_parasolid/schema/sch_12102.sch_txt   |  1276 +
 .../interface_parasolid/schema/sch_12103.sch_txt   |  1279 +
 .../interface_parasolid/schema/sch_13005.sch_txt   |  1279 +
 .../interface_parasolid/schema/sch_13006.sch_txt   |  1280 +
 .../interface_parasolid/schema/sch_130_0.sch_txt   |   586 +
 .../interface_parasolid/schema/sch_14000.sch_txt   |  1281 +
 .../interface_parasolid/schema/sch_140_0.sch_txt   |   586 +
 .../interface_parasolid/schema/sch_15003.sch_txt   |  1286 +
 .../interface_parasolid/schema/sch_15102.sch_txt   |  1298 +
 .../interface_parasolid/schema/sch_16002.sch_txt   |  1302 +
 .../interface_parasolid/schema/sch_16003.sch_txt   |  1303 +
 .../interface_parasolid/schema/sch_16004.sch_txt   |  1306 +
 .../interface_parasolid/schema/sch_16100.sch_txt   |  1313 +
 .../interface_parasolid/schema/sch_17104.sch_txt   |  1342 +
 .../interface_parasolid/schema/sch_17105.sch_txt   |  1357 +
 .../interface_parasolid/schema/sch_17106.sch_txt   |  1355 +
 .../interface_parasolid/schema/sch_18005.sch_txt   |  1369 +
 .../interface_parasolid/schema/sch_18007.sch_txt   |  1389 +
 .../interface_parasolid/schema/sch_18106.sch_txt   |  1381 +
 .../interface_parasolid/schema/sch_19002.sch_txt   |  1386 +
 .../interface_parasolid/schema/sch_19007.sch_txt   |  1399 +
 .../interface_parasolid/schema/sch_19008.sch_txt   |  1398 +
 .../interface_parasolid/schema/sch_20000.sch_txt   |  1407 +
 .../schema/sch_200_1009.sch_txt                    |   691 +
 .../schema/sch_200_1010.sch_txt                    |   693 +
 .../schema/sch_200_1011.sch_txt                    |   696 +
 .../schema/sch_200_1012.sch_txt                    |   696 +
 .../schema/sch_210_1012.sch_txt                    |   696 +
 .../interface_parasolid/schema/sch_25000.sch_txt   |  1439 +
 .../interface_parasolid/schema/sch_25001.sch_txt   |  1434 +
 .../interface_parasolid/schema/sch_26102.sch_txt   |  1470 +
 .../interface_parasolid/schema/sch_26104.sch_txt   |  1471 +
 .../interface_parasolid/schema/sch_26105.sch_txt   |  1472 +
 .../interface_parasolid/schema/sch_3000.sch_txt    |   738 +
 .../schema/sch_300_1022.sch_txt                    |   739 +
 .../interface_parasolid/schema/sch_4011.sch_txt    |   782 +
 .../interface_parasolid/schema/sch_4022.sch_txt    |   837 +
 .../interface_parasolid/schema/sch_4030.sch_txt    |   847 +
 .../interface_parasolid/schema/sch_4031.sch_txt    |   847 +
 .../interface_parasolid/schema/sch_4032.sch_txt    |   847 +
 .../interface_parasolid/schema/sch_4035.sch_txt    |   848 +
 .../interface_parasolid/schema/sch_4039.sch_txt    |   851 +
 .../interface_parasolid/schema/sch_5015.sch_txt    |   958 +
 .../interface_parasolid/schema/sch_5021.sch_txt    |  1030 +
 .../interface_parasolid/schema/sch_5030.sch_txt    |  1011 +
 .../interface_parasolid/schema/sch_5031.sch_txt    |  1011 +
 .../interface_parasolid/schema/sch_5032.sch_txt    |  1013 +
 .../interface_parasolid/schema/sch_5033.sch_txt    |   973 +
 .../interface_parasolid/schema/sch_5041.sch_txt    |   986 +
 .../interface_parasolid/schema/sch_5049.sch_txt    |   986 +
 .../interface_parasolid/schema/sch_5050.sch_txt    |   988 +
 .../interface_parasolid/schema/sch_5051.sch_txt    |   983 +
 .../interface_parasolid/schema/sch_5053.sch_txt    |   984 +
 .../interface_parasolid/schema/sch_5054.sch_txt    |   982 +
 .../interface_parasolid/schema/sch_5056.sch_txt    |   986 +
 .../interface_parasolid/schema/sch_5057.sch_txt    |   986 +
 .../interface_parasolid/schema/sch_5058.sch_txt    |   982 +
 .../interface_parasolid/schema/sch_5059.sch_txt    |   982 +
 .../interface_parasolid/schema/sch_6020.sch_txt    |  1110 +
 .../interface_parasolid/schema/sch_6021.sch_txt    |  1111 +
 .../interface_parasolid/schema/sch_7002.sch_txt    |  1110 +
 .../interface_parasolid/schema/sch_7007.sch_txt    |  1103 +
 .../interface_parasolid/schema/sch_7014.sch_txt    |  1187 +
 .../interface_parasolid/schema/sch_7015.sch_txt    |  1180 +
 .../interface_parasolid/schema/sch_7016.sch_txt    |  1163 +
 .../interface_parasolid/schema/sch_8000.sch_txt    |  1147 +
 .../interface_parasolid/schema/sch_8002.sch_txt    |  1148 +
 .../interface_parasolid/schema/sch_8005.sch_txt    |  1152 +
 .../interface_parasolid/schema/sch_8008.sch_txt    |  1161 +
 .../interface_parasolid/schema/sch_8101.sch_txt    |  1172 +
 .../interface_parasolid/schema/sch_9001.sch_txt    |  1175 +
 .../interface_parasolid/schema/sch_9003.sch_txt    |  1226 +
 .../interface_parasolid/schema/sch_9008.sch_txt    |  1227 +
 .../interface_parasolid/schema/sch_9100.sch_txt    |  1229 +
 .../testcases/3D solid-X-Y plane.xmt_txt           |    78 +
 .../testcases/3D solid-Z-Y plane.xmt_txt           |    73 +
 .../interface_parasolid/testcases/B1.xmt_txt       |    92 +
 .../interface_parasolid/testcases/B2.xmt_txt       |   163 +
 .../interface_parasolid/testcases/B3.xmt_txt       |    90 +
 .../interface_parasolid/testcases/B4.xmt_txt       |   160 +
 .../interface_parasolid/testcases/Block.xmt_txt    |    61 +
 .../testcases/Cutting-punch.xmt_txt                |   124 +
 .../testcases/Cutting-punch2.xmt_txt               |   119 +
 .../testcases/Hole CAD model.xmt_txt               |   144 +
 .../testcases/Work-piece.xmt_txt                   |    89 +
 .../interface_parasolid/testcases/blend1.xmt_txt   |   120 +
 .../interface_parasolid/testcases/blend2.xmt_txt   |   109 +
 .../interface_parasolid/testcases/blend3.xmt_txt   |   146 +
 .../interface_parasolid/testcases/brut.xmt_txt     |   476 +
 .../interface_parasolid/testcases/bsurf.xmt_txt    |    49 +
 .../interface_parasolid/testcases/fan.xmt_txt      |  1176 +
 .../testcases/instance_block.xmt_txt               |    71 +
 .../testcases/instance_block_inscribed.xmt_txt     |    90 +
 .../testcases/instance_block_tool.xmt_txt          |    80 +
 .../testcases/instance_cuboid_tool.xmt_txt         |    72 +
 .../testcases/instance_cuboid_tool2.xmt_txt        |    84 +
 .../testcases/instance_h_shape.xmt_txt             |   167 +
 .../testcases/instance_multi_level.xmt_txt         |   222 +
 .../testcases/instance_prism_tool.xmt_txt          |    86 +
 .../testcases/instance_sheet_body.xmt_txt          |    64 +
 .../testcases/instance_solid_cyl.xmt_txt           |    43 +
 .../testcases/instance_solid_cyl2.xmt_txt          |    43 +
 .../testcases/sheet_body.xmt_txt                   |    23 +
 .../testcases/twoplates.xmt_txt                    |   279 +
 contrib/Salome/CMakeLists.txt                      |     2 +-
 contrib/bamg/CMakeLists.txt                        |     2 +-
 contrib/bamg/bamglib/Mesh2.h                       |     3 +-
 contrib/blossom/CMakeLists.txt                     |     2 +-
 contrib/gmm/gmm_blas.h                             |    10 +-
 contrib/kbipack/CMakeLists.txt                     |     2 +-
 contrib/mmg3d/CMakeLists.txt                       |     2 +-
 contrib/mobile/Android/AndroidManifest.xml         |    10 +
 .../Android/res/layout/fragment_postprocessing.xml |    67 +-
 contrib/mobile/Android/res/layout/splash.xml       |     5 +
 contrib/mobile/Android/res/values/colors.xml       |     3 +
 .../Android/src/org/geuz/onelab/AboutActivity.java |    25 +
 .../Android/src/org/geuz/onelab/GLESRender.java    |    24 +-
 .../mobile/Android/src/org/geuz/onelab/Gmsh.java   |    57 +
 .../Android/src/org/geuz/onelab/MainActivity.java  |   195 +-
 .../mobile/Android/src/org/geuz/onelab/Model.java  |    20 +
 .../src/org/geuz/onelab/ModelArrayAdapter.java     |    23 +
 .../Android/src/org/geuz/onelab/ModelFragment.java |   108 +
 .../Android/src/org/geuz/onelab/ModelList.java     |   131 +
 .../src/org/geuz/onelab/OptionsActivity.java       |    44 +
 .../org/geuz/onelab/OptionsDisplayFragment.java    |   247 +-
 .../src/org/geuz/onelab/OptionsFragment.java       |   183 +-
 .../src/org/geuz/onelab/OptionsModelFragment.java  |   207 +-
 .../geuz/onelab/OptionsPostProcessingFragment.java |   111 +-
 .../Android/src/org/geuz/onelab/Parameter.java     |    78 +-
 .../src/org/geuz/onelab/ParameterNumber.java       |   186 +
 .../src/org/geuz/onelab/ParameterString.java       |    88 +
 .../org/geuz/onelab/PostProcessingActivity.java    |    43 +-
 .../src/org/geuz/onelab/SeparatedListView.java     |    32 +-
 .../Android/src/org/geuz/onelab/SplashScreen.java  |    43 +
 .../Android/src/org/geuz/onelab/Stepper.java       |    10 +
 .../Android/src/org/geuz/onelab/StringTexture.java |    21 +
 .../src/org/geuz/onelab/mGLSurfaceView.java        |    43 +
 contrib/mobile/CMakeLists.txt                      |    47 +-
 contrib/mobile/README.txt                          |   367 +
 contrib/mobile/androidGModel.cpp                   |    94 +
 contrib/mobile/androidGModel.h                     |   133 +-
 contrib/mobile/drawContext.cpp                     |   184 +
 contrib/mobile/drawContext.h                       |     8 +
 .../mobile/iOS/Onelab.xcodeproj/project.pbxproj    |    16 +-
 contrib/mobile/iOS/Onelab/AboutViewController.mm   |     5 +
 contrib/mobile/iOS/Onelab/ModelViewController.mm   |     4 +
 contrib/mobile/iOS/Onelab/Onelab-Info.plist        |     8 +
 contrib/mobile/iOS/Onelab/Parameter.mm             |   101 +
 contrib/mobile/iOS/Onelab/Utils.h                  |     3 +
 contrib/mobile/iOS/Onelab/Utils.mm                 |    20 +
 contrib/mobile/iOS/Onelab/emulatorFix.c            |    48 +
 ...ndroid_petsc_reconfigure-armv7-android-linux.py |    32 +
 contrib/mobile/utils/iOS.cmake                     |     7 +
 contrib/mobile/utils/onelab_android_build.sh       |    59 +
 contrib/mobile/utils/onelab_ios_build.sh           |    10 +
 contrib/mobile/utils/onelab_iossimulator_build.sh  |     4 +
 contrib/mpeg_encode/CMakeLists.txt                 |     2 +-
 contrib/onelab/CMakeLists.txt                      |     2 +-
 contrib/onelab/OnelabClients.cpp                   |    11 +-
 contrib/onelab/OnelabClients.h                     |     3 +
 contrib/onelab/OnelabMessage.cpp                   |     2 +-
 contrib/onelab/OnelabParser.cpp                    |    48 +-
 contrib/onelab/README.txt                          |    23 +
 contrib/onelab/myOS.cpp                            |     2 +-
 contrib/onelab/myOS.h                              |     2 +-
 contrib/onelab/python/onelab.py                    |   162 +-
 contrib/onelab2/CMakeLists.txt                     |    34 +
 contrib/onelab2/GmshLocalClient.cpp                |    76 +
 contrib/onelab2/GmshLocalClient.h                  |    38 +
 contrib/onelab2/GmshNetworkClient.cpp              |    54 +
 contrib/onelab2/GmshNetworkClient.h                |    36 +
 contrib/onelab2/NetworkUtils.cpp                   |   146 +
 contrib/onelab2/NetworkUtils.h                     |   156 +
 contrib/onelab2/Onelab.cpp                         |    68 +
 contrib/onelab2/OnelabAttributes.cpp               |   198 +
 contrib/onelab2/OnelabAttributes.h                 |   233 +
 contrib/onelab2/OnelabDatabase.cpp                 |   108 +
 contrib/onelab2/OnelabDatabase.h                   |   252 +
 contrib/onelab2/OnelabLocalClient.h                |    30 +
 contrib/onelab2/OnelabLocalNetworkClient.cpp       |    74 +
 contrib/onelab2/OnelabLocalNetworkClient.h         |    41 +
 contrib/onelab2/OnelabNetworkClient.cpp            |   237 +
 contrib/onelab2/OnelabNetworkClient.h              |   183 +
 contrib/onelab2/OnelabProtocol.cpp                 |   162 +
 contrib/onelab2/OnelabProtocol.h                   |    44 +
 contrib/onelab2/OnelabServer.cpp                   |   741 +
 contrib/onelab2/OnelabServer.h                     |   159 +
 contrib/onelab2/UdtUtils.h                         |    80 +
 contrib/onelab2/VirtualClient.h                    |    44 +
 contrib/onelab2/python/onelab2.py                  |   441 +
 contrib/rtree/README.TXT                           |    43 -
 contrib/rtree/rtree.h                              |  1593 -
 contrib/voro++/src/cell.hh                         |     2 +-
 doc/CREDITS.txt                                    |     7 +-
 doc/VERSIONS.txt                                   |    21 +
 doc/gmsh.html                                      |    37 +-
 doc/texinfo/cmake_options.texi                     |    16 +-
 doc/texinfo/commandline.texi                       |    11 +-
 doc/texinfo/gmsh.texi                              |   287 +-
 doc/texinfo/opt_fields.texi                        |    39 +-
 doc/texinfo/opt_general.texi                       |    56 +-
 doc/texinfo/opt_geometry.texi                      |     7 +-
 doc/texinfo/opt_mesh.texi                          |     5 +
 doc/texinfo/opt_plugin.texi                        |    74 +
 doc/texinfo/opt_post.texi                          |    15 +
 doc/texinfo/opt_solver.texi                        |    10 +
 doc/texinfo/opt_view.texi                          |    21 +-
 doc/texinfo/shortcuts.texi                         |     2 +
 tutorial/t10.geo                                   |    21 +-
 tutorial/t11.geo                                   |    17 +-
 tutorial/t12.geo                                   |    21 +-
 tutorial/t13.geo                                   |    29 +-
 tutorial/t3.geo                                    |     9 +-
 tutorial/t5.geo                                    |     6 +
 tutorial/t6.geo                                    |     6 +-
 utils/api_demos/mainHomology.cpp                   |     2 +-
 utils/misc/gmsh_app.plist                          |     2 +-
 utils/misc/package_gmsh_getdp.sh                   |   106 +-
 utils/misc/release_gmsh_getdp.sh                   |    23 +
 utils/misc/update_copyright.sh                     |     4 +-
 utils/solvers/c++/GmshSocket.h                     |    20 +-
 utils/solvers/c++/onelab.h                         |   380 +-
 utils/solvers/python/pend.py                       |    14 +-
 wrappers/gmshpy/CMakeLists.txt                     |    10 +-
 wrappers/gmshpy/gmshCommon.i                       |     2 +
 wrappers/gmshpy/gmshGeo.i                          |    67 +-
 wrappers/gmshpy/gmshMesh.i                         |     9 +
 wrappers/gmshpy/gmshNumeric.i                      |    18 +
 wrappers/gmshpy/gmshPost.i                         |     3 +
 wrappers/gmshpy/gmshSolver.i                       |     8 +
 wrappers/gmshpy/gmshtypemaps.i                     |    40 +-
 1054 files changed, 199192 insertions(+), 10699 deletions(-)

diff --cc CMakeLists.txt
index 0c00f7e,151785e..41c8857
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@@ -66,6 -67,9 +67,12 @@@ opt(PETSC4PY "Enable petsc4py wrappers 
  opt(OCC "Enable Open CASCADE geometrical models" ${DEFAULT})
  opt(ONELAB "Enable ONELAB solver interface" ${DEFAULT})
  opt(ONELAB2 "Enable experimental ONELAB-Cloud solver interface" OFF)
++<<<<<<< HEAD
++=======
+ if(ENABLE_ONELAB2)
+   opt(UDT "Enable UDT library for ONELAB-Cloud" ON)
+ endif(ENABLE_ONELAB2)
++>>>>>>> upstream/2.9.3+dfsg1
  opt(ONELAB_METAMODEL "Enable ONELAB metamodels (experimental)" ${DEFAULT})
  opt(OPENMP "Enable OpenMP (experimental)" OFF)
  opt(OPTHOM "Enable high-order mesh optimization tools" ${DEFAULT})
@@@ -91,8 -94,8 +97,13 @@@ opt(WRAP_JAVA "Enable generation of Jav
  opt(WRAP_PYTHON "Enable generation of Python wrappers" OFF)
  
  set(GMSH_MAJOR_VERSION 2)
++<<<<<<< HEAD
 +set(GMSH_MINOR_VERSION 8)
 +set(GMSH_PATCH_VERSION 5)
++=======
+ set(GMSH_MINOR_VERSION 9)
+ set(GMSH_PATCH_VERSION 3)
++>>>>>>> upstream/2.9.3+dfsg1
  set(GMSH_EXTRA_VERSION "" CACHE STRING "Gmsh extra version string")
  
  set(GMSH_VERSION "${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}")
@@@ -108,7 -111,9 +119,12 @@@ set(GMSH_AP
      Common/onelab.h Common/GmshSocket.h Common/onelabUtils.h
    Numeric/Numeric.h Numeric/GaussIntegration.h Numeric/polynomialBasis.h
      Numeric/JacobianBasis.h Numeric/MetricBasis.h Numeric/bezierBasis.h Numeric/fullMatrix.h
++<<<<<<< HEAD
++=======
+     Numeric/FuncSpaceData.h
++>>>>>>> upstream/2.9.3+dfsg1
      Numeric/simpleFunction.h Numeric/cartesian.h Numeric/ElementType.h
+     Numeric/BasisFactory.h
    Geo/GModel.h Geo/GEntity.h Geo/GPoint.h Geo/GVertex.h Geo/GEdge.h 
      Geo/GFace.h Geo/GRegion.h Geo/GEdgeLoop.h Geo/GEdgeCompound.h 
      Geo/GFaceCompound.h Geo/GRegionCompound.h Geo/GRbf.h Geo/MVertex.h
@@@ -501,21 -535,38 +546,52 @@@ if(ENABLE_NATIVE_FILE_CHOOSER
    set_config_option(HAVE_NATIVE_FILE_CHOOSER "NativeFileChooser")
  endif(ENABLE_NATIVE_FILE_CHOOSER)
  
+ if(ENABLE_ONELAB2)
+   if(ENABLE_UDT)
+     find_package(Threads REQUIRED)
+     find_path(UDT_INCLUDE_DIR "udt.h" PATH_SUFFIXES include udt)
+     find_library(UDT_LIBRARY udt)
+     if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
+       set_config_option(HAVE_UDT "UDT")
+       list(APPEND EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+       list(APPEND EXTERNAL_LIBRARIES ${UDT_LIBRARY})
+       list(APPEND EXTERNAL_INCLUDES ${UDT_INCLUDE_DIR})
+     else(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
+       message(FATAL_ERROR "Unable to find UDT library or threads")
+     endif(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
+   endif(ENABLE_UDT)
+   set_config_option(HAVE_ONELAB2 "ONELAB2")
+   add_subdirectory(contrib/onelab2)
+   include_directories(contrib/onelab2)
+ endif(ENABLE_ONELAB2)
+ 
  if(ENABLE_ONELAB)
    set_config_option(HAVE_ONELAB "ONELAB")
++<<<<<<< HEAD
 +  if(ENABLE_ONELAB_METAMODEL)
 +    add_subdirectory(contrib/onelab)
 +    include_directories(contrib/onelab)
 +    set_config_option(HAVE_ONELAB_METAMODEL "ONELABMetamodel")
 +  endif(ENABLE_ONELAB_METAMODEL)
 +  file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab/python/onelab.py
 +            DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
++=======
+   if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab)
+     if(ENABLE_ONELAB_METAMODEL)
+       add_subdirectory(contrib/onelab)
+       include_directories(contrib/onelab)
+       set_config_option(HAVE_ONELAB_METAMODEL "ONELABMetamodel")
+     endif(ENABLE_ONELAB_METAMODEL)
+     file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab/python/onelab.py
+               DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+   endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab)
++>>>>>>> upstream/2.9.3+dfsg1
  endif(ENABLE_ONELAB)
  
 +if(ENABLE_ONELAB2)
 +  set_config_option(HAVE_ONELAB2 "ONELAB2")
 +endif(ENABLE_ONELAB2)
 +
  if(ENABLE_BUILD_IOS)
    find_file(CMAKE_TOOLCHAIN_FILE "ios.cmake")
    if(NOT CMAKE_TOOLCHAIN_FILE)
@@@ -1094,8 -1161,8 +1186,9 @@@ endif(HAVE_ZLIB AND ENABLE_COMPRESSED_I
  
  if(ENABLE_WRAP_PYTHON)
    find_package(SWIG)
 +  find_package(PythonInterp)
    find_package(PythonLibs)
+   find_package(PythonInterp ${PYTHONLIBS_VERSION_STRING} EXACT)
    if(SWIG_FOUND AND PYTHONLIBS_FOUND)
      message(STATUS "Found SWIG version " ${SWIG_VERSION})
      string(SUBSTRING ${SWIG_VERSION} 0 1 SWIG_MAJOR_VERSION)
@@@ -1109,10 -1176,12 +1202,19 @@@ endif(ENABLE_WRAP_PYTHON
  
  if(HAVE_PYTHON)
    if(ENABLE_NUMPY)
++<<<<<<< HEAD
 +    EXEC_PROGRAM (${PYTHON_EXECUTABLE}
 +      ARGS "-c \"import numpy; print(numpy.get_include())\""
 +      OUTPUT_VARIABLE NUMPY_INC
 +      RETURN_VALUE NUMPY_NOT_FOUND)
++=======
+     if (NOT NUMPY_INC)
+       EXEC_PROGRAM (${PYTHON_EXECUTABLE}
+         ARGS "-c \"import numpy; print(numpy.get_include())\""
+         OUTPUT_VARIABLE NUMPY_INC
+         RETURN_VALUE NUMPY_NOT_FOUND)
+     endif(NOT NUMPY_INC)
++>>>>>>> upstream/2.9.3+dfsg1
      if(NUMPY_INC)
        list(APPEND EXTERNAL_INCLUDES ${NUMPY_INC})
        set_config_option(HAVE_NUMPY "Numpy")
@@@ -1676,24 -1761,27 +1794,48 @@@ endif(ENABLE_WRAP_JAVA
  
  include(CPack)
  
++<<<<<<< HEAD
 +include(CTest)
 +file(GLOB_RECURSE TESTFILES 
 +     tutorial/*.geo demos/*.geo benchmarks/?d/*.geo benchmarks/extrude/*.geo)
 +foreach(TESTFILE ${TESTFILES})
 +  # use relative path for cygwin/mingw (the pure win exe built with the mingw 
 +  # compilers does not understand a full cygwin-style path)
 +  FILE(RELATIVE_PATH TEST ${CMAKE_CURRENT_BINARY_DIR} ${TESTFILE})
 +  add_test(${TEST} ./gmsh ${TEST} -3 -nopopup -o ./tmp.msh)
 +endforeach()
 +# if(HAVE_PYTHON)
 +#   file(GLOB_RECURSE TESTFILES tutorial/*.py)
 +#   foreach(TESTFILE ${TESTFILES})
 +#     add_test(NAME ${TESTFILE} 
 +#              COMMAND ${PYTHON_EXECUTABLE}
 +#                      ${TESTFILE} $<CONFIGURATION>)
 +#     # sys.path.insert(0, "path/to/your/package")
 +#   endforeach()
 +# endif(HAVE_PYTHON)
++=======
+ if(NOT DISABLE_GMSH_TESTS)
+   #disabling tests is usefull when including this CMakeLists in an external project
+   include(CTest)
+   file(GLOB_RECURSE TESTFILES 
+        tutorial/*.geo demos/*.geo benchmarks/?d/*.geo benchmarks/extrude/*.geo)
+   foreach(TESTFILE ${TESTFILES})
+     # use relative path for cygwin/mingw (the pure win exe built with the mingw 
+     # compilers does not understand a full cygwin-style path)
+     FILE(RELATIVE_PATH TEST ${CMAKE_CURRENT_BINARY_DIR} ${TESTFILE})
+     add_test(${TEST} ./gmsh ${TEST} -3 -nopopup -o ./tmp.msh)
+   endforeach()
+   # if(HAVE_PYTHON)
+   #   file(GLOB_RECURSE TESTFILES tutorial/*.py)
+   #   foreach(TESTFILE ${TESTFILES})
+   #     add_test(NAME ${TESTFILE} 
+   #              COMMAND ${PYTHON_EXECUTABLE}
+   #                      ${TESTFILE} $<CONFIGURATION>)
+   #     # sys.path.insert(0, "path/to/your/package")
+   #   endforeach()
+   # endif(HAVE_PYTHON)
+ endif(NOT DISABLE_GMSH_TESTS)
++>>>>>>> upstream/2.9.3+dfsg1
  
  message(STATUS "")
  message(STATUS "Gmsh ${GMSH_VERSION} has been configured for ${GMSH_OS}")
diff --cc Common/CommandLine.cpp
index 60eefc2,3768e66..68086f1
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@@ -32,6 -33,14 +33,17 @@@
  #include "petsc.h"
  #endif
  
++<<<<<<< HEAD
++=======
+ #if defined(HAVE_OCC)
+ #include "Standard_Version.hxx"
+ #endif
+ 
+ #if defined(HAVE_MED)
+ #include "med.h"
+ #endif
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #if defined(HAVE_POST)
  #include "PView.h"
  #endif
@@@ -890,16 -884,39 +887,46 @@@ void GetOptions(int argc, char *argv[]
            Msg::Fatal("Missing format");
        }
        else if(!strcmp(argv[i] + 1, "listen")) {
+         i++;
+ #if !defined(HAVE_ONELAB2)
          CTX::instance()->solver.listen = 1;
+ #else
+         CTX::instance()->batch = 1;
+         if(argv[i]) {
+           CTX::instance()->onelab.listen_port = atoi(argv[i++]);
+         }
+         else
+           CTX::instance()->onelab.listen_port = 1148;
+ #endif
+       }
+       else if(!strcmp(argv[i] + 1, "minterpreter")) {
+         i++;
+         if(argv[i])
+           CTX::instance()->solver.octaveInterpreter = argv[i++];
+         else
+           Msg::Fatal("Missing interpreter name");
+       }
+       else if(!strcmp(argv[i] + 1, "pyinterpreter")) {
+         i++;
+         if(argv[i])
+           CTX::instance()->solver.pythonInterpreter = argv[i++];
+         else
+           Msg::Fatal("Missing interpreter name");
+       }
+       else if(!strcmp(argv[i] + 1, "bg")){
          i++;
+         if(argv[i])
+           CTX::instance()->bgImageFileName = argv[i++];
+         else
+           Msg::Fatal("Missing filename");
        }
 +      else if(!strcmp(argv[i] + 1, "bg")){
 +        i++;
 +        if(argv[i])
 +          CTX::instance()->bgImageFileName = argv[i++];
 +        else
 +          Msg::Fatal("Missing filename");
 +      }
        else if(!strcmp(argv[i] + 1, "version") || !strcmp(argv[i] + 1, "-version")) {
          fprintf(stderr, "%s\n", GMSH_VERSION);
          Msg::Exit(0);
@@@ -916,14 -933,23 +943,31 @@@
                  FL_MINOR_VERSION, FL_PATCH_VERSION);
  #endif
  #if defined(HAVE_PETSC)
++<<<<<<< HEAD
 +        fprintf(stderr, "PETSc version    : %d.%d.%d\n", PETSC_VERSION_MAJOR,
 +                PETSC_VERSION_MINOR, PETSC_VERSION_SUBMINOR);
++=======
+         fprintf(stderr, "PETSc version    : %d.%d.%d (%s arithmtic)\n", PETSC_VERSION_MAJOR,
+                 PETSC_VERSION_MINOR, PETSC_VERSION_SUBMINOR,
++>>>>>>> upstream/2.9.3+dfsg1
  #if defined(PETSC_USE_COMPLEX)
-         fprintf(stderr, "PETSc arithmetic : Complex\n");
+                 "complex"
  #else
-         fprintf(stderr, "PETSc arithmetic : Real\n");
+                 "real"
+ #endif
+                 );
+ #endif
++<<<<<<< HEAD
++=======
+ #if defined(HAVE_OCC)
+         fprintf(stderr, "OCC version      : %d.%d.%d\n", OCC_VERSION_MAJOR,
+                 OCC_VERSION_MINOR, OCC_VERSION_MAINTENANCE);
  #endif
+ #if defined(HAVE_MED)
+         fprintf(stderr, "MED version      : %d.%d.%d\n", MED_NUM_MAJEUR,
+                 MED_NUM_MINEUR, MED_NUM_RELEASE);
  #endif
++>>>>>>> upstream/2.9.3+dfsg1
          fprintf(stderr, "Packaged by      : %s\n", GMSH_PACKAGER);
          fprintf(stderr, "Web site         : http://www.geuz.org/gmsh/\n");
          fprintf(stderr, "Mailing list     : gmsh at geuz.org\n");
diff --cc Common/Context.h
index 2079af1,36f6da7..27577a7
--- a/Common/Context.h
+++ b/Common/Context.h
@@@ -70,6 -72,7 +72,10 @@@ struct contextGeometryOptions 
    double tolerance, snap[3], transform[3][3], offset[3];
    int occFixDegenerated, occFixSmallEdges, occFixSmallFaces;
    int occSewFaces, occConnectFaces;
++<<<<<<< HEAD
++=======
+   double occScaling;
++>>>>>>> upstream/2.9.3+dfsg1
    int copyMeshingMethod, copyDisplayAttributes, exactExtrusion;
    int matchGeomAndMesh;
    int hideCompounds, orientedPhysicals;
diff --cc Common/CreateFile.cpp
index d4a2a2d,d12c2dd..431a772
--- a/Common/CreateFile.cpp
+++ b/Common/CreateFile.cpp
@@@ -545,7 -545,10 +545,14 @@@ void CreateOutputFile(const std::strin
        }
        PixelBuffer *buffer = GetCompositePixelBuffer(GL_RGB, GL_UNSIGNED_BYTE);
        drawContext *ctx = FlGui::instance()->getCurrentOpenglWindow()->getDrawContext();
++<<<<<<< HEAD
 +      print_pgf(name, num, cnt, buffer, ctx->r, ctx->viewport, ctx->proj, ctx->model);
++=======
+       GLint width = FlGui::instance()->getCurrentOpenglWindow()->pixel_w();
+       GLint height = FlGui::instance()->getCurrentOpenglWindow()->pixel_h();
+       GLint pixel_viewport[4] = {0, 0, width, height};
+       print_pgf(name, num, cnt, buffer, ctx->r, pixel_viewport, ctx->proj, ctx->model);
++>>>>>>> upstream/2.9.3+dfsg1
        delete buffer;
        // restore view
        if(restoreGeneralAxis) opt_general_axes(0, GMSH_SET| GMSH_GUI, 1);
diff --cc Common/Gmsh.cpp
index 3d24486,926ead8..8d46eb8
--- a/Common/Gmsh.cpp
+++ b/Common/Gmsh.cpp
@@@ -142,6 -165,30 +165,33 @@@ int GmshGetOption(const std::string &ca
    return ColorOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
  }
  
++<<<<<<< HEAD
++=======
+ std::string GmshGetStringOption(const std::string &category, const std::string &name,
+                                 int index)
+ {
+   std::string value;
+   StringOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
+   return value;
+ }
+ 
+ double GmshGetNumberOption(const std::string &category, const std::string &name,
+                            int index)
+ {
+   double value;
+   NumberOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
+   return value;
+ }
+ 
+ int GmshGetColorOption(const std::string &category, const std::string &name,
+                        int index)
+ {
+   unsigned int value;
+   ColorOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
+   return value;
+ }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  int GmshRestoreDefaultOptions()
  {
    ReInitOptions(0);
diff --cc Common/Gmsh.h
index e6245c4,5485404..c411d27
--- a/Common/Gmsh.h
+++ b/Common/Gmsh.h
@@@ -27,6 -33,12 +33,15 @@@ int GmshGetOption(const std::string &ca
                    double &value, int index=0);
  int GmshGetOption(const std::string &category, const std::string &name,
                    unsigned int &value, int index=0);
++<<<<<<< HEAD
++=======
+ std::string GmshGetStringOption(const std::string &category, const std::string &name,
+                                 int index=0);
+ double GmshGetNumberOption(const std::string &category, const std::string &name,
+                            int index=0);
+ unsigned int GmshGetColorOption(const std::string &category, const std::string &name,
+                                 int index=0);
++>>>>>>> upstream/2.9.3+dfsg1
  int GmshRestoreDefaultOptions();
  int GmshOpenProject(const std::string &fileName);
  int GmshClearProject();
diff --cc Common/GmshDefines.h
index a4e360d,8a3b647..a7f6449
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@@ -211,8 -212,9 +212,14 @@@
  #define MSH_TET_SUB 136
  #define MSH_TET_16  137
  #define MSH_TRI_MINI 138
++<<<<<<< HEAD
 +
 +#define MSH_NUM_TYPE 138
++=======
+ #define MSH_TET_MINI 139
+ 
+ #define MSH_NUM_TYPE 139
++>>>>>>> upstream/2.9.3+dfsg1
  
  // Geometric entities
  #define ENT_NONE     0
diff --cc Common/GmshIO.h
index b15795c,2e81515..acddfbf
--- a/Common/GmshIO.h
+++ b/Common/GmshIO.h
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Common/GmshMessage.cpp
index 3b96500,d61c5b5..0c34218
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@@ -28,7 -28,15 +28,18 @@@
  #if defined(HAVE_ONELAB)
  #include "onelab.h"
  #endif
+ #if !defined(HAVE_ONELAB2)
+ #include "gmshLocalNetworkClient.h"
+ #endif
+ 
++<<<<<<< HEAD
++=======
+ #if defined(HAVE_ONELAB2)
+ #include "OnelabDatabase.h"
+ #include "NetworkUtils.h"
+ #endif
  
++>>>>>>> upstream/2.9.3+dfsg1
  #if defined(HAVE_PETSC)
  #include <petsc.h>
  #endif
diff --cc Common/GmshMessage.h
index 2345fee,350aac7..7cc2ca8
--- a/Common/GmshMessage.h
+++ b/Common/GmshMessage.h
@@@ -41,10 -47,20 +47,23 @@@ class Msg 
    static GmshMessage *_callback;
    // command-line and startup time
    static std::string _commandLine, _launchDate;
+   // command-line-specified numbers and strings
+   static std::map<std::string, double> _commandLineNumbers;
+   static std::map<std::string, std::string> _commandLineStrings;
+ #if !defined(HAVE_ONELAB2)
    // communication with Gmsh when run remotely
    static GmshClient *_client;
+ #endif
+ #if defined(HAVE_ONELAB2)
+   // communication with onelab server (replace _client and old _onelabClient)
+   static OnelabDatabase *_onelabClient;
+ #elif defined(HAVE_ONELAB)
    // communication with onelab server
    static onelab::client *_onelabClient;
++<<<<<<< HEAD
++=======
+ #endif
++>>>>>>> upstream/2.9.3+dfsg1
    // internal onelab status for Gmsh parser
    static std::string _gmshOnelabAction;
    // executable name
diff --cc Common/OpenFile.cpp
index 0da2124,8cee8b6..fed248c
--- a/Common/OpenFile.cpp
+++ b/Common/OpenFile.cpp
@@@ -250,10 -257,15 +257,19 @@@ static bool doSystemUncompress(std::str
    return false;
  }
  
++<<<<<<< HEAD
 +void ParseString(const std::string &str)
++=======
+ void ParseString(const std::string &str, bool inCurrentModelDir)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    if(str.empty()) return;
-   std::string fileName = CTX::instance()->homeDir + CTX::instance()->tmpFileName;
+   std::string fileName;
+   if(inCurrentModelDir)
+     fileName = FixRelativePath(GModel::current()->getFileName(),
+                                CTX::instance()->tmpFileName);
+   else
+     fileName = CTX::instance()->homeDir + CTX::instance()->tmpFileName;
    FILE *fp = Fopen(fileName.c_str(), "w");
    if(fp){
      fprintf(fp, "%s\n", str.c_str());
diff --cc Common/onelab.h
index 8cd774a,8a9dc5c..a589b72
--- a/Common/onelab.h
+++ b/Common/onelab.h
@@@ -695,6 -1016,9 +1016,12 @@@ namespace onelab
        }
        else{
          T* newp = new T(p);
++<<<<<<< HEAD
++=======
+ #ifdef HAVE_ONELAB2
+         newp->isInDatabase(true);
+ #endif
++>>>>>>> upstream/2.9.3+dfsg1
          if(client.size()) newp->addClient(client, true);
          ps.insert(newp);
        }
diff --cc Common/onelabUtils.cpp
index 40541f5,4ece1c0..70a825f
--- a/Common/onelabUtils.cpp
+++ b/Common/onelabUtils.cpp
@@@ -274,7 -368,7 +368,11 @@@ namespace onelabUtils 
        else{
          view = new PView(xName, yName, x, y);
          view->getData()->setFileName("ONELAB" + graphNum);
++<<<<<<< HEAD
 +        view->getOptions()->intervalsType = PViewOptions::Discrete;
++=======
+         view->getOptions()->intervalsType = graphType;
++>>>>>>> upstream/2.9.3+dfsg1
          view->getOptions()->autoPosition = num / 2 + 2;
        }
        changed = true;
@@@ -290,7 -384,78 +388,81 @@@
    static bool _firstComputation = true;
    void setFirstComputationFlag(bool val){ _firstComputation = val; }
    bool getFirstComputationFlag(){ return _firstComputation; }
+ #ifdef HAVE_ONELAB2
+   bool runGmshClient(const std::string &action, int meshAuto)
+   {
+     bool redraw = false;
  
+     // do nothing in case of a python metamodel
+     std::vector<onelab::number> pn;
+     OnelabDatabase::instance()->get(pn, "IsPyMetamodel");
+     if(pn.size() && pn[0].getValue()) return redraw;
+ 
+     OnelabLocalNetworkClient *c = OnelabServer::instance()->getClient("Gmsh");
+     if(c != NULL) return redraw; // Gmsh is remote TODO
+ 
+     std::string mshFileName = onelabUtils::getMshFileName();
+ 
+     Msg::SetGmshOnelabAction(action);
+ 
+     static std::string modelName = GModel::current()->getName();
+ 
+     if(action == "initialize"){
+       // nothing to do
+     }
+     else if(action == "reset"){
+       setFirstComputationFlag(false);
+       // nothing more to do: "check" will be called right afterwards
+     }
+     else if(action == "check"){
+       if(OnelabServer::instance()->getChanged("Gmsh") ||
+          modelName != GModel::current()->getName()){
+         // reload geometry if Gmsh parameters have been modified or
+         // if the model name has changed
+         modelName = GModel::current()->getName();
+         redraw = true;
+         OpenProject(GModel::current()->getFileName(), false);
+         OnelabServer::instance()->setChanged(true, "Gmsh");
+       }
+     }
+     else if(action == "compute"){
+       if(OnelabServer::instance()->getChanged("Gmsh") ||
+          modelName != GModel::current()->getName()){
+         // reload the geometry, mesh it and save the mesh if Gmsh parameters
+         // have been modified or if the model name has changed
+         modelName = GModel::current()->getName();
+         redraw = true;
+         OpenProject(GModel::current()->getFileName(), false);
+         if(getFirstComputationFlag() && !StatFile(mshFileName) && meshAuto != 2){
+           Msg::Info("Skipping mesh generation: assuming '%s' is up-to-date "
+                     "(use Solver.AutoMesh=2 to force mesh generation)",
+                     mshFileName.c_str());
+         }
+         else if(!GModel::current()->empty() && meshAuto){
+           GModel::current()->mesh(3);
+           CreateOutputFile(mshFileName, CTX::instance()->mesh.fileFormat);
+         }
+       }
+       else if(StatFile(mshFileName)){
+         // mesh+save if the mesh file does not exist
+         if(meshAuto){
+           redraw = true;
+           GModel::current()->mesh(3);
+           CreateOutputFile(mshFileName, CTX::instance()->mesh.fileFormat);
+         }
+       }
+       setFirstComputationFlag(false);
+       OnelabServer::instance()->setChanged(false, "Gmsh");
+     }
+ 
+     Msg::SetGmshOnelabAction("");
+ 
++<<<<<<< HEAD
++=======
+     return redraw;
+   }
+ #else
++>>>>>>> upstream/2.9.3+dfsg1
    bool runGmshClient(const std::string &action, int meshAuto)
    {
      bool redraw = false;
diff --cc Fltk/FlGui.cpp
index a5a7cf8,d68a066..fcb8221
--- a/Fltk/FlGui.cpp
+++ b/Fltk/FlGui.cpp
@@@ -225,6 -242,54 +242,57 @@@ static void fatal_error_handler(const c
    CTX::instance()->terminal = 1;
    Msg::Fatal("%s (FLTK internal error)", str);
  }
++<<<<<<< HEAD
++=======
+ 
+ void FlGui::applyColorScheme()
+ {
+   static int first = true;
+   int N = 4 + FL_NUM_GRAY;
+   static std::vector<unsigned char> r(N, 0), g(N, 0), b(N, 0);
+ 
+   if(first){
+     // store default (OS-dependent) interface colors:
+     Fl::get_system_colors();
+     Fl::get_color(FL_BACKGROUND_COLOR, r[0], g[0], b[0]);
+     Fl::get_color(FL_BACKGROUND2_COLOR, r[1], g[1], b[1]);
+     Fl::get_color(FL_FOREGROUND_COLOR, r[2], g[2], b[2]);
+     Fl::get_color(FL_SELECTION_COLOR, r[3], g[3], b[3]);
+     for (int i = 0; i < FL_NUM_GRAY; i++) {
+       Fl::get_color(fl_gray_ramp(i), r[4 + i], g[4 + i], b[4 + i]);
+     }
+   }
+ 
+   if(CTX::instance()->guiColorScheme == 1){ // dark mode
+     Fl::set_color(FL_BACKGROUND_COLOR, 50, 50, 50);
+     Fl::set_color(FL_BACKGROUND2_COLOR, 120, 120, 120);
+     Fl::set_color(FL_FOREGROUND_COLOR, 240, 240, 240);
+     for (int i = 0; i < FL_NUM_GRAY; i++) {
+       double min = 0., max = 135.;
+       int d = (int)(min + i * (max - min) / (FL_NUM_GRAY - 1.));
+       Fl::set_color(fl_gray_ramp(i), d, d, d);
+     }
+     if(available()) Fl::reload_scheme();
+     Fl::set_color(FL_SELECTION_COLOR, 200, 200, 200);
+     if(available()) updateViews(true, true);
+   }
+   else if(!first && available() && CTX::instance()->guiColorScheme == 0){
+     // retore default colors (only if not calling the routine from the
+     // constructor)
+     Fl::set_color(FL_BACKGROUND_COLOR, r[0], g[0], b[0]);
+     Fl::set_color(FL_BACKGROUND2_COLOR, r[1], g[1], b[1]);
+     Fl::set_color(FL_FOREGROUND_COLOR, r[2], g[2], b[2]);
+     for (int i = 0; i < FL_NUM_GRAY; i++) {
+       Fl::set_color(fl_gray_ramp(i), r[4 + i], g[4 + i], b[4 + i]);
+     }
+     Fl::reload_scheme();
+     Fl::set_color(FL_SELECTION_COLOR, r[3], g[3], b[3]);
+     updateViews(true, true);
+   }
+ 
+   first = false;
+ }
++>>>>>>> upstream/2.9.3+dfsg1
  
  FlGui::FlGui(int argc, char **argv)
  {
diff --cc Fltk/graphicWindow.cpp
index 9ec0a45,d415f8d..2ad4722
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@@ -3004,12 -3042,8 +3042,15 @@@ graphicWindow::graphicWindow(bool main
    }
  
    if(main && !detachedMenu){
 +#if defined(HAVE_ONELAB2)
 +    // Hey Maxime, this is for you!
 +#else
      _onelab = new onelabGroup(0, mh, twidth, height - mh - sh);
      _onelab->enableTreeWidgetResize(false);
++<<<<<<< HEAD
 +#endif
++=======
++>>>>>>> upstream/2.9.3+dfsg1
    }
    else{
      _onelab = 0;
diff --cc Fltk/helpWindow.cpp
index 245d7b2,3c0d132..3ad213d
--- a/Fltk/helpWindow.cpp
+++ b/Fltk/helpWindow.cpp
@@@ -26,6 -26,14 +26,17 @@@
  #include "petsc.h"
  #endif
  
++<<<<<<< HEAD
++=======
+ #if defined(HAVE_OCC)
+ #include "Standard_Version.hxx"
+ #endif
+ 
+ #if defined(HAVE_MED)
+ #include "med.h"
+ #endif
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  static const char *help_link(Fl_Widget *w, const char *uri)
  {
    fl_open_uri(uri);
@@@ -309,11 -317,19 +320,27 @@@ helpWindow::helpWindow(
              << "<li><i>PETSc version:</i> " << PETSC_VERSION_MAJOR << "."
              << PETSC_VERSION_MINOR << "." << PETSC_VERSION_SUBMINOR
  #if defined(PETSC_USE_COMPLEX)
++<<<<<<< HEAD
 +            << "<li><i>PETSc arithmetic:</i> Complex"
 +#else
 +            << "<li><i>PETSc arithmetic:</i> Real"
 +#endif
 +#endif
++=======
+             << " (complex arithmetic)"
+ #else
+             << " (real arithmetic)"
+ #endif
+ #endif
+ #if defined(HAVE_OCC)
+             << "<li><i>OCC version:</i> " << OCC_VERSION_MAJOR << "."
+             << OCC_VERSION_MINOR << "." << OCC_VERSION_MAINTENANCE
+ #endif
+ #if defined(HAVE_MED)
+             << "<li><i>MED version:</i> " << MED_NUM_MAJEUR << "."
+             << MED_NUM_MINEUR << "." << MED_NUM_RELEASE
+ #endif
++>>>>>>> upstream/2.9.3+dfsg1
              << "<li><i>Packaged by:</i> " << GetGmshPackager()
              << "</ul>"
              << "<center>Visit <a href=\"http://geuz.org/gmsh/\">http://geuz.org/gmsh/</a> "
diff --cc Fltk/highOrderToolsWindow.cpp
index f2cc517,de797e5..fc99fe3
--- a/Fltk/highOrderToolsWindow.cpp
+++ b/Fltk/highOrderToolsWindow.cpp
@@@ -115,10 -115,10 +115,17 @@@ static void chooseopti_cb(Fl_Widget *w
  static void chooseopti_strategy(Fl_Widget *w, void *data)
  {
    highOrderToolsWindow *o = FlGui::instance()->highordertools;
++<<<<<<< HEAD
 +  if (o->choice[3]->value() == 0)
 +    for (int i=9;i<=11;i++) o->value[i]->deactivate();
 +  else
 +    for (int i=9;i<=11;i++) o->value[i]->activate();
++=======
+   if (o->choice[3]->value() == 1)
+     for (int i=9;i<=11;i++) o->value[i]->activate();
+   else
+     for (int i=9;i<=11;i++) o->value[i]->deactivate();
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  static void highordertools_runopti_cb(Fl_Widget *w, void *data)
diff --cc Fltk/onelabGroup.cpp
index 71bc0b7,5a4f9d7..1fa2499
--- a/Fltk/onelabGroup.cpp
+++ b/Fltk/onelabGroup.cpp
@@@ -44,758 -44,11 +44,765 @@@ typedef unsigned long intptr_t
  #include "CreateFile.h"
  #include "drawContext.h"
  #include "PView.h"
+ #include "treeIcons.h"
  
++<<<<<<< HEAD
 +#if defined(HAVE_ONELAB_METAMODEL)
 +#include "OnelabClients.h"
 +#include "metamodel.h"
 +#endif
 +
 +// This file contains the Gmsh/FLTK specific parts of the ONELAB
 +// interface. You'll need to reimplement this if you plan to build a different
 +// ONELAB server.
 +
 +class onelabGmshServer : public GmshServer{
 + private:
 +  onelab::localNetworkClient *_client;
 + public:
 +  onelabGmshServer(onelab::localNetworkClient *client)
 +    : GmshServer(), _client(client) {}
 +  ~onelabGmshServer(){}
 +  int NonBlockingSystemCall(const char *str)
 +  {
 +    return SystemCall(str);
 +  }
 +  int NonBlockingWait(double waitint, double timeout, int socket)
 +  {
 +    double start = GetTimeInSeconds();
 +    while(1){
 +      if(timeout > 0 && GetTimeInSeconds() - start > timeout)
 +        return 2; // timeout
 +      if(_client->getPid() < 0 || (_client->getExecutable().empty() &&
 +                                   !CTX::instance()->solver.listen))
 +        return 1; // process has been killed or we stopped listening
 +      // check if there is data (call select with a zero timeout to
 +      // return immediately, i.e., do polling)
 +      int ret = Select(0, 0, socket);
 +      if(ret == 0){ // nothing available
 +        if(timeout < 0){
 +          // if asked, refresh the onelab GUI, but no more than every 1/4th of
 +          // a second
 +          static double lastRefresh = 0.;
 +          if(start - lastRefresh > 0.25){
 +            std::vector<onelab::string> ps;
 +            onelab::server::instance()->get(ps, "Gmsh/Action");
 +            if(ps.size() && ps[0].getValue() == "refresh"){
 +              ps[0].setVisible(false);
 +              ps[0].setValue("");
 +              onelab::server::instance()->set(ps[0]);
 +              if(FlGui::available()) onelab_cb(0, (void*)"refresh");
 +            }
 +            lastRefresh = start;
 +          }
 +        }
 +        // wait at most waitint seconds and respond to FLTK events
 +        if(FlGui::available()) FlGui::instance()->wait(waitint);
 +        // return to caller (we will be back here soon again)
 +	if(timeout < 0) return 3;
 +      }
 +      else if(ret > 0){
 +        return 0; // data is there!
 +      }
 +      else{
 +        // an error happened
 +        _client->setPid(-1);
 +        return 1;
 +      }
 +    }
 +  }
 +  int LaunchClient()
 +  {
 +    std::string sockname;
 +    std::ostringstream tmp;
 +    const char *port = strstr(CTX::instance()->solver.socketName.c_str(), ":");
 +    if(!port){
 +      // Unix socket
 +      tmp << CTX::instance()->homeDir << CTX::instance()->solver.socketName
 +          << _client->getId();
 +      sockname = FixWindowsPath(tmp.str());
 +    }
 +    else{
 +      // TCP/IP socket
 +      if(CTX::instance()->solver.socketName.size() &&
 +         CTX::instance()->solver.socketName[0] == ':')
 +        tmp << GetHostName(); // prepend hostname if only the port number is given
 +      tmp << CTX::instance()->solver.socketName;
 +      if(atoi(port + 1)) // nonzero port is given - append client id
 +        tmp << _client->getId();
 +      sockname = tmp.str();
 +    }
 +
 +    std::string command = FixWindowsPath(_client->getExecutable());
 +    if(command.size()){
 +      std::vector<std::string> args = onelabUtils::getCommandLine(_client);
 +      for(unsigned int i = 0; i < args.size(); i++)
 +        command.append(" " + args[i]);
 +      command.append(" " + _client->getSocketSwitch() +
 +                     " \"" + _client->getName() + "\" %s");
 +    }
 +    else{
 +      Msg::Info("Listening on socket '%s'", sockname.c_str());
 +    }
 +
 +    int sock;
 +    try{
 +      sock = Start(command.c_str(), sockname.c_str(),
 +                   CTX::instance()->solver.timeout);
 +    }
 +    catch(const char *err){
 +      Msg::Error("Abnormal server termination (%s on socket %s)", err,
 +                 sockname.c_str());
 +      sock = -1;
 +    }
 +
 +    return sock;
 +  }
 +};
 +
 +bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master)
 +{
 +  // receive a message on the associated GmshServer; 'master' is only used when
 +  // creating subclients with GMSH_CONNECT.
 +
 +  double timer = GetTimeInSeconds();
 +
 +  if(!getGmshServer()){
 +    Msg::Error("Abnormal server termination (no valid server)");
 +    return false;
 +  }
 +
 +  int type, length, swap;
 +  if(!getGmshServer()->ReceiveHeader(&type, &length, &swap)){
 +    Msg::Error("Abnormal server termination (did not receive message header)");
 +    return false;
 +  }
 +
 +  std::string message(length, ' '), blank = message;
 +  if(!getGmshServer()->ReceiveMessage(length, &message[0])){
 +    Msg::Error("Abnormal server termination (did not receive message body)");
 +    return false;
 +  }
 +
 +  if(message == blank && !(type == GmshSocket::GMSH_PROGRESS ||
 +                           type == GmshSocket::GMSH_INFO ||
 +                           type == GmshSocket::GMSH_WARNING ||
 +                           type == GmshSocket::GMSH_ERROR)){
 +    // we should still allow blank msg strings to be sent
 +    Msg::Error("Abnormal server termination (blank message: client not stopped?)");
 +    return false;
 +  }
 +
 +  switch (type) {
 +  case GmshSocket::GMSH_START:
 +    setPid(atoi(message.c_str()));
 +    break;
 +  case GmshSocket::GMSH_STOP:
 +    setPid(-1);
 +    if(getFather()){
 +      std::string reply = getName(); // reply is dummy
 +      getFather()->getGmshServer()->SendMessage
 +        (GmshSocket::GMSH_STOP, reply.size(), &reply[0]);
 +    }
 +    break;
 +  case GmshSocket::GMSH_PARAMETER:
 +  case GmshSocket::GMSH_PARAMETER_UPDATE:
 +    {
 +      std::string version, ptype, name;
 +      onelab::parameter::getInfoFromChar(message, version, ptype, name);
 +      if(onelab::parameter::version() != version){
 +        Msg::Error("ONELAB version mismatch (server: %s / client: %s)",
 +                   onelab::parameter::version().c_str(), version.c_str());
 +      }
 +      else if(ptype == "number"){
 +        onelab::number p; p.fromChar(message);
 +        if(type == GmshSocket::GMSH_PARAMETER_UPDATE){
 +          std::vector<onelab::number> par; get(par, name);
 +          if(par.size()) {
 +            onelab::number y = p; p = par[0]; onelabUtils::updateNumber(p, y);
 +          }
 +        }
 +        set(p);
 +        if(p.getName() == getName() + "/Progress")
 +          if(FlGui::available())
 +            FlGui::instance()->setProgress(p.getLabel().c_str(), p.getValue(),
 +                                           p.getMin(), p.getMax());
 +      }
 +      else if(ptype == "string"){
 +        onelab::string p; p.fromChar(message);
 +        if(type == GmshSocket::GMSH_PARAMETER_UPDATE){
 +          std::vector<onelab::string> par; get(par, name);
 +          if(par.size()){
 +            onelab::string y = p; p = par[0]; onelabUtils::updateString(p,y);
 +          }
 +	}
 +        set(p);
 +      }
 +      else if(ptype == "region"){
 +        onelab::region p; p.fromChar(message); set(p);
 +      }
 +      else if(ptype == "function"){
 +        onelab::function p; p.fromChar(message); set(p);
 +      }
 +      else
 +        Msg::Error("Unknown ONELAB parameter type: %s", ptype.c_str());
 +    }
 +    break;
 +  case GmshSocket::GMSH_PARAMETER_QUERY:
 +    {
 +      std::string version, ptype, name, reply;
 +      onelab::parameter::getInfoFromChar(message, version, ptype, name);
 +      if(onelab::parameter::version() != version){
 +        Msg::Error("ONELAB version mismatch (server: %s / client: %s)",
 +                   onelab::parameter::version().c_str(), version.c_str());
 +      }
 +      else if(ptype == "number"){
 +        std::vector<onelab::number> par; get(par, name);
 +        if(par.size() == 1) reply = par[0].toChar();
 +      }
 +      else if(ptype == "string"){
 +        std::vector<onelab::string> par; get(par, name);
 +        if(par.size() == 1) reply = par[0].toChar();
 +      }
 +      else if(ptype == "region"){
 +        std::vector<onelab::region> par; get(par, name);
 +        if(par.size() == 1) reply = par[0].toChar();
 +      }
 +      else if(ptype == "function"){
 +        std::vector<onelab::function> par; get(par, name);
 +        if(par.size() == 1) reply = par[0].toChar();
 +      }
 +      else
 +        Msg::Error("Unknown ONELAB parameter type in query: %s", ptype.c_str());
 +
 +      if(reply.size()){
 +        getGmshServer()->SendMessage
 +          (GmshSocket::GMSH_PARAMETER, reply.size(), &reply[0]);
 +      }
 +      else{
 +        reply = name;
 +        getGmshServer()->SendMessage
 +          (GmshSocket::GMSH_PARAMETER_NOT_FOUND, reply.size(), &reply[0]);
 +      }
 +    }
 +    break;
 +  case GmshSocket::GMSH_PARAMETER_QUERY_ALL:
 +    {
 +      std::string version, ptype, name, reply;
 +      std::vector<std::string> replies;
 +      onelab::parameter::getInfoFromChar(message, version, ptype, name);
 +      if(onelab::parameter::version() != version){
 +        Msg::Error("ONELAB version mismatch (server: %s / client: %s)",
 +                   onelab::parameter::version().c_str(), version.c_str());
 +      }
 +      else if(ptype == "number"){
 +        std::vector<onelab::number> numbers; get(numbers);
 +        for(std::vector<onelab::number>::iterator it = numbers.begin();
 +            it != numbers.end(); it++) replies.push_back((*it).toChar());
 +      }
 +      else if(ptype == "string"){
 +        std::vector<onelab::string> strings; get(strings);
 +        for(std::vector<onelab::string>::iterator it = strings.begin();
 +            it != strings.end(); it++) replies.push_back((*it).toChar());
 +      }
 +      else if(ptype == "region"){
 +        std::vector<onelab::region> regions; get(regions);
 +        for(std::vector<onelab::region>::iterator it = regions.begin();
 +            it != regions.end(); it++) replies.push_back((*it).toChar());
 +      }
 +      else if(ptype == "function"){
 +        std::vector<onelab::function> functions; get(functions);
 +        for(std::vector<onelab::function>::iterator it = functions.begin();
 +            it != functions.end(); it++) replies.push_back((*it).toChar());
 +      }
 +      else
 +        Msg::Error("Unknown ONELAB parameter type in query: %s", ptype.c_str());
 +
 +      for(unsigned int i = 0; i < replies.size(); i++)
 +        getGmshServer()->SendMessage
 +          (GmshSocket::GMSH_PARAMETER_QUERY_ALL, replies[i].size(), &replies[i][0]);
 +      reply = "Sent all ONELAB " + ptype + "s";
 +      getGmshServer()->SendMessage
 +        (GmshSocket::GMSH_PARAMETER_QUERY_END, reply.size(), &reply[0]);
 +    }
 +    break;
 +  case GmshSocket::GMSH_PARAMETER_CLEAR:
 +    clear(message == "*" ? "" : message);
 +    break;
 +  case GmshSocket::GMSH_PROGRESS:
 +    Msg::StatusBar(false, "%s %s", _name.c_str(), message.c_str());
 +    break;
 +  case GmshSocket::GMSH_INFO:
 +    Msg::Direct("Info    : %s - %s", _name.c_str(), message.c_str());
 +    break;
 +  case GmshSocket::GMSH_WARNING:
 +    Msg::Warning("%s - %s", _name.c_str(), message.c_str());
 +    break;
 +  case GmshSocket::GMSH_ERROR:
 +    Msg::Error("%s - %s", _name.c_str(), message.c_str());
 +    break;
 +  case GmshSocket::GMSH_MERGE_FILE:
 +    if(CTX::instance()->solver.autoMergeFile){
 +      unsigned int n = PView::list.size();
 +      MergePostProcessingFile(message, CTX::instance()->solver.autoShowViews,
 +                              CTX::instance()->solver.autoShowLastStep, true);
 +      drawContext::global()->draw();
 +      if(FlGui::available() && n != PView::list.size()){
 +        FlGui::instance()->rebuildTree(true);
 +        FlGui::instance()->openModule("Post-processing");
 +      }
 +    }
 +    break;
 +  case GmshSocket::GMSH_OPEN_PROJECT:
 +    OpenProject(message);
 +    drawContext::global()->draw();
 +    break;
 +  case GmshSocket::GMSH_PARSE_STRING:
 +    ParseString(message);
 +    drawContext::global()->draw();
 +    break;
 +  case GmshSocket::GMSH_SPEED_TEST:
 +    Msg::Info("got %d Mb message in %g seconds",
 +              length / 1024 / 1024, GetTimeInSeconds() - timer);
 +    break;
 +  case GmshSocket::GMSH_VERTEX_ARRAY:
 +    {
 +      int n = PView::list.size();
 +      PView::fillVertexArray(this, length, &message[0], swap);
 +      if(FlGui::available())
 +        FlGui::instance()->updateViews(n != (int)PView::list.size(), true);
 +      drawContext::global()->draw();
 +    }
 +    break;
 +  case GmshSocket::GMSH_CONNECT:
 +    {
 +      std::string::size_type first = 0;
 +      std::string clientName = onelab::parameter::getNextToken(message, first);
 +      std::string command = onelab::parameter::getNextToken(message, first);
 +      gmshLocalNetworkClient* subClient =
 +	new gmshLocalNetworkClient(clientName, command);
 +      onelabGmshServer *server = new onelabGmshServer(subClient);
 +      subClient->setPid(0);
 +      int sock = server->LaunchClient();
 +      if(sock < 0){ // could not establish the connection: aborting
 +	server->Shutdown();
 +	delete server;
 +	Msg::Error("Could not connect client '%s'", subClient->getName().c_str());
 +      }
 +      else{
 +	Msg::StatusBar(true, "Running '%s'...", subClient->getName().c_str());
 +	subClient->setGmshServer(server);
 +	subClient->setFather(this);
 +	master->addClient(subClient);
 +      }
 +    }
 +    break;
 +  case GmshSocket::GMSH_OLPARSE:
 +    {
 +#if defined(HAVE_ONELAB_METAMODEL)
 +      std::string::size_type first = 0;
 +      std::string name = onelab::parameter::getNextToken(message, first);
 +      std::string fileName = onelab::parameter::getNextToken(message, first);
 +      std::vector<std::string> split = SplitOLFileName(fileName);
 +      std::string ofileName = split[0] + split[1] ;
 +      std::ofstream outfile(ofileName.c_str());
 +      localSolverClient *c = new InterfacedClient(name,"","");
 +      if (outfile.is_open()) {
 +        Msg::Info("Preprocess file <%s>",ofileName.c_str());
 +        c->convert_onefile(fileName, outfile);
 +      }
 +      else
 +        Msg::Error("The file <%s> cannot be opened",ofileName.c_str());
 +      outfile.close();
 +
 +      std::string reply = onelab::server::instance()->getChanged(c->getName()) ?
 +        "true" : "false";
 +      getGmshServer()->SendMessage
 +        (GmshSocket::GMSH_OLPARSE, reply.size(), &reply[0]);
 +
 +      delete c;
 +#endif
 +    }
 +    break;
 +  case GmshSocket::GMSH_CLIENT_CHANGED:
 +    {
 +      std::string::size_type first = 0;
 +      std::string command = onelab::parameter::getNextToken(message, first);
 +       std::string name = onelab::parameter::getNextToken(message, first);
 +     if(command == "get"){
 +       std::string reply = onelab::server::instance()->getChanged(name) ?
 +        "true" : "false";
 +      getGmshServer()->SendMessage
 +        (GmshSocket::GMSH_CLIENT_CHANGED, reply.size(), &reply[0]);
 +      }
 +      else if(command == "set"){
 +	std::string changed = onelab::parameter::getNextToken(message, first);
 +	onelab::server::instance()->setChanged(changed=="true"?true:false,name);
 +      }
 +    }
 +    break;
 +  default:
 +    Msg::Warning("Received unknown message type (%d)", type);
 +    break;
 +  }
 +
 +  return true;
 +}
 +
 +bool gmshLocalNetworkClient::run()
 +{
 + new_connection:
 +  setPid(0); // dummy pid, should be non-negative
 +
 +  onelabGmshServer *server = new onelabGmshServer(this);
 +
 +  int sock = server->LaunchClient();
 +
 +  if(sock < 0){
 +    // could not establish the connection: aborting
 +    server->Shutdown();
 +    delete server;
 +    return false;
 +  }
 +
 +  Msg::StatusBar(true, "Running '%s'...", _name.c_str());
 +
 +  setGmshServer(server);
 +
 +  while(1) {
 +    if(getExecutable().empty() && !CTX::instance()->solver.listen){
 +      // we stopped listening to the special "Listen" client
 +      break;
 +    }
 +
 +    // loop over all the clients (usually only one, but can be more if we
 +    // spawned subclients) and check if data is available for one of them
 +    bool stop = false, haveData = false;
 +    gmshLocalNetworkClient *c = 0;
 +    std::vector<gmshLocalNetworkClient*> toDelete;
 +    for(int i = 0; i < getNumClients(); i++){
 +      c = getClient(i);
 +      if(c->getPid() < 0){
 +        if(c == this){ // the "master" client stopped
 +          stop = true;
 +          break;
 +        }
 +        else{
 +          // this subclient is not active anymore: shut down and delete its
 +          // server and mark the client for deletion
 +          GmshServer *s = c->getGmshServer();
 +          c->setGmshServer(0);
 +          c->setFather(0);
 +          if(s){
 +            s->Shutdown();
 +            delete s;
 +          }
 +          toDelete.push_back(c);
 +          continue;
 +        }
 +      }
 +      GmshServer *s = c->getGmshServer();
 +      if(!s){
 +        Msg::Error("Abnormal server termination (no valid server)");
 +        stop = true;
 +        break;
 +      }
 +      else{
 +        int ret = s->NonBlockingWait(0.001, -1.);
 +        if(ret == 0){ // we have data from this particular client
 +          haveData = true;
 +          break;
 +        }
 +        else if(ret == 3){ // pass to the next client
 +          continue;
 +        }
 +        else{ // an error occurred
 +          stop = true;
 +          break;
 +        }
 +      }
 +    }
 +    for(unsigned int i = 0; i < toDelete.size(); i++){
 +      removeClient(toDelete[i]);
 +      delete toDelete[i];
 +    }
 +
 +    // break the while(1) if the master client has stopped or if we encountered
 +    // a problem
 +    if(stop) break;
 +
 +    // if data is available try to get the message from the corresponding
 +    // client; break the while(1) if we could not receive the message
 +    if(haveData && !c->receiveMessage(this)) break;
 +
 +    // break the while(1) if the master client has stopped
 +    if(c == this && c->getPid() < 0) break;
 +  }
 +
 +  // we are done running the (master) client: delete the servers and the
 +  // subclients, if any remain (they should have been deleted already).
 +  std::vector<gmshLocalNetworkClient*> toDelete;
 +  for(int i = 0; i < getNumClients(); i++){
 +    gmshLocalNetworkClient *c = getClient(i);
 +    GmshServer *s = c->getGmshServer();
 +    c->setGmshServer(0);
 +    c->setFather(0);
 +    if(s){
 +      s->Shutdown();
 +      delete s;
 +    }
 +    if(c != this){
 +      if(c->getPid() > 0)
 +        Msg::Error("Subclient %s was not stopped correctly", c->getName().c_str());
 +      toDelete.push_back(c);
 +    }
 +  }
 +  for(unsigned int i = 0; i < toDelete.size(); i++){
 +    removeClient(toDelete[i]);
 +    delete toDelete[i];
 +  }
 +
 +  Msg::StatusBar(true, "Done running '%s'", _name.c_str());
 +
 +  if(getExecutable().empty()){
 +    Msg::Info("Client disconnected: starting new connection");
 +    goto new_connection;
 +  }
 +
 +  return true;
 +}
 +
 +bool gmshLocalNetworkClient::kill()
 +{
 +  // FIXME: we should kill all the clients in the list
 +  if(getPid() > 0) {
 +    if(KillProcess(getPid())){
 +      Msg::Info("Killed '%s' (pid %d)", _name.c_str(), getPid());
 +      if(FlGui::available())
 +        FlGui::instance()->setProgress("Killed", 0, 0, 0);
 +      setPid(-1);
 +      return true;
 +    }
 +  }
 +  setPid(-1);
 +  return false;
 +}
 +
 +static void initializeLoops()
 +{
 +  onelabUtils::initializeLoop("1");
 +  onelabUtils::initializeLoop("2");
 +  onelabUtils::initializeLoop("3");
 +
 +  if(FlGui::available() && onelab::server::instance()->getChanged())
 +    FlGui::instance()->rebuildTree(false);
 +}
 +
 +static bool incrementLoops()
 +{
 +  bool ret = false;
 +  if(onelabUtils::incrementLoop("3"))      ret = true;
 +  else if(onelabUtils::incrementLoop("2")) ret = true;
 +  else if(onelabUtils::incrementLoop("1")) ret = true;
 +
 +  //Define ONELAB parameter indicating whether or not in a loop
 +  onelab::number n("0Metamodel/Loop",ret?1:0);
 +  n.setVisible(false);
 +  onelab::server::instance()->set(n);
 +
 +  if(FlGui::available() && onelab::server::instance()->getChanged())
 +    FlGui::instance()->rebuildTree(false);
 +
 +  return ret;
 +}
 +
 +static void updateGraphs()
 +{
 +  bool redraw = false;
 +  for(int i = 0; i < 18; i++){
 +    std::ostringstream tmp;
 +    tmp << i;
 +    bool ret = onelabUtils::updateGraph(tmp.str());
 +    redraw = redraw || ret;
 +  }
 +  if(redraw){
 +    // don't delete the widgets, as this is called in widget callbacks
 +    FlGui::instance()->updateViews(true, false);
 +    drawContext::global()->draw();
 +  }
 +}
 +
 +static std::string timeStamp()
 +{
 +  time_t now;
 +  time(&now);
 +  tm *t = localtime(&now);
 +  char stamp[32];
 +  // stamp.size() is always 20
 +  sprintf(stamp, "_%04d-%02d-%02d_%02d-%02d-%02d", 1900 + t->tm_year,
 +          1 + t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
 +  return std::string(stamp);
 +}
 +
 +static void saveDb(const std::string &fileName)
 +{
 +  FILE *fp = Fopen(fileName.c_str(), "wb");
 +  if(fp){
 +    Msg::StatusBar(true, "Saving database '%s'...", fileName.c_str());
 +    onelab::server::instance()->toFile(fp);
 +    fclose(fp);
 +    Msg::StatusBar(true, "Done saving database '%s'", fileName.c_str());
 +  }
 +  else
 +    Msg::Error("Could not save database '%s'", fileName.c_str());
 +}
 +
 +static void archiveOutputFiles(const std::string &fileName)
 +{
 +  std::string stamp;
 +  std::vector<onelab::string> ps;
 +  onelab::server::instance()->get(ps,"0Metamodel/9Tag");
 +  if(ps.size())
 +    stamp.assign(ps[0].getValue()+timeStamp());
 +  else
 +    stamp.assign(timeStamp());
 +
 +  // add time stamp in all output files in the db, and rename them on disk
 +  std::vector<onelab::string> strings;
 +  onelab::server::instance()->get(strings);
 +  for(unsigned int i = 0; i < strings.size(); i++){
 +    if(strings[i].getName().find("9Output files") != std::string::npos){
 +      std::vector<std::string> names = strings[i].getChoices();
 +      names.push_back(strings[i].getValue());
 +      for(unsigned int j = 0; j < names.size(); j++){
 +        std::vector<std::string> split = SplitFileName(names[j]);
 +        int n = split[1].size();
 +        // if name is not already stamped
 +        if(n < 18 || split[1][n-3] != '-' || split[1][n-6] != '-' ||
 +           split[1][n-9] != '_'){
 +          std::string old = names[j];
 +          CreateSingleDir(split[0] + "archive/");
 +          names[j] = split[0] + "archive/" + split[1] + stamp + split[2];
 +          Msg::Info("Renaming '%s' into '%s'", old.c_str(), names[j].c_str());
 +          rename(old.c_str(), names[j].c_str());
 +        }
 +      }
 +      strings[i].setValue(names.back());
 +      names.pop_back();
 +      strings[i].setChoices(names);
 +      onelab::server::instance()->set(strings[i]);
 +    }
 +  }
 +
 +  // save stamped db
 +  {
 +    std::vector<std::string> split = SplitFileName(fileName);
 +    CreateSingleDir(split[0] + "archive/");
 +    saveDb(split[0] + "archive/" + split[1] + stamp + split[2]);
 +  }
 +
 +  FlGui::instance()->rebuildTree(true);
 +}
 +
 +static void archiveSolutionFiles(const std::string &fileName)
 +{
 +  // extract tag from dbName
 +  std::vector<std::string> split = SplitFileName(fileName);
 +  std::string tag = split[1].substr(6); // cut off 'onelab'
 +
 +  // add tag to all solution files in the db, and rename them on disk
 +  std::vector<onelab::string> strings;
 +  onelab::server::instance()->get(strings,"0Metamodel/9Solution files");
 +  if(strings.size()){
 +    std::vector<std::string> names = strings[0].getChoices();
 +    if(names.size()){
 +      for(unsigned int j = 0; j < names.size(); j++){
 +	std::vector<std::string> split = SplitFileName(names[j]);
 +	std::string old = names[j];
 +	CreateSingleDir(split[0] + "archive/");
 +	names[j] = split[0] + "archive/" + split[1] + tag + split[2];
 +	Msg::Info("Renaming '%s' into '%s'", old.c_str(), names[j].c_str());
 +	rename(old.c_str(), names[j].c_str());
 +      }
 +      strings[0].setValue(names[0]);
 +      strings[0].setChoices(names);
 +      onelab::server::instance()->set(strings[0]);
 +      FlGui::instance()->rebuildTree(true);
 +    }
 +  }
 +}
 +
 +static void loadDb(const std::string &name)
 +{
 +  Msg::StatusBar(true, "Loading database '%s'...", name.c_str());
 +  FILE *fp = Fopen(name.c_str(), "rb");
 +  if(fp){
 +    onelab::server::instance()->fromFile(fp);
 +    fclose(fp);
 +    Msg::StatusBar(true, "Done loading database '%s'", name.c_str());
 +  }
 +  else
 +    Msg::Error("Could not load database '%s'", name.c_str());
 +}
++=======
+ // This file contains the Gmsh/FLTK specific parts of the ONELAB
+ // interface. You'll need to reimplement this if you plan to build a different
+ // ONELAB server.
++>>>>>>> upstream/2.9.3+dfsg1
 +
 +static void resetDb(bool runGmshClient)
 +{
 +  Msg::Info("Resetting database");
 +
 +  // clear everything except persistent parameters
 +  std::vector<onelab::number> allNumbers, persistentNumbers;
 +  std::vector<onelab::string> allStrings, persistentStrings;
 +  onelab::server::instance()->get(allNumbers);
 +  onelab::server::instance()->get(allStrings);
 +  for(unsigned int i = 0; i < allNumbers.size(); i++){
 +    if(allNumbers[i].getAttribute("Persistent") == "1")
 +      persistentNumbers.push_back(allNumbers[i]);
 +  }
 +  for(unsigned int i = 0; i < allStrings.size(); i++){
 +    if(allStrings[i].getAttribute("Persistent") == "1")
 +      persistentStrings.push_back(allStrings[i]);
 +  }
 +
 +  // TODO FIXME: this will be removed once the new stable version of getdp is
 +  // released
 +  for(onelab::server::citer it = onelab::server::instance()->firstClient();
 +      it != onelab::server::instance()->lastClient(); it++){
 +    onelab::client *c = it->second;
 +    std::vector<onelab::number> ps;
 +    c->get(ps, c->getName() + "/UseCommandLine");
 +    if(ps.size()) persistentNumbers.push_back(ps[0]);
 +    c->get(ps, c->getName() + "/GuessModelName");
 +    if(ps.size()) persistentNumbers.push_back(ps[0]);
 +    std::vector<onelab::string> ps2;
 +    c->get(ps2, c->getName() + "/FileExtension");
 +    if(ps2.size()) persistentStrings.push_back(ps2[0]);
 +  }
 +  // END TODO
 +
 +  // clear the db
 +  onelab::server::instance()->clear();
 +
 +  // run Gmsh client for non-python metamodels
 +  if(runGmshClient && onelab::server::instance()->findClient("Gmsh") !=
 +     onelab::server::instance()->lastClient())
 +    onelabUtils::runGmshClient("reset", CTX::instance()->solver.autoMesh);
 +
 +  for(unsigned int i = 0; i < persistentNumbers.size(); i++){
 +    Msg::Info("Restoring persistent parameter %s",
 +              persistentNumbers[i].getName().c_str());
 +    onelab::server::instance()->set(persistentNumbers[i]);
 +  }
 +  for(unsigned int i = 0; i < persistentStrings.size(); i++){
 +    Msg::Info("Restoring persistent parameter %s",
 +              persistentStrings[i].getName().c_str());
 +    onelab::server::instance()->set(persistentStrings[i]);
 +  }
 +}
  
  void onelab_cb(Fl_Widget *w, void *data)
  {
@@@ -843,16 -96,25 +850,36 @@@
      // add user defined tag, if any
      std::vector<onelab::string> ps;
      onelab::server::instance()->get(ps,"0Metamodel/9Tag");
++<<<<<<< HEAD
 +    if(ps.size()){
 +      fileName.assign("onelab" + ps[0].getValue() + ".db");
 +      ps[0].setValue("");
 +      onelab::server::instance()->set(ps[0]);
++=======
+     if(ps.size() && ps[0].getValue().size()){
+       fileName.assign("onelab_" + ps[0].getValue() + ".db");
+     }
+ 
+     // save db in "restore" mode"
+     double restoreMode=0;
+     std::vector<onelab::number> pn;
+     onelab::server::instance()->get(pn,"0Metamodel/9Use restored solution");
+     if(pn.size()){
+       restoreMode=pn[0].getValue();
+       pn[0].setValue(2); // special value
+       onelab::server::instance()->set(pn[0]);
++>>>>>>> upstream/2.9.3+dfsg1
      }
  
      std::string s;
      s.assign(SplitFileName(GModel::current()->getFileName())[0] + fileName);
      if(fileChooser(FILE_CHOOSER_CREATE, "Save", "*.db", s.c_str())){
++<<<<<<< HEAD
 +      archiveSolutionFiles(fileChooserGetName(1));
++=======
+       if(!restoreMode)
+ 	archiveSolutionFiles(fileChooserGetName(1));
++>>>>>>> upstream/2.9.3+dfsg1
        saveDb(fileChooserGetName(1));
      }
  
@@@ -904,10 -164,11 +938,18 @@@
      // iterate over all other clients (there should normally only be one)
      for(onelab::server::citer it = onelab::server::instance()->firstClient();
  	it != onelab::server::instance()->lastClient(); it++){
++<<<<<<< HEAD
 +      onelab::client *c = it->second;
 +      if(c->getName() == "Gmsh" || // local Gmsh client
 +	 c->getName() == "Listen" || // unknown client connecting through "-listen"
 +	 c->getName() == "GmshRemote") // distant post-processing Gmsh client
++=======
+       onelab::client *c = *it;
+       if(c->getName() == "Gmsh" || // local Gmsh client
+ 	 c->getName() == "Listen" || // unknown client connecting through "-listen"
+ 	 c->getName() == "GmshRemote" || // distant post-processing Gmsh client
+          c->getName().find("NoAutoRun") != std::string::npos) // client name contains "NoAutoRun"
++>>>>>>> upstream/2.9.3+dfsg1
  	continue;
        if(action != "initialize") onelabUtils::guessModelName(c);
        onelab::string o(c->getName() + "/Action", action);
@@@ -924,7 -185,7 +966,11 @@@
          // for this solver
          onelab::server::instance()->setChanged(false, c->getName());
  
++<<<<<<< HEAD
 +	FlGui::instance()->onelab->checkForErrors(c->getName());
++=======
+         FlGui::instance()->onelab->checkForErrors(c->getName());
++>>>>>>> upstream/2.9.3+dfsg1
        }
        if(FlGui::instance()->onelab->stop()) break;
      }
@@@ -1516,9 -784,16 +1569,22 @@@ static void onelab_string_button_cb(Fl_
    std::vector<onelab::string> strings;
    onelab::server::instance()->get(strings, name);
    if(strings.size()){
++<<<<<<< HEAD
 +    std::string tmp = FixRelativePath(GModel::current()->getFileName(),
 +                                      strings[0].getValue());
 +    MergeFile(tmp);
++=======
+     if(strings[0].getAttribute("Macro") == "GmshParseString"){
+       // parse string directly
+       ParseString(strings[0].getValue());
+     }
+     else{
+       // merge file
+       std::string tmp = FixRelativePath(GModel::current()->getFileName(),
+                                         strings[0].getValue());
+       MergeFile(tmp);
+     }
++>>>>>>> upstream/2.9.3+dfsg1
      setGmshOption(strings[0]);
      autoCheck(strings[0], strings[0], true);
      drawContext::global()->draw();
@@@ -1616,7 -891,9 +1682,13 @@@ Fl_Widget *onelabGroup::_addParameterWi
    _treeStrings.push_back(path);
  
    // macro button
++<<<<<<< HEAD
 +  if(p.getAttribute("Macro") == "Gmsh"){
++=======
+   if(p.getAttribute("Macro") == "Gmsh" ||
+      p.getAttribute("Macro") == "GmshMergeFile" ||
+      p.getAttribute("Macro") == "GmshParseString"){
++>>>>>>> upstream/2.9.3+dfsg1
      Fl_Button *but = new Fl_Button(1, 1, ww / _widgetLabelRatio, hh);
      but->box(FL_FLAT_BOX);
      but->color(_tree->color());
@@@ -2095,65 -1407,6 +2202,68 @@@ void solver_cb(Fl_Widget *w, void *data
    CTX::instance()->launchSolverAtStartup = -1;
  }
  
++<<<<<<< HEAD
 +void solver_batch_cb(Fl_Widget *w, void *data)
 +{
 +  int num = (intptr_t)data;
 +  if(num < 0) return;
 +  std::string name = opt_solver_name(num, GMSH_GET, "");
 +  std::string exe = opt_solver_executable(num, GMSH_GET, "");
 +  std::string host = opt_solver_remote_login(num, GMSH_GET, "");
 +  if(exe.empty()){
 +    Msg::Error("Solver executable name not provided");
 +    return;
 +  }
 +
 +  onelab::number n("0Metamodel/Batch", CTX::instance()->batch);
 +  n.setVisible(false);
 +  onelab::server::instance()->set(n);
 +
 +  // create client
 +  onelab::localNetworkClient *c = new gmshLocalNetworkClient(name, exe, host);
 +  c->setIndex(num);
 +  onelab::string o(c->getName() + "/Action");
 +
 +  // initialize
 +  onelabUtils::runGmshClient("initialize", CTX::instance()->solver.autoMesh);
 +  o.setValue("initialize");
 +  onelab::server::instance()->set(o);
 +  c->run();
 +
 +  // load db
 +  if(CTX::instance()->solver.autoSaveDatabase){
 +    std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db";
 +    if(!StatFile(db)) loadDb(db);
 +  }
 +
 +  // check
 +  onelabUtils::runGmshClient("check", CTX::instance()->solver.autoMesh);
 +  onelabUtils::guessModelName(c);
 +  o.setValue("check");
 +  onelab::server::instance()->set(o);
 +  c->run();
 +
 +  // compute
 +  initializeLoops();
 +  do{
 +    onelabUtils::runGmshClient("compute", CTX::instance()->solver.autoMesh);
 +    onelabUtils::guessModelName(c);
 +    o.setValue("compute");
 +    onelab::server::instance()->set(o);
 +    c->run();
 +    onelab::server::instance()->setChanged(false, c->getName());
 +  } while(incrementLoops());
 +
 +  if(CTX::instance()->solver.autoSaveDatabase ||
 +     CTX::instance()->solver.autoArchiveOutputFiles){
 +    std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db";
 +    if(CTX::instance()->solver.autoArchiveOutputFiles) archiveOutputFiles(db);
 +    if(CTX::instance()->solver.autoSaveDatabase) saveDb(db);
 +  }
 +}
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  void flgui_wait_cb(double time)
  {
    FlGui::instance()->wait(time);
diff --cc Fltk/openglWindow.cpp
index 6a83afb,c2dd089..24b0c29
--- a/Fltk/openglWindow.cpp
+++ b/Fltk/openglWindow.cpp
@@@ -344,7 -347,23 +347,27 @@@ int openglWindow::handle(int event
    case FL_PUSH:
      if(Fl::event_clicks() == 1 && !selectionMode){
        // double-click and not in selection mode
++<<<<<<< HEAD
 +      status_options_cb(0, (void*)"quick_access");
++=======
+       std::vector<GVertex*> vertices;
+       std::vector<GEdge*> edges;
+       std::vector<GFace*> faces;
+       std::vector<GRegion*> regions;
+       std::vector<MElement*> elements;
+       std::vector<SPoint2> points;
+       _select(ENT_ALL, false, false, Fl::event_x(), Fl::event_y(), 5, 5,
+               vertices, edges, faces, regions, elements, points);
+       if(points.size()){ // double-click on graph point
+         CTX::instance()->post.graphPointX = points[0].x();
+         CTX::instance()->post.graphPointY = points[0].y();
+         if(CTX::instance()->post.graphPointCommand.size())
+           ParseString(CTX::instance()->post.graphPointCommand, true);
+       }
+       else{ // popup quick access menu
+         status_options_cb(0, (void*)"quick_access");
+       }
++>>>>>>> upstream/2.9.3+dfsg1
        Fl::event_clicks(-1);
        return 1;
      }
diff --cc Geo/CMakeLists.txt
index ed90152,e91f0be..18edbcb
--- a/Geo/CMakeLists.txt
+++ b/Geo/CMakeLists.txt
@@@ -14,6 -14,7 +14,10 @@@ set(SR
      gmshVertex.cpp gmshEdge.cpp gmshFace.cpp gmshRegion.cpp
     gmshSurface.cpp
     OCCVertex.cpp OCCEdge.cpp OCCFace.cpp OCCRegion.cpp
++<<<<<<< HEAD
++=======
+    GenericVertex.cpp GenericEdge.cpp GenericFace.cpp GenericRegion.cpp
++>>>>>>> upstream/2.9.3+dfsg1
      discreteEdge.cpp discreteFace.cpp discreteRegion.cpp
      fourierEdge.cpp fourierFace.cpp fourierProjectionFace.cpp
    ACISVertex.cpp
diff --cc Geo/GFace.cpp
index d44829d,56755ed..cdc6ebc
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@@ -1471,10 -1459,10 +1459,17 @@@ void GFace::addLayersOfQuads(int nLayer
  	hlayer *= ratio;
  	hmin += hlayer;
        }
++<<<<<<< HEAD
 +      fprintf(f,"};\n");
 +    }
 +  }
 +  fclose(f);
++=======
+       if(f) fprintf(f,"};\n");
+     }
+   }
+   if(f) fclose(f);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  void GFace::relocateMeshVertices()
diff --cc Geo/GModel.cpp
index 3a00394,b1c4904..d592e9e
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@@ -1459,16 -1495,8 +1495,21 @@@ void GModel::checkMeshCoherence(double 
      for(unsigned int i = 0; i < entities.size(); i++)
        vertices.insert(vertices.end(), entities[i]->mesh_vertices.begin(),
                        entities[i]->mesh_vertices.end());
++<<<<<<< HEAD
 +    MVertexPositionSet pos(vertices);
 +    for(unsigned int i = 0; i < vertices.size(); i++)
 +      pos.find(vertices[i]->x(), vertices[i]->y(), vertices[i]->z(), eps);
 +    int num = 0;
 +    for(unsigned int i = 0; i < vertices.size(); i++)
 +      if(!vertices[i]->getIndex()){
 +        Msg::Info("Duplicate vertex %d at (%.16g,%.16g,%.16g)", vertices[i]->getNum(),
 +                  vertices[i]->x(), vertices[i]->y(), vertices[i]->z());
 +        num++;
 +      }
++=======
+     MVertexRTree pos(eps);
+     int num = pos.insert(vertices, true);
++>>>>>>> upstream/2.9.3+dfsg1
      if(num) Msg::Error("%d duplicate vert%s", num, num > 1 ? "ices" : "ex");
    }
  
diff --cc Geo/GModelFactory.h
index ffab382,ac25ea3..b58b178
--- a/Geo/GModelFactory.h
+++ b/Geo/GModelFactory.h
@@@ -210,15 -210,7 +210,19 @@@ class GModelFactory 
      Msg::Error("setPeriodicPairOfFaces not implemented yet");
    }
    ;
++<<<<<<< HEAD
 +  virtual void setPhysicalNumToEntitiesInBox(GModel *gm, int EntityType,
 +                                             int PhysicalGroupNumber,
 +                                             std::vector<double> p1,std::vector<double> p2)
 +  {
 +    Msg::Error("setPhysicalNumToEntitiesInBox not implemented yet");
 +  }
 +
 +  virtual void healGeometry(GModel *gm, double tolerance = -1.) = 0;
 +
++=======
+   virtual void healGeometry(GModel *gm, double tolerance = -1.) = 0;
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  class GeoFactory : public GModelFactory {
diff --cc Geo/GModelIO_GEO.cpp
index 59d761a,baabc9f..182b3fe
--- a/Geo/GModelIO_GEO.cpp
+++ b/Geo/GModelIO_GEO.cpp
@@@ -163,6 -173,9 +173,12 @@@ int GModel::importGEOInternals(
            e = new gmshEdge(this, c, 0, 0);
            add(e);
          }
++<<<<<<< HEAD
++=======
+         else{
+           e->resetMeshAttributes();
+         }
++>>>>>>> upstream/2.9.3+dfsg1
  
          if(!c->Visible) e->setVisibility(0);
          if(c->Color.type) e->setColor(c->Color.mesh);
@@@ -186,24 -199,24 +202,37 @@@
            if(gf)
              comp.push_back(gf);
          }
- 	std::list<GEdge*> b[4];
+         std::list<GEdge*> b[4];
          for(int j = 0; j < 4; j++){
- 	  for(unsigned int k = 0; k < s->compoundBoundary[j].size(); k++){
- 	    GEdge *ge = getEdgeByTag(s->compoundBoundary[j][k]);
- 	    if(ge) b[j].push_back(ge);
- 	  }
- 	}
+           for(unsigned int k = 0; k < s->compoundBoundary[j].size(); k++){
+             GEdge *ge = getEdgeByTag(s->compoundBoundary[j][k]);
+             if(ge) b[j].push_back(ge);
+           }
+         }
          int param = CTX::instance()->mesh.remeshParam;
++<<<<<<< HEAD
 +	GFaceCompound::typeOfCompound typ = GFaceCompound::HARMONIC_CIRCLE;
 +	if (param == 1) typ =  GFaceCompound::CONFORMAL_SPECTRAL;
 +	if (param == 2) typ =  GFaceCompound::RADIAL_BASIS;
 +	if (param == 3) typ =  GFaceCompound::HARMONIC_PLANE;
 +	if (param == 4) typ =  GFaceCompound::CONVEX_CIRCLE;
 +	if (param == 5) typ =  GFaceCompound::CONVEX_PLANE;
 +	if (param == 6) typ =  GFaceCompound::HARMONIC_SQUARE;
 +	if (param == 7) typ =  GFaceCompound::CONFORMAL_FE;
 +        int algo = CTX::instance()->mesh.remeshAlgo;
 +	f = new GFaceCompound(this, s->Num, comp, b[0], b[1], b[2], b[3], typ, algo);
++=======
+         GFaceCompound::typeOfCompound typ = GFaceCompound::HARMONIC_CIRCLE;
+         if (param == 1) typ =  GFaceCompound::CONFORMAL_SPECTRAL;
+         if (param == 2) typ =  GFaceCompound::RADIAL_BASIS;
+         if (param == 3) typ =  GFaceCompound::HARMONIC_PLANE;
+         if (param == 4) typ =  GFaceCompound::CONVEX_CIRCLE;
+         if (param == 5) typ =  GFaceCompound::CONVEX_PLANE;
+         if (param == 6) typ =  GFaceCompound::HARMONIC_SQUARE;
+         if (param == 7) typ =  GFaceCompound::CONFORMAL_FE;
+         int algo = CTX::instance()->mesh.remeshAlgo;
+         f = new GFaceCompound(this, s->Num, comp, b[0], b[1], b[2], b[3], typ, algo);
++>>>>>>> upstream/2.9.3+dfsg1
          f->meshAttributes.recombine = s->Recombine;
          f->meshAttributes.recombineAngle = s->RecombineAngle;
          f->meshAttributes.method = s->Method;
diff --cc Geo/GModelIO_OCC.cpp
index 3632cf7,77c07b6..69eeb2f
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@@ -35,7 -37,8 +37,12 @@@ void OCC_Internals::buildLists(
    addShapeToLists(shape);
  }
  
++<<<<<<< HEAD
 +void  OCC_Internals::buildShapeFromGModel(GModel* gm){
++=======
+ void OCC_Internals::buildShapeFromGModel(GModel* gm)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    somap.Clear();
    shmap.Clear();
    fmap.Clear();
@@@ -45,13 -48,13 +52,21 @@@
    for (GModel::riter it = gm->firstRegion(); it != gm->lastRegion() ; ++it){
      if ((*it)->getNativeType() == GEntity::OpenCascadeModel){
        OCCRegion *occ = static_cast<OCCRegion*> (*it);
++<<<<<<< HEAD
 +      if (occ)addShapeToLists (occ->getTopoDS_Shape());
++=======
+       if(occ) addShapeToLists(occ->getTopoDS_Shape());
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    for (GModel::fiter it = gm->firstFace(); it != gm->lastFace() ; ++it){
      if ((*it)->getNativeType() == GEntity::OpenCascadeModel){
        OCCFace *occ = static_cast<OCCFace*> (*it);
++<<<<<<< HEAD
 +      if(occ)addShapeToLists (occ->getTopoDS_Face ());
++=======
+       if(occ) addShapeToLists(occ->getTopoDS_Face());
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    BRep_Builder B;
@@@ -240,9 -243,17 +255,21 @@@ void OCC_Internals::addShapeToLists(Top
  
  void OCC_Internals::healGeometry(double tolerance, bool fixdegenerated,
                                   bool fixsmalledges, bool fixspotstripfaces,
-                                  bool sewfaces, bool makesolids, bool connect)
+                                  bool sewfaces, bool makesolids, int connect,
+                                  double scaling)
  {
++<<<<<<< HEAD
 +  
++=======
+   if(scaling != 1.0){
+     Msg::Info("Scaling geometry by factor %g", scaling);
+     gp_Trsf t;
+     t.SetScaleFactor(scaling);
+     BRepBuilderAPI_Transform trsf(shape, t);
+     shape = trsf.Shape();
+   }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    if(!fixdegenerated && !fixsmalledges && !fixspotstripfaces &&
       !sewfaces && !makesolids && !connect) return;
  
@@@ -737,35 -753,6 +769,38 @@@ GRegion* OCC_Internals::addRegionToMode
    //  return getOCCRegionByNativePtr(model, region);
  }
  
++<<<<<<< HEAD
 +/* I needed getGTagOfOCC*ByNativePtr whithin setPhysicalNumToEntitiesInBox */
 +int OCC_Internals::getGTagOfOCCVertexByNativePtr(GModel *model, TopoDS_Vertex toFind)
 +{
 +  if(gvNumCache.IsBound(toFind))
 +    return (int)gvNumCache.Find(toFind);
 +  return 0;
 +}
 +
 +int OCC_Internals::getGTagOfOCCFaceByNativePtr(GModel *model, TopoDS_Face toFind)
 +{
 +  if(gfNumCache.IsBound(toFind))
 +    return (int)gfNumCache.Find(toFind);
 +  return 0;
 +}
 +
 +int OCC_Internals::getGTagOfOCCEdgeByNativePtr(GModel *model, TopoDS_Edge toFind)
 +{
 +  if(geNumCache.IsBound(toFind))
 +    return (int)geNumCache.Find(toFind);
 +  return 0;
 +}
 +
 +int OCC_Internals::getGTagOfOCCSolidByNativePtr(GModel *model, TopoDS_Solid toFind)
 +{
 +  if(grNumCache.IsBound(toFind))
 +    return (int)grNumCache.Find(toFind);
 +  return 0;
 +}
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  void OCC_Internals::buildGModel(GModel *model)
  {
    // building geom vertices
diff --cc Geo/Geo.cpp
index dc09d28,75be98c..6656444
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@@ -11,7 -11,7 +11,11 @@@
  #include "GModel.h"
  #include "GeoInterpolation.h"
  #include "Context.h"
++<<<<<<< HEAD
 +#include "MVertexPositionSet.h"
++=======
+ #include "MVertexRTree.h"
++>>>>>>> upstream/2.9.3+dfsg1
  
  #if defined(HAVE_MESH)
  #include "Field.h"
@@@ -2367,51 -2399,44 +2403,84 @@@ static void ReplaceDuplicatePointsNew(d
    if (tol < 0)
      tol = CTX::instance()->geom.tolerance * CTX::instance()->lc;
  
++<<<<<<< HEAD
 +  // create kdtree
 +  std::map<MVertex*, Vertex*> v2V;
 +  std::vector<MVertex*> all;
++=======
+   // create rtree
+   MVertexRTree pos(tol);
+   std::map<MVertex*, Vertex*> v2V;
+   std::vector<MVertex*> used, unused;
++>>>>>>> upstream/2.9.3+dfsg1
    List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Points);
    for(int i = 0; i < List_Nbr(tmp); i++) {
      Vertex *V;
      List_Read(tmp, i, &V);
      MVertex *v = new MVertex(V->Pos.X, V->Pos.Y, V->Pos.Z);
++<<<<<<< HEAD
 +    all.push_back(v);
 +    v2V[v] = V;
 +  }
 +  List_Delete(tmp);
 +  MVertexPositionSet pos(all);
 +
 +  // touch all points
 +  tmp = Tree2List(GModel::current()->getGEOInternals()->Points);
 +  for(int i = 0; i < List_Nbr(tmp); i++) {
 +    Vertex *V;
 +    List_Read(tmp, i, &V);
 +    pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z, tol);
 +  }
 +  List_Delete(tmp);
 +
 +  // replace points in curves
 +  tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
 +
++=======
+     if(!pos.insert(v))
+       used.push_back(v);
+     else
+       unused.push_back(v);
+     v2V[v] = V;
+   }
+   List_Delete(tmp);
+ 
+   // replace points in curves
+   tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
++>>>>>>> upstream/2.9.3+dfsg1
    for(int i = 0; i < List_Nbr(tmp); i++) {
      Curve *c;
      List_Read(tmp, i, &c);
      // replace begin/end points
++<<<<<<< HEAD
 +    c->beg = v2V[pos.find(c->beg->Pos.X, c->beg->Pos.Y, c->beg->Pos.Z, tol)];
 +    c->end = v2V[pos.find(c->end->Pos.X, c->end->Pos.Y, c->end->Pos.Z, tol)];
++=======
+     c->beg = v2V[pos.find(c->beg->Pos.X, c->beg->Pos.Y, c->beg->Pos.Z)];
+     c->end = v2V[pos.find(c->end->Pos.X, c->end->Pos.Y, c->end->Pos.Z)];
++>>>>>>> upstream/2.9.3+dfsg1
  
      // replace control points
      for(int j = 0; j < List_Nbr(c->Control_Points); j++) {
        Vertex *V;
        List_Read(c->Control_Points, j, &V);
        List_Write(c->Control_Points, j,
++<<<<<<< HEAD
 +		 &v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z, tol)]);
++=======
+ 		 &v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z)]);
++>>>>>>> upstream/2.9.3+dfsg1
      }
      // replace extrusion sources
      if(c->Extrude && c->Extrude->geo.Mode == EXTRUDED_ENTITY){
        Vertex *V = FindPoint(std::abs(c->Extrude->geo.Source));
        if(V) c->Extrude->geo.Source =
++<<<<<<< HEAD
 +	      v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z, tol)]->Num;
++=======
+ 	      v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z)]->Num;
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    List_Delete(tmp);
@@@ -2426,7 -2451,7 +2495,11 @@@
        Vertex *V;
        List_Read(s->TrsfPoints, j, &V);
        List_Write(s->TrsfPoints, j,
++<<<<<<< HEAD
 +                 &v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z, tol)]);
++=======
+                  &v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z)]);
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    List_Delete(tmp);
@@@ -2441,7 -2466,7 +2514,11 @@@
        Vertex *V;
        List_Read(vol->TrsfPoints, j, &V);
        List_Write(vol->TrsfPoints, j,
++<<<<<<< HEAD
 +                 &v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z, tol)]);
++=======
+                  &v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z)]);
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    List_Delete(tmp);
@@@ -2456,22 -2481,23 +2533,40 @@@
          List_Read(p->Entities, j, &num);
          Vertex *V = FindPoint(std::abs(num));
          if(V) List_Write(p->Entities, j,
++<<<<<<< HEAD
 +                         &(v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z, tol)]->Num));
++=======
+                          &(v2V[pos.find(V->Pos.X, V->Pos.Y, V->Pos.Z)]->Num));
++>>>>>>> upstream/2.9.3+dfsg1
        }
      }
    }
  
    int start = Tree_Nbr(GModel::current()->getGEOInternals()->Points);
++<<<<<<< HEAD
 +  for(unsigned int i = 0; i < all.size(); i++){
 +    if(all[i]->getIndex() == 0){
 +      Vertex *V = v2V[all[i]];
 +      Tree_Suppress(GModel::current()->getGEOInternals()->Points, &V);
 +      Free_Vertex(&V, NULL);
 +    }
 +    delete all[i];
 +  }
 +  int end = Tree_Nbr(GModel::current()->getGEOInternals()->Points);
 +  Msg::Info("Done new Coherence (removed %d additional points)", end - start);
++=======
+   for(unsigned int i = 0; i < unused.size(); i++){
+     Vertex *V = v2V[unused[i]];
+     Tree_Suppress(GModel::current()->getGEOInternals()->Points, &V);
+     Free_Vertex(&V, NULL);
+     delete unused[i];
+   }
+   for(unsigned int i = 0; i < used.size(); i++){
+     delete used[i];
+   }
+   int end = Tree_Nbr(GModel::current()->getGEOInternals()->Points);
+   Msg::Info("Done new Coherence (removed %d additional points)", start - end);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  static void ReplaceDuplicatePoints(std::map<int, int> * v_report = 0)
diff --cc Geo/GeomMeshMatcher.cpp
index 29efce6,a678a2b..96fe1e1
--- a/Geo/GeomMeshMatcher.cpp
+++ b/Geo/GeomMeshMatcher.cpp
@@@ -697,25 -732,19 +732,37 @@@ int GeomMeshMatcher::match(GModel *geom
  
    bool ok = true;
  
++<<<<<<< HEAD
 +  // This will match VERTICES
 +  std::vector<Pair<GVertex*, GVertex*> > *coresp_v = matchVertices(geom, mesh,ok);
 +
 +  // This will match EDGES
 +  std::vector<Pair<GEdge*, GEdge*> > *coresp_e = matchEdges(geom, mesh, coresp_v,ok);
 +
 +  // This will match SURFACES
 +  std::vector<Pair<GFace*, GFace*> > *coresp_f = matchFaces(geom, mesh, coresp_e,ok);
 +
 +  std::vector<Pair<GRegion*, GRegion*> > *coresp_r = matchRegions(geom, mesh, coresp_f,ok);
++=======
+   std::vector<Pair<GVertex*, GVertex*> > *coresp_v = matchVertices(geom, mesh, ok);
+   std::vector<Pair<GEdge*  , GEdge*  > > *coresp_e = matchEdges   (geom, mesh, coresp_v, ok);
+   std::vector<Pair<GFace*  , GFace*  > > *coresp_f = matchFaces   (geom, mesh, coresp_e, ok);
+   std::vector<Pair<GRegion*, GRegion*> > *coresp_r = matchRegions (geom, mesh, coresp_f, ok);
++>>>>>>> upstream/2.9.3+dfsg1
  
    std::map<MVertex*,MVertex*> _mesh_to_geom;
-   copy_vertices(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f);
-   copy_elements(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f);
+   copy_vertices(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f,coresp_r);
+   copy_elements(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f,coresp_r);
+ 
+   delete coresp_v;
+   delete coresp_e;
+   delete coresp_f;
+   delete coresp_r;
  
 +  delete coresp_v;
 +  delete coresp_e;
 +  delete coresp_f;
 +  delete coresp_r;
 +
    return 1;
  }
diff --cc Geo/MElement.h
index db684db,c19d8e4..63c4ac7
--- a/Geo/MElement.h
+++ b/Geo/MElement.h
@@@ -271,13 -298,17 +298,25 @@@ class MElemen
    {
      double jac[3][3]; return getJacobian(u, v, w, jac);
    }
++<<<<<<< HEAD
 +  void getSignedJacobian(fullVector<double> &jacobian, int o = -1);
 +  void getNodesCoord(fullMatrix<double> &nodesXYZ) const;
 +  virtual int getNumShapeFunctions() const{ return getNumVertices(); }
 +  virtual int getNumPrimaryShapeFunctions() { return getNumPrimaryVertices(); }
 +  virtual const MVertex *getShapeFunctionNode(int i) const{ return getVertex(i); }
++=======
+   void getSignedJacobian(fullVector<double> &jacobian, int o = -1) const;
+   void getNodesCoord(fullMatrix<double> &nodesXYZ) const;
+   virtual int getNumShapeFunctions() const { return getNumVertices(); }
+   virtual int getNumPrimaryShapeFunctions() const { return getNumPrimaryVertices(); }
+   virtual const MVertex *getShapeFunctionNode(int i) const { return getVertex(i); }
++>>>>>>> upstream/2.9.3+dfsg1
    virtual MVertex *getShapeFunctionNode(int i) { return getVertex(i); }
  
+   // return the eigenvalues of the metric evaluated at point (u,v,w) in
+   // parametric coordinates
+   virtual double getEigenvaluesMetric(double u, double v, double w, double values[3]) const;
+ 
    // get the point in cartesian coordinates corresponding to the point
    // (u,v,w) in parametric coordinates
    virtual void pnt(double u, double v, double w, SPoint3 &p) const;
diff --cc Geo/MLine.cpp
index 1299cb4,8df65e3..3af0e13
--- a/Geo/MLine.cpp
+++ b/Geo/MLine.cpp
@@@ -107,8 -108,10 +108,15 @@@ void MLineN::discretize(double tol, std
    if (order == 3) {
      SPoint3 p0 = getVertex(0)->point();
      SPoint3 p3 = getVertex(1)->point();
++<<<<<<< HEAD
 +    SPoint3 p1 = p0 * (-5./6) + p3 * (1./3) + getVertex(2)->point() * 3. - getVertex(3)->point() * 1.5;
 +    SPoint3 p2 = p0 * (1./3) + p3 * (-5./6) - getVertex(2)->point() * 1.5 + getVertex(3)->point() * 3.;
++=======
+     SPoint3 p1 = p0 * (-5./6) + p3 * (1./3) + getVertex(2)->point() * 3. -
+       getVertex(3)->point() * 1.5;
+     SPoint3 p2 = p0 * (1./3) + p3 * (-5./6) - getVertex(2)->point() * 1.5 +
+       getVertex(3)->point() * 3.;
++>>>>>>> upstream/2.9.3+dfsg1
      decasteljau(tol, p0, p1, p2, p3, dpts, ts);
      for (size_t i = 0; i < ts.size(); ++i)
        ts[i] = -1 + 2 * ts[i];
diff --cc Geo/MPrism.cpp
index 41c2b69,6e3ffb0..f2ffc70
--- a/Geo/MPrism.cpp
+++ b/Geo/MPrism.cpp
@@@ -514,38 -529,13 +529,46 @@@ void MPrismN::getFaceVertices(const in
  
    // Add face nodes
    _addFaceNodes(num,_order,_vs,ind,v);
+ }
  
+ double MPrism::gammaShapeMeasure()
+ {
+ #if defined(HAVE_MESH)
+   return qmPrism::minNCJ(this);
+ #else
+   return 0.;
+ #endif
  }
 +
 +static double scaled_jacobian(MVertex* a,MVertex* b,MVertex* c,MVertex* d){
 +  double val;
 +  double l1,l2,l3;
 +  SVector3 vec1,vec2,vec3;
 +
 +  vec1 = SVector3(b->x()-a->x(),b->y()-a->y(),b->z()-a->z());
 +  vec2 = SVector3(c->x()-a->x(),c->y()-a->y(),c->z()-a->z());
 +  vec3 = SVector3(d->x()-a->x(),d->y()-a->y(),d->z()-a->z());
 +
 +  l1 = vec1.norm();
 +  l2 = vec2.norm();
 +  l3 = vec3.norm();
 +
 +  val = dot(vec1,crossprod(vec2,vec3));
 +  return fabs(val)/(l1*l2*l3);
 +}
 +
 +double MPrism::gammaShapeMeasure() {
 +  MVertex *a = getVertex(0),*b= getVertex(1),*c= getVertex(2);
 +  MVertex *d = getVertex(3),*e= getVertex(4),*f= getVertex(5);
 +  const double j [6] = {
 +    scaled_jacobian(a,b,c,d),
 +    scaled_jacobian(b,a,c,e),
 +    scaled_jacobian(c,a,b,f),
 +    scaled_jacobian(d,a,e,f),
 +    scaled_jacobian(e,b,d,f),
 +    scaled_jacobian(f,c,d,e)};  
 +  const double result = *std::min_element(j,j+6);
 +  printf("%12.5E\n",result);
 +  return result;
 +}
 +
diff --cc Geo/MPyramid.cpp
index 1d2af2d,52d6bcc..8823aff
--- a/Geo/MPyramid.cpp
+++ b/Geo/MPyramid.cpp
@@@ -33,19 -33,12 +33,28 @@@ void MPyramid::getIntegrationPoints(in
    *pts = getGQPyrPts(pOrder);
  }
  
++<<<<<<< HEAD
 +const JacobianBasis* MPyramid::getJacobianFuncSpace(int o) const
 +{
 +  // FIXME add other order and see MPyramid::getFunctionSpace for 'design'
 +  int order = (o == -1) ? getPolynomialOrder() : o;
 +
 +  switch (order) {
 +    case 1: return BasisFactory::getJacobianBasis(MSH_PYR_5);
 +    case 2: return BasisFactory::getJacobianBasis(MSH_PYR_14);
 +    case 3: return BasisFactory::getJacobianBasis(MSH_PYR_30);
 +    default: Msg::Error("Order %d pyramid function space not implemented", order); break;
 +  }
 +
 +  return 0;
++=======
+ const JacobianBasis* MPyramid::getJacobianFuncSpace(int order) const
+ {
+   if (order == -1) return BasisFactory::getJacobianBasis(getTypeForMSH());
+ 
+   int tag = ElementType::getTag(TYPE_PYR, order);
+   return tag ? BasisFactory::getJacobianBasis(tag) : NULL;
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  MPyramidN::~MPyramidN() {}
diff --cc Geo/MQuadrangle.h
index 187e6c6,1f04ca4..e880a6a
--- a/Geo/MQuadrangle.h
+++ b/Geo/MQuadrangle.h
@@@ -432,7 -432,7 +432,11 @@@ class MQuadrangleN : public MQuadrangl
    virtual int getTypeForVTK() const
    {
      if(_order== 2 && _vs.size() + 4 == 9) return 28;
++<<<<<<< HEAD
 +    if(_order== 2 && _vs.size() + 4 == 8)  return 23;
++=======
+     if(_order== 2 && _vs.size() + 4 == 8) return 23;
++>>>>>>> upstream/2.9.3+dfsg1
      return MQuadrangle::getTypeForVTK();
    }
    virtual void reverse()
diff --cc Geo/MTriangle.h
index 3b8fba8,f68a3e0..6ad1092
--- a/Geo/MTriangle.h
+++ b/Geo/MTriangle.h
@@@ -327,7 -327,10 +327,14 @@@ class MTriangleN : public MTriangle 
      Msg::Error("no tag matches a p%d triangle with %d vertices", _order, 3+_vs.size());
      return 0;
    }
++<<<<<<< HEAD
 +  virtual int getTypeForVTK() const { return (_order==2) ? 22 : MTriangle::getTypeForVTK(); }
++=======
+   virtual int getTypeForVTK() const
+   {
+     return (_order == 2) ? 22 : MTriangle::getTypeForVTK();
+   }
++>>>>>>> upstream/2.9.3+dfsg1
    virtual void reverse()
    {
      MVertex *tmp;
diff --cc Geo/SOrientedBoundingBox.cpp
index 76d000d,0a4af41..58101be
--- a/Geo/SOrientedBoundingBox.cpp
+++ b/Geo/SOrientedBoundingBox.cpp
@@@ -384,8 -384,10 +384,15 @@@ SOrientedBoundingBox* SOrientedBounding
        bool okay = true;
        for (std::vector<Segment>::iterator seg = convex_hull.begin();
             seg != convex_hull.end(); seg++) {
++<<<<<<< HEAD
 +        if ( ((*seg).from == segs[j].from && (*seg).from == segs[j].to) ||
 +             ((*seg).from == segs[j].to && (*seg).from == segs[j].from)) {
++=======
+         if ( ((*seg).from == segs[j].from && (*seg).from == segs[j].to)
+              // FIXME:
+              // || ((*seg).from == segs[j].to && (*seg).from == segs[j].from)
+              ) {
++>>>>>>> upstream/2.9.3+dfsg1
            convex_hull.erase(seg);
            okay = false;
            break;
diff --cc Geo/STensor3.h
index 220fde1,06b0ea5..77c6a05
--- a/Geo/STensor3.h
+++ b/Geo/STensor3.h
@@@ -350,6 -356,14 +356,17 @@@ class STensor3 
      }
      return sqrt(sqr);
    }
++<<<<<<< HEAD
++=======
+   STensor3 dev() const{
+     double p= trace()/3.;
+     STensor3 de(*this);
+     de(0,0) -= p;
+     de(1,1) -= p;
+     de(2,2) -= p;
+     return de;
+   }
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  // tensor product
diff --cc Geo/SVector3.h
index 815752d,c423f47..995b88e
--- a/Geo/SVector3.h
+++ b/Geo/SVector3.h
@@@ -89,7 -89,8 +89,12 @@@ class SVector3 
        return 2;
      }
    }
++<<<<<<< HEAD
 +
++=======
+   const double* data() const {return P.data();}
+   double* data() {return P.data();}
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  inline double dot(const SVector3 &a, const SVector3 &b)
diff --cc Geo/closestPoint.cpp
index 2b3816d,373e205..19350d2
--- a/Geo/closestPoint.cpp
+++ b/Geo/closestPoint.cpp
@@@ -1,3 -1,8 +1,11 @@@
++<<<<<<< HEAD
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
+ //
+ // See the LICENSE.txt file for license information. Please report all
+ // bugs and problems to the public mailing list <gmsh at geuz.org>.
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #include "closestPoint.h"
  #include "GEntity.h"
  #include "GEdge.h"
diff --cc Geo/closestPoint.h
index b80b6f9,fce9fb6..ba016a3
--- a/Geo/closestPoint.h
+++ b/Geo/closestPoint.h
@@@ -1,10 -1,19 +1,29 @@@
++<<<<<<< HEAD
 +#ifndef _CLOSEST_POINT_H_
 +#define _CLOSEST_POINT_H_
 +#include "GmshConfig.h"
 +#if defined(HAVE_ANN)
 +#include "ANN/ANN.h"
 +#endif
 +#include "SPoint3.h"
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
+ //
+ // See the LICENSE.txt file for license information. Please report all
+ // bugs and problems to the public mailing list <gmsh at geuz.org>.
+ 
+ #ifndef _CLOSEST_POINT_H_
+ #define _CLOSEST_POINT_H_
+ 
+ #include "GmshConfig.h"
+ 
+ #if defined(HAVE_ANN)
+ #include "ANN/ANN.h"
+ #endif
+ 
+ #include "SPoint3.h"
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  class GEntity;
  class closestPointFinder
  {
diff --cc Geo/gmshEdgeDiscretize.cpp
index b85e429,f6d1b10..d98ca4e
--- a/Geo/gmshEdgeDiscretize.cpp
+++ b/Geo/gmshEdgeDiscretize.cpp
@@@ -1,3 -1,8 +1,11 @@@
++<<<<<<< HEAD
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
+ //
+ // See the LICENSE.txt file for license information. Please report all
+ // bugs and problems to the public mailing list <gmsh at geuz.org>.
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #include <cstdio>
  #include <cmath>
  #include <vector>
@@@ -7,18 -12,19 +15,32 @@@
  #include "gmshEdge.h"
  #include "Geo.h"
  
++<<<<<<< HEAD
 +
 +class discreteList {
 +  std::vector<std::pair<SPoint3, double> > _pts;
 +  std::vector<int> _next;
 +  public:
 +  int insertPoint(int pos, const SPoint3 &pt, double t) {
++=======
+ class discreteList {
+   std::vector<std::pair<SPoint3, double> > _pts;
+   std::vector<int> _next;
+ public:
+   int insertPoint(int pos, const SPoint3 &pt, double t)
+   {
++>>>>>>> upstream/2.9.3+dfsg1
      _pts.push_back(std::make_pair(pt, t));
      _next.push_back(_next[pos + 1]);
      _next[pos + 1] = _pts.size() - 1;
      return _pts.size() - 1;
    }
++<<<<<<< HEAD
 +  void sort(std::vector<SPoint3> &spts, std::vector<double> &ts) {
++=======
+   void sort(std::vector<SPoint3> &spts, std::vector<double> &ts)
+   {
++>>>>>>> upstream/2.9.3+dfsg1
      spts.clear();
      spts.reserve(_pts.size());
      ts.clear();
@@@ -28,12 -34,15 +50,23 @@@
        ts.push_back(_pts[p].second);
      }
    }
++<<<<<<< HEAD
 +  discreteList() {
++=======
+   discreteList()
+   {
++>>>>>>> upstream/2.9.3+dfsg1
      _next.push_back(-1);
    }
  };
  
++<<<<<<< HEAD
 +static void decasteljau(double tol, discreteList &discrete, int pos, const SPoint3 &p0, const SPoint3 &p1, const SPoint3 &p2, const SPoint3 &p3, double t0, double t3)
++=======
+ static void decasteljau(double tol, discreteList &discrete, int pos,
+                         const SPoint3 &p0, const SPoint3 &p1, const SPoint3 &p2,
+                         const SPoint3 &p3, double t0, double t3)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    SVector3 d30 = p3 - p0;
    SVector3 d13 = p1 - p3;
@@@ -60,7 -69,9 +93,13 @@@
    decasteljau(tol, discrete, newpos, p0123, p123, p23, p3, t0123, t3);
  }
  
++<<<<<<< HEAD
 +static int discretizeBezier(double tol, discreteList &discrete, int pos, const SPoint3 pt[4], double t0, double t3, bool insertFirstPoint)
++=======
+ static int discretizeBezier(double tol, discreteList &discrete, int pos,
+                             const SPoint3 pt[4], double t0, double t3,
+                             bool insertFirstPoint)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    if (insertFirstPoint)
      pos = discrete.insertPoint(pos, pt[0], t0);
@@@ -69,7 -80,9 +108,13 @@@
    return newp;
  }
  
++<<<<<<< HEAD
 +static int discretizeBSpline(double tol, discreteList &discrete, int pos, const SPoint3 pt[4], double t0, double t3, bool insertFirstPoint)
++=======
+ static int discretizeBSpline(double tol, discreteList &discrete, int pos,
+                              const SPoint3 pt[4], double t0, double t3,
+                              bool insertFirstPoint)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    SPoint3 bpt[4] = {
      SPoint3((pt[0] + 4 * pt[1]  + pt[2]) * (1./6.)),
@@@ -80,7 -93,9 +125,13 @@@
    return discretizeBezier(tol, discrete, pos, bpt, t0, t3, insertFirstPoint);
  }
  
++<<<<<<< HEAD
 +static int discretizeCatmullRom(double tol, discreteList &discrete, int pos, const SPoint3 pt[4], double t0, double t3, bool insertFirstPoint)
++=======
+ static int discretizeCatmullRom(double tol, discreteList &discrete, int pos,
+                                 const SPoint3 pt[4], double t0, double t3,
+                                 bool insertFirstPoint)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    SPoint3 bpt[4] = {
      pt[1],
@@@ -98,99 -113,101 +149,196 @@@ static inline SPoint3 curveGetPoint(Cur
    return SPoint3(v->Pos.X, v->Pos.Y, v->Pos.Z);
  }
  
++<<<<<<< HEAD
 +static void discretizeCurve(Curve *c, double tol, std::vector<SPoint3> &pts, std::vector<double> &ts)
 +{
 +  discreteList discrete;
 +  switch(c->Typ) {
 +    case MSH_SEGM_LINE :
 +      {
 +        int NPt = List_Nbr(c->Control_Points);
 +        pts.resize(NPt);
 +        ts.resize(NPt);
 +        for (int i = 0; i < NPt; ++i) {
 +          pts[i]= curveGetPoint(c, i);
 +          ts[i] = i / (double) (NPt - 1);
 +        }
 +        return;
 +      }
 +    case MSH_SEGM_BEZIER :
 +      {
 +        int back = -1;
 +        int NbCurves = (List_Nbr(c->Control_Points) - 1) / 3;
 +        for (int iCurve = 0; iCurve < NbCurves; ++iCurve) {
 +          double t1 = (iCurve) / (double)(NbCurves);
 +          double t2 = (iCurve+1) / (double)(NbCurves);
 +          SPoint3 pt[4];
 +          for(int i = 0; i < 4; i++) {
 +            pt[i] = curveGetPoint(c, iCurve * 3 + i);
 +          }
 +          back = discretizeBezier(tol, discrete, back, pt, t1, t2, iCurve == 0);
 +        }
 +        break;
 +      }
 +    case MSH_SEGM_BSPLN:
 +      {
 +        int back = -1;
 +        bool periodic = (c->end == c->beg);
 +        int NbControlPoints = List_Nbr(c->Control_Points);
 +        int NbCurves = NbControlPoints + (periodic ? -1 : 1);
 +        SPoint3 pt[4];
 +        for (int iCurve = 0; iCurve < NbCurves; ++iCurve) {
 +          double t1 = (iCurve) / (double)(NbCurves);
 +          double t2 = (iCurve+1) / (double)(NbCurves);
 +          for(int i = 0; i < 4; i++) {
 +            int k;
 +            if (periodic) {
 +              k = (iCurve - 1 + i) % (NbControlPoints - 1);
 +              if (k < 0)
 +                k += NbControlPoints - 1;
 +            }
 +            else {
 +              k = std::max(0, std::min(iCurve - 2 + i, NbControlPoints -1));
 +            }
 +            pt[i] = curveGetPoint(c, k);
 +          }
 +          back = discretizeBSpline(tol, discrete, back, pt, t1, t2, iCurve == 0);
 +        }
 +        break;
 +      }
 +    case MSH_SEGM_SPLN:
 +      {
 +        int NbCurves = List_Nbr(c->Control_Points) - 1;
 +        SPoint3 pt[4];
 +        int back = -1;
 +        for (int iCurve = 0; iCurve < NbCurves; ++iCurve) {
 +          double t1 = (iCurve) / (double)(NbCurves);
 +          double t2 = (iCurve+1) / (double)(NbCurves);
 +          pt[1] = curveGetPoint(c, iCurve);
 +          pt[2] = curveGetPoint(c, iCurve + 1);
 +          if(iCurve == 0) {
 +            if(c->beg == c->end)
 +              pt[0] = curveGetPoint(c, NbCurves - 1);
 +            else
 +              pt[0] = SPoint3(pt[1] * 2 - pt[2]);
 +          }
 +          else
 +            pt[0] = curveGetPoint(c, iCurve - 1);
 +          if(iCurve == NbCurves - 1) {
 +            if(c->beg == c->end)
 +              pt[3] = curveGetPoint(c, 1);
 +            else
 +              pt[3] = SPoint3(2 * pt[2] - pt[1]);
 +          }
 +          else
 +            pt[3] = curveGetPoint(c, iCurve + 2);
 +          back = discretizeCatmullRom(tol, discrete, back, pt, t1, t2, iCurve == 0);
 +        }
 +        break;
 +      }
 +    default :
 +      Msg::Fatal("not implemented");
++=======
+ static void discretizeCurve(Curve *c, double tol, std::vector<SPoint3> &pts,
+                             std::vector<double> &ts)
+ {
+   discreteList discrete;
+   switch(c->Typ) {
+   case MSH_SEGM_LINE :
+     {
+       int NPt = List_Nbr(c->Control_Points);
+       pts.resize(NPt);
+       ts.resize(NPt);
+       for (int i = 0; i < NPt; ++i) {
+         pts[i]= curveGetPoint(c, i);
+         ts[i] = i / (double) (NPt - 1);
+       }
+       return;
+     }
+   case MSH_SEGM_BEZIER :
+     {
+       int back = -1;
+       int NbCurves = (List_Nbr(c->Control_Points) - 1) / 3;
+       for (int iCurve = 0; iCurve < NbCurves; ++iCurve) {
+         double t1 = (iCurve) / (double)(NbCurves);
+         double t2 = (iCurve+1) / (double)(NbCurves);
+         SPoint3 pt[4];
+         for(int i = 0; i < 4; i++) {
+           pt[i] = curveGetPoint(c, iCurve * 3 + i);
+         }
+         back = discretizeBezier(tol, discrete, back, pt, t1, t2, iCurve == 0);
+       }
+       break;
+     }
+   case MSH_SEGM_BSPLN:
+     {
+       int back = -1;
+       bool periodic = (c->end == c->beg);
+       int NbControlPoints = List_Nbr(c->Control_Points);
+       int NbCurves = NbControlPoints + (periodic ? -1 : 1);
+       SPoint3 pt[4];
+       for (int iCurve = 0; iCurve < NbCurves; ++iCurve) {
+         double t1 = (iCurve) / (double)(NbCurves);
+         double t2 = (iCurve+1) / (double)(NbCurves);
+         for(int i = 0; i < 4; i++) {
+           int k;
+           if (periodic) {
+             k = (iCurve - 1 + i) % (NbControlPoints - 1);
+             if (k < 0)
+               k += NbControlPoints - 1;
+           }
+           else {
+             k = std::max(0, std::min(iCurve - 2 + i, NbControlPoints -1));
+           }
+           pt[i] = curveGetPoint(c, k);
+         }
+         back = discretizeBSpline(tol, discrete, back, pt, t1, t2, iCurve == 0);
+       }
+       break;
+     }
+   case MSH_SEGM_SPLN:
+     {
+       int NbCurves = List_Nbr(c->Control_Points) - 1;
+       SPoint3 pt[4];
+       int back = -1;
+       for (int iCurve = 0; iCurve < NbCurves; ++iCurve) {
+         double t1 = (iCurve) / (double)(NbCurves);
+         double t2 = (iCurve+1) / (double)(NbCurves);
+         pt[1] = curveGetPoint(c, iCurve);
+         pt[2] = curveGetPoint(c, iCurve + 1);
+         if(iCurve == 0) {
+           if(c->beg == c->end)
+             pt[0] = curveGetPoint(c, NbCurves - 1);
+           else
+             pt[0] = SPoint3(pt[1] * 2 - pt[2]);
+         }
+         else
+           pt[0] = curveGetPoint(c, iCurve - 1);
+         if(iCurve == NbCurves - 1) {
+           if(c->beg == c->end)
+             pt[3] = curveGetPoint(c, 1);
+           else
+             pt[3] = SPoint3(2 * pt[2] - pt[1]);
+         }
+         else
+           pt[3] = curveGetPoint(c, iCurve + 2);
+         back = discretizeCatmullRom(tol, discrete, back, pt, t1, t2, iCurve == 0);
+       }
+       break;
+     }
+   default :
+     Msg::Fatal("not implemented");
++>>>>>>> upstream/2.9.3+dfsg1
    }
    discrete.sort(pts, ts);
  }
  
++<<<<<<< HEAD
 +void gmshEdge::discretize(double tol, std::vector<SPoint3> &dpts, std::vector<double> &ts)
++=======
+ void gmshEdge::discretize(double tol, std::vector<SPoint3>
+                           &dpts, std::vector<double> &ts)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    discretizeCurve(c, tol, dpts, ts);
  }
diff --cc Geo/gmshLevelset.cpp
index 96599d5,76864c3..9558099
--- a/Geo/gmshLevelset.cpp
+++ b/Geo/gmshLevelset.cpp
@@@ -1280,9 -1363,9 +1363,13 @@@ void gLevelsetNACA00::getClosestBndPoin
        const double dDistSq = -2.*(xx+dyb*yy);
        const double ddDistSq = 2.*(1.-ddyb*yy+dyb*dyb);
        const double mIncr = dDistSq/ddDistSq;
-       if (fabs(mIncr) < tolr) break;
+       if(fabs(mIncr) < tolr) break;
        else xtb -= mIncr;
++<<<<<<< HEAD
 +      if (xtb < tolr) xtb = tolr;
++=======
+       if(xtb < tolr) xtb = tolr;
++>>>>>>> upstream/2.9.3+dfsg1
        if (xtb > _c-tolr) xtb = _c-tolr;
      }
      xb = _x0+xtb;
diff --cc Geo/intersectCurveSurface.cpp
index 0d1ba82,4ae3bc7..08c683c
--- a/Geo/intersectCurveSurface.cpp
+++ b/Geo/intersectCurveSurface.cpp
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Graphics/drawContext.cpp
index 845431a,c6734f5..b3e3f63
--- a/Graphics/drawContext.cpp
+++ b/Graphics/drawContext.cpp
@@@ -355,23 -370,23 +370,43 @@@ void drawContext::drawBackgroundGradien
      glEnd();
    }
  }
++<<<<<<< HEAD
+ 
+ void drawContext::invalidateBgImageTexture()
+ {
+   if(_bgImageTexture) glDeleteTextures(1, &_bgImageTexture);
+   _bgImageTexture = 0;
+ }
+ 
+ void drawContext::drawBackgroundImage(bool threeD)
+ {
+   if(CTX::instance()->bgImageFileName.empty() ||
+      (CTX::instance()->bgImage3d && !threeD) ||
+      (!CTX::instance()->bgImage3d && threeD)) return;
+ 
+   std::string name = FixRelativePath(GModel::current()->getFileName(),
+                                      CTX::instance()->bgImageFileName);
+   std::string ext = SplitFileName(CTX::instance()->bgImageFileName)[2];
+ 
++=======
 +
 +void drawContext::invalidateBgImageTexture()
 +{
 +  if(_bgImageTexture) glDeleteTextures(1, &_bgImageTexture);
 +  _bgImageTexture = 0;
 +}
 +
 +void drawContext::drawBackgroundImage(bool threeD)
 +{
 +  if(CTX::instance()->bgImageFileName.empty() ||
 +     (CTX::instance()->bgImage3d && !threeD) ||
 +     (!CTX::instance()->bgImage3d && threeD)) return;
 +
 +  std::string name = FixRelativePath(GModel::current()->getFileName(),
 +                                     CTX::instance()->bgImageFileName);
 +  std::string ext = SplitFileName(CTX::instance()->bgImageFileName)[2];
 +
++>>>>>>> upstream/2.9.3+dfsg1
    double x = CTX::instance()->bgImagePosition[0];
    double y = CTX::instance()->bgImagePosition[1];
    double w = CTX::instance()->bgImageSize[0];
@@@ -466,8 -481,8 +501,13 @@@
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _bgImageTexture);
++<<<<<<< HEAD
 +  glBegin(GL_QUADS);
 +  glColor4ubv((GLubyte *) & CTX::instance()->color.bg);
++=======
+   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+   glBegin(GL_QUADS);
++>>>>>>> upstream/2.9.3+dfsg1
    if(threeD){
      glTexCoord2f(1.0f, 1.0f); glVertex2d(x+w, y);
      glTexCoord2f(1.0f, 0.0f); glVertex2d(x+w, y+h);
diff --cc Graphics/drawContext.h
index 2f1285f,d641f5d..4c44d47
--- a/Graphics/drawContext.h
+++ b/Graphics/drawContext.h
@@@ -111,6 -113,7 +113,10 @@@ class drawContext 
    std::set<GModel*> _hiddenModels;
    std::set<PView*> _hiddenViews;
    GLuint _bgImageTexture, _bgImageW, _bgImageH;
++<<<<<<< HEAD
++=======
+   openglWindow *_openglWindow;
++>>>>>>> upstream/2.9.3+dfsg1
   public:
    Camera camera;
    double r[3]; // current Euler angles (in degrees!)
diff --cc Graphics/gl2pgf.cpp
index e352ea5,d427bb7..b8b1aae
--- a/Graphics/gl2pgf.cpp
+++ b/Graphics/gl2pgf.cpp
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Graphics/gl2pgf.h
index 22e905f,c9c8918..f813e24
--- a/Graphics/gl2pgf.h
+++ b/Graphics/gl2pgf.h
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Mesh/BackgroundMesh.cpp
index 70509ca,e943c4d..8954e7a
--- a/Mesh/BackgroundMesh.cpp
+++ b/Mesh/BackgroundMesh.cpp
@@@ -569,8 -151,9 +151,14 @@@ backgroundMesh::~backgroundMesh(
  }
  
  static void propagateValuesOnFace(GFace *_gf,
++<<<<<<< HEAD
 +    std::map<MVertex*,double> &dirichlet,
 +    bool in_parametric_plane = false)
++=======
+                                   std::map<MVertex*,double> &dirichlet,
+ 				  simpleFunction<double> *ONE,
+ 				  bool in_parametric_plane = false)
++>>>>>>> upstream/2.9.3+dfsg1
  {
  #if defined(HAVE_SOLVER)
    linearSystem<double> *_lsys = 0;
@@@ -980,35 -646,52 +651,72 @@@ double backgroundMesh::getAngle(double 
  }
  
  void backgroundMesh::print(const std::string &filename, GFace *gf,
++<<<<<<< HEAD
 +    const std::map<MVertex*,double> &_whatToPrint) const
++=======
+                            const std::map<MVertex*,double> &_whatToPrint, int smooth)
++>>>>>>> upstream/2.9.3+dfsg1
  {
-   FILE *f = Fopen (filename.c_str(),"w");
-   fprintf(f,"View \"Background Mesh\"{\n");
-   for(unsigned int i=0;i<_triangles.size();i++){
-     MVertex *v1 = _triangles[i]->getVertex(0);
-     MVertex *v2 = _triangles[i]->getVertex(1);
-     MVertex *v3 = _triangles[i]->getVertex(2);
-     std::map<MVertex*,double>::const_iterator itv1 = _whatToPrint.find(v1);
-     std::map<MVertex*,double>::const_iterator itv2 = _whatToPrint.find(v2);
-     std::map<MVertex*,double>::const_iterator itv3 = _whatToPrint.find(v3);
-     if (!gf){
+   FILE *f = Fopen(filename.c_str(), "w");
+   if(!f){
+     Msg::Error("Could not open file '%s'", filename.c_str());
+     return;
+   }
+   fprintf(f, "View \"Background Mesh\"{\n");
+   if (smooth){
+     for(unsigned int i = 0; i < gf->triangles.size(); i++){
+       MVertex *v1 = gf->triangles[i]->getVertex(0);
+       MVertex *v2 = gf->triangles[i]->getVertex(1);
+       MVertex *v3 = gf->triangles[i]->getVertex(2);
+       double x = getSmoothness (gf->triangles[i]);
        fprintf(f,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g) {%g,%g,%g};\n",
++<<<<<<< HEAD
 +          v1->x(),v1->y(),v1->z(),
 +          v2->x(),v2->y(),v2->z(),
 +          v3->x(),v3->y(),v3->z(),itv1->second,itv2->second,itv3->second);
 +    }
 +    else {
 +
 +      GPoint p1 = gf->point(SPoint2(v1->x(),v1->y()));
 +      GPoint p2 = gf->point(SPoint2(v2->x(),v2->y()));
 +      GPoint p3 = gf->point(SPoint2(v3->x(),v3->y()));
 +      fprintf(f,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g) {%g,%g,%g};\n",
 +          p1.x(),p1.y(),p1.z(),
 +          p2.x(),p2.y(),p2.z(),
 +          p3.x(),p3.y(),p3.z(),itv1->second,itv2->second,itv3->second);
++=======
+ 	      v1->x(), v1->y(), v1->z(),
+ 	      v2->x(), v2->y(), v2->z(),
+ 	      v3->x(), v3->y(), v3->z(), x, x, x);
+     }
+   }
+   else {
+     for(unsigned int i = 0; i < _triangles.size(); i++){
+       MVertex *v1 = _triangles[i]->getVertex(0);
+       MVertex *v2 = _triangles[i]->getVertex(1);
+       MVertex *v3 = _triangles[i]->getVertex(2);
+       std::map<MVertex*,double>::const_iterator itv1 = _whatToPrint.find(v1);
+       std::map<MVertex*,double>::const_iterator itv2 = _whatToPrint.find(v2);
+       std::map<MVertex*,double>::const_iterator itv3 = _whatToPrint.find(v3);
+       if (!gf){
+ 	fprintf(f,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g) {%g,%g,%g};\n",
+ 		v1->x(), v1->y(), v1->z(),
+ 		v2->x(), v2->y(), v2->z(),
+ 		v3->x(), v3->y(), v3->z(), itv1->second, itv2->second, itv3->second);
+       }
+       else {
+ 	GPoint p1 = gf->point(SPoint2(v1->x(),v1->y()));
+ 	GPoint p2 = gf->point(SPoint2(v2->x(),v2->y()));
+ 	GPoint p3 = gf->point(SPoint2(v3->x(),v3->y()));
+ 	fprintf(f,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g) {%g,%g,%g};\n",
+ 		p1.x(), p1.y(), p1.z(),
+ 		p2.x(), p2.y(), p2.z(),
+ 		p3.x(), p3.y(), p3.z(), itv1->second, itv2->second, itv3->second);
+       }
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
-   fprintf(f,"};\n");
+   fprintf(f, "};\n");
    fclose(f);
  }
  
diff --cc Mesh/Field.cpp
index 988ed80,4cfd48f..3f2ced9
--- a/Mesh/Field.cpp
+++ b/Mesh/Field.cpp
@@@ -485,7 -486,7 +486,11 @@@ class CylinderField : public Fiel
    }
  };
  
++<<<<<<< HEAD
 +class SphereField : public Field
++=======
+ class BallField : public Field
++>>>>>>> upstream/2.9.3+dfsg1
  {
    double v_in, v_out;
    double xc,yc,zc;
@@@ -494,35 -495,33 +499,64 @@@
   public:
    std::string getDescription()
    {
++<<<<<<< HEAD
 +    return "The value of this field is VIn inside a sphere, VOut outside. "
 +      "The sphere is given by\n\n"
 +      "  ||dX||^2 < R^2 &&\n"
 +      "  dX = (X - XC)^2 + (Y-YC)^2 + (Z-ZC)^2";
 +  }
 +  SphereField()
++=======
+     return "The value of this field is VIn inside a spherical ball, VOut outside. "
+       "The ball is defined by\n\n"
+       "  ||dX||^2 < R^2 &&\n"
+       "  dX = (X - XC)^2 + (Y-YC)^2 + (Z-ZC)^2";
+   }
+   BallField()
++>>>>>>> upstream/2.9.3+dfsg1
    {
      v_in = v_out = xc = yc = zc = R = 0;
  
      options["VIn"] = new FieldOptionDouble
++<<<<<<< HEAD
 +      (v_in, "Value inside the sphere");
 +    options["VOut"] = new FieldOptionDouble
 +      (v_out, "Value outside the sphere");
 +
 +    options["XCenter"] = new FieldOptionDouble
 +      (xc, "X coordinate of the sphere center");
 +    options["YCenter"] = new FieldOptionDouble
 +      (yc, "Y coordinate of the sphere center");
 +    options["ZCenter"] = new FieldOptionDouble
 +      (zc, "Z coordinate of the sphere center");
 +
 +
 +    options["Radius"] = new FieldOptionDouble
 +      (R,"Radius");
 +
 +  }
 +  const char *getName()
 +  {
 +    return "Sphere";
++=======
+       (v_in, "Value inside the ball");
+     options["VOut"] = new FieldOptionDouble
+       (v_out, "Value outside the ball");
+ 
+     options["XCenter"] = new FieldOptionDouble
+       (xc, "X coordinate of the ball center");
+     options["YCenter"] = new FieldOptionDouble
+       (yc, "Y coordinate of the ball center");
+     options["ZCenter"] = new FieldOptionDouble
+       (zc, "Z coordinate of the ball center");
+ 
+     options["Radius"] = new FieldOptionDouble
+       (R,"Radius");
+   }
+   const char *getName()
+   {
+     return "Ball";
++>>>>>>> upstream/2.9.3+dfsg1
    }
    double operator() (double x, double y, double z, GEntity *ge=0)
    {
@@@ -1298,19 -1297,20 +1332,36 @@@ class PostViewField : public Fiel
      if(!octree->searchTensorWithTol(x, y, z, l, 0, 0, 0.05))
        Msg::Info("No tensor element found containing point (%g,%g,%g)", x, y, z);
      if(crop_negative_values){
++<<<<<<< HEAD
 +      for(int i = 0; i < 9; i++){
 +        if(l[i] <= 0) l[i] = MAX_LC;
 +      }
 +    }
 +    metr(0, 0) = l[0];
 +    metr(0, 1) = l[1];
 +    metr(0, 2) = l[2];
 +    metr(1, 0) = l[3];
 +    metr(1, 1) = l[4];
 +    metr(1, 2) = l[5];
 +    metr(2, 0) = l[6];
 +    metr(2, 1) = l[7];
 +    metr(2, 2) = l[8];
++=======
+       if(l[0] <= 0 && l[1] <= 0 && l[2] <= 0 &&
+          l[3] <= 0 && l[4] <= 0 && l[5] <= 0 &&
+          l[6] <= 0 && l[7] <= 0 && l[8] <= 0){
+         for(int i = 0; i < 9; i++) l[i] = MAX_LC;
+       }
+       else{
+         for(int i = 0; i < 9; i++){
+           if(l[i] <= 0) l[i] = 0;
+         }
+       }
+     }
+     metr(0, 0) = l[0]; metr(0, 1) = l[1]; metr(0, 2) = l[2];
+     metr(1, 0) = l[3]; metr(1, 1) = l[4]; metr(1, 2) = l[5];
+     metr(2, 0) = l[6]; metr(2, 1) = l[7]; metr(2, 2) = l[8];
++>>>>>>> upstream/2.9.3+dfsg1
    }
    const char *getName()
    {
@@@ -2059,8 -2063,7 +2114,12 @@@ void BoundaryLayerField::setupFor2d(in
  	nodes_id.push_back ((*it)->getEndVertex()->tag());
        }
      }
++<<<<<<< HEAD
 +    //    printf("face %d %d BL Edges\n", iF, (int)edges_id.size());
 +
++=======
+     // printf("face %d %d BL Edges\n", iF, (int)edges_id.size());
++>>>>>>> upstream/2.9.3+dfsg1
      removeAttractors();
    }
  }
@@@ -2300,7 -2301,7 +2357,11 @@@ FieldManager::FieldManager(
  #endif
    map_type_name["Box"] = new FieldFactoryT<BoxField>();
    map_type_name["Cylinder"] = new FieldFactoryT<CylinderField>();
++<<<<<<< HEAD
 +  map_type_name["Sphere"] = new FieldFactoryT<SphereField>();
++=======
+   map_type_name["Ball"] = new FieldFactoryT<BallField>();
++>>>>>>> upstream/2.9.3+dfsg1
    map_type_name["Frustum"] = new FieldFactoryT<FrustumField>();
    map_type_name["LonLat"] = new FieldFactoryT<LonLatField>();
  #if defined(HAVE_POST)
diff --cc Mesh/Generator.cpp
index c1fc939,daeaf2f..9bbb038
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@@ -362,11 -351,10 +351,16 @@@ static void Mesh2D(GModel *m
  #pragma omp parallel for schedule (dynamic)
  #endif
        for(size_t K = 0 ; K < temp.size() ; K++){
- 	if (temp[K]->meshStatistics.status == GFace::PENDING){
+         if (temp[K]->meshStatistics.status == GFace::PENDING){
            backgroundMesh::current()->unset();
++<<<<<<< HEAD
 +	  meshGFace mesher(true);
 +	  mesher(temp[K]);
 +
++=======
+           meshGFace mesher(true);
+           mesher(temp[K]);
++>>>>>>> upstream/2.9.3+dfsg1
  #if defined(HAVE_BFGS)
            if(CTX::instance()->mesh.optimizeLloyd){
              if (temp[K]->geomType()==GEntity::CompoundSurface ||
@@@ -542,6 -552,16 +558,19 @@@ static void Mesh3D(GModel *m
      }
    }
  
++<<<<<<< HEAD
++=======
+   if(CTX::instance()->mesh.recombine3DAll){
+     Msg::Info("RECOMBINATION timing:");
+     Msg::Info(" --- CUMULATIVE TIME RECOMBINATION : %g s.", time_recombination);
+     Msg::Info("RECOMBINATION CUMULATIVE STATISTICS:");
+     Msg::Info(".... Percentage of hexahedra   (#) : %g",
+               nb_hexa_recombination*100./nb_elements_recombination);
+     Msg::Info(".... Percentage of hexahedra (Vol) : %g",
+               vol_hexa_recombination*100./vol_element_recombination);
+   }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    // Ensure that all volume Jacobians are positive
    m->setAllVolumesPositive();
  
diff --cc Mesh/HighOrder.cpp
index 2a5a988,c16285c..3547d5f
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@@ -122,97 -176,38 +176,162 @@@ static bool getEdgeVerticesonGeo(GEdge 
    return true;
  }
  
+ static bool getEdgeVerticesonGeo(GFace *gf, MVertex *v0, MVertex *v1,
+                                  std::vector<MVertex*> &ve, int nPts = 1)
+ {
+   SPoint2 p0, p1;
+   double US[100], VS[100];
+   bool reparamOK = reparamMeshEdgeOnFace(v0, v1, gf, p0, p1);
+   if(reparamOK) {
+     SPoint3 pnt0, pnt1;
+     if (nPts >= 30)
+       computeEquidistantParameters(gf, p0[0], p1[0], p0[1], p1[1],
+                                    pnt0, pnt1, nPts + 2, false, US, VS);
+     else {
+       pnt0 = v0->point();
+       pnt1 = v1->point();
+       computeEquidistantParameters(gf, p0[0], p1[0], p0[1], p1[1],
+                                    pnt0, pnt1, nPts + 2, true, US, VS);
+     }
+   }
+   else {
+     Msg::Error("Cannot reparam a mesh Vertex in high order meshing");
+     return false;
+   }
+ 
+   for(int j = 0; j < nPts; j++){
+     GPoint pc = gf->point(US[j + 1], VS[j + 1]);
+     MVertex *v = new MFaceVertex(pc.x(), pc.y(), pc.z(), gf, US[j + 1], VS[j + 1]);
+     ve.push_back(v);
+   }
+ 
+   return true;
+ }
+ 
++<<<<<<< HEAD
 +
 +// --------- Creation of high-order edge vertices -----------
 +
 +static bool getEdgeVerticesonGeo(GEdge *ge, MVertex *v0, MVertex *v1, std::vector<MVertex*> &ve, int nPts = 1)
++=======
++static void interpVerticesInExistingEdge(GEntity *ge, const MElement *edgeEl,
++                                         std::vector<MVertex*> &veEdge, int nPts)
++{
++  fullMatrix<double> points;
++  points = edgeEl->getFunctionSpace(nPts+1)->points;
++  for(int k = 2; k < nPts+2; k++) {
++    SPoint3 pos;
++    edgeEl->pnt(points(k, 0), 0., 0., pos);
++    MVertex* v = new MVertex(pos.x(), pos.y(), pos.z(), ge);
++    veEdge.push_back(v);
++  }
++}
++
++inline static bool getMinMaxVert(MVertex *v0, MVertex *v1, MVertex *&vMin, MVertex *&vMax)
++{
++  const bool increasing = (v0->getNum() < v1->getNum());
++  if (increasing) {
++    vMin = v0; vMax = v1;
++  }
++  else {
++    vMin = v1; vMax = v0;
++  }
++  return increasing;
++}
++
++// Get new interior vertices for a 1D element
++static void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
++                            std::vector<MVertex*> &newHOVert, edgeContainer &edgeVertices,
++                            bool linear, int nPts = 1)
++>>>>>>> upstream/2.9.3+dfsg1
 +{
 +    double u0 = 0., u1 = 0., US[100];
 +    bool reparamOK = reparamMeshVertexOnEdge(v0, ge, u0);
 +    if(ge->periodic(0) && ge->getEndVertex()->getNumMeshVertices() > 0 &&
 +       v1 == ge->getEndVertex()->mesh_vertices[0])
 +      u1 = ge->parBounds(0).high();
 +    else
 +      reparamOK &= reparamMeshVertexOnEdge(v1, ge, u1);
 +
++<<<<<<< HEAD
 +    if(reparamOK){
 +      double relax = 1.;
 +      while (1){
 +        if(computeEquidistantParameters(ge, std::min(u0,u1), std::max(u0,u1),
 +                                        nPts + 2, US, relax))
 +          break;
 +
 +        relax /= 2.0;
 +        if(relax < 1.e-2) break;
 +      }
 +      if(relax < 1.e-2){
 +        Msg::Warning
 +          ("Failed to compute equidistant parameters (relax = %g, value = %g) "
 +           "for edge %d-%d parametrized with %g %g on GEdge %d",
 +           relax, US[1], v0->getNum(), v1->getNum(),u0,u1,ge->tag());
 +        reparamOK = false;
 +      }
 +    }
 +    else
 +      Msg::Error("Cannot reparam a mesh Vertex in high order meshing");
 +    if (!reparamOK) return false;
 +
 +    for(int j = 0; j < nPts; j++) {
 +      MVertex *v;
 +      int count = u0<u1? j + 1 : nPts + 1  - (j + 1);
 +      GPoint pc = ge->point(US[count]);
 +      v = new MEdgeVertex(pc.x(), pc.y(), pc.z(), ge,US[count]);
 +      // this destroys the ordering of the mesh vertices on the edge
 +      ve.push_back(v);
 +    }
 +
 +    return true;
 +}
 +
 +static bool getEdgeVerticesonGeo(GFace *gf, MVertex *v0, MVertex *v1, std::vector<MVertex*> &ve, int nPts = 1)
 +{
 +      SPoint2 p0, p1;
 +      double US[100], VS[100];
 +      bool reparamOK = reparamMeshEdgeOnFace(v0, v1, gf, p0, p1);
 +      if(reparamOK) {
 +        if (nPts >= 30)
 +          computeEquidistantParameters(gf, p0[0], p1[0], p0[1], p1[1], nPts + 2, US, VS);
 +        else {
 +          US[0]      =  p0[0];
 +          VS[0]      =  p0[1];
 +          US[nPts+1] =  p1[0];
 +          VS[nPts+1] =  p1[1];
 +          for(int j = 0; j < nPts; j++){
 +            const double t = (double)(j + 1) / (nPts + 1);
 +            SPoint3 pc(t*v1->x()+(1.-t)*v0->x(),
 +                       t*v1->y()+(1.-t)*v0->y(),
 +                       t*v1->z()+(1.-t)*v0->z());
 +            SPoint2 guess = p0 * (1.-t) + p1 * t;
 +            GPoint gp = gf->closestPoint(pc, guess);
 +            if(gp.succeeded()){
 +              US[j+1] = gp.u();
 +              VS[j+1] = gp.v();
 +            }
 +            else{
 +              US[j+1] = guess.x();
 +              VS[j+1] = guess.y();
 +            }
 +          }
 +        }
 +      }
 +      else
 +        Msg::Error("Cannot reparam a mesh Vertex in high order meshing");
 +      if (!reparamOK) return false;
 +
 +      for(int j = 0; j < nPts; j++){
 +        GPoint pc = gf->point(US[j + 1], VS[j + 1]);
 +        MVertex *v = new MFaceVertex(pc.x(), pc.y(), pc.z(), gf, US[j + 1], VS[j + 1]);
 +        ve.push_back(v);
 +      }
 +
 +      return true;
 +}
 +
  static void interpVerticesInExistingEdge(GEntity *ge, const MElement *edgeEl,
                                           std::vector<MVertex*> &veEdge, int nPts)
  {
@@@ -253,18 -248,20 +372,40 @@@ static void getEdgeVertices(GEdge *ge, 
    const bool increasing = getMinMaxVert(veOld[0], veOld[1], vMin, vMax);
    std::pair<MVertex*, MVertex*> p(vMin, vMax);
    std::vector<MVertex*> veEdge;
 +  bool gotVertOnGeo = linear ? false :
 +                      getEdgeVerticesonGeo(ge, veOld[0], veOld[1], veEdge, nPts);       // Get vertices on geometry if asked
 +  if (!gotVertOnGeo)                                                                    // If not on geometry, create from mesh interpolation
 +    interpVerticesInExistingEdge(ge, ele, veEdge, nPts);
 +  newHOVert.insert(newHOVert.end(), veEdge.begin(), veEdge.end());
 +  if(increasing)                                          // Add newly created vertices to list
 +    edgeVertices[p].insert(edgeVertices[p].end(), veEdge.begin(), veEdge.end());
 +  else
 +    edgeVertices[p].insert(edgeVertices[p].end(), veEdge.rbegin(), veEdge.rend());
 +  ve.insert(ve.end(), veEdge.begin(), veEdge.end());
 +}
 +
++=======
++  std::vector<MVertex*> veOld;
++  ele->getVertices(veOld);
++  MVertex *vMin, *vMax;
++  const bool increasing = getMinMaxVert(veOld[0], veOld[1], vMin, vMax);
++  std::pair<MVertex*, MVertex*> p(vMin, vMax);
++  std::vector<MVertex*> veEdge;
+   // Get vertices on geometry if asked
+   bool gotVertOnGeo = linear ? false :
+     getEdgeVerticesonGeo(ge, veOld[0], veOld[1], veEdge, nPts);
+   // If not on geometry, create from mesh interpolation
+   if (!gotVertOnGeo)
+     interpVerticesInExistingEdge(ge, ele, veEdge, nPts);
+   newHOVert.insert(newHOVert.end(), veEdge.begin(), veEdge.end());
+   if(increasing) // Add newly created vertices to list
+     edgeVertices[p].insert(edgeVertices[p].end(), veEdge.begin(), veEdge.end());
+   else
+     edgeVertices[p].insert(edgeVertices[p].end(), veEdge.rbegin(), veEdge.rend());
+   ve.insert(ve.end(), veEdge.begin(), veEdge.end());
+ }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  // Get new interior vertices for an edge in a 2D element
  static void getEdgeVertices(GFace *gf, MElement *ele, std::vector<MVertex*> &ve,
                              std::vector<MVertex*> &newHOVert, edgeContainer &edgeVertices,
@@@ -281,21 -278,23 +422,38 @@@
      const bool increasing = getMinMaxVert(veOld[0], veOld[1], vMin, vMax);
      std::pair<MVertex*, MVertex*> p(vMin, vMax);
      std::vector<MVertex*> veEdge;
++<<<<<<< HEAD
 +    if(edgeVertices.count(p)) {                                                             // Vertices already exist
++=======
+     if(edgeVertices.count(p)) { // Vertices already exist
++>>>>>>> upstream/2.9.3+dfsg1
        if(increasing)
          veEdge.assign(edgeVertices[p].begin(), edgeVertices[p].end());
        else
          veEdge.assign(edgeVertices[p].rbegin(), edgeVertices[p].rend());
      }
++<<<<<<< HEAD
 +    else {                                                                                  // Vertices do not exist, create them
 +      bool gotVertOnGeo = linear ? false :
 +                          getEdgeVerticesonGeo(gf, veOld[0], veOld[1], veEdge, nPts);       // Get vertices on geometry if asked
 +      if (!gotVertOnGeo) {                                                                   // If not on geometry, create from mesh interpolation
++=======
+     else { // Vertices do not exist, create them
+       // Get vertices on geometry if asked
+       bool gotVertOnGeo = linear ? false :
+         getEdgeVerticesonGeo(gf, veOld[0], veOld[1], veEdge, nPts);
+       if (!gotVertOnGeo) {
+         // If not on geometry, create from mesh interpolation
++>>>>>>> upstream/2.9.3+dfsg1
          const MLineN edgeEl(veOld, ele->getPolynomialOrder());
          interpVerticesInExistingEdge(gf, &edgeEl, veEdge, nPts);
        }
        newHOVert.insert(newHOVert.end(), veEdge.begin(), veEdge.end());
++<<<<<<< HEAD
 +      if(increasing)                                                                        // Add newly created vertices to list
++=======
+       if(increasing) // Add newly created vertices to list
++>>>>>>> upstream/2.9.3+dfsg1
          edgeVertices[p].insert(edgeVertices[p].end(), veEdge.begin(), veEdge.end());
        else
          edgeVertices[p].insert(edgeVertices[p].end(), veEdge.rbegin(), veEdge.rend());
@@@ -306,7 -305,8 +464,12 @@@
  
  // Get new interior vertices for an edge in a 3D element
  static void getEdgeVertices(GRegion *gr, MElement *ele, std::vector<MVertex*> &ve,
++<<<<<<< HEAD
 +                            std::vector<MVertex*> &newHOVert, edgeContainer &edgeVertices,
++=======
+                             std::vector<MVertex*> &newHOVert,
+                             edgeContainer &edgeVertices,
++>>>>>>> upstream/2.9.3+dfsg1
                              bool linear, int nPts = 1)
  {
    for(int i = 0; i < ele->getNumEdges(); i++) {
@@@ -316,17 -316,17 +479,29 @@@
      const bool increasing = getMinMaxVert(veOld[0], veOld[1], vMin, vMax);
      std::pair<MVertex*, MVertex*> p(vMin, vMax);
      std::vector<MVertex*> veEdge;
++<<<<<<< HEAD
 +    if(edgeVertices.count(p)) {                                                             // Vertices already exist
++=======
+     if(edgeVertices.count(p)) { // Vertices already exist
++>>>>>>> upstream/2.9.3+dfsg1
        if(increasing)
          veEdge.assign(edgeVertices[p].begin(), edgeVertices[p].end());
        else
          veEdge.assign(edgeVertices[p].rbegin(), edgeVertices[p].rend());
      }
++<<<<<<< HEAD
 +    else {                                                                                  // Vertices do not exist, create them
 +      const MLineN edgeEl(veOld, ele->getPolynomialOrder());
 +      interpVerticesInExistingEdge(gr, &edgeEl, veEdge, nPts);
 +      newHOVert.insert(newHOVert.end(), veEdge.begin(), veEdge.end());
 +      if(increasing)                                                                        // Add newly created vertices to list
++=======
+     else { // Vertices do not exist, create them
+       const MLineN edgeEl(veOld, ele->getPolynomialOrder());
+       interpVerticesInExistingEdge(gr, &edgeEl, veEdge, nPts);
+       newHOVert.insert(newHOVert.end(), veEdge.begin(), veEdge.end());
+       if(increasing) // Add newly created vertices to list
++>>>>>>> upstream/2.9.3+dfsg1
          edgeVertices[p].insert(edgeVertices[p].end(), veEdge.begin(), veEdge.end());
        else
          edgeVertices[p].insert(edgeVertices[p].end(), veEdge.rbegin(), veEdge.rend());
@@@ -335,7 -335,6 +510,10 @@@
    }
  }
  
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  // --------- Creation of high-order face vertices -----------
  
  static void reorientTrianglePoints(std::vector<MVertex*> &vtcs, int orientation,
@@@ -441,9 -440,9 +619,15 @@@ static void reorientQuadPoints(std::vec
    }
  }
  
++<<<<<<< HEAD
 +static int getNewFacePointsInVolume(MElement *incomplete, int nPts, fullMatrix<double> &points)
 +{
 +
++=======
+ static int getNewFacePointsInVolume(MElement *incomplete, int nPts,
+                                     fullMatrix<double> &points)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    int startFace = 0;
  
    switch (incomplete->getType()){
@@@ -461,67 -460,67 +645,131 @@@
      case 9: points = BasisFactory::getNodalBasis(MSH_TET_286)->points; break;
      default:
        Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
++<<<<<<< HEAD
+       break;
+     }
+     startFace = 4 + nPts*6;
+     break;
+   case TYPE_HEX :
+     switch (nPts){
+     case 0: return -1;
+     case 1: points = BasisFactory::getNodalBasis(MSH_HEX_27)->points; break;
+     case 2: points = BasisFactory::getNodalBasis(MSH_HEX_64)->points; break;
+     case 3: points = BasisFactory::getNodalBasis(MSH_HEX_125)->points; break;
+     case 4: points = BasisFactory::getNodalBasis(MSH_HEX_216)->points; break;
+     case 5: points = BasisFactory::getNodalBasis(MSH_HEX_343)->points; break;
+     case 6: points = BasisFactory::getNodalBasis(MSH_HEX_512)->points; break;
+     case 7: points = BasisFactory::getNodalBasis(MSH_HEX_729)->points; break;
+     case 8: points = BasisFactory::getNodalBasis(MSH_HEX_1000)->points; break;
+     default :
+       Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
+       break;
+     }
+     startFace = 8 + nPts*12 ;
+     break;
+   case TYPE_PRI :
+     switch (nPts){
+     case 0: return -1;
+     case 1: points = BasisFactory::getNodalBasis(MSH_PRI_18)->points; break;
+     case 2: points = BasisFactory::getNodalBasis(MSH_PRI_40)->points; break;
+     case 3: points = BasisFactory::getNodalBasis(MSH_PRI_75)->points; break;
+     case 4: points = BasisFactory::getNodalBasis(MSH_PRI_126)->points; break;
+     case 5: points = BasisFactory::getNodalBasis(MSH_PRI_196)->points; break;
+     case 6: points = BasisFactory::getNodalBasis(MSH_PRI_288)->points; break;
+     case 7: points = BasisFactory::getNodalBasis(MSH_PRI_405)->points; break;
+     case 8: points = BasisFactory::getNodalBasis(MSH_PRI_550)->points; break;
+     default:
+       Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
+       break;
+     }
+     startFace = 6 + nPts*9;
+     break;
+   case TYPE_PYR:
+     switch (nPts){
+     case 0:
+     case 1: return -1;
+     case 2: points = BasisFactory::getNodalBasis(MSH_PYR_30)->points; break;
+     case 3: points = BasisFactory::getNodalBasis(MSH_PYR_55)->points; break;
+     case 4: points = BasisFactory::getNodalBasis(MSH_PYR_91)->points; break;
+     case 5: points = BasisFactory::getNodalBasis(MSH_PYR_140)->points; break;
+     case 6: points = BasisFactory::getNodalBasis(MSH_PYR_204)->points; break;
+     case 7: points = BasisFactory::getNodalBasis(MSH_PYR_285)->points; break;
+     case 8: points = BasisFactory::getNodalBasis(MSH_PYR_385)->points; break;
+     default :
+       Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
+       break;
+     }
+     startFace = 5 + nPts*8;
+     break;
+ 
+   }
+ 
+   return startFace;
+ }
+ 
++=======
 +      break;
 +    }
 +    startFace = 4 + nPts*6;
 +    break;
 +  case TYPE_HEX :
 +    switch (nPts){
 +    case 0: return -1;
 +    case 1: points = BasisFactory::getNodalBasis(MSH_HEX_27)->points; break;
 +    case 2: points = BasisFactory::getNodalBasis(MSH_HEX_64)->points; break;
 +    case 3: points = BasisFactory::getNodalBasis(MSH_HEX_125)->points; break;
 +    case 4: points = BasisFactory::getNodalBasis(MSH_HEX_216)->points; break;
 +    case 5: points = BasisFactory::getNodalBasis(MSH_HEX_343)->points; break;
 +    case 6: points = BasisFactory::getNodalBasis(MSH_HEX_512)->points; break;
 +    case 7: points = BasisFactory::getNodalBasis(MSH_HEX_729)->points; break;
 +    case 8: points = BasisFactory::getNodalBasis(MSH_HEX_1000)->points; break;
 +    default :
 +      Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
 +      break;
 +    }
 +    startFace = 8 + nPts*12 ;
 +    break;
 +  case TYPE_PRI :
 +    switch (nPts){
 +    case 0: return -1;
 +    case 1: points = BasisFactory::getNodalBasis(MSH_PRI_18)->points; break;
 +    case 2: points = BasisFactory::getNodalBasis(MSH_PRI_40)->points; break;
 +    case 3: points = BasisFactory::getNodalBasis(MSH_PRI_75)->points; break;
 +    case 4: points = BasisFactory::getNodalBasis(MSH_PRI_126)->points; break;
 +    case 5: points = BasisFactory::getNodalBasis(MSH_PRI_196)->points; break;
 +    case 6: points = BasisFactory::getNodalBasis(MSH_PRI_288)->points; break;
 +    case 7: points = BasisFactory::getNodalBasis(MSH_PRI_405)->points; break;
 +    case 8: points = BasisFactory::getNodalBasis(MSH_PRI_550)->points; break;
 +    default:
 +      Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
 +      break;
 +    }
 +    startFace = 6 + nPts*9;
 +    break;
 +  case TYPE_PYR:
 +    switch (nPts){
 +    case 0:
 +    case 1: return -1;
 +    case 2: points = BasisFactory::getNodalBasis(MSH_PYR_30)->points; break;
 +    case 3: points = BasisFactory::getNodalBasis(MSH_PYR_55)->points; break;
 +    case 4: points = BasisFactory::getNodalBasis(MSH_PYR_91)->points; break;
 +    case 5: points = BasisFactory::getNodalBasis(MSH_PYR_140)->points; break;
 +    case 6: points = BasisFactory::getNodalBasis(MSH_PYR_204)->points; break;
 +    case 7: points = BasisFactory::getNodalBasis(MSH_PYR_285)->points; break;
 +    case 8: points = BasisFactory::getNodalBasis(MSH_PYR_385)->points; break;
 +    default :
 +      Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
 +      break;
 +    }
 +    startFace = 5 + nPts*8;
 +    break;
 +
 +  }
 +
 +  return startFace;
 +}
 +
++>>>>>>> upstream/2.9.3+dfsg1
  static void getFaceVerticesOnGeo(GFace *gf, MElement *incomplete, const MElement *faceEl,
                                   std::vector<MVertex*> &vf, int nPts = 1)
  {
@@@ -589,25 -588,6 +837,28 @@@ static void interpVerticesInExistingFac
    }
  }
  
++<<<<<<< HEAD
 +
 +//static void interpVerticesInIncompleteFace(GRegion *gr, const MFace &face, const std::vector<MVertex*> &ve,
 +//                                           std::vector<MVertex*> &veFace, int nPts)
 +//{
 +//  MElement *incomplete;
 +//
 +//  fullMatrix<double> points;
 +//  int start = getNewFacePointsInFace(face.getNumVertices(), nPts, points);
 +//  for (int k = start; k < points.size1(); k++) {
 +//    double t1 = points(k, 0);
 +//    double t2 = points(k, 1);
 +//    SPoint3 pos;
 +//    incomplete->pnt(t1, t2, 0, pos);
 +//    MVertex* v = new MVertex(pos.x(), pos.y(), pos.z(), gr);
 +//    veFace.push_back(v);
 +//  }
 +//  delete incomplete;
 +//}
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  // Get new interior vertices for a 2D element
  static void getFaceVertices(GFace *gf, MElement *incomplete, MElement *ele,
                              std::vector<MVertex*> &vf, std::vector<MVertex*> &newHOVert,
@@@ -619,9 -599,9 +870,15 @@@
  
    MFace face = ele->getFace(0);
    std::vector<MVertex*> veFace;
++<<<<<<< HEAD
 +  if (!linear)                                                                      // Get vertices on geometry if asked...
 +    getFaceVerticesOnGeo(gf, incomplete, ele, veFace, nPts);
 +  else                                                                              // ... otherwise, create from mesh interpolation
++=======
+   if (!linear) // Get vertices on geometry if asked...
+     getFaceVerticesOnGeo(gf, incomplete, ele, veFace, nPts);
+   else // ... otherwise, create from mesh interpolation
++>>>>>>> upstream/2.9.3+dfsg1
      interpVerticesInExistingFace(gf, ele, veFace, nPts);
    newHOVert.insert(newHOVert.end(), veFace.begin(), veFace.end());
    faceVertices[face].insert(faceVertices[face].end(), veFace.begin(), veFace.end());
@@@ -642,11 -622,12 +899,20 @@@ static void getFaceVertices(GRegion *gr
      int numVert = (face.getNumVertices() == 3) ? nPts * (nPts-1) / 2 : nPts * nPts;
      std::vector<MVertex*> veFace;
      faceContainer::iterator fIter = faceVertices.find(face);
++<<<<<<< HEAD
 +    if(fIter != faceVertices.end()){                                                      // Vertices already exist
 +      std::vector<MVertex*> vtcs = fIter->second;
 +      int orientation;
 +      bool swap;
 +      if (fIter->first.computeCorrespondence(face, orientation, swap)) {                  // Check correspondence and apply permutation if needed
++=======
+     if(fIter != faceVertices.end()){ // Vertices already exist
+       std::vector<MVertex*> vtcs = fIter->second;
+       int orientation;
+       bool swap;
+       if (fIter->first.computeCorrespondence(face, orientation, swap)) {
+         // Check correspondence and apply permutation if needed
++>>>>>>> upstream/2.9.3+dfsg1
          if(face.getNumVertices() == 3 && nPts > 1)
            reorientTrianglePoints(vtcs, orientation, swap);
          else if(face.getNumVertices() == 4)
@@@ -656,8 -637,8 +922,13 @@@
          Msg::Error("Error in face lookup for recuperation of high order face nodes");
        veFace.assign(vtcs.begin(), vtcs.end());
      }
++<<<<<<< HEAD
 +    else {                                                                                // Vertices do not exist, create them by interpolation
 +      if (linear) {                                                                       // Interpolate on existing mesh
++=======
+     else { // Vertices do not exist, create them by interpolation
+       if (linear) { // Interpolate on existing mesh
++>>>>>>> upstream/2.9.3+dfsg1
          std::vector<MVertex*> vfOld;
          ele->getFaceVertices(i,vfOld);
          MElement *faceEl;
@@@ -669,7 -650,7 +940,11 @@@
          delete faceEl;
        }
        else {
++<<<<<<< HEAD
 +        if (incomplete) {                                                                 // Interpolate in incomplete 3D element if given
++=======
+         if (incomplete) { // Interpolate in incomplete 3D element if given
++>>>>>>> upstream/2.9.3+dfsg1
            for(int k = index; k < index + numVert; k++){
              MVertex *v;
              const double t1 = points(k, 0);
@@@ -681,7 -662,7 +956,11 @@@
              veFace.push_back(v);
            }
          }
++<<<<<<< HEAD
 +        else {                                                                            // TODO: Interpolate in incomplete face constructed on the fly
++=======
+         else { // TODO: Interpolate in incomplete face constructed on the fly
++>>>>>>> upstream/2.9.3+dfsg1
  //          std::vector<MVertex*> &vtcs = faceVertices[face];
  //          fullMatrix<double> points;
  //          int start = getNewFacePointsInFace(face.getNumVertices(), nPts, points);
@@@ -742,12 -723,10 +1021,18 @@@
    }
  }
  
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  // --------- Creation of high-order volume vertices -----------
  
  static int getNewVolumePoints(MElement *incomplete, int nPts, fullMatrix<double> &points)
  {
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
    int startInter = 0;
  
    switch (incomplete->getType()){
@@@ -767,7 -746,8 +1052,12 @@@
        Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
        break;
      }
++<<<<<<< HEAD
 +    startInter = ((nPts+2)*(nPts+3)*(nPts+4)-(nPts-2)*(nPts-1)*(nPts))/6;  // = 4+6*(p-1)+4*(p-2)*(p-1)/2 = 4*(p+1)*(p+2)/2-6*(p-1)-2*4 = 2*p*p+2
++=======
+     startInter = ((nPts+2)*(nPts+3)*(nPts+4)-(nPts-2)*(nPts-1)*(nPts))/6;
+     // = 4+6*(p-1)+4*(p-2)*(p-1)/2 = 4*(p+1)*(p+2)/2-6*(p-1)-2*4 = 2*p*p+2
++>>>>>>> upstream/2.9.3+dfsg1
      break;
    case TYPE_HEX :
      switch (nPts){
@@@ -784,7 -764,8 +1074,12 @@@
        Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
        break;
      }
++<<<<<<< HEAD
 +    startInter = (nPts+2)*(nPts+2)*(nPts+2) - (nPts)*(nPts)*(nPts) ; // = 6*(p-1)*(p-1)+12*(p-1)+8 = 6*(p+1)*(p+1)-12*(p-1)-2*8 = 6*p*p+2
++=======
+     startInter = (nPts+2)*(nPts+2)*(nPts+2) - (nPts)*(nPts)*(nPts) ;
+     // = 6*(p-1)*(p-1)+12*(p-1)+8 = 6*(p+1)*(p+1)-12*(p-1)-2*8 = 6*p*p+2
++>>>>>>> upstream/2.9.3+dfsg1
      break;
    case TYPE_PRI :
      switch (nPts){
@@@ -801,7 -782,9 +1096,13 @@@
        Msg::Error("getFaceAndInteriorVertices not implemented for order %i", nPts+1);
        break;
      }
++<<<<<<< HEAD
 +    startInter = 4*(nPts+1)*(nPts+1)+2;  // = 4*p*p+2 = 6+9*(p-1)+2*(p-2)*(p-1)/2+3*(p-1)*(p-1) = 2*(p+1)*(p+2)/2+3*(p+1)*(p+1)-9*(p-1)-2*6
++=======
+     startInter = 4*(nPts+1)*(nPts+1)+2;
+     // = 4*p*p+2 = 6+9*(p-1)+2*(p-2)*(p-1)/2+3*(p-1)*(p-1)
+     // = 2*(p+1)*(p+2)/2+3*(p+1)*(p+1)-9*(p-1)-2*6
++>>>>>>> upstream/2.9.3+dfsg1
      break;
    case TYPE_PYR:
      switch (nPts){
@@@ -829,7 -812,8 +1130,12 @@@
  
  // Get new interior vertices for a 3D element (except pyramid)
  static void getVolumeVertices(GRegion *gr, MElement *incomplete, MElement *ele,
++<<<<<<< HEAD
 +                              std::vector<MVertex*> &vr,  std::vector<MVertex*> &newHOVert,
++=======
+                               std::vector<MVertex*> &vr,
+                               std::vector<MVertex*> &newHOVert,
++>>>>>>> upstream/2.9.3+dfsg1
                                bool linear, int nPts = 1)
  {
    fullMatrix<double> points;
@@@ -849,8 -833,10 +1155,15 @@@
  }
  
  // Get new interior vertices for a pyramid
++<<<<<<< HEAD
 +static void getVolumeVerticesPyramid(GRegion *gr, MElement *ele, const std::vector<MVertex*> &ve,
 +                                     std::vector<MVertex*> &vr, std::vector<MVertex*> &newHOVert,
++=======
+ static void getVolumeVerticesPyramid(GRegion *gr, MElement *ele,
+                                      const std::vector<MVertex*> &ve,
+                                      std::vector<MVertex*> &vr,
+                                      std::vector<MVertex*> &newHOVert,
++>>>>>>> upstream/2.9.3+dfsg1
                                       bool linear, int nPts = 1)
  {
    vr.reserve((nPts-1)*(nPts)*(2*(nPts-1)+1)/6);
@@@ -985,7 -973,8 +1300,12 @@@ static void setHighOrder(GEdge *ge, std
    ge->deleteVertexArrays();
  }
  
++<<<<<<< HEAD
 +static MTriangle *setHighOrder(MTriangle *t, GFace *gf, std::vector<MVertex*> &newHOVert,
++=======
+ static MTriangle *setHighOrder(MTriangle *t, GFace *gf,
+                                std::vector<MVertex*> &newHOVert,
++>>>>>>> upstream/2.9.3+dfsg1
                                 edgeContainer &edgeVertices,
                                 faceContainer &faceVertices,
                                 bool linear, bool incomplete, int nPts)
@@@ -1008,7 -997,8 +1328,12 @@@
    }
  }
  
++<<<<<<< HEAD
 +static MQuadrangle *setHighOrder(MQuadrangle *q, GFace *gf, std::vector<MVertex*> &newHOVert,
++=======
+ static MQuadrangle *setHighOrder(MQuadrangle *q, GFace *gf,
+                                  std::vector<MVertex*> &newHOVert,
++>>>>>>> upstream/2.9.3+dfsg1
                                   edgeContainer &edgeVertices,
                                   faceContainer &faceVertices,
                                   bool linear, bool incomplete, int nPts)
diff --cc Mesh/QuadTriExtruded2D.cpp
index 0af4758,befecbc..f76b658
--- a/Mesh/QuadTriExtruded2D.cpp
+++ b/Mesh/QuadTriExtruded2D.cpp
@@@ -58,10 -57,9 +57,13 @@@ int IsValidQuadToTriLateral(GFace *face
  
    GModel *model = face->model();
  
- 
    ExtrudeParams *ep = face->meshAttributes.extrude;
  
++<<<<<<< HEAD
 +  if( !ep || !ep->mesh.ExtrudeMesh || !(ep->geo.Mode == EXTRUDED_ENTITY) ){
++=======
+   if(!ep || !ep->mesh.ExtrudeMesh || !(ep->geo.Mode == EXTRUDED_ENTITY)){
++>>>>>>> upstream/2.9.3+dfsg1
      Msg::Error("In IsValidQuadToTriLateral(), face %d is not a structured extrusion.",
                 face->tag() );
      return 0;
@@@ -206,17 -203,14 +207,28 @@@
  
  }
  
++<<<<<<< HEAD
 +
 +
 +// 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.
 +// 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.
++=======
+ // 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.  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.
++>>>>>>> upstream/2.9.3+dfsg1
  int IsValidQuadToTriTop(GFace *face, int *quadToTri, bool *detectQuadToTriTop)
  {
    (*quadToTri) = NO_QUADTRI;
@@@ -226,19 -220,17 +238,33 @@@
  
    GModel *model = face->model();
  
++<<<<<<< HEAD
 +  // 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.
 +  // The following loop will find all the regions that the face bounds, and determine
 +  // 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.
 +
 +
 +
 +
++=======
+   // 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.  The following loop will
+   // find all the regions that the face bounds, and determine 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.
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    // first determine if this is toroidal quadtotri
    is_toroidal_quadtri = IsInToroidalQuadToTri(face);
  
@@@ -346,8 -339,8 +373,13 @@@
  
    }  // end of else that executes if NOT toroidal extrusion
  
++<<<<<<< HEAD
 +
 +  // this is technically redundant...but if changes are made, it's good to keep this here at the end for safety
++=======
+     // this is technically redundant...but if changes are made, it's good to
+     // keep this here at the end for safety
++>>>>>>> upstream/2.9.3+dfsg1
    if( !(*detectQuadToTriTop) )
      return 0;
  
@@@ -357,9 -350,8 +389,13 @@@
    { return 2;} // for toroidal extrusion
    else
      return 3;
++<<<<<<< HEAD
 +
 +}
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  
+ }
  
  // this function specifically meshes a quadToTri top in an unstructured way
  // return 1 if success, return 0 if failed.
@@@ -477,19 -457,20 +501,28 @@@ int MeshQuadToTriTopSurface(GFace *from
  
    // 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) )
+   if(ep && (ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1 ||
+             ep->mesh.QuadToTri == QUADTRI_ADDVERTS_1_RECOMB))
      is_addverts = true;
  
++<<<<<<< HEAD
 +  // 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_addverts ){
-     std::set<MVertex*, MVertexLessThanLexicographic> pos_src_edge;
++=======
+   // 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.
++>>>>>>> upstream/2.9.3+dfsg1
+ 
+   if(!is_addverts){
+     MVertexRTree pos_src_edge(CTX::instance()->geom.tolerance * CTX::instance()->lc);
      QuadToTriInsertFaceEdgeVertices(from, pos_src_edge);
-     std::set<MVertex*, MVertexLessThanLexicographic>::iterator itp;
  
      // loop through each element source quadrangle and extrude
      for(unsigned int i = 0; i < from->quadrangles.size(); i++){
diff --cc Mesh/meshGEdge.cpp
index 163daeb,8ca50b2..94b68c1
--- a/Mesh/meshGEdge.cpp
+++ b/Mesh/meshGEdge.cpp
@@@ -318,7 -318,8 +318,12 @@@ static void printFandPrimitive(int tag
  */
  
  // new algo for recombining + splitting
++<<<<<<< HEAD
 +static int increaseN (int N){
++=======
+ static int increaseN (int N)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    if (((N+1)/2 - 1) % 2 != 0) return N+2;
    return N;
  }
diff --cc Mesh/meshGFace.cpp
index ab3ef3a,2e70056..85a075e
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@@ -58,7 -58,7 +58,11 @@@ static void computeElementShapes(GFace 
    nT = 0;
    greaterThan = 0;
    for(unsigned int i = 0; i < gf->triangles.size(); i++){
++<<<<<<< HEAD
 +    double q = qmTriangle(gf->triangles[i], QMTRI_RHO);
++=======
+     double q = qmTriangle::gamma(gf->triangles[i]);
++>>>>>>> upstream/2.9.3+dfsg1
      if(q > .9) greaterThan++;
      avg += q;
      worst = std::min(worst, q);
@@@ -94,7 -94,10 +98,14 @@@ public
  	  std::vector<MLine*> temp;
  	  (*ite)->mesh_vertices.clear();
  	  for(unsigned int i = 0; i< (*ite)->lines.size(); i+=2){
++<<<<<<< HEAD
 +	    if (i+1 >= (*ite)->lines.size())Msg::Fatal("1D mesh cannot be divided by 2");
++=======
+ 	    if (i+1 >= (*ite)->lines.size()){
+ 	      Msg::Error("1D mesh cannot be divided by 2");
+ 	      break;
+ 	    }
++>>>>>>> upstream/2.9.3+dfsg1
  	    MVertex *v1 = (*ite)->lines[i]->getVertex(0);
  	    MVertex *v2 = (*ite)->lines[i]->getVertex(1);
  	    MVertex *v3 = (*ite)->lines[i+1]->getVertex(1);
@@@ -156,7 -159,7 +167,11 @@@
  	MEdge E = _gf->quadrangles[i]->getEdge(j);
  	SPoint2 p1, p2;
  	reparamMeshEdgeOnFace(E.getVertex(0),E.getVertex(1),_gf,p1,p2);
++<<<<<<< HEAD
 +	std::map<MEdge, MVertex *>::iterator it = _middle.find(E);
++=======
+ 	std::map<MEdge, MVertex *, Less_Edge>::iterator it = _middle.find(E);
++>>>>>>> upstream/2.9.3+dfsg1
  	std::map<MEdge, MVertex *, Less_Edge>::iterator it2 = eds.find(E);
  	m[j] = p1;
  	if (it == _middle.end() && it2 == eds.end()){
@@@ -1077,7 -1109,7 +1121,11 @@@ bool meshGenerator(GFace *gf, int RECUR
    }
  
    // build a set with all points of the boundaries
++<<<<<<< HEAD
 +  std::set<MVertex*> all_vertices, boundary;
++=======
+   std::set<MVertex*, MVertexLessThanNum> all_vertices, boundary;
++>>>>>>> upstream/2.9.3+dfsg1
    std::list<GEdge*>::iterator ite = edges.begin();
    while(ite != edges.end()){
      if((*ite)->isSeam(gf)) return false;
@@@ -1266,75 -1298,75 +1314,147 @@@
    {
      std::vector<MVertex*> v;
      std::vector<MTriangle*> result;
++<<<<<<< HEAD
 +    v.insert(v.end(),all_vertices.begin(),all_vertices.end());
 +
 +    std::map<MVertex*,SPoint3> pos;
 +    for(unsigned int i = 0; i < v.size(); i++) {
 +      MVertex *v0 = v[i];
 +      BDS_Point *p0  = recoverMapInv[v0];
 +      pos[v0] = SPoint3(v0->x(),v0->y(),v0->z());
 +      v0->setXYZ(p0->u,p0->v,0.0);
 +    }
 +    delaunayMeshIn2D(v, result, 0);
 +    //    delaunayMeshIn2D(v, result, 0, & medgesToRecover);
 +
 +    for(unsigned int i = 0; i < v.size()-4; i++) {
 +      MVertex *v0 = v[i];
 +      SPoint3 pp = pos[v0];
 +      v0->setXYZ(pp.x(),pp.y(),pp.z());
 +    }
 +
 +    // add the four corners
 +    for(int ip = 0; ip < 4; ip++){
 +      MVertex *vv = v[v.size()-ip-1];
 +      BDS_Point *pp = m->add_point(-ip - 1, vv->x(),vv->y(), gf);
 +      m->add_geom(gf->tag(), 2);
 +      recoverMapInv[vv] = pp;
 +      BDS_GeomEntity *g = m->get_geom(gf->tag(), 2);
 +      pp->g = g;
 +    }
 +    // add the triangles
 +    for(unsigned int i = 0; i < result.size(); i++) {
 +      MVertex *v0 = result[i]->getVertex(0);
 +      MVertex *v1 = result[i]->getVertex(1);
 +      MVertex *v2 = result[i]->getVertex(2);
 +      BDS_Point *p0  = recoverMapInv[v0];
 +      BDS_Point *p1  = recoverMapInv[v1];
 +      BDS_Point *p2  = recoverMapInv[v2];
 +      m->add_triangle(p0->iD, p1->iD, p2->iD);
++=======
+     v.insert(v.end(), all_vertices.begin(), all_vertices.end());
+ 
+     std::map<MVertex*,SPoint3> pos;
+     for(unsigned int i = 0; i < v.size(); i++) {
+       MVertex *v0 = v[i];
+       BDS_Point *p0  = recoverMapInv[v0];
+       pos[v0] = SPoint3(v0->x(),v0->y(),v0->z());
+       v0->setXYZ(p0->u,p0->v,0.0);
+     }
+     delaunayMeshIn2D(v, result, 0);
+     //    delaunayMeshIn2D(v, result, 0, & medgesToRecover);
+ 
+     for(unsigned int i = 0; i < v.size()-4; i++) {
+       MVertex *v0 = v[i];
+       SPoint3 pp = pos[v0];
+       v0->setXYZ(pp.x(),pp.y(),pp.z());
++>>>>>>> upstream/2.9.3+dfsg1
      }
 +  }
 +#endif
 +
 +  if(debug && RECUR_ITER == 0){
 +    char name[245];
 +    sprintf(name, "surface%d-initial-real.pos", gf->tag());
 +    outputScalarField(m->triangles, name, 0);
 +    sprintf(name, "surface%d-initial-param.pos", gf->tag());
 +    outputScalarField(m->triangles, name, 1);
 +  }
 +
 +  // Recover the boundary edges and compute characteristic lenghts
 +  // using mesh edge spacing. If two of these edges intersect, then
 +  // the 1D mesh have to be densified
 +  Msg::Debug("Recovering %d model Edges", edges.size());
 +  std::set<EdgeToRecover> edgesToRecover;
 +  std::set<EdgeToRecover> edgesNotRecovered;
 +  ite = edges.begin();
 +  while(ite != edges.end()){
 +    if(!(*ite)->isMeshDegenerated())
 +      recoverEdge(m, *ite, recoverMapInv, &edgesToRecover, &edgesNotRecovered, 1);
 +    ++ite;
 +  }
 +  ite = emb_edges.begin();
 +  while(ite != emb_edges.end()){
 +    if(!(*ite)->isMeshDegenerated())
 +      recoverEdge(m, *ite, recoverMapInv, &edgesToRecover, &edgesNotRecovered, 1);
 +    ++ite;
 +  }
  
+     // add the four corners
+     for(int ip = 0; ip < 4; ip++){
+       MVertex *vv = v[v.size()-ip-1];
+       BDS_Point *pp = m->add_point(-ip - 1, vv->x(),vv->y(), gf);
+       m->add_geom(gf->tag(), 2);
+       recoverMapInv[vv] = pp;
+       BDS_GeomEntity *g = m->get_geom(gf->tag(), 2);
+       pp->g = g;
+     }
+     // add the triangles
+     for(unsigned int i = 0; i < result.size(); i++) {
+       MVertex *v0 = result[i]->getVertex(0);
+       MVertex *v1 = result[i]->getVertex(1);
+       MVertex *v2 = result[i]->getVertex(2);
+       BDS_Point *p0  = recoverMapInv[v0];
+       BDS_Point *p1  = recoverMapInv[v1];
+       BDS_Point *p2  = recoverMapInv[v2];
+       m->add_triangle(p0->iD, p1->iD, p2->iD);
+     }
+   }
+ #endif
  
++<<<<<<< HEAD
 +    // effectively recover the medge
++=======
+   if(debug && RECUR_ITER == 0){
+     char name[245];
+     sprintf(name, "surface%d-initial-real.pos", gf->tag());
+     outputScalarField(m->triangles, name, 0);
+     sprintf(name, "surface%d-initial-param.pos", gf->tag());
+     outputScalarField(m->triangles, name, 1);
+   }
+ 
+   // Recover the boundary edges and compute characteristic lenghts
+   // using mesh edge spacing. If two of these edges intersect, then
+   // the 1D mesh have to be densified
+   Msg::Debug("Recovering %d model Edges", edges.size());
+   std::set<EdgeToRecover> edgesToRecover;
+   std::set<EdgeToRecover> edgesNotRecovered;
+   ite = edges.begin();
+   while(ite != edges.end()){
+     if(!(*ite)->isMeshDegenerated())
+       recoverEdge(m, *ite, recoverMapInv, &edgesToRecover, &edgesNotRecovered, 1);
+     ++ite;
+   }
+   ite = emb_edges.begin();
+   while(ite != emb_edges.end()){
+     if(!(*ite)->isMeshDegenerated())
+       recoverEdge(m, *ite, recoverMapInv, &edgesToRecover, &edgesNotRecovered, 1);
+     ++ite;
+   }
+ 
+ 
+   // effectively recover the medge
++>>>>>>> upstream/2.9.3+dfsg1
    ite = edges.begin();
    while(ite != edges.end()){
      if(!(*ite)->isMeshDegenerated()){
@@@ -2122,7 -2154,6 +2242,10 @@@ static bool meshGeneratorPeriodic(GFac
    {
      /// FIXME FOR PERIODIC : SOME MVERTices SHOULD BE DUPLICATED ...
      /// Still to be done...
++<<<<<<< HEAD
 +    printf("coucou1\n");
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      std::vector<MVertex*> v;
      std::map<MVertex*, BDS_Point*> recoverMapInv;
      for(unsigned int i = 0; i < edgeLoops_BDS.size(); i++){
@@@ -2134,7 -2165,7 +2257,11 @@@
        }
      }
  
++<<<<<<< HEAD
 +    printf("coucou2 %d verices\n",v.size());
++=======
+     //    printf("coucou2 %d verices\n",v.size());
++>>>>>>> upstream/2.9.3+dfsg1
      std::map<MVertex*,SPoint3> pos;
      for(unsigned int i = 0; i < v.size(); i++) {
        MVertex *v0 = v[i];
diff --cc Mesh/meshGFaceDelaunayInsertion.cpp
index ed1e61a,14cad8f..38161b9
--- a/Mesh/meshGFaceDelaunayInsertion.cpp
+++ b/Mesh/meshGFaceDelaunayInsertion.cpp
@@@ -23,27 -25,14 +25,18 @@@
  #include "GModel.h"
  #include "GFaceCompound.h"
  #include "intersectCurveSurface.h"
++<<<<<<< HEAD
 +#include "surfaceFiller.h"
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  #include "HilbertCurve.h"
  
- double LIMIT_ = 0.5 * sqrt(2.0) * 1;
- int  N_GLOBAL_SEARCH;
- int  N_SEARCH;
- double DT_INSERT_VERTEX;
+ static double LIMIT_ = 0.5 * sqrt(2.0) * 1;
+ static int  N_GLOBAL_SEARCH;
+ static int  N_SEARCH;
+ static double DT_INSERT_VERTEX;
  int MTri3::radiusNorm = 2;
  
- /*
- static bool isBoundary(MTri3 *t, double limit_, int &active)
- {
-   if (t->isDeleted()) return false;
-   for (active = 0; active < 3; active++){
-     MTri3 *neigh = t->getNeigh(active);
-     if (!neigh) return true;
-   }
-   return false;
- }
- */
- 
  template <class ITERATOR>
  void _printTris(char *name, ITERATOR it,  ITERATOR end, bidimMeshData * data)
  {
@@@ -1694,390 -1693,394 +1697,679 @@@ void bowyerWatsonFrontalLayers(GFace *g
      //	Msg::Info("%d active tris %d front edges %d not in front",
      //            ActiveTris.size(),_front.size(),ActiveTrisNotInFront.size());
      if (!ActiveTris.size()) break;
-   }
+     }
  
-   // char name[245];
-   // sprintf(name,"frontal%d-real.pos", gf->tag());
-   // _printTris (name, AllTris, Us, Vs,false);
-   // sprintf(name,"frontal%d-param.pos", gf->tag());
-   // _printTris (name, AllTris, Us, Vs,true);
-   transferDataStructure(gf, AllTris, DATA);
-   MTri3::radiusNorm = 2;
-   LIMIT_ = 0.5 * sqrt(2.0) * 1;
-   backgroundMesh::unset();
+     // char name[245];
+     // sprintf(name,"frontal%d-real.pos", gf->tag());
+     // _printTris (name, AllTris, Us, Vs,false);
+     // sprintf(name,"frontal%d-param.pos", gf->tag());
+     // _printTris (name, AllTris, Us, Vs,true);
+     transferDataStructure(gf, AllTris, DATA);
+     MTri3::radiusNorm = 2;
+     LIMIT_ = 0.5 * sqrt(2.0) * 1;
+ 
+     backgroundMesh::unset();
  #if defined(HAVE_ANN)
-   {
-     FieldManager *fields = gf->model()->getFields();
-     BoundaryLayerField *blf = 0;
-     if(fields->getBoundaryLayerField() > 0){
-       Field *bl_field = fields->get(fields->getBoundaryLayerField());
-       blf = dynamic_cast<BoundaryLayerField*> (bl_field);
-       if (blf && !blf->iRecombine)quadsToTriangles(gf,10000);
+     {
+       FieldManager *fields = gf->model()->getFields();
+       BoundaryLayerField *blf = 0;
+       if(fields->getBoundaryLayerField() > 0){
+         Field *bl_field = fields->get(fields->getBoundaryLayerField());
+         blf = dynamic_cast<BoundaryLayerField*> (bl_field);
+         if (blf && !blf->iRecombine)quadsToTriangles(gf,10000);
+       }
      }
-   }
  #endif
- }
+   }
  
- void bowyerWatsonParallelograms(GFace *gf,
- 		  std::map<MVertex* , MVertex*>* equivalence,
- 		  std::map<MVertex*, SPoint2> * parametricCoordinates)
- {
-   std::set<MTri3*,compareTri3Ptr> AllTris;
-   bidimMeshData DATA(equivalence, parametricCoordinates);
-   std::vector<MVertex*> packed;
-   std::vector<SMetric3> metrics;
+   void bowyerWatsonParallelograms(GFace *gf,
+       std::map<MVertex* , MVertex*>* equivalence,
+       std::map<MVertex*, SPoint2> * parametricCoordinates)
+   {
+     std::set<MTri3*,compareTri3Ptr> AllTris;
+     bidimMeshData DATA(equivalence, parametricCoordinates);
+     std::vector<MVertex*> packed;
+     std::vector<SMetric3> metrics;
+ 
+     //  printf("creating the points\n");
+     // PEB MODIF
+     if (old_algo_hexa())
+       packingOfParallelograms(gf, packed, metrics);
+     else{
+       Filler2D f;
+       f.pointInsertion2D(gf, packed, metrics);
+     }
+     // END PEB MODIF
+     //  printf("points created\n");
+ 
+     buildMeshGenerationDataStructures (gf, AllTris, DATA);
+ 
+     // delaunise the initial mesh
+     int nbSwaps = edgeSwapPass(gf, AllTris, SWCR_DEL, DATA);
+     Msg::Debug("Delaunization of the initial mesh done (%d swaps)", nbSwaps);
+ 
+     //std::sort(packed.begin(), packed.end(), MVertexLessThanLexicographic());
+     SortHilbert(packed);
+ 
+     //  printf("staring to insert points\n");
+     N_GLOBAL_SEARCH = 0;
+     N_SEARCH = 0;
+     DT_INSERT_VERTEX = 0;
+     double t1 = Cpu();
+     MTri3 *oneNewTriangle = 0;
+     for (unsigned int i=0;i<packed.size();){
+       MTri3 *worst = *AllTris.begin();
+       if (worst->isDeleted()){
+         delete worst->tri();
+         delete worst;
+         AllTris.erase(AllTris.begin());
+       }
+       else{
+         double newPoint[2] ;
+         packed[i]->getParameter(0,newPoint[0]);
+         packed[i]->getParameter(1,newPoint[1]);
+         delete packed[i];
+         double metric[3];
+         //      buildMetric(gf, newPoint, metrics[i], metric);
+         buildMetric(gf, newPoint, metric);
+ 
+         bool success = insertAPoint(gf, AllTris.begin(), newPoint, metric, DATA , AllTris, 0, oneNewTriangle, &oneNewTriangle);
+         if (!success) oneNewTriangle = 0;
+         //      if (!success)printf("success %d %d\n",success,AllTris.size());
+         i++;
+       }
  
-   //  printf("creating the points\n");
-   packingOfParallelograms(gf, packed, metrics);
-   //  printf("points created\n");
+       if(1.0* AllTris.size() > 2.5 * DATA.vSizes.size()){
+         //      int n1 = AllTris.size();
+         std::set<MTri3*,compareTri3Ptr>::iterator itd = AllTris.begin();
+         while(itd != AllTris.end()){
+           if((*itd)->isDeleted()){
+             delete  *itd;
+             AllTris.erase(itd++);
+           }
+           else
+             itd++;
+         }
+         //      Msg::Info("cleaning up the memory %d -> %d", n1, AllTris.size());
+       }
  
-   buildMeshGenerationDataStructures (gf, AllTris, DATA);
  
-   // delaunise the initial mesh
-   int nbSwaps = edgeSwapPass(gf, AllTris, SWCR_DEL, DATA);
-   Msg::Debug("Delaunization of the initial mesh done (%d swaps)", nbSwaps);
+     }
+     //  printf("%d vertices \n",(int)packed.size());
+     double t2 = Cpu();
+     double DT = (double)(t2-t1);
+     if (packed.size())
+       printf("points inserted DT %12.5E points per minute : %12.5E %d global searchs %d searchs per insertion\n",
+           DT,60.*packed.size()/DT,N_GLOBAL_SEARCH, (int)(N_SEARCH/packed.size()));
+     transferDataStructure(gf, AllTris, DATA);
+     backgroundMesh::unset();
+ #if defined(HAVE_ANN)
+     {
+       FieldManager *fields = gf->model()->getFields();
+       BoundaryLayerField *blf = 0;
+       if(fields->getBoundaryLayerField() > 0){
+         Field *bl_field = fields->get(fields->getBoundaryLayerField());
+         blf = dynamic_cast<BoundaryLayerField*> (bl_field);
+         if (blf && !blf->iRecombine)quadsToTriangles(gf,10000);
+       }
+     }
+ #endif
+   }
  
-   std::sort(packed.begin(), packed.end(), MVertexLessThanLexicographic());
  
-   //  printf("staring to insert points\n");
-   N_GLOBAL_SEARCH = 0;
-   N_SEARCH = 0;
-   DT_INSERT_VERTEX = 0;
-   // double t1 = Cpu();
-   MTri3 *oneNewTriangle = 0;
-   for (unsigned int i=0;i<packed.size();){
-     MTri3 *worst = *AllTris.begin();
-     if (worst->isDeleted()){
-       delete worst->tri();
-       delete worst;
-       AllTris.erase(AllTris.begin());
+   static void initialSquare(std::vector<MVertex*> &v,
+       MVertex *box[4],
+       std::vector<MTri3*> &t){
+     SBoundingBox3d bbox ;
+     for (size_t i=0;i<v.size();i++){
+       MVertex *pv = v[i];
+       bbox += SPoint3(pv->x(),pv->y(),pv->z());
      }
-     else{
-       double newPoint[2] ;
-       packed[i]->getParameter(0,newPoint[0]);
-       packed[i]->getParameter(1,newPoint[1]);
-       delete packed[i];
-       double metric[3];
-       //      buildMetric(gf, newPoint, metrics[i], metric);
-       buildMetric(gf, newPoint, metric);
+     bbox *= 1.3;
+     box[0] = new MVertex (bbox.min().x(),bbox.min().y(),0);
+     box[1] = new MVertex (bbox.max().x(),bbox.min().y(),0);
+     box[2] = new MVertex (bbox.max().x(),bbox.max().y(),0);
+     box[3] = new MVertex (bbox.min().x(),bbox.max().y(),0);
+     MTriangle *t0 = new MTriangle (box[0],box[1],box[2]);
+     MTriangle *t1 = new MTriangle (box[2],box[3],box[0]);
+     t.push_back(new MTri3(t0,0.0));
+     t.push_back(new MTri3(t1,0.0));
+     connectTriangles(t);
+   }
+ 
+ 
+   MTri3 * getTriToBreak (MVertex *v, std::vector<MTri3*> &t, int &NB_GLOBAL_SEARCH, int &ITER){
+     // last inserted is used as starting point
+     // we know it is not deleted
+     unsigned int k = t.size() - 1;
+     while(t[k]->isDeleted()){
+       k--;
+     }
+     MTri3 *start = t[k];
+     start = search4Triangle (start,v,(int)t.size(),ITER);
+     if (start)return start;
+     //  printf("Global Search has to be done\n");
+     NB_GLOBAL_SEARCH++;
+     for (size_t i = 0;i<t.size();i++){
+       if (!t[i]->isDeleted() && inCircumCircleXY(t[i]->tri(),v))return t[i];
+     }
+     return 0;
+   }
  
-       bool success = insertAPoint(gf, AllTris.begin(), newPoint, metric, DATA , AllTris, 0, oneNewTriangle, &oneNewTriangle);
-       if (!success) oneNewTriangle = 0;
- 	//      if (!success)printf("success %d %d\n",success,AllTris.size());
-       i++;
+   bool triOnBox (MTriangle *t, MVertex *box[4]){
+     for (size_t i = 0;i<3;i++){
+       for (size_t j = 0;j<4;j++){
+         if (t->getVertex(i) == box[j])
+           return true;
+       }
      }
+     return false;
+   }
+ 
+   // vertices are supposed to be sitting in the XY plane !
  
-     if(1.0* AllTris.size() > 2.5 * DATA.vSizes.size()){
-       //      int n1 = AllTris.size();
-       std::set<MTri3*,compareTri3Ptr>::iterator itd = AllTris.begin();
-       while(itd != AllTris.end()){
-         if((*itd)->isDeleted()){
-           delete  *itd;
-           AllTris.erase(itd++);
+   void recoverEdges (std::vector<MTri3*> &t, std::vector<MEdge> &edges);
+ 
+   void delaunayMeshIn2D(std::vector<MVertex*> &v,
+       std::vector<MTriangle*> &result,
+       bool removeBox,
+       std::vector<MEdge> *edgesToRecover,
+       bool hilbertSort)
+   {
+     std::vector<MTri3*> t;
+     t.reserve (v.size()*2);
+     std::vector<edgeXface> conn;
+     std::vector<edgeXface> shell;
+     std::vector<MTri3*> cavity;
+     MVertex *box[4];
+     initialSquare (v,box,t);
+ 
+     int NB_GLOBAL_SEARCH = 0;
+     double AVG_ITER = 0;
+     double AVG_CAVSIZE = 0;
+ 
+     double t1 = Cpu();
+ 
+     //  Msg::Info("Delaunay 2D SORTING");
+     if(hilbertSort) SortHilbert(v);
+ 
+     double ta=0,tb=0,tc=0,td=0,T;
+     //  Msg::Info("Delaunay 2D INSERTING");
+     for (size_t i=0;i<v.size();i++){
+       MVertex *pv = v[i];
+ 
+       int NITER = 0;
+       T = Cpu();
+       MTri3 * found = getTriToBreak (pv,t,NB_GLOBAL_SEARCH,NITER);
+       ta += Cpu()-T;
+       AVG_ITER += (double)NITER;
+       if(!found) {
+         Msg::Error("Cannot insert a point in 2D Delaunay");
+         continue;
+       }
+       shell.clear();
+       cavity.clear();
+ 
+       T = Cpu();
+       recurFindCavity(shell, cavity, pv, found);
+       AVG_CAVSIZE += (double)cavity.size();
+       tb += Cpu()-T;
+       //double V = 0.0;
+       //for (unsigned int k=0;k<cavity.size();k++)V+=fabs(cavity[k]->tri()->getVolume());
+ 
+       std::vector<MTri3*> extended_cavity;
+       //double Vb = 0.0;
+ 
+       T = Cpu();
+       for (unsigned int count = 0; count < shell.size(); count++){
+         const edgeXface &fxt = shell[count];
+         MTriangle *tr;
+         MTri3 *t3;
+         MVertex *v0 = fxt.v[0];
+         MVertex *v1 = fxt.v[1];
+         MTri3 *otherSide = fxt.t1->getNeigh(fxt.i1);
+         if (count < cavity.size()){
+           t3 = cavity[count];
+           tr = t3->tri() ;
+           tr->setVertex(0,v0);
+           tr->setVertex(1,v1);
+           tr->setVertex(2,pv);
+         }
+         else{
+           tr = new MTriangle(v0,v1,pv);
+           t3 = new MTri3(tr, 0.0);
+           t.push_back(t3);
          }
-         else
-           itd++;
+         //Vb+= fabs(tr->getVolume());
+         extended_cavity.push_back(t3);
+         if (otherSide)
+           extended_cavity.push_back(otherSide);
        }
-       //      Msg::Info("cleaning up the memory %d -> %d", n1, AllTris.size());
+       tc += Cpu()-T;
+       //if (fabs(Vb-V) > 1.e-8 * (Vb+V))printf("%12.5E %12.5E\n",Vb,V);
+ 
+       for (unsigned int k=0;k<std::min(cavity.size(),shell.size());k++){
+         cavity[k]->setDeleted(false);
+         for (unsigned int l=0;l<3;l++){
+           cavity[k]->setNeigh(l,0);
+         }
+       }
+       T = Cpu();
+       connectTris(extended_cavity.begin(),extended_cavity.end(),conn);
+       td += Cpu()-T;
      }
  
+     double t2 = Cpu();
+     Msg::Debug("Delaunay 2D done for %d points : CPU = %g, %d global searches, AVG walk size %g , AVG cavity size %g",
+         v.size(), t2-t1,NB_GLOBAL_SEARCH,1.+AVG_ITER/v.size(),AVG_CAVSIZE/v.size());
+ 
+     if (edgesToRecover)recoverEdges (t,*edgesToRecover);
  
+     for (size_t i = 0;i<t.size();i++){
+       if (t[i]->isDeleted() || (removeBox && triOnBox (t[i]->tri(),box))) delete t[i]->tri();
+       else {
+         result.push_back(t[i]->tri());
+       }
+       delete t[i];
+     }
+ 
+     if (removeBox){for (int i=0;i<4;i++)delete box[i];}
+     else {for (int i=0;i<4;i++)v.push_back(box[i]);}
    }
-   //  printf("%d vertices \n",(int)packed.size());
-   //clock_t t2 = clock();
-   //double DT = (double)(t2-t1)/CLOCKS_PER_SEC;
-   //if (packed.size())printf("points inserted DT %12.5E points per minut : %12.5E %d global searchs %d seachs per insertion\n",DT,60.*packed.size()/DT,N_GLOBAL_SEARCH,N_SEARCH / packed.size());
-   transferDataStructure(gf, AllTris, DATA);
-   backgroundMesh::unset();
- #if defined(HAVE_ANN)
+ 
+   bool swapedge (MVertex *v1 ,MVertex *v2, MVertex *v3, MVertex *v4, MTri3* t1, int iLocalEdge){
+     MTri3 *t2 = t1->getNeigh(iLocalEdge);
+     if(!t2) return false;
+ 
+     MTriangle *t1b = new MTriangle(v2, v3, v4);
+     MTriangle *t2b = new MTriangle(v4, v3, v1);
+     double BEFORE = t1->tri()->getVolume()+t2->tri()->getVolume();
+     double AFTER  = t1b->getVolume()+t2b->getVolume();
+     //  printf("swapping %d %d %d %d %g %g\n",v1->getNum(),v2->getNum(),v3->getNum(),v4->getNum(),BEFORE,AFTER);
+     if (fabs(BEFORE-AFTER)/BEFORE > 1.e-8){
+       delete t1b;
+       delete t2b;
+       return false;
+     }
+     //  printf("volumes ok\n");
+ 
+     delete t1->tri();
+     delete t2->tri();
+     t1->setTri(t1b);
+     t2->setTri(t2b);
+ 
+     std::set<MTri3*> cavity;
+     cavity.insert(t1);
+     cavity.insert(t2);
+     for(int i = 0; i < 3; i++){
+       if(t1->getNeigh(i))
+         cavity.insert(t1->getNeigh(i));
+       if(t2->getNeigh(i))
+         cavity.insert(t2->getNeigh(i));
+     }
+     std::vector<edgeXface> conn;
+     connectTris(cavity.begin(), cavity.end(), conn);
+     return true;
+   }
+ 
+   bool diffend (MVertex *v1, MVertex *v2, MVertex *p1, MVertex *p2){
+     if (v1 == p1 || v2 == p1 || v1 == p2 || v2 == p2)return false;
+     return true;
+   }
+ 
+   /*
+ 
+    */
+ 
+   static bool recoverEdgeBySwaps (std::vector<MTri3*> &t, MVertex *mv1, MVertex *mv2, std::vector<MEdge> &edges){
+ 
+     SPoint3 pv1 (mv1->x(),mv1->y(),0);
+     SPoint3 pv2 (mv2->x(),mv2->y(),0);
+     double xcc[2];
+     for (unsigned int i=0;i<t.size();i++){
+       for (unsigned int j=0;j<3;j++){
+         MVertex *v1 = t[i]->tri()->getVertex((j+2)%3);
+         MVertex *v2 = t[i]->tri()->getVertex(j);
+         MVertex *v3 = t[i]->tri()->getVertex((j+1)%3);
+         MVertex *o  = t[i]->otherSide(j);
+         if (o){
+           SPoint3 p1 (v1->x(),v1->y(),0);
+           SPoint3 p2 (v2->x(),v2->y(),0);
+           SPoint3 p3 (v3->x(),v3->y(),0);
+           SPoint3 po (o->x(),o->y(),0);
+           if (diffend(v1,v2,mv1,mv2)){
+             if (intersection_segments (p1, p2, pv1, pv2,xcc)){
+               //	    if (std::binary_search(edges.begin(),edges.end(),MEdge(v1,v2),Less_Edge)){
+               //	      Msg::Error("1D mesh self intersects");
+               //	    }
+               if (!intersection_segments(po, p3, pv1, pv2,xcc) || (v3 == mv1 || o == mv1 || v3 == mv2 || o == mv2)){
+                 if(swapedge (v1,v2,v3,o,t[i],j))return true;
+               }
+             }
+           }
+         }
+       }
+     }
+     return false;
+   }
+ 
+   // recover the edges by edge swapping in the triangulation.
+   // edges are not supposed to
+ 
+   void recoverEdges (std::vector<MTri3*> &t, std::vector<MEdge> &edges)
    {
-     FieldManager *fields = gf->model()->getFields();
-     BoundaryLayerField *blf = 0;
-     if(fields->getBoundaryLayerField() > 0){
-       Field *bl_field = fields->get(fields->getBoundaryLayerField());
-       blf = dynamic_cast<BoundaryLayerField*> (bl_field);
-       if (blf && !blf->iRecombine)quadsToTriangles(gf,10000);
+     Less_Edge le;
+     std::sort(edges.begin(),edges.end(),le);
+     std::set<MEdge,Less_Edge> setOfMeshEdges;
+     for (size_t i = 0;i<t.size();i++){
+       for (int j=0;j<3;j++){
+         setOfMeshEdges.insert(t[i]->tri()->getEdge(j));
+       }
+     }
+ 
+     std::vector<MEdge> edgesToRecover;
+     for (unsigned int i=0;i<edges.size();i++){
+       if (setOfMeshEdges.find(edges[i])==setOfMeshEdges.end())
+         edgesToRecover.push_back(edges[i]);
+     }
+ 
+     Msg::Info("%d edges to recover among %d edges",edgesToRecover.size(),edges.size());
+     //  int iter = 0;
+     //  char name[256];
+     //  sprintf(name,"iter%d.pos",iter++);
+     //  _printTris (name, t.begin(),t.end(),0);
+     for (unsigned int i=0;i<edgesToRecover.size();i++){
+       MVertex *mstart = edgesToRecover[i].getVertex(0);
+       MVertex *mend = edgesToRecover[i].getVertex(1);
+       Msg::Info("recovering edge %d %d",mstart->getNum(),mend->getNum());
+       //int iter;
+       while(recoverEdgeBySwaps (t, mstart, mend,edges)) {
+         //iter ++;
+       }
      }
    }
++<<<<<<< HEAD
 +#endif
 +}
 +
 +
 +static void initialSquare(std::vector<MVertex*> &v,
 +			  MVertex *box[4],
 +			  std::vector<MTri3*> &t){
 +  SBoundingBox3d bbox ;
 +  for (size_t i=0;i<v.size();i++){
 +    MVertex *pv = v[i];
 +    bbox += SPoint3(pv->x(),pv->y(),pv->z());
 +  }
 +  bbox *= 1.3;
 +  box[0] = new MVertex (bbox.min().x(),bbox.min().y(),0);
 +  box[1] = new MVertex (bbox.max().x(),bbox.min().y(),0);
 +  box[2] = new MVertex (bbox.max().x(),bbox.max().y(),0);
 +  box[3] = new MVertex (bbox.min().x(),bbox.max().y(),0);
 +  MTriangle *t0 = new MTriangle (box[0],box[1],box[2]);
 +  MTriangle *t1 = new MTriangle (box[2],box[3],box[0]);
 +  t.push_back(new MTri3(t0,0.0));
 +  t.push_back(new MTri3(t1,0.0));
 +  connectTriangles(t);
 +}
 +
 +
 +MTri3 * getTriToBreak (MVertex *v, std::vector<MTri3*> &t, int &NB_GLOBAL_SEARCH, int &ITER){
 +  // last inserted is used as starting point
 +  // we know it is not deleted
 +  unsigned int k = t.size() - 1;
 +  while(t[k]->isDeleted()){
 +    k--;
 +  }
 +  MTri3 *start = t[k];
 +  start = search4Triangle (start,v,(int)t.size(),ITER);
 +  if (start)return start;
 +  //  printf("Global Search has to be done\n");
 +  NB_GLOBAL_SEARCH++;
 +  for (size_t i = 0;i<t.size();i++){
 +    if (!t[i]->isDeleted() && inCircumCircleXY(t[i]->tri(),v))return t[i];
 +  }
 +  return 0;
 +}
 +
 +bool triOnBox (MTriangle *t, MVertex *box[4]){
 +  for (size_t i = 0;i<3;i++){
 +    for (size_t j = 0;j<4;j++){
 +      if (t->getVertex(i) == box[j])
 +	return true;
 +    }
 +  }
 +  return false;
 +}
 +
 +// vertices are supposed to be sitting in the XY plane !
 +
 +void recoverEdges (std::vector<MTri3*> &t, std::vector<MEdge> &edges);
 +
 +void delaunayMeshIn2D(std::vector<MVertex*> &v,
 +		      std::vector<MTriangle*> &result,
 +		      bool removeBox,
 +		      std::vector<MEdge> *edgesToRecover,
 +                      bool hilbertSort)
 +{
 +  std::vector<MTri3*> t;
 +  t.reserve (v.size()*2);
 +  std::vector<edgeXface> conn;
 +  std::vector<edgeXface> shell;
 +  std::vector<MTri3*> cavity;
 +  MVertex *box[4];
 +  initialSquare (v,box,t);
 +
 +  int NB_GLOBAL_SEARCH = 0;
 +  double AVG_ITER = 0;
 +  double AVG_CAVSIZE = 0;
 +
 +  double t1 = Cpu();
 +
 +  //  Msg::Info("Delaunay 2D SORTING");
 +  if(hilbertSort) SortHilbert(v);
 +
 +  double ta=0,tb=0,tc=0,td=0,T;
 +  //  Msg::Info("Delaunay 2D INSERTING");
 +  for (size_t i=0;i<v.size();i++){
 +    MVertex *pv = v[i];
 +
 +    int NITER = 0;
 +    T = Cpu();
 +    MTri3 * found = getTriToBreak (pv,t,NB_GLOBAL_SEARCH,NITER);
 +    ta += Cpu()-T;
 +    AVG_ITER += (double)NITER;
 +    if(!found) {
 +      Msg::Error("Cannot insert a point in 2D Delaunay");
 +      continue;
 +    }
 +    shell.clear();
 +    cavity.clear();
 +
 +    T = Cpu();
 +    recurFindCavity(shell, cavity, pv, found);
 +    AVG_CAVSIZE += (double)cavity.size();
 +    tb += Cpu()-T;
 +    //double V = 0.0;
 +    //for (unsigned int k=0;k<cavity.size();k++)V+=fabs(cavity[k]->tri()->getVolume());
 +
 +    std::vector<MTri3*> extended_cavity;
 +    //double Vb = 0.0;
 +
 +    T = Cpu();
 +    for (unsigned int count = 0; count < shell.size(); count++){
 +      const edgeXface &fxt = shell[count];
 +      MTriangle *tr;
 +      MTri3 *t3;
 +      MVertex *v0 = fxt.v[0];
 +      MVertex *v1 = fxt.v[1];
 +      MTri3 *otherSide = fxt.t1->getNeigh(fxt.i1);
 +      if (count < cavity.size()){
 +	t3 = cavity[count];
 +	tr = t3->tri() ;
 +	tr->setVertex(0,v0);
 +	tr->setVertex(1,v1);
 +	tr->setVertex(2,pv);
 +      }
 +      else{
 +	tr = new MTriangle(v0,v1,pv);
 +	t3 = new MTri3(tr, 0.0);
 +	t.push_back(t3);
 +      }
 +      //Vb+= fabs(tr->getVolume());
 +      extended_cavity.push_back(t3);
 +      if (otherSide)
 +	extended_cavity.push_back(otherSide);
 +    }
 +    tc += Cpu()-T;
 +    //if (fabs(Vb-V) > 1.e-8 * (Vb+V))printf("%12.5E %12.5E\n",Vb,V);
 +
 +    for (unsigned int k=0;k<std::min(cavity.size(),shell.size());k++){
 +      cavity[k]->setDeleted(false);
 +      for (unsigned int l=0;l<3;l++){
 +    	cavity[k]->setNeigh(l,0);
 +      }
 +    }
 +    T = Cpu();
 +    connectTris(extended_cavity.begin(),extended_cavity.end(),conn);
 +    td += Cpu()-T;
 +  }
 +
 +  double t2 = Cpu();
 +  Msg::Debug("Delaunay 2D done for %d points : CPU = %g, %d global searches, AVG walk size %g , AVG cavity size %g",
 +	    v.size(), t2-t1,NB_GLOBAL_SEARCH,1.+AVG_ITER/v.size(),AVG_CAVSIZE/v.size());
 +  //  printf("%g %g %g %g --> %g(%g)\n",ta,tb,tc,td,t2-t1,ta+tb+tc+td);
 +
 +  if (edgesToRecover)recoverEdges (t,*edgesToRecover);
 +
 +  //  FILE *f = fopen ("tri.pos","w");
 +  //  fprintf(f,"View \"\"{\n");
 +  for (size_t i = 0;i<t.size();i++){
 +    if (t[i]->isDeleted() || (removeBox && triOnBox (t[i]->tri(),box))) delete t[i]->tri();
 +    else {
 +      result.push_back(t[i]->tri());
 +      //      t[i]->tri()->writePOS (f, false,false,true,false,false,false);
 +    }
 +    delete t[i];
 +  }
 +  
 +  if (removeBox){for (int i=0;i<4;i++)delete box[i];}
 +  else {for (int i=0;i<4;i++)v.push_back(box[i]);}
 +
 +  //  fprintf(f,"};\n");
 +  //  fclose(f);
 +}
 +
 +bool swapedge (MVertex *v1 ,MVertex *v2, MVertex *v3, MVertex *v4, MTri3* t1, int iLocalEdge){
 +  MTri3 *t2 = t1->getNeigh(iLocalEdge);
 +  if(!t2) return false;
 +
 +  MTriangle *t1b = new MTriangle(v2, v3, v4);
 +  MTriangle *t2b = new MTriangle(v4, v3, v1);
 +  double BEFORE = t1->tri()->getVolume()+t2->tri()->getVolume();
 +  double AFTER  = t1b->getVolume()+t2b->getVolume();
 +  //  printf("swapping %d %d %d %d %g %g\n",v1->getNum(),v2->getNum(),v3->getNum(),v4->getNum(),BEFORE,AFTER);
 +  if (fabs(BEFORE-AFTER)/BEFORE > 1.e-8){
 +    delete t1b;
 +    delete t2b;
 +    return false;
 +  }
 +  //  printf("volumes ok\n");
 +
 +  delete t1->tri();
 +  delete t2->tri();
 +  t1->setTri(t1b);
 +  t2->setTri(t2b);
 +
 +  std::set<MTri3*> cavity;
 +  cavity.insert(t1);
 +  cavity.insert(t2);
 +  for(int i = 0; i < 3; i++){
 +    if(t1->getNeigh(i))
 +      cavity.insert(t1->getNeigh(i));
 +    if(t2->getNeigh(i))
 +      cavity.insert(t2->getNeigh(i));
 +  }
 +  std::vector<edgeXface> conn;
 +  connectTris(cavity.begin(), cavity.end(), conn);
 +  return true;
 +}
 +
 +bool diffend (MVertex *v1, MVertex *v2, MVertex *p1, MVertex *p2){
 +  if (v1 == p1 || v2 == p1 || v1 == p2 || v2 == p2)return false;
 +  return true;
 +}
 +
 +/*
 +
 +*/
 +
 +static bool recoverEdgeBySwaps (std::vector<MTri3*> &t, MVertex *mv1, MVertex *mv2, std::vector<MEdge> &edges){
 +
 +  SPoint3 pv1 (mv1->x(),mv1->y(),0);
 +  SPoint3 pv2 (mv2->x(),mv2->y(),0);
 +  double xcc[2];
 +  for (unsigned int i=0;i<t.size();i++){
 +    for (unsigned int j=0;j<3;j++){
 +      MVertex *v1 = t[i]->tri()->getVertex((j+2)%3);
 +      MVertex *v2 = t[i]->tri()->getVertex(j);
 +      MVertex *v3 = t[i]->tri()->getVertex((j+1)%3);
 +      MVertex *o  = t[i]->otherSide(j);
 +      if (o){
 +	SPoint3 p1 (v1->x(),v1->y(),0);
 +	SPoint3 p2 (v2->x(),v2->y(),0);
 +	SPoint3 p3 (v3->x(),v3->y(),0);
 +	SPoint3 po (o->x(),o->y(),0);
 +	if (diffend(v1,v2,mv1,mv2)){
 +	  if (intersection_segments (p1, p2, pv1, pv2,xcc)){
 +	    //	    if (std::binary_search(edges.begin(),edges.end(),MEdge(v1,v2),Less_Edge)){
 +	    //	      Msg::Error("1D mesh self intersects");
 +	    //	    }
 +	    if (!intersection_segments(po, p3, pv1, pv2,xcc) || (v3 == mv1 || o == mv1 || v3 == mv2 || o == mv2)){
 +	      if(swapedge (v1,v2,v3,o,t[i],j))return true;
 +	    }
 +	  }
 +	}
 +      }
 +    }
 +  }
 +  return false;
 +}
 +
 +// recover the edges by edge swapping in the triangulation.
 +// edges are not supposed to
 +
 +void recoverEdges (std::vector<MTri3*> &t, std::vector<MEdge> &edges)
 +{
 +  Less_Edge le;
 +  std::sort(edges.begin(),edges.end(),le);
 +  std::set<MEdge,Less_Edge> setOfMeshEdges;
 +  for (size_t i = 0;i<t.size();i++){
 +    for (int j=0;j<3;j++){
 +      setOfMeshEdges.insert(t[i]->tri()->getEdge(j));
 +    }
 +  }
 +
 +  std::vector<MEdge> edgesToRecover;
 +  for (unsigned int i=0;i<edges.size();i++){
 +    if (setOfMeshEdges.find(edges[i])==setOfMeshEdges.end())
 +      edgesToRecover.push_back(edges[i]);
 +  }
 +
 +  Msg::Info("%d edges to recover among %d edges",edgesToRecover.size(),edges.size());
 +  //  int iter = 0;
 +  //  char name[256];
 +  //  sprintf(name,"iter%d.pos",iter++);
 +  //  _printTris (name, t.begin(),t.end(),0);
 +  for (unsigned int i=0;i<edgesToRecover.size();i++){
 +    MVertex *mstart = edgesToRecover[i].getVertex(0);
 +    MVertex *mend = edgesToRecover[i].getVertex(1);
 +    Msg::Info("recovering edge %d %d",mstart->getNum(),mend->getNum());
 +    //int iter;
 +    while(recoverEdgeBySwaps (t, mstart, mend,edges)) {
 +      //iter ++;
 +    }
 +  }
 +}
++=======
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc Mesh/meshGFaceOptimize.cpp
index 9263f66,a74eb44..469ceb0
--- a/Mesh/meshGFaceOptimize.cpp
+++ b/Mesh/meshGFaceOptimize.cpp
@@@ -3628,15 -3639,16 +3639,28 @@@ void recombineIntoQuads(GFace *gf
        if(haveParam){
          if (saveAll) gf->model()->writeMSH("smoothed.msh");
          int ITER=0;
++<<<<<<< HEAD
 +	//        int optistatus[6] = {0,0,0,0,0,0};
 +	std::set<MEdge,Less_Edge> prioritory;
 +	double exbad = -100;
 +        while(1){
 +	  //          int maxCavitySize = CTX::instance()->mesh.bunin;
 +	  //	  optistatus[0] = (ITERB == 1) ?splitFlatQuads(gf, .01, prioritory) : 0;
 +          //optistatus[1] =
 +	  removeTwoQuadsNodes(gf);
 +	  //optistatus[4] = _defectsRemovalBunin(gf,36);
++=======
+         //        int optistatus[6] = {0,0,0,0,0,0};
+         std::set<MEdge,Less_Edge> prioritory;
+         double exbad = -100;
+         while(1){
+ 	  //	  int maxCavitySize = CTX::instance()->mesh.bunin;
+ 	  //	  optistatus[0] = (ITERB == 1) ?splitFlatQuads(gf, .01, prioritory) : 0;
+           //optistatus[1] =
+ 	  removeTwoQuadsNodes(gf);
+ 	  //optistatus[4] =
+ 	  //	  _defectsRemovalBunin(gf,maxCavitySize);
++>>>>>>> upstream/2.9.3+dfsg1
  	  //optistatus[2] =
  	  removeDiamonds(gf) ;
  	  if(haveParam)laplaceSmoothing(gf,CTX::instance()->mesh.nbSmoothing,true);
diff --cc Mesh/meshGRegion.cpp
index 7bbe110,4506b33..7cf6eea
--- a/Mesh/meshGRegion.cpp
+++ b/Mesh/meshGRegion.cpp
@@@ -1562,10 -1560,9 +1560,16 @@@ int intersect_line_triangle(double X[3]
    b[1] = P[1] - Y[0];
    b[2] = P[2] - Z[0];
  
++<<<<<<< HEAD
 +  if(!sys3x3_with_tol(mat, b, res, &det))
 +    {
 +      return 0;
 +    }
++=======
+   if(!sys3x3_with_tol(mat, b, res, &det)){
+     return 0;
+   }
++>>>>>>> upstream/2.9.3+dfsg1
    //  printf("coucou %g %g %g\n",res[0],res[1],res[2]);
    if(res[0] >= eps_prec && res[0] <= 1.0 - eps_prec &&
       res[1] >= eps_prec && res[1] <= 1.0 - eps_prec &&
@@@ -1637,6 -1645,11 +1652,14 @@@ void meshNormalsPointOutOfTheRegion(GRe
                               t_b->getVertex(2)->y()};
              double Z_b[3] = {t_b->getVertex(0)->z(), t_b->getVertex(1)->z(),
                               t_b->getVertex(2)->z()};
++<<<<<<< HEAD
++=======
+             for(int i = 0; i < 3; i++){
+               X_b[i] /= scaling;
+               Y_b[i] /= scaling;
+               Z_b[i] /= scaling;
+             }
++>>>>>>> upstream/2.9.3+dfsg1
              int inters = intersect_line_triangle(X_b, Y_b, Z_b, P, N, 1.e-9);
              nb_intersect += inters;
            }
@@@ -1702,7 -1717,7 +1727,11 @@@ void meshGRegion::operator() (GRegion *
  
    // replace discreteFaces by their compounds
    {
++<<<<<<< HEAD
 +    std::set<GFace*> mySet;
++=======
+     std::set<GFace*, GEntityLessThan> mySet;
++>>>>>>> upstream/2.9.3+dfsg1
      std::list<GFace*>::iterator it = faces.begin();
      while(it != faces.end()){
        if((*it)->getCompound())
diff --cc Mesh/meshGRegionDelaunayInsertion.cpp
index 29d6c58,18b57cd..8e8c472
--- a/Mesh/meshGRegionDelaunayInsertion.cpp
+++ b/Mesh/meshGRegionDelaunayInsertion.cpp
@@@ -79,7 -79,7 +79,11 @@@ struct faceXtet
      unsorted[0] = v0;
      unsorted[1] = v1;
      unsorted[2] = v2;
++<<<<<<< HEAD
 +    
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
      v[0] = std::min(std::min(v0,v1),v2);
      v[2] = std::max(std::max(v0,v1),v2);
      v[1] = (v0 != v[0] && v0 != v[2]) ? v0 : (v1 != v[0] && v1 != v[2]) ? v1 : v2;
@@@ -130,7 -130,7 +134,11 @@@ void connectTets_vector2(std::vector<MT
    }
    if (!conn.size())return;
    std::sort(conn.begin(), conn.end());
++<<<<<<< HEAD
 +  
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    for (unsigned int i=0;i<conn.size()-1;i++){
      faceXtet &f1  = conn[i];
      faceXtet &f2  = conn[i+1];
@@@ -366,7 -366,7 +374,11 @@@ void recurFindCavity(std::vector<faceXt
        if (circ && (neigh->onWhat() == t->onWhat()))
          recurFindCavity(shell, cavity, v, neigh);
        else
++<<<<<<< HEAD
 +        shell.push_back(fxt);      
++=======
+         shell.push_back(fxt);
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
  }
@@@ -378,7 -378,7 +390,11 @@@
  // 			MTet4 *t,
  // 			std::stack<MTet4*> &_stack)
  // {
++<<<<<<< HEAD
 +  
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  //   _stack.push(t);
  //   while(!_stack.empty()){
  //     t = _stack.top();
@@@ -386,7 -386,7 +402,11 @@@
  //     if (!t->isDeleted()){
  //       t->setDeleted(true);
  //       cavity.push_back(t);
++<<<<<<< HEAD
 +      
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  //       for (int i = 0; i < 4; i++){
  // 	MTet4 *neigh = t->getNeigh(i) ;
  // 	faceXtet fxt (t, i);
@@@ -468,7 -470,7 +490,11 @@@ bool insertVertexB(std::list<faceXtet> 
  
      MTet4 *t4 = myFactory.Create(tr, vSizes, vSizesBGM);
      t4->setOnWhat(t->onWhat());
++<<<<<<< HEAD
 +    
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
      double d1 = sqrt((it->v[0]->x() - v->x()) * (it->v[0]->x() - v->x()) +
                       (it->v[0]->y() - v->y()) * (it->v[0]->y() - v->y()) +
                       (it->v[0]->z() - v->z()) * (it->v[0]->z() - v->z()));
@@@ -480,7 -482,7 +506,11 @@@
                       (it->v[2]->z() - v->z()) * (it->v[2]->z() - v->z()));
  
      if (d1 < LL * .05 || d2 < LL * .05 || d3 < LL * .05) onePointIsTooClose = true;
++<<<<<<< HEAD
 +    
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
      newTets[k++] = t4;
      // all new tets are pushed front in order to ba able to destroy
      // them if the cavity is not star shaped around the new vertex.
@@@ -917,9 -945,9 +973,13 @@@ void adaptMeshGRegion::operator () (GRe
  }
  
  //template <class CONTAINER, class DATA>
- void optimizeMesh(GRegion *gr, const qualityMeasure4Tet &qm)
+ void optimizeMesh(GRegion *gr, const qmTetrahedron::Measures &qm)
  {
++<<<<<<< HEAD
 +  
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    typedef std::list<MTet4 *> CONTAINER ;
    CONTAINER allTets;
    for(unsigned int i = 0; i < gr->tetrahedra.size(); i++){
@@@ -1715,7 -1743,7 +1775,11 @@@ static void initialCube (std::vector<MV
  
  int straddling_segment_intersects_triangle(SPoint3 &p1,SPoint3 &p2,
  					   SPoint3 &q1,SPoint3 &q2,
++<<<<<<< HEAD
 +					   SPoint3 &q3) 
++=======
+ 					   SPoint3 &q3)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    double s1 = robustPredicates::orient3d(p1, p2, q2, q3);
    double s2 = robustPredicates::orient3d(p1, p2, q3, q1);
@@@ -1748,7 -1776,7 +1812,11 @@@ static MTet4* search4Tet (MTet4 *t, MVe
  	SPoint3 q1(fxt.v[0]->x(),fxt.v[0]->y(),fxt.v[0]->z());
  	SPoint3 q2(fxt.v[1]->x(),fxt.v[1]->y(),fxt.v[1]->z());
  	SPoint3 q3(fxt.v[2]->x(),fxt.v[2]->y(),fxt.v[2]->z());
++<<<<<<< HEAD
 +	
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  
  	if ( straddling_segment_intersects_triangle (p1,p2,q1,q2,q3)){
  	  found = i;
@@@ -1821,7 -1849,7 +1889,11 @@@ void sanityCheck1(MTet4 *t
    double t1 = Cpu();
  
    /// double ta=0,tb=0,tc=0,td=0,T;
++<<<<<<< HEAD
 +  
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    for (size_t i=0;i<v.size();i++){
      MVertex *pv = v[i];
  
@@@ -1843,7 -1871,7 +1915,11 @@@
      for (unsigned int k=0;k<cavity.size();k++)V+=fabs(cavity[k]->tet()->getVolume());
  
      std::vector<MTet4*> extended_cavity;
++<<<<<<< HEAD
 +    double Vb = 0.0;    
++=======
+     double Vb = 0.0;
++>>>>>>> upstream/2.9.3+dfsg1
  
      //    T = Cpu();
      for (unsigned int count = 0; count < shell.size(); count++){
@@@ -1860,7 -1888,7 +1936,11 @@@
  	tr->setVertex(0,v0);
  	tr->setVertex(1,v1);
  	tr->setVertex(2,v2);
++<<<<<<< HEAD
 +	tr->setVertex(3,pv);	
++=======
+ 	tr->setVertex(3,pv);
++>>>>>>> upstream/2.9.3+dfsg1
        }
        else{
  	tr = new MTetrahedron(v0,v1,v2,pv);
@@@ -1873,9 -1901,9 +1953,15 @@@
  	extended_cavity.push_back(otherSide);
      }
      //    tc += Cpu()-T;
++<<<<<<< HEAD
 +    
 +    if (fabs(Vb-V) > 1.e-8 * (Vb+V))printf("%12.5E %12.5E\n",Vb,V);
 +    
++=======
+ 
+     if (fabs(Vb-V) > 1.e-8 * (Vb+V))printf("%12.5E %12.5E\n",Vb,V);
+ 
++>>>>>>> upstream/2.9.3+dfsg1
      // reuse memory --> reinitialize MTet4s
      for (unsigned int k=0;k<std::min(cavity.size(),shell.size());k++){
        cavity[k]->setDeleted(false);
@@@ -1892,7 -1920,7 +1978,11 @@@
    Msg::Info("Delaunay 3D done for %d points : CPU = %g, %d global searches, AVG walk size %g",v.size(), t2-t1,NB_GLOBAL_SEARCH,1.+(double)AVG_ITER/v.size());
    //  printf("%d tets allocated (to compare with 7 #V = %d)\n",t.size(),7*v.size());
    //  printf("%g %g %g %g --> %g(%g)\n",ta,tb,tc,td,t2-t1,ta+tb+tc+td);
++<<<<<<< HEAD
 +  
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    //  FILE *f = fopen ("tet.pos","w");
    //  fprintf(f,"View \"\"{\n");
    for (size_t i = 0;i<t.size();i++){
@@@ -1903,7 -1931,7 +1993,11 @@@
      }
      delete t[i];
    }
++<<<<<<< HEAD
 +  
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    if (removeBox)for (int i=0;i<8;i++)delete box[i];
    else for (int i=0;i<8;i++)v.push_back(box[i]);
  
diff --cc Mesh/meshRefine.cpp
index 48c13fe,5a517bf..b3d62e4
--- a/Mesh/meshRefine.cpp
+++ b/Mesh/meshRefine.cpp
@@@ -246,6 -253,7 +253,10 @@@ static void Subdivide(GRegion *gr, boo
      delete h;
    }
  
++<<<<<<< HEAD
++=======
+   // Split tets into other hexes.
++>>>>>>> upstream/2.9.3+dfsg1
    if(splitIntoHexas){
      for(unsigned int i = 0; i < gr->tetrahedra.size(); i++){
        MTetrahedron *t = gr->tetrahedra[i];
diff --cc Mesh/surfaceFiller.cpp
index a6d8d81,e205176..83ba9f9
--- a/Mesh/surfaceFiller.cpp
+++ b/Mesh/surfaceFiller.cpp
@@@ -27,11 -26,13 +26,21 @@@
  #include "BackgroundMesh.h"
  #include "intersectCurveSurface.h"
  
++<<<<<<< HEAD
 +using namespace std;
 +
 +static const double FACTOR = .71;
 +static const int NUMDIR = 3;
 +static const double DIRS [NUMDIR] = {0.0, M_PI/20.,-M_PI/20.};
++=======
+ #include "pointInsertionRTreeTools.h"
+ 
+ using namespace std;
+ 
+ //static const double FACTOR = .71;
+ //static const int NUMDIR = 3;
+ //static const double DIRS [NUMDIR] = {0.0, M_PI/20.,-M_PI/20.};
++>>>>>>> upstream/2.9.3+dfsg1
  //PE MODIF
  //static const int NUMDIR = 1;
  //static const double DIRS [NUMDIR] = {0.0};
@@@ -45,154 -46,153 +54,269 @@@
  /// in a r-tree structure for generating points with the
  /// right spacing in the tangent plane
  
++<<<<<<< HEAD
 +#if defined(HAVE_RTREE)
 +
 +struct surfacePointWithExclusionRegion {
 +  MVertex *_v;
 +  SPoint2 _center;
 +  SPoint2 _p[4][NUMDIR];
 +  SPoint2 _q[4];
 +  SMetric3 _meshMetric;
 +  double _distanceSummed;
 +  /*
 +         + p3
 +    p4   |
 +    +----c-----+ p2
 +         |
 +         + p1
 +
 +*/
 +
 +  surfacePointWithExclusionRegion (MVertex *v, SPoint2 p[4][NUMDIR], SPoint2 &_mp, SMetric3 & meshMetric, surfacePointWithExclusionRegion *father = 0){
 +    _v = v;
 +    _meshMetric = meshMetric;
 +    _center = _mp;
 +    for (int i=0;i<4;i++)_q[i] = _center + (p[i][0]+p[(i+1)%4][0]-_center*2)*FACTOR;
 +    for (int i=0;i<4;i++)for (int j=0;j<NUMDIR;j++)_p[i][j] = p[i][j];
 +
 +    if (!father){
 +      fullMatrix<double> V(3,3);
 +      fullVector<double> S(3);
 +      meshMetric.eig(V,S);
 +      double l = std::max(std::max(S(0),S(1)),S(2));
 +      _distanceSummed = sqrt(1/(l*l));
 +    }
 +    else {
 +      _distanceSummed = father->_distanceSummed + distance (father->_v,_v);
 +    }
 +  }
 +  bool inExclusionZone (const SPoint2 &p){
 +    double mat[2][2];
 +    double b[2] , uv[2];
 +    mat[0][0]= _q[1].x()-_q[0].x();
 +    mat[0][1]= _q[2].x()-_q[0].x();
 +    mat[1][0]= _q[1].y()-_q[0].y();
 +    mat[1][1]= _q[2].y()-_q[0].y();
 +    b[0] = p.x() - _q[0].x();
 +    b[1] = p.y() - _q[0].y();
 +    sys2x2(mat, b, uv);
 +    //    printf("inversion 1 : %g %g \n",uv[0],uv[1]);
 +    if (uv[0] >= 0 && uv[1] >= 0 && 1.-uv[0] - uv[1] >= 0)return true;
 +    mat[0][0]= _q[3].x()-_q[2].x();
 +    mat[0][1]= _q[0].x()-_q[2].x();
 +    mat[1][0]= _q[3].y()-_q[2].y();
 +    mat[1][1]= _q[0].y()-_q[2].y();
 +    b[0] = p.x() - _q[2].x();
 +    b[1] = p.y() - _q[2].y();
 +    sys2x2(mat, b, uv);
 +    //    printf("inversion 2 : %g %g \n",uv[0],uv[1]);
 +    if (uv[0] >= 0 && uv[1] >= 0 && 1.-uv[0] - uv[1] >= 0)return true;
 +    return false;
 +  }
 +  void minmax  (double _min[2], double _max[2]) const{
 +    _min[0] = std::min(std::min(std::min(_q[0].x(),_q[1].x()),_q[2].x()),_q[3].x());
 +    _min[1] = std::min(std::min(std::min(_q[0].y(),_q[1].y()),_q[2].y()),_q[3].y());
 +    _max[0] = std::max(std::max(std::max(_q[0].x(),_q[1].x()),_q[2].x()),_q[3].x());
 +    _max[1] = std::max(std::max(std::max(_q[0].y(),_q[1].y()),_q[2].y()),_q[3].y());
 +  }
 +  void print (FILE *f, int i){
 +    fprintf(f,"SP(%g,%g,%g){%d};\n",_center.x(),_center.y(),0.0,i);
 +    fprintf(f,"SQ(%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g){%d,%d,%d,%d};\n",
 +	    _q[0].x(),_q[0].y(),0.0,
 +	    _q[1].x(),_q[1].y(),0.0,
 +	    _q[2].x(),_q[2].y(),0.0,
 +	    _q[3].x(),_q[3].y(),0.0,i,i,i,i);
 +
 +  }
 +};
 +
 +struct my_wrapper {
 +  bool _tooclose;
 +  SPoint2 _p;
 +  my_wrapper (SPoint2 sp) : _tooclose (false), _p(sp) {}
 +};
 +
 +struct smoothness_point_pair{
 +  double rank;
 +  surfacePointWithExclusionRegion* ptr;
 +};
 +
 +class compareSurfacePointWithExclusionRegionPtr_Smoothness
 +{
 +  public:
 +    inline bool operator () (const smoothness_point_pair &a, const smoothness_point_pair &b)  const
 +    {
 +      if (a.rank == b.rank){
 +        if(a.ptr->_distanceSummed > b.ptr->_distanceSummed) return false;
 +        if(a.ptr->_distanceSummed < b.ptr->_distanceSummed) return true;
 +        return a.ptr<b.ptr;
 +      }
 +      // else
 +      return (a.rank < b.rank);
 +    }
 +};
 +
 +
 +class compareSurfacePointWithExclusionRegionPtr
 +{
 + public:
 +  inline bool operator () (const surfacePointWithExclusionRegion *a, const surfacePointWithExclusionRegion *b)  const
 +  {
 +    if(a->_distanceSummed > b->_distanceSummed) return false;
 +    if(a->_distanceSummed < b->_distanceSummed) return true;
 +    return a<b;
 +  }
 +};
- 
- 
- 
- 
- bool rtree_callback(surfacePointWithExclusionRegion *neighbour,void* point){
-   my_wrapper *w = static_cast<my_wrapper*>(point);
- 
-   if (neighbour->inExclusionZone(w->_p)){
-     w->_tooclose = true;
-     return false;
-   }
- 
-   return true;
- }
- 
- bool inExclusionZone (SPoint2 &p,
- 		      RTree<surfacePointWithExclusionRegion*,double,2,double> &rtree,
- 		      std::vector<surfacePointWithExclusionRegion*> & all ){
-   // should assert that the point is inside the domain
-   if (!backgroundMesh::current()->inDomain(p.x(),p.y(),0)) return true;
- 
-   my_wrapper w (p);
-   double _min[2] = {p.x()-1.e-1, p.y()-1.e-1},_max[2] = {p.x()+1.e-1,p.y()+1.e-1};
-   rtree.Search(_min,_max,rtree_callback,&w);
- 
-   return w._tooclose;
- 
-   for (unsigned int i=0;i<all.size();++i){
-     if (all[i]->inExclusionZone(p)){
-       //      printf("%g %g is in exclusion zone of %g %g\n",p.x(),p.y(),all[i]._center.x(),all[i]._center.y());
-       return true;
-     }
-   }
-   return false;
- }
++=======
++>>>>>>> upstream/2.9.3+dfsg1
+ 
+ //struct surfacePointWithExclusionRegion {
+ //  MVertex *_v;
+ //  SPoint2 _center;
+ //  SPoint2 _p[4][NUMDIR];
+ //  SPoint2 _q[4];
+ //  SMetric3 _meshMetric;
+ //  double _distanceSummed;
+ //  /*
+ //         + p3
+ //    p4   |
+ //    +----c-----+ p2
+ //         |
+ //         + p1
+ //
+ //*/
+ //
+ //  surfacePointWithExclusionRegion (MVertex *v, SPoint2 p[4][NUMDIR], SPoint2 &_mp, SMetric3 & meshMetric, surfacePointWithExclusionRegion *father = 0){
+ //    _v = v;
+ //    _meshMetric = meshMetric;
+ //    _center = _mp;
+ //    for (int i=0;i<4;i++)_q[i] = _center + (p[i][0]+p[(i+1)%4][0]-_center*2)*FACTOR;
+ //    for (int i=0;i<4;i++)for (int j=0;j<NUMDIR;j++)_p[i][j] = p[i][j];
+ //
+ //    if (!father){
+ //      fullMatrix<double> V(3,3);
+ //      fullVector<double> S(3);
+ //      meshMetric.eig(V,S);
+ //      double l = std::max(std::max(S(0),S(1)),S(2));
+ //      _distanceSummed = sqrt(1/(l*l));
+ //    }
+ //    else {
+ //      _distanceSummed = father->_distanceSummed + distance (father->_v,_v);
+ //    }
+ //  }
+ //  bool inExclusionZone (const SPoint2 &p){
+ //    double mat[2][2];
+ //    double b[2] , uv[2];
+ //    mat[0][0]= _q[1].x()-_q[0].x();
+ //    mat[0][1]= _q[2].x()-_q[0].x();
+ //    mat[1][0]= _q[1].y()-_q[0].y();
+ //    mat[1][1]= _q[2].y()-_q[0].y();
+ //    b[0] = p.x() - _q[0].x();
+ //    b[1] = p.y() - _q[0].y();
+ //    sys2x2(mat, b, uv);
+ //    //    printf("inversion 1 : %g %g \n",uv[0],uv[1]);
+ //    if (uv[0] >= 0 && uv[1] >= 0 && 1.-uv[0] - uv[1] >= 0)return true;
+ //    mat[0][0]= _q[3].x()-_q[2].x();
+ //    mat[0][1]= _q[0].x()-_q[2].x();
+ //    mat[1][0]= _q[3].y()-_q[2].y();
+ //    mat[1][1]= _q[0].y()-_q[2].y();
+ //    b[0] = p.x() - _q[2].x();
+ //    b[1] = p.y() - _q[2].y();
+ //    sys2x2(mat, b, uv);
+ //    //    printf("inversion 2 : %g %g \n",uv[0],uv[1]);
+ //    if (uv[0] >= 0 && uv[1] >= 0 && 1.-uv[0] - uv[1] >= 0)return true;
+ //    return false;
+ //  }
+ //  void minmax  (double _min[2], double _max[2]) const{
+ //    _min[0] = std::min(std::min(std::min(_q[0].x(),_q[1].x()),_q[2].x()),_q[3].x());
+ //    _min[1] = std::min(std::min(std::min(_q[0].y(),_q[1].y()),_q[2].y()),_q[3].y());
+ //    _max[0] = std::max(std::max(std::max(_q[0].x(),_q[1].x()),_q[2].x()),_q[3].x());
+ //    _max[1] = std::max(std::max(std::max(_q[0].y(),_q[1].y()),_q[2].y()),_q[3].y());
+ //  }
+ //  void print (FILE *f, int i){
+ //    fprintf(f,"SP(%g,%g,%g){%d};\n",_center.x(),_center.y(),0.0,i);
+ //    fprintf(f,"SQ(%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g){%d,%d,%d,%d};\n",
+ //	    _q[0].x(),_q[0].y(),0.0,
+ //	    _q[1].x(),_q[1].y(),0.0,
+ //	    _q[2].x(),_q[2].y(),0.0,
+ //	    _q[3].x(),_q[3].y(),0.0,i,i,i,i);
+ //
+ //  }
+ //};
+ //
+ //struct my_wrapper {
+ //  bool _tooclose;
+ //  SPoint2 _p;
+ //  my_wrapper (SPoint2 sp) : _tooclose (false), _p(sp) {}
+ //};
+ //
+ //struct smoothness_point_pair{
+ //  double rank;
+ //  surfacePointWithExclusionRegion* ptr;
+ //};
+ //
+ //class compareSurfacePointWithExclusionRegionPtr_Smoothness
+ //{
+ //  public:
+ //    inline bool operator () (const smoothness_point_pair &a, const smoothness_point_pair &b)  const
+ //    {
+ //      if (a.rank == b.rank){
+ //        if(a.ptr->_distanceSummed > b.ptr->_distanceSummed) return false;
+ //        if(a.ptr->_distanceSummed < b.ptr->_distanceSummed) return true;
+ //        return a.ptr<b.ptr;
+ //      }
+ //      // else
+ //      return (a.rank < b.rank);
+ //    }
+ //};
+ //
+ //
+ //class compareSurfacePointWithExclusionRegionPtr
+ //{
+ // public:
+ //  inline bool operator () (const surfacePointWithExclusionRegion *a, const surfacePointWithExclusionRegion *b)  const
+ //  {
+ //    if(a->_distanceSummed > b->_distanceSummed) return false;
+ //    if(a->_distanceSummed < b->_distanceSummed) return true;
+ //    return a<b;
+ //  }
+ //};
+ //
+ //
+ //
+ //
+ //bool rtree_callback(surfacePointWithExclusionRegion *neighbour,void* point){
+ //  my_wrapper *w = static_cast<my_wrapper*>(point);
+ //
+ //  if (neighbour->inExclusionZone(w->_p)){
+ //    w->_tooclose = true;
+ //    return false;
+ //  }
+ //
+ //  return true;
+ //}
+ //
+ //bool inExclusionZone (SPoint2 &p,
+ //		      RTree<surfacePointWithExclusionRegion*,double,2,double> &rtree,
+ //		      std::vector<surfacePointWithExclusionRegion*> & all ){
+ //  // should assert that the point is inside the domain
+ //  if (!backgroundMesh::current()->inDomain(p.x(),p.y(),0)) return true;
+ //
+ //  my_wrapper w (p);
+ //  double _min[2] = {p.x()-1.e-1, p.y()-1.e-1},_max[2] = {p.x()+1.e-1,p.y()+1.e-1};
+ //  rtree.Search(_min,_max,rtree_callback,&w);
+ //
+ //  return w._tooclose;
+ //
+ //  for (unsigned int i=0;i<all.size();++i){
+ //    if (all[i]->inExclusionZone(p)){
+ //      //      printf("%g %g is in exclusion zone of %g %g\n",p.x(),p.y(),all[i]._center.x(),all[i]._center.y());
+ //      return true;
+ //    }
+ //  }
+ //  return false;
+ //}
  
  
  
@@@ -418,7 -418,6 +542,10 @@@ bool compute4neighbors (GFace *gf,   /
    return true;
  }
  
++<<<<<<< HEAD
 +// ---------------------------------------------------------------------------------------------
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  
  // recover element around vertex v and interpolate smoothness on this element...
  double get_smoothness(MVertex *v, GFace *gf, const map<MVertex*,double> &vertices2smoothness){
@@@ -470,7 -469,6 +597,10 @@@
    return res;
  }
  
++<<<<<<< HEAD
 +// ---------------------------------------------------------------------------------------------
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  
  void print_nodal_info_int(string filename, map<MVertex*, int> &mapp){
    ofstream out(filename.c_str());
@@@ -485,7 -483,6 +615,10 @@@
    out.close();
  }
  
++<<<<<<< HEAD
 +// ---------------------------------------------------------------------------------------------
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  
  void print_nodal_info_double(string filename, map<MVertex*, double> &mapp){
    ofstream out(filename.c_str());
@@@ -500,7 -497,6 +633,10 @@@
    out.close();
  }
  
++<<<<<<< HEAD
 +// ---------------------------------------------------------------------------------------------
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  
  void export_point(surfacePointWithExclusionRegion *sp, int DIR, FILE *crossf, GFace *gf){
    // get the unit normal at that point
@@@ -550,7 -546,6 +686,10 @@@
    fprintf(crossf,"VP(%g,%g,%g) {%g,%g,%g};\n",sp->_v->x(),sp->_v->y(),sp->_v->z(),-t2.x()*size_2,-t2.y()*size_2,-t2.z()*size_2);
  }
  
++<<<<<<< HEAD
 +// ---------------------------------------------------------------------------------------------
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  
  bool get_local_sizes_and_directions(const MVertex *v_center, const SPoint2 &midpoint, const int DIR, GFace* gf, double (&covar1)[2], double (&covar2)[2], double &size_param_1, double &size_param_2, double &L, SVector3 &t1, SVector3 &t2, SVector3 &n, FILE *crossf=NULL){
  //bool get_RK_stuff(const MVertex *v_center, const SPoint2 &midpoint, const int DIR, GFace* gf, double (&covar1)[2], double (&covar2)[2], double &size_param_1, double &size_param_2, double &L, SVector3 &t1, SVector3 &t2, SVector3 &n, FILE *crossf, const SVector3 &previous_t1, const SVector3 &previous_t2, bool use_previous_basis=false, bool export_cross=true){
@@@ -687,108 -682,250 +826,350 @@@
    return true;
  }
  
++<<<<<<< HEAD
 +#endif
 +
 +// ---------------------------------------------------------------------------------------------
++=======
+ 
+ 
+ // using fifo based on smoothness criteria
+ void packingOfParallelogramsSmoothness(GFace* gf,  std::vector<MVertex*> &packed, std::vector<SMetric3> &metrics){
+   cout << endl << "------------------------------------------" << endl << "   PACKINGOFPARALLELOGRAMS: NEW ALGO BASED ON SMOOTHNESS" << endl << "------------------------------------------" << endl;
+   const bool goNonLinear = true;
+ 
+   const bool debug = false;
+ 
+   // build vertex -> neighbors table
+   multimap<MVertex*,MVertex*> vertex2vertex;
+   for (std::vector<MElement*>::iterator it = backgroundMesh::current()->begin_triangles();it!=backgroundMesh::current()->end_triangles();it++){
+     MElement *e = *it;
+     for (int i=0;i<e->getNumVertices();i++){
+       MVertex *current = e->getVertex(i);
+       for (int j=0;j<e->getNumVertices();j++){
+         if (i==j) continue;
+         MVertex *neighbor = e->getVertex(j);
+         vertex2vertex.insert(make_pair(current,neighbor));
+       }
+     }
+   }
+ 
+   // build table vertex->smoothness
+   map<MVertex*,double> vertices2smoothness;
+   map<MVertex*, double> smoothness_essai;
+   for (std::vector<MVertex*>::iterator it = backgroundMesh::current()->begin_vertices();it!=backgroundMesh::current()->end_vertices();it++){
+     MVertex *v = *it;
+ 
+     SPoint2 param_point(v->x(),v->y());GPoint gpt = gf->point(param_point); MVertex v_real(gpt.x(),gpt.y(),gpt.z());
+     SVector3 t1,t2,n;double covar1[2],covar2[2],L,size_param_1,size_param_2;
+     get_local_sizes_and_directions(&v_real, param_point, 0, gf, covar1, covar2, size_param_1, size_param_2, L, t1, t2, n);
+ 
+     // compare to all neighbors...
+     pair<multimap<MVertex*,MVertex*>::iterator, multimap<MVertex*,MVertex*>::iterator> range = vertex2vertex.equal_range(v);
+     SVector3 t1_nb,t2_nb,n_nb;double covar1_nb[2],covar2_nb[2],L_nb,size_param_1_nb,size_param_2_nb;
+     double maxprod,angle=0.;
+     int N=0;
+     for (multimap<MVertex*,MVertex*>::iterator itneighbor = range.first;itneighbor!=range.second;itneighbor++){
+       N++;
+       maxprod=0.;
+       MVertex *v_nb = itneighbor->second;
+       SPoint2 param_point_nb(v_nb->x(),v_nb->y());GPoint gpt_nb = gf->point(param_point_nb); MVertex v_real_nb(gpt_nb.x(),gpt_nb.y(),gpt_nb.z());
+       get_local_sizes_and_directions(&v_real_nb, param_point_nb, 0, gf, covar1_nb, covar2_nb, size_param_1_nb, size_param_2_nb, L_nb, t1_nb, t2_nb, n_nb);
+       // angle comparison...
+       maxprod = std::max(maxprod, fabs(t1[0]*t1_nb[0] + t1[1]*t1_nb[1]));
+       maxprod = std::max(maxprod, fabs(t1[0]*t2_nb[0] + t1[1]*t2_nb[1]));
+       angle += fabs(acos(max(min(maxprod,1.),-1.)));
+     }
+     angle /= N;
+     vertices2smoothness[v] = angle;
+   }
+ 
+ //  if (debug){
+ //    stringstream ss;
+ //    ss << "backgroundmesh_smoothness_" << gf->tag() << ".pos";
+ //    backgroundMesh::current()->print(ss.str().c_str(),gf, vertices2smoothness);
+ //  }
+ 
+ 
+   // --------------- export de smoothness comme elements.... -----------------------
+   if (debug){
+     stringstream ss;
+     ss << "backgroundmesh_element_smoothness_" << gf->tag() << ".pos";
+     ofstream out(ss.str().c_str());
+     out << "View \"directions\" {" << endl;
+     for (std::vector<MElement*>::iterator it = backgroundMesh::current()->begin_triangles();it!=backgroundMesh::current()->end_triangles();it++){
+       MElement *e = *it;
+       vector<MVertex *> nodes;
+       vector<double> smoothtemp;
+       for (int i=0;i<3;i++){
+         MVertex *v = e->getVertex(i);
+         nodes.push_back(v);
+         smoothtemp.push_back(vertices2smoothness[v]);
+       }
+       out << "ST(";
+       for (int i=0;i<3;i++){
+         GPoint pp = gf->point(SPoint2(nodes[i]->x(),nodes[i]->y()));
+         out << pp.x() << "," << pp.y() << "," << pp.z();
+         if (i!=2) out << ",";
+       }
+       out << "){";
+       for (int i=0;i<3;i++){
+         out << (1.-(smoothtemp[i]/M_PI*4.));
+         if (i!=2) out << ",";
+       }
+       out << "};" << endl;
+ 
+     }
+     out << "};" << endl;
+     out.close();
+   }
+   //                   --------------- END ----------------
+ 
+ 
+   // for debug check...
+   int priority_counter=0;
+   map<MVertex*,int> vert_priority;
+ 
+   // get all the boundary vertices
+   std::set<MVertex*> bnd_vertices;
+   for(unsigned int i=0;i<gf->getNumMeshElements();i++){
+     MElement* element = gf->getMeshElement(i);
+     for(int j=0;j<element->getNumVertices();j++){
+       MVertex *vertex = element->getVertex(j);
+       if (vertex->onWhat()->dim() < 2)bnd_vertices.insert(vertex);
+     }
+   }
+ 
+   //  --------- put boundary vertices in a fifo queue ---------------
+   std::set<smoothness_point_pair, compareSurfacePointWithExclusionRegionPtr_Smoothness> fifo;
+   std::vector<surfacePointWithExclusionRegion*> vertices;
+   // put the RTREE
+   RTree<surfacePointWithExclusionRegion*,double,2,double> rtree;
+   SMetric3 metricField(1.0);
+   SPoint2 newp[4][NUMDIR];
+   std::set<MVertex*>::iterator it =  bnd_vertices.begin() ;
+ 
+   char NAME[345]; sprintf(NAME,"crossReal%d.pos",gf->tag());
+   FILE *crossf = NULL;
+   if (debug){
+     crossf = Fopen (NAME,"w");
+   }
+   if (crossf) fprintf(crossf,"View \"\"{\n");
+   for (; it !=  bnd_vertices.end() ; ++it){
+     SPoint2 midpoint;
+     //compute4neighbors_RK2 (gf, *it, midpoint, goNonLinear, newp, metricField,crossf);
+     compute4neighbors(gf, *it, midpoint, goNonLinear, newp, metricField,crossf);
+     surfacePointWithExclusionRegion *sp =
+       new surfacePointWithExclusionRegion (*it, newp, midpoint,metricField);
+     smoothness_point_pair mp;mp.ptr = sp;mp.rank=get_smoothness(*it,gf,vertices2smoothness);
+     fifo.insert(mp);
+ 
+     if (debug){
+       smoothness_essai[*it] = mp.rank;
+     }
+ 
+     vertices.push_back(sp);
+     double _min[2],_max[2];
+     sp->minmax(_min,_max);
+     rtree.Insert(_min,_max,sp);
+     if (crossf) export_point(sp, 0, crossf, gf);
+   }
+ 
+   // ---------- main loop -----------------
+   while(!fifo.empty()){
+     if (debug) std::cout << " -------- fifo.size() = " << fifo.size() << std::endl;
+ 
+     surfacePointWithExclusionRegion * parent = (*fifo.begin()).ptr;
+     fifo.erase(fifo.begin());
+     int count_nbaddedpt = 0;
+     for (int dir=0;dir<NUMDIR;dir++){
+       for (int i=0;i<4;i++){
+ 
+         if (!inExclusionZone (parent->_p[i][dir], rtree, vertices) ){
+           GPoint gp = gf->point(parent->_p[i][dir]);
+           MFaceVertex *v = new MFaceVertex(gp.x(),gp.y(),gp.z(),gf,gp.u(),gp.v());
+           SPoint2 midpoint;
+           //compute4neighbors_RK2 (gf, v, midpoint, goNonLinear, newp, metricField,crossf);
+           compute4neighbors(gf, v, midpoint, goNonLinear, newp, metricField,crossf);
+           surfacePointWithExclusionRegion *sp =
+             new surfacePointWithExclusionRegion (v, newp, midpoint, metricField, parent);
+           smoothness_point_pair mp;mp.ptr = sp;mp.rank=get_smoothness(v,gf,vertices2smoothness);
+ 
+           if (debug){
+             smoothness_essai[v] = mp.rank;
+             vert_priority[v] = priority_counter++;
+           }
+           fifo.insert(mp);
+           vertices.push_back(sp);
+           double _min[2],_max[2];
+           sp->minmax(_min,_max);
+           rtree.Insert(_min,_max,sp);
+           if (crossf) export_point(sp, dir, crossf, gf);
+ 
+           if (debug){
+             std::cout << "  adding node (" << sp->_v->x() << "," << sp->_v->y() << "," << sp->_v->z() << ")" << std::endl;
+             std::cout << "    ----------------------------- sub --- fifo.size() = " << fifo.size() << std::endl;
+           }
+           count_nbaddedpt++;
+         }
+       }
+     }
+     if (debug) std::cout << "////////// nbre of added point: " << count_nbaddedpt << std::endl;
+   }
+   if (crossf){
+     fprintf(crossf,"};\n");
+     fclose (crossf);
+   }
+ 
+ 
+   if (debug){
+     stringstream ss;
+     ss << "priority_" << gf->tag() << ".pos";
+     print_nodal_info_int(ss.str().c_str(),vert_priority);
+     ss.clear();
+     ss << "smoothness_test_" << gf->tag() << ".pos";
+     print_nodal_info_double(ss.str().c_str(),smoothness_essai);
+   }
+ 
+ 
+   // add the vertices as additional vertices in the
+   // surface mesh
+   char ccc[256]; sprintf(ccc,"points%d.pos",gf->tag());
+   FILE *f = Fopen(ccc,"w");
+   if(f) fprintf(f, "View \"\"{\n");
+   for (unsigned int i=0;i<vertices.size();i++){
+     if(f) vertices[i]->print(f,i);
+     if(vertices[i]->_v->onWhat() == gf) {
+       packed.push_back(vertices[i]->_v);
+       metrics.push_back(vertices[i]->_meshMetric);
+       SPoint2 midpoint;
+       reparamMeshVertexOnFace(vertices[i]->_v, gf, midpoint);
+     }
+     delete  vertices[i];
+   }
+   if(f){
+     fprintf(f,"};");
+     fclose(f);
+   }
+ }
+ 
+ 
+ 
+ 
+ // fills a surface with points in order to build a nice
+ // quad mesh ------------
+ void packingOfParallelograms(GFace* gf,  std::vector<MVertex*> &packed, std::vector<SMetric3> &metrics){
+   //PE MODIF
+ //  packingOfParallelogramsSmoothness(gf,packed,metrics);
+ //  return;
+   // END PE MODIF
++>>>>>>> upstream/2.9.3+dfsg1
  
 +// using fifo based on smoothness criteria
 +void packingOfParallelogramsSmoothness(GFace* gf,  std::vector<MVertex*> &packed, std::vector<SMetric3> &metrics){
 +  cout << endl << "------------------------------------------" << endl << "   PACKINGOFPARALLELOGRAMS: NEW ALGO BASED ON SMOOTHNESS" << endl << "------------------------------------------" << endl;
 +#if defined(HAVE_RTREE)
    const bool goNonLinear = true;
  
 -  //  FILE *f = Fopen ("parallelograms.pos","w");
 +  const bool debug = false;
 +
 +  // build vertex -> neighbors table
 +  multimap<MVertex*,MVertex*> vertex2vertex;
 +  for (std::vector<MElement*>::iterator it = backgroundMesh::current()->begin_triangles();it!=backgroundMesh::current()->end_triangles();it++){
 +    MElement *e = *it;
 +    for (int i=0;i<e->getNumVertices();i++){
 +      MVertex *current = e->getVertex(i);
 +      for (int j=0;j<e->getNumVertices();j++){
 +        if (i==j) continue;
 +        MVertex *neighbor = e->getVertex(j);
 +        vertex2vertex.insert(make_pair(current,neighbor));
 +      }
 +    }
 +  }
 +
 +  // build table vertex->smoothness
 +  map<MVertex*,double> vertices2smoothness;
 +  map<MVertex*, double> smoothness_essai;
 +  for (std::vector<MVertex*>::iterator it = backgroundMesh::current()->begin_vertices();it!=backgroundMesh::current()->end_vertices();it++){
 +    MVertex *v = *it;
 +
 +    SPoint2 param_point(v->x(),v->y());GPoint gpt = gf->point(param_point); MVertex v_real(gpt.x(),gpt.y(),gpt.z());
 +    SVector3 t1,t2,n;double covar1[2],covar2[2],L,size_param_1,size_param_2;
 +    get_local_sizes_and_directions(&v_real, param_point, 0, gf, covar1, covar2, size_param_1, size_param_2, L, t1, t2, n);
 +
 +    // compare to all neighbors...
 +    pair<multimap<MVertex*,MVertex*>::iterator, multimap<MVertex*,MVertex*>::iterator> range = vertex2vertex.equal_range(v);
 +    SVector3 t1_nb,t2_nb,n_nb;double covar1_nb[2],covar2_nb[2],L_nb,size_param_1_nb,size_param_2_nb;
 +    double maxprod,angle=0.;
 +    int N=0;
 +    for (multimap<MVertex*,MVertex*>::iterator itneighbor = range.first;itneighbor!=range.second;itneighbor++){
 +      N++;
 +      maxprod=0.;
 +      MVertex *v_nb = itneighbor->second;
 +      SPoint2 param_point_nb(v_nb->x(),v_nb->y());GPoint gpt_nb = gf->point(param_point_nb); MVertex v_real_nb(gpt_nb.x(),gpt_nb.y(),gpt_nb.z());
 +      get_local_sizes_and_directions(&v_real_nb, param_point_nb, 0, gf, covar1_nb, covar2_nb, size_param_1_nb, size_param_2_nb, L_nb, t1_nb, t2_nb, n_nb);
 +      // angle comparison...
 +      maxprod = std::max(maxprod, fabs(t1[0]*t1_nb[0] + t1[1]*t1_nb[1]));
 +      maxprod = std::max(maxprod, fabs(t1[0]*t2_nb[0] + t1[1]*t2_nb[1]));
 +      angle += fabs(acos(max(min(maxprod,1.),-1.)));
 +    }
 +    angle /= N;
 +    vertices2smoothness[v] = angle;
 +  }
 +
 +//  if (debug){
 +//    stringstream ss;
 +//    ss << "backgroundmesh_smoothness_" << gf->tag() << ".pos";
 +//    backgroundMesh::current()->print(ss.str().c_str(),gf, vertices2smoothness);
 +//  }
 +
 +
 +  // --------------- export de smoothness comme elements.... -----------------------
 +  if (debug){
 +    stringstream ss;
 +    ss << "backgroundmesh_element_smoothness_" << gf->tag() << ".pos";
 +    ofstream out(ss.str().c_str());
 +    out << "View \"directions\" {" << endl;
 +    for (std::vector<MElement*>::iterator it = backgroundMesh::current()->begin_triangles();it!=backgroundMesh::current()->end_triangles();it++){
 +      MElement *e = *it;
 +      vector<MVertex *> nodes;
 +      vector<double> smoothtemp;
 +      for (int i=0;i<3;i++){
 +        MVertex *v = e->getVertex(i);
 +        nodes.push_back(v);
 +        smoothtemp.push_back(vertices2smoothness[v]);
 +      }
 +      out << "ST(";
 +      for (int i=0;i<3;i++){
 +        GPoint pp = gf->point(SPoint2(nodes[i]->x(),nodes[i]->y()));
 +        out << pp.x() << "," << pp.y() << "," << pp.z();
 +        if (i!=2) out << ",";
 +      }
 +      out << "){";
 +      for (int i=0;i<3;i++){
 +        out << (1.-(smoothtemp[i]/M_PI*4.));
 +        if (i!=2) out << ",";
 +      }
 +      out << "};" << endl;
 +
 +    }
 +    out << "};" << endl;
 +    out.close();
 +  }
 +  //                   --------------- END ----------------
 +
 +
 +  // for debug check...
 +  int priority_counter=0;
 +  map<MVertex*,int> vert_priority;
  
+ 
+   // test test test
+   stringstream ssa;
+   ssa << "oldbgm_angles_" << gf->tag() << ".pos";
+   backgroundMesh::current()->print(ssa.str(),gf,1);
+   // test test test
+ 
    // get all the boundary vertices
    std::set<MVertex*> bnd_vertices;
    for(unsigned int i=0;i<gf->getNumMeshElements();i++){
@@@ -799,145 -936,6 +1180,168 @@@
      }
    }
  
 +  //  --------- put boundary vertices in a fifo queue ---------------
 +  std::set<smoothness_point_pair, compareSurfacePointWithExclusionRegionPtr_Smoothness> fifo;
 +  std::vector<surfacePointWithExclusionRegion*> vertices;
 +  // put the RTREE
 +  RTree<surfacePointWithExclusionRegion*,double,2,double> rtree;
 +  SMetric3 metricField(1.0);
 +  SPoint2 newp[4][NUMDIR];
 +  std::set<MVertex*>::iterator it =  bnd_vertices.begin() ;
 +
 +  char NAME[345]; sprintf(NAME,"crossReal%d.pos",gf->tag());
++<<<<<<< HEAD
 +  FILE *crossf=NULL;
 +  if (debug){
 +    crossf = Fopen (NAME,"w");
 +  }
 +  if (crossf)fprintf(crossf,"View \"\"{\n");
++=======
++  FILE *crossf = Fopen (NAME,"w");
++  if (crossf) fprintf(crossf,"View \"\"{\n");
++>>>>>>> upstream/2.9.3+dfsg1
 +  for (; it !=  bnd_vertices.end() ; ++it){
 +    SPoint2 midpoint;
 +    //compute4neighbors_RK2 (gf, *it, midpoint, goNonLinear, newp, metricField,crossf);
 +    compute4neighbors(gf, *it, midpoint, goNonLinear, newp, metricField,crossf);
 +    surfacePointWithExclusionRegion *sp =
 +      new surfacePointWithExclusionRegion (*it, newp, midpoint,metricField);
 +    smoothness_point_pair mp;mp.ptr = sp;mp.rank=get_smoothness(*it,gf,vertices2smoothness);
 +    fifo.insert(mp);
 +
 +    if (debug){
 +      smoothness_essai[*it] = mp.rank;
 +    }
 +
 +    vertices.push_back(sp);
 +    double _min[2],_max[2];
 +    sp->minmax(_min,_max);
 +    rtree.Insert(_min,_max,sp);
 +    if (crossf) export_point(sp, 0, crossf, gf);
 +  }
 +
 +  // ---------- main loop -----------------
 +  while(!fifo.empty()){
 +    if (debug) std::cout << " -------- fifo.size() = " << fifo.size() << std::endl;
 +
 +    surfacePointWithExclusionRegion * parent = (*fifo.begin()).ptr;
 +    fifo.erase(fifo.begin());
 +    int count_nbaddedpt = 0;
 +    for (int dir=0;dir<NUMDIR;dir++){
 +      for (int i=0;i<4;i++){
++<<<<<<< HEAD
 +
 +        if (!inExclusionZone (parent->_p[i][dir], rtree, vertices) ){
 +          GPoint gp = gf->point(parent->_p[i][dir]);
 +          MFaceVertex *v = new MFaceVertex(gp.x(),gp.y(),gp.z(),gf,gp.u(),gp.v());
 +          SPoint2 midpoint;
 +          //compute4neighbors_RK2 (gf, v, midpoint, goNonLinear, newp, metricField,crossf);
 +          compute4neighbors(gf, v, midpoint, goNonLinear, newp, metricField,crossf);
 +          surfacePointWithExclusionRegion *sp =
 +            new surfacePointWithExclusionRegion (v, newp, midpoint, metricField, parent);
 +          smoothness_point_pair mp;mp.ptr = sp;mp.rank=get_smoothness(v,gf,vertices2smoothness);
 +
 +          if (debug){
 +            smoothness_essai[v] = mp.rank;
 +            vert_priority[v] = priority_counter++;
 +          }
 +          fifo.insert(mp);
++=======
++        //	printf("i = %d %12.5E %12.5E \n",i,parent._p[i][dir].x(),parent._p[i][dir].y());
++
++        //	if (!w._tooclose){
++        if (!inExclusionZone (parent->_p[i][dir], rtree, vertices) ){
++          countOK++;
++          GPoint gp = gf->point(parent->_p[i][dir]);
++          MFaceVertex *v = new MFaceVertex(gp.x(),gp.y(),gp.z(),gf,gp.u(),gp.v());
++          //	  	printf(" %g %g %g %g\n",parent._center.x(),parent._center.y(),gp.u(),gp.v());
++          SPoint2 midpoint;
++          compute4neighbors (gf, v, midpoint, goNonLinear, newp, metricField,crossf);
++          surfacePointWithExclusionRegion *sp =
++            new surfacePointWithExclusionRegion (v, newp, midpoint, metricField, parent);
++          //	  fifo.push(sp);
++          fifo.insert(sp);
++>>>>>>> upstream/2.9.3+dfsg1
 +          vertices.push_back(sp);
 +          double _min[2],_max[2];
 +          sp->minmax(_min,_max);
 +          rtree.Insert(_min,_max,sp);
++<<<<<<< HEAD
 +          if (crossf) export_point(sp, dir, crossf, gf);
 +
 +          if (debug){
 +            std::cout << "  adding node (" << sp->_v->x() << "," << sp->_v->y() << "," << sp->_v->z() << ")" << std::endl;
 +            std::cout << "    ----------------------------- sub --- fifo.size() = " << fifo.size() << std::endl;
 +          }
 +          count_nbaddedpt++;
 +        }
 +      }
 +    }
 +    if (debug) std::cout << "////////// nbre of added point: " << count_nbaddedpt << std::endl;
 +  }
 +  if (crossf){
 +    fprintf(crossf,"};\n");
 +    fclose (crossf);
 +  }
 +
 +
 +  if (debug){
 +    stringstream ss;
 +    ss << "priority_" << gf->tag() << ".pos";
 +    print_nodal_info_int(ss.str().c_str(),vert_priority);
 +    ss.clear();
 +    ss << "smoothness_test_" << gf->tag() << ".pos";
 +    print_nodal_info_double(ss.str().c_str(),smoothness_essai);
 +  }
 +
 +
 +  // add the vertices as additional vertices in the
 +  // surface mesh
 +  char ccc[256]; sprintf(ccc,"points%d.pos",gf->tag());
 +  FILE *f = Fopen(ccc,"w");
 +  fprintf(f,"View \"\"{\n");
 +  for (unsigned int i=0;i<vertices.size();i++){
 +    vertices[i]->print(f,i);
 +    if(vertices[i]->_v->onWhat() == gf) {
 +      packed.push_back(vertices[i]->_v);
 +      metrics.push_back(vertices[i]->_meshMetric);
 +      SPoint2 midpoint;
 +      reparamMeshVertexOnFace(vertices[i]->_v, gf, midpoint);
 +    }
 +    delete  vertices[i];
 +  }
 +  fprintf(f,"};");
 +  fclose(f);
 +#endif
 +}
 +
 +
 +// ---------------------------------------------------------------------------------------------
 +
 +
 +// fills a surface with points in order to build a nice
 +// quad mesh ------------
 +void packingOfParallelograms(GFace* gf,  std::vector<MVertex*> &packed, std::vector<SMetric3> &metrics){
 +  //PE MODIF
 +//  packingOfParallelogramsSmoothness(gf,packed,metrics);
 +//  return;
 +  // END PE MODIF
 +#if defined(HAVE_RTREE)
 +
 +  const bool goNonLinear = true;
 +
 +  //  FILE *f = Fopen ("parallelograms.pos","w");
 +
 +  // get all the boundary vertices
 +  std::set<MVertex*> bnd_vertices;
 +  for(unsigned int i=0;i<gf->getNumMeshElements();i++){
 +    MElement* element = gf->getMeshElement(i);
 +    for(int j=0;j<element->getNumVertices();j++){
 +      MVertex *vertex = element->getVertex(j);
 +      if (vertex->onWhat()->dim() < 2)bnd_vertices.insert(vertex);
 +    }
 +  }
 +
    // put boundary vertices in a fifo queue
    // std::queue<surfacePointWithExclusionRegion*> fifo;
    std::set<surfacePointWithExclusionRegion*,  compareSurfacePointWithExclusionRegionPtr> fifo;
@@@ -1013,26 -1011,28 +1417,69 @@@
      // surface mesh
      char ccc[256]; sprintf(ccc,"points%d.pos",gf->tag());
      FILE *f = Fopen(ccc,"w");
 +    fprintf(f,"View \"\"{\n");
 +    for (unsigned int i=0;i<vertices.size();i++){
 +      //    if(vertices[i]->_v->onWhat() != gf)
 +      vertices[i]->print(f,i);
 +      if(vertices[i]->_v->onWhat() == gf) {
 +        packed.push_back(vertices[i]->_v);
 +        metrics.push_back(vertices[i]->_meshMetric);
 +        SPoint2 midpoint;
 +        reparamMeshVertexOnFace(vertices[i]->_v, gf, midpoint);
 +        //      fprintf(f,"TP(%22.15E,%22.15E,%g){%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E};\n",vertices[i]->_v->x(),vertices[i]->_v->y(),vertices[i]->_v->z(),
 +        //	      vertices[i]->_meshMetric(0,0),vertices[i]->_meshMetric(0,1),vertices[i]->_meshMetric(0,2),
 +        //	      vertices[i]->_meshMetric(1,0),vertices[i]->_meshMetric(1,1),vertices[i]->_meshMetric(1,2),
 +        //	      vertices[i]->_meshMetric(2,0),vertices[i]->_meshMetric(2,1),vertices[i]->_meshMetric(2,2));
 +        //fprintf(f,"SP(%22.15E,%22.15E,%g){1};\n",midpoint.x(),midpoint.y(),0.0);
 +      }
 +      delete  vertices[i];
 +    }
 +    fprintf(f,"};");
 +    fclose(f);
 +    //  printf("packed.size = %d\n",packed.size());
 +    //  delete rtree;
 +#endif
 +}
++=======
++        }
++      }
++      if (countOK)break;
++      }
++      //    printf("%d\n",vertices.size());
++    }
++    if (crossf){
++      fprintf(crossf,"};\n");
++      fclose (crossf);
++    }
++    //  printf("done\n");
++
++    // add the vertices as additional vertices in the
++    // surface mesh
++    char ccc[256]; sprintf(ccc,"points%d.pos",gf->tag());
++    FILE *f = Fopen(ccc,"w");
+     if(f) fprintf(f,"View \"\"{\n");
+     for (unsigned int i=0;i<vertices.size();i++){
+       //    if(vertices[i]->_v->onWhat() != gf)
+       if(f) vertices[i]->print(f,i);
+       if(vertices[i]->_v->onWhat() == gf) {
+         packed.push_back(vertices[i]->_v);
+         metrics.push_back(vertices[i]->_meshMetric);
+         SPoint2 midpoint;
+         reparamMeshVertexOnFace(vertices[i]->_v, gf, midpoint);
+         //      fprintf(f,"TP(%22.15E,%22.15E,%g){%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E,%22.15E};\n",vertices[i]->_v->x(),vertices[i]->_v->y(),vertices[i]->_v->z(),
+         //	      vertices[i]->_meshMetric(0,0),vertices[i]->_meshMetric(0,1),vertices[i]->_meshMetric(0,2),
+         //	      vertices[i]->_meshMetric(1,0),vertices[i]->_meshMetric(1,1),vertices[i]->_meshMetric(1,2),
+         //	      vertices[i]->_meshMetric(2,0),vertices[i]->_meshMetric(2,1),vertices[i]->_meshMetric(2,2));
+         //fprintf(f,"SP(%22.15E,%22.15E,%g){1};\n",midpoint.x(),midpoint.y(),0.0);
+       }
+       delete  vertices[i];
+     }
+     if(f){
+       fprintf(f,"};");
+       fclose(f);
+     }
+     //  printf("packed.size = %d\n",packed.size());
+     //  delete rtree;
+ }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc Mesh/surfaceFiller.h
index 7c1c9c5,dabb870..9897b55
--- a/Mesh/surfaceFiller.h
+++ b/Mesh/surfaceFiller.h
@@@ -4,9 -4,18 +4,23 @@@
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
  //
  
- #include "STensor3.h"
+ #ifndef _SURFACEFILLER_H_
+ #define _SURFACEFILLER_H_
+ 
  #include <vector>
+ #include "STensor3.h"
+ 
  class GFace;
  class MVertex;
++<<<<<<< HEAD
 +void packingOfParallelogramsSmoothness(GFace* gf, std::vector<MVertex*> &packed, std::vector<SMetric3> &metrics );
 +void packingOfParallelograms(GFace* gf, std::vector<MVertex*> &packed, std::vector<SMetric3> &metrics );
++=======
+ 
+ void packingOfParallelogramsSmoothness(GFace* gf, std::vector<MVertex*> &packed,
+                                        std::vector<SMetric3> &metrics);
+ void packingOfParallelograms(GFace* gf, std::vector<MVertex*> &packed,
+                              std::vector<SMetric3> &metrics);
+ 
+ #endif
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc Numeric/BasisFactory.cpp
index d39b63f,a265c36..1a9c065
--- a/Numeric/BasisFactory.cpp
+++ b/Numeric/BasisFactory.cpp
@@@ -3,20 -3,22 +3,34 @@@
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
  
+ #include "BasisFactory.h"
  #include "GmshDefines.h"
++<<<<<<< HEAD
 +#include "GmshMessage.h"
 +#include "miniBasis.h"
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  #include "polynomialBasis.h"
  #include "pyramidalBasis.h"
- #include "pointsGenerators.h"
- #include "BasisFactory.h"
- #include "MElement.h"
+ #include "miniBasis.h"
+ #include "MetricBasis.h"
+ #include "CondNumBasis.h"
+ #include <map>
+ #include <cstddef>
  
  std::map<int, nodalBasis*> BasisFactory::fs;
++<<<<<<< HEAD
 +std::map<int, JacobianBasis*> BasisFactory::js;
 +std::map<int, MetricBasis*> BasisFactory::ms;
 +BasisFactory::Cont_bezierBasis BasisFactory::bs;
 +BasisFactory::Cont_gradBasis BasisFactory::gs;
++=======
+ std::map<int, MetricBasis*> BasisFactory::ms;
+ std::map<int, CondNumBasis*> BasisFactory::cs;
+ std::map<FuncSpaceData, JacobianBasis*> BasisFactory::js;
+ std::map<FuncSpaceData, bezierBasis*> BasisFactory::bs;
+ std::map<FuncSpaceData, GradientBasis*> BasisFactory::gs;
++>>>>>>> upstream/2.9.3+dfsg1
  
  const nodalBasis* BasisFactory::getNodalBasis(int tag)
  {
@@@ -28,9 -30,10 +42,16 @@@
    // Get the parent type to see which kind of basis
    // we want to create
    nodalBasis* F = NULL;
++<<<<<<< HEAD
 +  if (tag == MSH_TRI_MINI) {
 +    F = new miniBasis();
 +  }
++=======
+   if (tag == MSH_TRI_MINI)
+     F = new miniBasisTri();
+   else if (tag == MSH_TET_MINI)
+     F = new miniBasisTet();
++>>>>>>> upstream/2.9.3+dfsg1
    else {
      int parentType = ElementType::ParentTypeFromTag(tag);
      switch(parentType) {
@@@ -79,37 -83,44 +101,78 @@@ const JacobianBasis* BasisFactory::getJ
  }
  
  const MetricBasis* BasisFactory::getMetricBasis(int tag)
++<<<<<<< HEAD
 +{
 +  std::map<int, MetricBasis*>::const_iterator it = ms.find(tag);
 +  if (it != ms.end())
 +    return it->second;
 +
 +  MetricBasis* M = new MetricBasis(tag);
 +  ms.insert(std::make_pair(tag, M));
 +  return M;
 +}
 +
 +const GradientBasis* BasisFactory::getGradientBasis(int tag, int order)
 +{
 +  std::pair<int, int> key(tag, order);
 +  Cont_gradBasis::const_iterator it = gs.find(key);
 +  if (it != gs.end())
 +    return it->second;
 +
 +  GradientBasis* G = new GradientBasis(tag, order);
 +  gs.insert(std::make_pair(key, G));
 +  return G;
 +}
 +
 +const bezierBasis* BasisFactory::getBezierBasis(int parentType, int order)
 +{
 +  std::pair<int, int> key(parentType, order);
 +  Cont_bezierBasis::iterator it = bs.find(key);
 +  if (it != bs.end())
 +    return it->second;
 +
 +  bezierBasis* B = new bezierBasis(parentType, order);
 +  bs.insert(std::make_pair(key, B));
++=======
+ {
+   std::map<int, MetricBasis*>::const_iterator it = ms.find(tag);
+   if (it != ms.end()) return it->second;
+ 
+   MetricBasis* M = new MetricBasis(tag);
+   ms.insert(std::make_pair(tag, M));
+   return M;
+ }
+ 
+ const CondNumBasis* BasisFactory::getCondNumBasis(int tag, int cnOrder)
+ {
+   std::map<int, CondNumBasis*>::const_iterator it = cs.find(tag);
+   if (it != cs.end()) return it->second;
+ 
+   CondNumBasis* M = new CondNumBasis(tag, cnOrder);
+   cs.insert(std::make_pair(tag, M));
+   return M;
+ }
+ 
+ const GradientBasis* BasisFactory::getGradientBasis(FuncSpaceData data)
+ {
+   std::map<FuncSpaceData, GradientBasis*>::const_iterator it = gs.find(data);
+   if (it != gs.end()) return it->second;
+ 
+   GradientBasis* G = new GradientBasis(data);
+   gs.insert(std::make_pair(data, G));
+   return G;
+ }
+ 
+ const bezierBasis* BasisFactory::getBezierBasis(FuncSpaceData fsd)
+ {
+   FuncSpaceData data = fsd.getForPrimaryElement();
+ 
+   std::map<FuncSpaceData, bezierBasis*>::const_iterator it = bs.find(data);
+   if (it != bs.end()) return it->second;
+ 
+   bezierBasis* B = new bezierBasis(data);
+   bs.insert(std::make_pair(data, B));
++>>>>>>> upstream/2.9.3+dfsg1
    return B;
  }
  
diff --cc Numeric/BasisFactory.h
index 6c4e4e1,af8869d..afc06a9
--- a/Numeric/BasisFactory.h
+++ b/Numeric/BasisFactory.h
@@@ -6,37 -6,74 +6,103 @@@
  #ifndef BASISFACTORY_H
  #define BASISFACTORY_H
  
- #include "MElement.h"
- #include "MPyramid.h"
- #include "nodalBasis.h"
  #include "JacobianBasis.h"
++<<<<<<< HEAD
 +#include "MetricBasis.h"
 +
 +class BasisFactory
 +{
 +  typedef std::map<std::pair<int, int>, bezierBasis*> Cont_bezierBasis;
 +  typedef std::map<std::pair<int, int>, GradientBasis*> Cont_gradBasis;
 +
 + private:
 +  static std::map<int, nodalBasis*> fs;
 +  static std::map<int, JacobianBasis*> js;
 +  static std::map<int, MetricBasis*> ms;
 +  static Cont_gradBasis gs;
 +  static Cont_bezierBasis bs;
 +  // store bezier bases by parentType and order (no serendipity..)
++=======
+ #include "FuncSpaceData.h"
+ class nodalBasis;
+ class MetricBasis;
+ class GradientBasis;
+ class bezierBasis;
+ class CondNumBasis;
+ 
+ class BasisFactory
+ {
+  private:
+   static std::map<int, nodalBasis*> fs;
+   static std::map<int, MetricBasis*> ms;
+   static std::map<int, CondNumBasis*> cs;
+   static std::map<FuncSpaceData, JacobianBasis*> js;
+   static std::map<FuncSpaceData, bezierBasis*> bs;
+   static std::map<FuncSpaceData, GradientBasis*> gs;
++>>>>>>> upstream/2.9.3+dfsg1
  
   public:
    // Caution: the returned pointer can be NULL
+ 
+   // Nodal
    static const nodalBasis* getNodalBasis(int tag);
++<<<<<<< HEAD
 +  static const JacobianBasis* getJacobianBasis(int tag);
 +  static const MetricBasis* getMetricBasis(int tag);
 +
 +  static const GradientBasis* getGradientBasis(int tag, int order);
 +  static const bezierBasis* getBezierBasis(int parentTag, int order);
 +  static inline const bezierBasis* getBezierBasis(int tag) {
 +      return getBezierBasis(ElementType::ParentTypeFromTag(tag),
 +                            ElementType::OrderFromTag(tag) );
 +    }
++=======
+ 
+   // Jacobian
+   // Warning: bases returned by BasisFactory::getJacobianBasis(int tag) are the
+   // only safe bases for using Bezier on the jacobian determinant!
+   static const JacobianBasis* getJacobianBasis(FuncSpaceData);
+   static const JacobianBasis* getJacobianBasis(int tag, int order) {
+     const int type = ElementType::ParentTypeFromTag(tag);
+     if (type != TYPE_PYR)
+       return getJacobianBasis(FuncSpaceData(true, tag, order));
+     else
+       return getJacobianBasis(FuncSpaceData(true, tag, false, order+1, order));
+   }
+   static const JacobianBasis* getJacobianBasis(int tag) {
+     const int order = JacobianBasis::jacobianOrder(tag);
+     const int type = ElementType::ParentTypeFromTag(tag);
+     if (type != TYPE_PYR)
+       return getJacobianBasis(FuncSpaceData(true, tag, order));
+     else
+       return getJacobianBasis(FuncSpaceData(true, tag, false, order+2, order));
+   }
+ 
+   // Metric
+   static const MetricBasis* getMetricBasis(int tag);
+ 
+   // Condition number
+   static const CondNumBasis* getCondNumBasis(int tag, int cnOrder = -1);
+ 
+   // Gradients
+   static const GradientBasis* getGradientBasis(FuncSpaceData);
+   static const GradientBasis* getGradientBasis(int tag, int order) {
+     return getGradientBasis(FuncSpaceData(true, tag, order));
+   }
+   static const GradientBasis* getGradientBasis(int tag) {
+     return getGradientBasis(FuncSpaceData(tag));
+   }
+ 
+   // Bezier
+   static const bezierBasis* getBezierBasis(FuncSpaceData);
+   static const bezierBasis* getBezierBasis(int parentTag, int order) {
+     int primaryTag = ElementType::getTag(parentTag, 1);
+     return getBezierBasis(FuncSpaceData(true, primaryTag, order));
+   }
+   static const bezierBasis* getBezierBasis(int tag) {
+     return getBezierBasis(FuncSpaceData(tag));
+   }
++>>>>>>> upstream/2.9.3+dfsg1
  
    static void clearAll();
  };
diff --cc Numeric/CMakeLists.txt
index 6977d24,cacf2ed..582d4f7
--- a/Numeric/CMakeLists.txt
+++ b/Numeric/CMakeLists.txt
@@@ -7,6 -7,7 +7,10 @@@ set(SR
    Numeric.cpp
      fullMatrix.cpp
    BasisFactory.cpp
++<<<<<<< HEAD
++=======
+     FuncSpaceData.cpp
++>>>>>>> upstream/2.9.3+dfsg1
    discreteFrechetDistance.cpp
    miniBasis.cpp
      nodalBasis.cpp
@@@ -18,6 -19,7 +22,10 @@@
      bezierBasis.cpp
      JacobianBasis.cpp
      MetricBasis.cpp
++<<<<<<< HEAD
++=======
+     CondNumBasis.cpp
++>>>>>>> upstream/2.9.3+dfsg1
      pointsGenerators.cpp
    ElementType.cpp
    GaussIntegration.cpp
diff --cc Numeric/HilbertCurve.cpp
index 22720cb,95827d4..9e9258c
--- a/Numeric/HilbertCurve.cpp
+++ b/Numeric/HilbertCurve.cpp
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Numeric/HilbertCurve.h
index 292fc57,e962483..106d7da
--- a/Numeric/HilbertCurve.h
+++ b/Numeric/HilbertCurve.h
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Numeric/JacobianBasis.cpp
index 402cddd,46197a4..dd4c038
--- a/Numeric/JacobianBasis.cpp
+++ b/Numeric/JacobianBasis.cpp
@@@ -3,140 -3,240 +3,344 @@@
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
  
- #include "GmshDefines.h"
- #include "GmshMessage.h"
- 
- #include <vector>
- #include "polynomialBasis.h"
- #include "pyramidalBasis.h"
+ #include "JacobianBasis.h"
  #include "pointsGenerators.h"
+ #include "nodalBasis.h"
  #include "BasisFactory.h"
  #include "Numeric.h"
+ #include <cmath>
  
  namespace {
-   inline double calcDet3D(double dxdX, double dydX, double dzdX,
-                           double dxdY, double dydY, double dzdY,
-                           double dxdZ, double dydZ, double dzdZ)
-   {
-     return dxdX*dydY*dzdZ + dxdY*dydZ*dzdX + dydX*dzdY*dxdZ
-          - dxdZ*dydY*dzdX - dxdY*dydX*dzdZ - dydZ*dzdY*dxdX;
-   }
- }
  
++<<<<<<< HEAD
 +GradientBasis::GradientBasis(int tag, int order)
 +{
 +  const int type = ElementType::ParentTypeFromTag(tag);
 +
 +  fullMatrix<double> samplingPoints;
 +
 +  switch (type) {
 +    case TYPE_PNT :
 +      samplingPoints = gmshGeneratePointsLine(0);
 +      break;
 +    case TYPE_LIN :
 +      samplingPoints = gmshGeneratePointsLine(order);
 +      break;
 +    case TYPE_TRI :
 +      samplingPoints = gmshGeneratePointsTriangle(order,false);
 +      break;
 +    case TYPE_QUA :
 +      samplingPoints = gmshGeneratePointsQuadrangle(order,false);
 +      break;
 +    case TYPE_TET :
 +      samplingPoints = gmshGeneratePointsTetrahedron(order,false);
 +      break;
 +    case TYPE_PRI :
 +      samplingPoints = gmshGeneratePointsPrism(order,false);
 +      break;
 +    case TYPE_HEX :
 +      samplingPoints = gmshGeneratePointsHexahedron(order,false);
 +      break;
 +    case TYPE_PYR :
 +      samplingPoints = JacobianBasis::generateJacPointsPyramid(order);
 +      break;
 +    default :
 +      Msg::Error("Unknown Jacobian function space for element tag %d", tag);
 +      return;
 +  }
 +  const int numSampPnts = samplingPoints.size1();
 +
 +  // Store shape function gradients of mapping at Jacobian nodes
 +  fullMatrix<double> allDPsi;
 +  const nodalBasis *mapBasis = BasisFactory::getNodalBasis(tag);
 +  mapBasis->df(samplingPoints, allDPsi);
 +  const int numMapNodes = allDPsi.size1();
 +
 +  gradShapeMatX.resize(numSampPnts, numMapNodes);
 +  gradShapeMatY.resize(numSampPnts, numMapNodes);
 +  gradShapeMatZ.resize(numSampPnts, numMapNodes);
 +  for (int i=0; i<numSampPnts; i++) {
 +    for (int j=0; j<numMapNodes; j++) {
 +      gradShapeMatX(i, j) = allDPsi(j, 3*i);
 +      gradShapeMatY(i, j) = allDPsi(j, 3*i+1);
 +      gradShapeMatZ(i, j) = allDPsi(j, 3*i+2);
 +    }
 +  }
 +}
 +
 +void GradientBasis::getGradientsFromNodes(const fullMatrix<double> &nodes,
 +                                          fullMatrix<double> *dxyzdX,
 +                                          fullMatrix<double> *dxyzdY,
 +                                          fullMatrix<double> *dxyzdZ) const
 +{
 +  if (dxyzdX) gradShapeMatX.mult(nodes, *dxyzdX);
 +  if (dxyzdY) gradShapeMatY.mult(nodes, *dxyzdY);
 +  if (dxyzdZ) gradShapeMatZ.mult(nodes, *dxyzdZ);
 +}
 +
 +JacobianBasis::JacobianBasis(int tag, int jacOrder)
 +{
 +  const int parentType = ElementType::ParentTypeFromTag(tag);
 +  const int order = ElementType::OrderFromTag(tag);
 +  int jacobianOrder;
 +  if (jacOrder < 0)
 +    jacobianOrder = JacobianBasis::jacobianOrder(parentType, order);
 +  else
 +    jacobianOrder = jacOrder;
 +  const int primJacobianOrder = JacobianBasis::jacobianOrder(parentType, 1);
 +
 +  fullMatrix<double> lagPoints;                                  // Sampling points
 +
 +  switch (parentType) {
 +    case TYPE_PNT :
 +      lagPoints = gmshGeneratePointsLine(0);
 +      break;
 +    case TYPE_LIN :
 +      lagPoints = gmshGeneratePointsLine(jacobianOrder);
 +      break;
 +    case TYPE_TRI :
 +      lagPoints = gmshGeneratePointsTriangle(jacobianOrder,false);
 +      break;
 +    case TYPE_QUA :
 +      lagPoints = gmshGeneratePointsQuadrangle(jacobianOrder,false);
++=======
+ template<class T>
+ void calcMapFromIdealElement(int type, T &gSMatX, T &gSMatY, T &gSMatZ)
+ {
+   // 2D scaling
+   switch(type) {
+     case TYPE_QUA:                                             // Quad, hex, pyramid -> square with side of length 1
+     case TYPE_HEX:
+     case TYPE_PYR: {
+       gSMatX.scale(2.);
+       gSMatY.scale(2.);
++>>>>>>> upstream/2.9.3+dfsg1
        break;
-     case TYPE_TET :
-       lagPoints = gmshGeneratePointsTetrahedron(jacobianOrder,false);
+     }
+     default: {                                                // Tri, tet, prism: equilateral tri with side of length 1
+       static const double cTri[2] = {-1./std::sqrt(3.), 2./std::sqrt(3.)};
+       gSMatY.scale(cTri[1]);
+       gSMatY.axpy(gSMatX, cTri[0]);
        break;
-     case TYPE_PRI :
-       lagPoints = gmshGeneratePointsPrism(jacobianOrder,false);
+     }
+   }
+ 
+   // 3D scaling
+   switch(type) {
+     case TYPE_HEX:                                            // Hex, prism -> side of length 1 in z
+     case TYPE_PRI: {
+       gSMatZ.scale(2.);
        break;
-     case TYPE_HEX :
-       lagPoints = gmshGeneratePointsHexahedron(jacobianOrder,false);
+     }
+     case TYPE_PYR: {                                          // Pyramid -> height sqrt(2.)/2
+       static const double cPyr = 1./sqrt(2.);
+       gSMatZ.scale(cPyr);
        break;
-     case TYPE_PYR :
-       lagPoints = generateJacPointsPyramid(jacobianOrder);
+     }
+     case TYPE_TET:                                            // Tet: take into account (x, y) scaling to obtain regular tet
+     {
+       static const double cTet[3] = {-3./2/std::sqrt(6.),
+                                      -1./2/std::sqrt(2.),
+                                      std::sqrt(1.5)};
+       gSMatZ.scale(cTet[2]);
+       gSMatZ.axpy(gSMatX, cTet[0]);
+       gSMatZ.axpy(gSMatY, cTet[1]);
        break;
++<<<<<<< HEAD
 +    default :
 +      Msg::Error("Unknown Jacobian function space for element tag %d", tag);
 +      return;
++=======
+     }
++>>>>>>> upstream/2.9.3+dfsg1
    }
-   numJacNodes = lagPoints.size1();
+ }
  
-   // Store Bezier basis
-   bezier = BasisFactory::getBezierBasis(parentType, jacobianOrder);
+ // Compute the determinant of a 3x3 matrix
+ inline double calcDet3D(double M11, double M12, double M13,
+                         double M21, double M22, double M23,
+                         double M31, double M32, double M33)
+ {
+   return M11 * (M22*M33 - M23*M32)
+        - M12 * (M21*M33 - M23*M31)
+        + M13 * (M21*M32 - M22*M31);
+ }
  
++<<<<<<< HEAD
 +  // Store shape function gradients of mapping at Jacobian nodes
 +  _gradBasis = BasisFactory::getGradientBasis(tag, jacobianOrder);
++=======
+ // Compute signed Jacobian and its gradients w.r.t.
+ // node positions, at one location in a 1D element
+ inline void calcJDJ1D(double dxdX, double dxdY, double dxdZ,
+                       double dydX, double dydY, double dydZ,
+                       double dzdX, double dzdY, double dzdZ,
+                       int i, int numMapNodes,
+                       const fullMatrix<double> &gSMatX,
+                       fullMatrix<double> &JDJ)
+ {
+   for (int j = 0; j < numMapNodes; j++) {
+     const double &dPhidX = gSMatX(i, j);
+     JDJ(i, j) = dPhidX * dydY * dzdZ + dPhidX * dzdY * dydZ;
+     JDJ(i, j+numMapNodes) = dPhidX * dzdY * dxdZ - dPhidX * dxdY * dzdZ;
+     JDJ(i, j+2*numMapNodes) = dPhidX * dxdY * dydZ - dPhidX * dydY * dxdZ;
+   }
+   JDJ(i, 3*numMapNodes) = calcDet3D(dxdX, dxdY, dxdZ,
+                                     dydX, dydY, dydZ,
+                                     dzdX, dzdY, dzdZ);
+ }
+ 
+ // Compute signed Jacobian and its gradients w.r.t.
+ // node positions, at one location in a 2D element
+ inline void calcJDJ2D(double dxdX, double dxdY, double dxdZ,
+                       double dydX, double dydY, double dydZ,
+                       double dzdX, double dzdY, double dzdZ,
+                       int i, int numMapNodes,
+                       const fullMatrix<double> &gSMatX,
+                       const fullMatrix<double> &gSMatY,
+                       fullMatrix<double> &JDJ)
+ {
+   for (int j = 0; j < numMapNodes; j++) {
+     const double &dPhidX = gSMatX(i, j);
+     const double &dPhidY = gSMatY(i, j);
+     JDJ(i, j) =
+       dPhidX * dydY * dzdZ + dzdX * dPhidY * dydZ +
+       dPhidX * dzdY * dydZ - dydX * dPhidY * dzdZ;
+     JDJ(i, j+numMapNodes) =
+       dxdX * dPhidY * dzdZ +
+       dPhidX * dzdY * dxdZ - dzdX * dPhidY * dxdZ
+                            - dPhidX * dxdY * dzdZ;
+     JDJ(i, j+2*numMapNodes) =
+                              dPhidX * dxdY * dydZ +
+       dydX * dPhidY * dxdZ - dPhidX * dydY * dxdZ -
+       dxdX * dPhidY * dydZ;
+   }
+   JDJ(i, 3*numMapNodes) = calcDet3D(dxdX, dxdY, dxdZ,
+                                     dydX, dydY, dydZ,
+                                     dzdX, dzdY, dzdZ);
+ }
+ 
+ // Compute signed Jacobian and its gradients w.r.t.
+ // node positions, at one location in a 3D element
+ inline void calcJDJ3D(double dxdX, double dxdY, double dxdZ,
+                       double dydX, double dydY, double dydZ,
+                       double dzdX, double dzdY, double dzdZ,
+                       int i, int numMapNodes,
+                       const fullMatrix<double> &gSMatX,
+                       const fullMatrix<double> &gSMatY,
+                       const fullMatrix<double> &gSMatZ,
+                       fullMatrix<double> &JDJ)
+ {
+   for (int j = 0; j < numMapNodes; j++) {
+     const double &dPhidX = gSMatX(i, j);
+     const double &dPhidY = gSMatY(i, j);
+     const double &dPhidZ = gSMatZ(i, j);
+     JDJ(i, j) =
+       dPhidX * dydY * dzdZ + dzdX * dPhidY * dydZ +
+       dydX * dzdY * dPhidZ - dzdX * dydY * dPhidZ -
+       dPhidX * dzdY * dydZ - dydX * dPhidY * dzdZ;
+     JDJ(i, j+numMapNodes) =
+       dxdX * dPhidY * dzdZ + dzdX * dxdY * dPhidZ +
+       dPhidX * dzdY * dxdZ - dzdX * dPhidY * dxdZ -
+       dxdX * dzdY * dPhidZ - dPhidX * dxdY * dzdZ;
+     JDJ(i, j+2*numMapNodes) =
+       dxdX * dydY * dPhidZ + dPhidX * dxdY * dydZ +
+       dydX * dPhidY * dxdZ - dPhidX * dydY * dxdZ -
+       dxdX * dPhidY * dydZ - dydX * dxdY * dPhidZ;
+   }
+   JDJ(i, 3*numMapNodes) = calcDet3D(dxdX, dxdY, dxdZ,
+                                     dydX, dydY, dydZ,
+                                     dzdX, dzdY, dzdZ);
+ }
+ 
+ }
+ 
+ GradientBasis::GradientBasis(FuncSpaceData data)
+     : _data(data) {
+ 
+   fullMatrix<double> samplingPoints;
+   gmshGeneratePoints(data, samplingPoints);
+   const int numSampPnts = samplingPoints.size1();
+ 
+   // Store shape function gradients of mapping at Jacobian nodes
+   fullMatrix<double> allDPsi;
+   const nodalBasis *mapBasis = BasisFactory::getNodalBasis(_data.elementTag());
+   mapBasis->df(samplingPoints, allDPsi);
+   const int numMapNodes = allDPsi.size1();
+ 
+   gradShapeMatX.resize(numSampPnts, numMapNodes);
+   gradShapeMatY.resize(numSampPnts, numMapNodes);
+   gradShapeMatZ.resize(numSampPnts, numMapNodes);
+   for (int i = 0; i < numSampPnts; i++) {
+     for (int j = 0; j < numMapNodes; j++) {
+       gradShapeMatX(i, j) = allDPsi(j, 3*i);
+       gradShapeMatY(i, j) = allDPsi(j, 3*i+1);
+       gradShapeMatZ(i, j) = allDPsi(j, 3*i+2);
+     }
+   }
++>>>>>>> upstream/2.9.3+dfsg1
+ 
+   gradShapeIdealMatX = gradShapeMatX;
+   gradShapeIdealMatY = gradShapeMatY;
+   gradShapeIdealMatZ = gradShapeMatZ;
+   mapFromIdealElement(_data.elementType(), gradShapeIdealMatX,
+                       gradShapeIdealMatY, gradShapeIdealMatZ);
+ }
+ 
+ void GradientBasis::getGradientsFromNodes(const fullMatrix<double> &nodes,
+                                           fullMatrix<double> *dxyzdX,
+                                           fullMatrix<double> *dxyzdY,
+                                           fullMatrix<double> *dxyzdZ) const
+ {
+   if (dxyzdX) gradShapeMatX.mult(nodes, *dxyzdX);
+   if (dxyzdY) gradShapeMatY.mult(nodes, *dxyzdY);
+   if (dxyzdZ) gradShapeMatZ.mult(nodes, *dxyzdZ);
+ }
+ 
+ void GradientBasis::getIdealGradientsFromNodes(const fullMatrix<double> &nodes,
+                                                fullMatrix<double> *dxyzdX,
+                                                fullMatrix<double> *dxyzdY,
+                                                fullMatrix<double> *dxyzdZ) const
+ {
+   if (dxyzdX) gradShapeIdealMatX.mult(nodes, *dxyzdX);
+   if (dxyzdY) gradShapeIdealMatY.mult(nodes, *dxyzdY);
+   if (dxyzdZ) gradShapeIdealMatZ.mult(nodes, *dxyzdZ);
+ }
+ 
+ void GradientBasis::mapFromIdealElement(int type,
+                                         fullMatrix<double> &gSMatX,
+                                         fullMatrix<double> &gSMatY,
+                                         fullMatrix<double> &gSMatZ)
+ {
+   calcMapFromIdealElement(type, gSMatX, gSMatY, gSMatZ);
+ }
+ 
+ void GradientBasis::mapFromIdealElement(int type,
+                                         fullVector<double> &gSVecX,
+                                         fullVector<double> &gSVecY,
+                                         fullVector<double> &gSVecZ)
+ {
+   calcMapFromIdealElement(type, gSVecX, gSVecY, gSVecZ);
+ }
+ 
+ void GradientBasis::mapFromIdealElement(int type, double jac[3][3])
+ {
+   fullMatrix<double> dxyzdX(jac[0], 1, 3), dxyzdY(jac[1], 1, 3), dxyzdZ(jac[2], 1, 3);
+   mapFromIdealElement(type, dxyzdX, dxyzdY, dxyzdZ);
+ }
+ 
+ JacobianBasis::JacobianBasis(FuncSpaceData data)
+     : _bezier(NULL), _data(data), _dim(data.dimension())
+ {
+   const int parentType = data.elementType();
+   const int primJacobianOrder = jacobianOrder(parentType, 1);
+ 
+   fullMatrix<double> lagPoints;                               // Sampling points
+   gmshGeneratePoints(data, lagPoints);
+   numJacNodes = lagPoints.size1();
+ 
+   // Store shape function gradients of mapping at Jacobian nodes
+   _gradBasis = BasisFactory::getGradientBasis(data);
  
    // Compute matrix for lifting from primary Jacobian basis to Jacobian basis
    int primJacType = ElementType::getTag(parentType, primJacobianOrder, false);
@@@ -178,16 -284,16 +388,20 @@@
    delete[] barDPsi;
  
    // Compute "fast" Jacobian evaluation matrices (at 1st order nodes + barycenter)
-   numJacNodesFast = numPrimMapNodes+1;
-   fullMatrix<double> lagPointsFast(numJacNodesFast,3);                                  // Sampling points
-   lagPointsFast.copy(primMapBasis->points,0,numPrimMapNodes,
-                      0,primMapBasis->points.size2(),0,0);                               // 1st order nodes
-   lagPointsFast(numPrimMapNodes,0) = barycenter[0];                                     // Last point = barycenter
-   lagPointsFast(numPrimMapNodes,1) = barycenter[1];
-   lagPointsFast(numPrimMapNodes,2) = barycenter[2];
+   numJacNodesFast = numPrimMapNodes + 1;
+   fullMatrix<double> lagPointsFast(numJacNodesFast, 3);           // Sampling points
+   lagPointsFast.copy(primMapBasis->points, 0, numPrimMapNodes,
+                      0, primMapBasis->points.size2(), 0, 0);      // 1st order nodes
+   lagPointsFast(numPrimMapNodes, 0) = barycenter[0];              // Last point = barycenter
+   lagPointsFast(numPrimMapNodes, 1) = barycenter[1];
+   lagPointsFast(numPrimMapNodes, 2) = barycenter[2];
  
    fullMatrix<double> allDPsiFast;
++<<<<<<< HEAD
 +  const nodalBasis *mapBasis = BasisFactory::getNodalBasis(tag);
++=======
+   const nodalBasis *mapBasis = BasisFactory::getNodalBasis(data.elementTag());
++>>>>>>> upstream/2.9.3+dfsg1
    mapBasis->df(lagPointsFast, allDPsiFast);
    numMapNodes = mapBasis->getNumShapeFunctions();
  
@@@ -201,6 -307,14 +415,17 @@@
        gradShapeMatZFast(i, j) = allDPsiFast(j, 3*i+2);
      }
    }
++<<<<<<< HEAD
++=======
+ }
+ 
+ const bezierBasis* JacobianBasis::getBezier() const
+ {
+   if (!_bezier) {
+     const_cast<JacobianBasis*>(this)->_bezier = BasisFactory::getBezierBasis(_data);
+   }
+   return _bezier;
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  // Computes (unit) normals to straight line element at barycenter (with norm of gradient as return value)
@@@ -281,15 -402,15 +513,27 @@@ double JacobianBasis::getPrimJac3D(cons
  
  // Calculate (signed, possibly scaled) Jacobian for one element, with normal vectors to straight element
  // for regularization. Evaluation points depend on the given matrices for shape function gradients.
++<<<<<<< HEAD
 +template<bool scaling>
 +inline void JacobianBasis::getJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                              const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                              const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const
 +{
 +
 +  const int dim = bezier->getDim();
 +
 +  switch (dim) {
++=======
+ void JacobianBasis::getJacobianGeneral(int nJacNodes,
+                                        const fullMatrix<double> &gSMatX,
+                                        const fullMatrix<double> &gSMatY,
+                                        const fullMatrix<double> &gSMatZ,
+                                        const fullMatrix<double> &nodesXYZ,
+                                        bool idealNorm, bool scaling,
+                                        fullVector<double> &jacobian) const
+ {
+   switch (_dim) {
++>>>>>>> upstream/2.9.3+dfsg1
  
      case 0 : {
        for (int i = 0; i < nJacNodes; i++) jacobian(i) = 1.;
@@@ -299,6 -420,10 +543,13 @@@
      case 1 : {
        fullMatrix<double> normals(2,3);
        const double invScale = getPrimNormals1D(nodesXYZ,normals);
++<<<<<<< HEAD
++=======
+       if (invScale == 0) {
+         for (int i = 0; i < nJacNodes; i++) jacobian(i) = 0;
+         return;
+       }
++>>>>>>> upstream/2.9.3+dfsg1
        if (scaling) {
          const double scale = 1./invScale;
          normals(0,0) *= scale; normals(0,1) *= scale; normals(0,2) *= scale;            // Faster to scale 1 normal than afterwards
@@@ -316,7 -443,11 +569,15 @@@
  
      case 2 : {
        fullMatrix<double> normal(1,3);
++<<<<<<< HEAD
 +      const double invScale = getPrimNormal2D(nodesXYZ,normal);
++=======
+       const double invScale = getPrimNormal2D(nodesXYZ, normal, idealNorm);
+       if (invScale == 0) {
+         for (int i = 0; i < nJacNodes; i++) jacobian(i) = 0;
+         return;
+       }
++>>>>>>> upstream/2.9.3+dfsg1
        if (scaling) {
          const double scale = 1./invScale;
          normal(0,0) *= scale; normal(0,1) *= scale; normal(0,2) *= scale;               // Faster to scale normal than afterwards
@@@ -328,7 -459,9 +589,13 @@@
          const double &dxdX = dxyzdX(i,0), &dydX = dxyzdX(i,1), &dzdX = dxyzdX(i,2);
          const double &dxdY = dxyzdY(i,0), &dydY = dxyzdY(i,1), &dzdY = dxyzdY(i,2);
          const double &dxdZ = normal(0,0), &dydZ = normal(0,1), &dzdZ = normal(0,2);
++<<<<<<< HEAD
 +        jacobian(i) = calcDet3D(dxdX,dydX,dzdX,dxdY,dydY,dzdY,dxdZ,dydZ,dzdZ);
++=======
+         jacobian(i) = calcDet3D(dxdX, dxdY, dxdZ,
+                                 dydX, dydY, dydZ,
+                                 dzdX, dzdY, dzdZ);
++>>>>>>> upstream/2.9.3+dfsg1
        }
        break;
      }
@@@ -343,48 -476,36 +610,72 @@@
          const double &dxdX = dxyzdX(i,0), &dydX = dxyzdX(i,1), &dzdX = dxyzdX(i,2);
          const double &dxdY = dxyzdY(i,0), &dydY = dxyzdY(i,1), &dzdY = dxyzdY(i,2);
          const double &dxdZ = dxyzdZ(i,0), &dydZ = dxyzdZ(i,1), &dzdZ = dxyzdZ(i,2);
-         jacobian(i) = calcDet3D(dxdX,dydX,dzdX,dxdY,dydY,dzdY,dxdZ,dydZ,dzdZ);
+         jacobian(i) = calcDet3D(dxdX, dxdY, dxdZ,
+                                 dydX, dydY, dydZ,
+                                 dzdX, dzdY, dzdZ);
+       }
+       if (scaling) {
+         const double scale = 1./getPrimJac3D(nodesXYZ);
+         jacobian.scale(scale);
        }
 +      if (scaling) {
 +        const double scale = 1./getPrimJac3D(nodesXYZ);
 +        jacobian.scale(scale);
 +      }
        break;
++<<<<<<< HEAD
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
      }
  
    }
  
++<<<<<<< HEAD
 +}
 +
 +// Calculate signed Jacobian for one element, with normal vectors to straight element for
 +// regularization. Evaluation points depend on the given matrices for shape function gradients.
 +void JacobianBasis::getSignedJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                             const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                             const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const
 +{
 +  getJacobianGeneral<false>(nJacNodes, gSMatX,  gSMatY, gSMatZ, nodesXYZ, jacobian);
 +}
 +
 +// Calculate (signed) scaled Jacobian for one element, with normal vectors to straight element
 +// for regularization. Evaluation points depend on the given matrices for shape function gradients.
 +void JacobianBasis::getScaledJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                             const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                             const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const
 +{
 +  getJacobianGeneral<true>(nJacNodes, gSMatX,  gSMatY, gSMatZ, nodesXYZ, jacobian);
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  // Calculate (signed, possibly scaled) Jacobian for several elements, with normal vectors to straight
  // elements for regularization. Evaluation points depend on the given matrices for shape function gradients.
  // TODO: Optimize and test 1D & 2D
++<<<<<<< HEAD
 +template<bool scaling>
 +inline void JacobianBasis::getJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                              const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                              const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                              const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const
++=======
+ void JacobianBasis::getJacobianGeneral(int nJacNodes,
+                                        const fullMatrix<double> &gSMatX,
+                                        const fullMatrix<double> &gSMatY,
+                                        const fullMatrix<double> &gSMatZ,
+                                        const fullMatrix<double> &nodesX,
+                                        const fullMatrix<double> &nodesY,
+                                        const fullMatrix<double> &nodesZ,
+                                        bool idealNorm, bool scaling,
+                                        fullMatrix<double> &jacobian) const
++>>>>>>> upstream/2.9.3+dfsg1
  {
- 
-   switch (bezier->getDim()) {
+   switch (_dim) {
  
      case 0 : {
        const int numEl = nodesX.size2();
@@@ -406,6 -527,10 +697,13 @@@
          }
          fullMatrix<double> normals(2,3);
          const double invScale = getPrimNormals1D(nodesXYZ,normals);
++<<<<<<< HEAD
++=======
+         if (invScale == 0) {
+           for (int i = 0; i < nJacNodes; i++) jacobian(i,iEl) = 0;
+           continue;
+         }
++>>>>>>> upstream/2.9.3+dfsg1
          if (scaling) {
            const double scale = 1./invScale;
            normals(0,0) *= scale; normals(0,1) *= scale; normals(0,2) *= scale;                // Faster to scale 1 normal than afterwards
@@@ -434,7 -559,11 +732,15 @@@
            nodesXYZ(i,2) = nodesZ(i,iEl);
          }
          fullMatrix<double> normal(1,3);
++<<<<<<< HEAD
 +        const double invScale = getPrimNormal2D(nodesXYZ,normal);
++=======
+         const double invScale = getPrimNormal2D(nodesXYZ, normal, idealNorm);
+         if (invScale == 0) {
+           for (int i = 0; i < nJacNodes; i++) jacobian(i,iEl) = 0;
+           continue;
+         }
++>>>>>>> upstream/2.9.3+dfsg1
          if (scaling) {
            const double scale = 1./invScale;
            normal(0,0) *= scale; normal(0,1) *= scale; normal(0,2) *= scale;                   // Faster to scale normal than afterwards
@@@ -458,9 -587,9 +764,15 @@@
        gSMatZ.mult(nodesX, dxdZ); gSMatZ.mult(nodesY, dydZ); gSMatZ.mult(nodesZ, dzdZ);
        for (int iEl = 0; iEl < numEl; iEl++) {
          for (int i = 0; i < nJacNodes; i++)
++<<<<<<< HEAD
 +          jacobian(i,iEl) = calcDet3D(dxdX(i,iEl),dydX(i,iEl),dzdX(i,iEl),
 +                                      dxdY(i,iEl),dydY(i,iEl),dzdY(i,iEl),
 +                                      dxdZ(i,iEl),dydZ(i,iEl),dzdZ(i,iEl));
++=======
+           jacobian(i,iEl) = calcDet3D(dxdX(i,iEl), dxdY(i,iEl), dxdZ(i,iEl),
+                                       dydX(i,iEl), dydY(i,iEl), dydZ(i,iEl),
+                                       dzdX(i,iEl), dzdY(i,iEl), dzdZ(i,iEl));
++>>>>>>> upstream/2.9.3+dfsg1
          if (scaling) {
            fullMatrix<double> nodesXYZ(numPrimMapNodes,3);
            for (int i = 0; i < numPrimMapNodes; i++) {
@@@ -479,37 -608,17 +791,37 @@@
  
  }
  
 +// Calculate signed Jacobian for several elements, with normal vectors to straight elements for
 +// regularization. Evaluation points depend on the given matrices for shape function gradients.
 +void JacobianBasis::getSignedJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                             const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                             const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                             const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const
 +{
 +  getJacobianGeneral<false>(nJacNodes, gSMatX,  gSMatY, gSMatZ, nodesX, nodesY, nodesZ, jacobian);
 +}
 +
 +// Calculate (signed) scaled Jacobian for several elements, with normal vectors to straight elements
 +// for regularization. Evaluation points depend on the given matrices for shape function gradients.
 +void JacobianBasis::getScaledJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                             const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                             const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                             const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const
 +{
 +  getJacobianGeneral<true>(nJacNodes, gSMatX,  gSMatY, gSMatZ, nodesX, nodesY, nodesZ, jacobian);
 +}
 +
  // Calculate (signed) Jacobian and its gradients for one element, with normal vectors to straight element
  // for regularization. Evaluation points depend on the given matrices for shape function gradients.
- void JacobianBasis::getSignedJacAndGradientsGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
-                                                     const fullMatrix<double> &gSMatY,
-                                                     const fullMatrix<double> &gSMatZ,
-                                                     const fullMatrix<double> &nodesXYZ,
-                                                     const fullMatrix<double> &normals,
-                                                     fullMatrix<double> &JDJ) const
+ void JacobianBasis::getSignedJacAndGradientsGeneral(int nJacNodes,
+                                                            const fullMatrix<double> &gSMatX,
+                                                            const fullMatrix<double> &gSMatY,
+                                                            const fullMatrix<double> &gSMatZ,
+                                                            const fullMatrix<double> &nodesXYZ,
+                                                            const fullMatrix<double> &normals,
+                                                            fullMatrix<double> &JDJ) const
  {
- 
-   switch (bezier->getDim()) {
+   switch (_dim) {
  
      case 0 : {
        for (int i = 0; i < nJacNodes; i++) {
@@@ -624,14 -719,14 +922,19 @@@ void JacobianBasis::getMetricMinAndGrad
    for (int l = 0; l < numJacNodes; l++) {
      double jac[2][2] = {{0., 0.}, {0., 0.}};
      for (int i = 0; i < numMapNodes; i++) {
++<<<<<<< HEAD
 +      const double &dPhidX = _gradBasis->gradShapeMatX(l,i);
 +      const double &dPhidY = _gradBasis->gradShapeMatY(l,i);
++=======
+       const double &dPhidX = _gradBasis->gradShapeMatX(l, i);
+       const double &dPhidY = _gradBasis->gradShapeMatY(l, i);
++>>>>>>> upstream/2.9.3+dfsg1
        const double dpsidx = dPhidX * invJaci[0][0] + dPhidY * invJaci[1][0];
        const double dpsidy = dPhidX * invJaci[0][1] + dPhidY * invJaci[1][1];
-       jac[0][0] += nodesXYZ(i,0) * dpsidx;
-       jac[0][1] += nodesXYZ(i,0) * dpsidy;
-       jac[1][0] += nodesXYZ(i,1) * dpsidx;
-       jac[1][1] += nodesXYZ(i,1) * dpsidy;
+       jac[0][0] += nodesXYZ(i, 0) * dpsidx;
+       jac[0][1] += nodesXYZ(i, 0) * dpsidy;
+       jac[1][0] += nodesXYZ(i, 1) * dpsidx;
+       jac[1][1] += nodesXYZ(i, 1) * dpsidy;
      }
      const double dxdx = jac[0][0] * jac[0][0] + jac[0][1] * jac[0][1];
      const double dydy = jac[1][0] * jac[1][0] + jac[1][1] * jac[1][1];
@@@ -648,144 -743,37 +951,172 @@@
      const double aetaxi  = ayx * invJaci[0][0] + ayy * invJaci[0][1];
      const double axieta  = axx * invJaci[1][0] + axy * invJaci[1][1];
      for (int i = 0; i < numMapNodes; i++) {
++<<<<<<< HEAD
 +      const double &dPhidX = _gradBasis->gradShapeMatX(l,i);
 +      const double &dPhidY = _gradBasis->gradShapeMatY(l,i);
++=======
+       const double &dPhidX = _gradBasis->gradShapeMatX(l, i);
+       const double &dPhidY = _gradBasis->gradShapeMatY(l, i);
++>>>>>>> upstream/2.9.3+dfsg1
        gradLambdaJ(l, i + 0 * numMapNodes) = axixi * dPhidX + axieta * dPhidY;
        gradLambdaJ(l, i + 1 * numMapNodes) = aetaxi * dPhidX + aetaeta * dPhidY;
      }
    }
- 
  }
  
++<<<<<<< HEAD
++=======
+ // Research purpose (to be removed ?)
++>>>>>>> upstream/2.9.3+dfsg1
  void JacobianBasis::interpolate(const fullVector<double> &jacobian,
                                  const fullMatrix<double> &uvw,
                                  fullMatrix<double> &result,
                                  bool areBezier) const
++<<<<<<< HEAD
 +{
 +  fullMatrix<double> bezM(jacobian.size(), 1);
 +  fullVector<double> bez;
 +  bez.setAsProxy(bezM, 0);
 +
 +  if (areBezier)
 +    bez.setAll(jacobian);
 +  else
 +    lag2Bez(jacobian, bez);
 +
 +  bezier->interpolate(bezM, uvw, result);
 +}
 +
 +fullMatrix<double> JacobianBasis::generateJacMonomialsPyramid(int order)
 +{
 +  const int nbMonomials = (order+3)*(order+3)*(order+1);
 +  fullMatrix<double> monomials(nbMonomials, 3);
 +
 +  if (order == 0) {
 +    fullMatrix<double> prox, quad = gmshGenerateMonomialsQuadrangle(2);
 +    prox.setAsProxy(monomials, 0, 2);
 +    prox.setAll(quad);
 +    return monomials;
 +  }
 +
 +  monomials(0, 0) = 0;
 +  monomials(0, 1) = 0;
 +  monomials(0, 2) = 0;
 +
 +  monomials(1, 0) = order+2;
 +  monomials(1, 1) = 0;
 +  monomials(1, 2) = 0;
 +
 +  monomials(2, 0) = order+2;
 +  monomials(2, 1) = order+2;
 +  monomials(2, 2) = 0;
 +
 +  monomials(3, 0) = 0;
 +  monomials(3, 1) = order+2;
 +  monomials(3, 2) = 0;
 +
 +  monomials(4, 0) = 0;
 +  monomials(4, 1) = 0;
 +  monomials(4, 2) = order;
 +
 +  monomials(5, 0) = order+2;
 +  monomials(5, 1) = 0;
 +  monomials(5, 2) = order;
 +
 +  monomials(6, 0) = order+2;
 +  monomials(6, 1) = order+2;
 +  monomials(6, 2) = order;
 +
 +  monomials(7, 0) = 0;
 +  monomials(7, 1) = order+2;
 +  monomials(7, 2) = order;
 +
 +  int index = 8;
 +
 +  static const int bottom_edges[4][2] = {
 +    {0, 1},
 +    {1, 2},
 +    {2, 3},
 +    {3, 0}
 +  };
 +
 +  // bottom & top "edges"
 +  for (int iedge = 0; iedge < 4; ++iedge) {
 +    int i0 = bottom_edges[iedge][0];
 +    int i1 = bottom_edges[iedge][1];
 +
 +    int u_1 = (monomials(i1,0)-monomials(i0,0)) / (order + 2);
 +    int u_2 = (monomials(i1,1)-monomials(i0,1)) / (order + 2);
 +
 +    for (int i = 1; i < order + 2; ++i, ++index) {
 +      monomials(index, 0) = monomials(i0, 0) + i * u_1;
 +      monomials(index, 1) = monomials(i0, 1) + i * u_2;
 +      monomials(index, 2) = 0;
 +    }
 +    for (int i = 1; i < order + 2; ++i, ++index) {
 +      monomials(index, 0) = monomials(i0, 0) + i * u_1;
 +      monomials(index, 1) = monomials(i0, 1) + i * u_2;
 +      monomials(index, 2) = order;
 +    }
 +  }
 +
 +  // bottom & top "face"
 +  fullMatrix<double> uv = gmshGenerateMonomialsQuadrangle(order);
 +  uv.add(1);
 +  for (int i = 0; i < uv.size1(); ++i, ++index) {
 +    monomials(index, 0) = uv(i, 0);
 +    monomials(index, 1) = uv(i, 1);
 +    monomials(index, 2) = 0;
 +  }
 +  for (int i = 0; i < uv.size1(); ++i, ++index) {
 +    monomials(index, 0) = uv(i, 0);
 +    monomials(index, 1) = uv(i, 1);
 +    monomials(index, 2) = order;
 +  }
 +
 +  // other monomials
 +  uv = gmshGenerateMonomialsQuadrangle(order + 2);
 +  for (int k = 1; k < order; ++k) {
 +    for (int i = 0; i < uv.size1(); ++i, ++index) {
 +      monomials(index, 0) = uv(i, 0);
 +      monomials(index, 1) = uv(i, 1);
 +      monomials(index, 2) = k;
 +    }
 +  }
 +  return monomials;
++=======
+ {
+   fullMatrix<double> bezM(jacobian.size(), 1);
+   fullVector<double> bez;
+   bez.setAsProxy(bezM, 0);
+ 
+   if (areBezier)
+     bez.setAll(jacobian);
+   else
+     lag2Bez(jacobian, bez);
+ 
+   getBezier()->interpolate(bezM, uvw, result);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
- fullMatrix<double> JacobianBasis::generateJacPointsPyramid(int order)
+ int JacobianBasis::jacobianOrder(int tag)
  {
++<<<<<<< HEAD
 +  fullMatrix<double> points = generateJacMonomialsPyramid(order);
 +
 +  const double p = order + 2;
 +  for (int i = 0; i < points.size1(); ++i) {
 +    points(i, 2) = points(i, 2) / p;
 +    const double scale = 1. - points(i, 2);
 +    points(i, 0) = (-1. + 2. * points(i, 0) / p) * scale;
 +    points(i, 1) = (-1. + 2. * points(i, 1) / p) * scale;
 +  }
 +
 +  return points;
++=======
+   const int parentType = ElementType::ParentTypeFromTag(tag);
+   const int order = ElementType::OrderFromTag(tag);
+   return jacobianOrder(parentType, order);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  int JacobianBasis::jacobianOrder(int parentType, int order)
@@@ -807,4 -795,34 +1138,38 @@@
    }
  }
  
++<<<<<<< HEAD
++
++=======
+ FuncSpaceData JacobianBasis::jacobianMatrixSpace(int type, int order)
+ {
+   if (type == TYPE_PYR) {
+     Msg::Fatal("jacobianMatrixSpace not yet implemented for pyramids");
+     return FuncSpaceData(false, type, false, 1, 0);
+   }
+   int jacOrder = -1;
+   switch (type) {
+     case TYPE_PNT :
+       jacOrder = 0;
+       break;
+ 
+     case TYPE_LIN :
+     case TYPE_TRI :
+     case TYPE_TET :
+       jacOrder = order - 1;
+       break;
  
+     case TYPE_QUA :
+     case TYPE_PRI :
+     case TYPE_HEX :
+       jacOrder = order;
+       break;
+ 
+     default :
+       Msg::Error("Unknown element type %d, return order 0", type);
+       return 0;
+   }
+ 
+   return FuncSpaceData(true, ElementType::getTag(type, order), jacOrder);
+ }
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc Numeric/JacobianBasis.h
index 9701cec,737bd57..1d49f78
--- a/Numeric/JacobianBasis.h
+++ b/Numeric/JacobianBasis.h
@@@ -6,150 -6,228 +6,334 @@@
  #ifndef _JACOBIAN_BASIS_H_
  #define _JACOBIAN_BASIS_H_
  
- #include <map>
- #include <vector>
- #include "bezierBasis.h"
  #include "fullMatrix.h"
+ #include "FuncSpaceData.h"
+ #include "bezierBasis.h"
+ 
+ class GradientBasis {
+ public:
+   fullMatrix<double> gradShapeMatX, gradShapeMatY, gradShapeMatZ;
+   fullMatrix<double> gradShapeIdealMatX, gradShapeIdealMatY, gradShapeIdealMatZ;
+ 
+ private:
+   const FuncSpaceData _data;
  
+ public:
+   GradientBasis(FuncSpaceData);
+ 
+   int getNumSamplingPoints() const {return gradShapeMatX.size1();}
+   int getNumMapNodes() const {return gradShapeMatX.size2();}
+ 
+   void getGradientsFromNodes(const fullMatrix<double> &nodes,
+                              fullMatrix<double> *dxyzdX,
+                              fullMatrix<double> *dxyzdY,
+                              fullMatrix<double> *dxyzdZ) const;
+   void getIdealGradientsFromNodes(const fullMatrix<double> &nodes,
+                                   fullMatrix<double> *dxyzdX,
+                                   fullMatrix<double> *dxyzdY,
+                                   fullMatrix<double> *dxyzdZ) const;
+   void mapFromIdealElement(fullMatrix<double> &dxyzdX,
+                            fullMatrix<double> &dxyzdY,
+                            fullMatrix<double> &dxyzdZ) const {
+     GradientBasis::mapFromIdealElement(_data.elementType(), dxyzdX, dxyzdY, dxyzdZ);
+   }
+   void mapFromIdealElement(fullVector<double> &dxyzdX,
+                            fullVector<double> &dxyzdY,
+                            fullVector<double> &dxyzdZ) const {
+     GradientBasis::mapFromIdealElement(_data.elementType(), dxyzdX, dxyzdY, dxyzdZ);
+   }
+   static void mapFromIdealElement(int type,
+                                   fullMatrix<double> &gSMatX,
+                                   fullMatrix<double> &gSMatY,
+                                   fullMatrix<double> &gSMatZ);
+   static void mapFromIdealElement(int type,
+                                   fullVector<double> &gSVecX,
+                                   fullVector<double> &gSVecY,
+                                   fullVector<double> &gSVecZ);
+   static void mapFromIdealElement(int type, double jac[3][3]);
+ };
  
 +class GradientBasis {
 + public:
 +  fullMatrix<double> gradShapeMatX, gradShapeMatY, gradShapeMatZ;
 +
 + public :
 +
 +  GradientBasis(int tag, int order);
 +
 +  int getNumSamplingPoints() const {return gradShapeMatX.size1();}
 +  int getNumMapNodes() const {return gradShapeMatX.size2();}
 +
 +  void getGradientsFromNodes(const fullMatrix<double> &nodes,
 +                             fullMatrix<double> *dxyzdX,
 +                             fullMatrix<double> *dxyzdY,
 +                             fullMatrix<double> *dxyzdZ) const;
 +};
 +
 +
  class JacobianBasis {
++<<<<<<< HEAD
 + private:
 +  const GradientBasis *_gradBasis;
++=======
+ private:
+   const GradientBasis *_gradBasis;
+   const bezierBasis *_bezier;
+ 
+   const FuncSpaceData _data;
+   const int _dim;
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    fullMatrix<double> gradShapeMatXFast, gradShapeMatYFast, gradShapeMatZFast;
-   fullVector<double> primGradShapeBarycenterX, primGradShapeBarycenterY, primGradShapeBarycenterZ;
-   fullMatrix<double> matrixPrimJac2Jac;                                   // Lifts Lagrange basis of primary Jac. to Lagrange basis of Jac.
+   fullVector<double> primGradShapeBaryX, primGradShapeBaryY, primGradShapeBaryZ;
+   fullVector<double> primIdealGradShapeBaryX, primIdealGradShapeBaryY,
+                      primIdealGradShapeBaryZ;
+   fullMatrix<double> matrixPrimJac2Jac;                                           // Lifts Lagrange basis of primary Jac. to Lagrange basis of Jac.
  
    int numJacNodes, numPrimJacNodes;
    int numMapNodes, numPrimMapNodes;
    int numJacNodesFast;
  
++<<<<<<< HEAD
 + public :
 +  const bezierBasis *bezier;
 +
 +  JacobianBasis(int tag, int jacOrder = -1);
++=======
+ public:
+   JacobianBasis(FuncSpaceData);
++>>>>>>> upstream/2.9.3+dfsg1
  
    // Get methods
-   inline int getNumJacNodes() const { return numJacNodes; }
-   inline int getNumJacNodesFast() const { return numJacNodesFast; }
-   inline int getNumMapNodes() const { return numMapNodes; }
-   inline int getNumPrimJacNodes() const { return numPrimJacNodes; }
-   inline int getNumPrimMapNodes() const { return numPrimMapNodes; }
-   inline int getNumDivisions() const { return bezier->getNumDivision(); }
-   inline int getNumSubNodes() const { return bezier->subDivisor.size1(); }
-   inline int getNumLagCoeff() const { return bezier->getNumLagCoeff(); }
+   inline int getJacOrder() const {return _data.spaceOrder();}
+   inline int getNumJacNodes() const {return numJacNodes;}
+   inline int getNumJacNodesFast() const {return numJacNodesFast;}
+   inline int getNumMapNodes() const {return numMapNodes;}
+   inline int getNumPrimJacNodes() const {return numPrimJacNodes;}
+   inline int getNumPrimMapNodes() const {return numPrimMapNodes;}
+   const bezierBasis* getBezier() const;
  
    // Jacobian evaluation methods
-   double getPrimNormals1D(const fullMatrix<double> &nodesXYZ, fullMatrix<double> &result) const;
-   double getPrimNormal2D(const fullMatrix<double> &nodesXYZ, fullMatrix<double> &result) const;
-   double getPrimJac3D(const fullMatrix<double> &nodesXYZ) const;
+   double getPrimNormals1D(const fullMatrix<double> &nodesXYZ,
+                           fullMatrix<double> &result) const;
+   double getPrimNormal2D(const fullMatrix<double> &nodesXYZ,
+                          fullMatrix<double> &result, bool ideal=false) const;
+   double getPrimJac3D(const fullMatrix<double> &nodesXYZ, bool ideal=false) const;
    inline void getSignedJacAndGradients(const fullMatrix<double> &nodesXYZ,
++<<<<<<< HEAD
 +                                       const fullMatrix<double> &normals, fullMatrix<double> &JDJ) const {
 +    getSignedJacAndGradientsGeneral(numJacNodes, _gradBasis->gradShapeMatX,
 +        _gradBasis->gradShapeMatY, _gradBasis->gradShapeMatZ, nodesXYZ, normals, JDJ);
++=======
+                                        const fullMatrix<double> &normals,
+                                        fullMatrix<double> &JDJ) const {
+     getSignedJacAndGradientsGeneral(numJacNodes, _gradBasis->gradShapeMatX,
+                                     _gradBasis->gradShapeMatY,
+                                     _gradBasis->gradShapeMatZ,
+                                     nodesXYZ, normals, JDJ);
++>>>>>>> upstream/2.9.3+dfsg1
    }
    inline void getSignedJacAndGradientsFast(const fullMatrix<double> &nodesXYZ,
-                                            const fullMatrix<double> &normals, fullMatrix<double> &JDJ) const {
-     getSignedJacAndGradientsGeneral(numJacNodesFast,gradShapeMatXFast,gradShapeMatYFast,
-                                     gradShapeMatZFast,nodesXYZ,normals,JDJ);
+                                            const fullMatrix<double> &normals,
+                                            fullMatrix<double> &JDJ) const {
+     getSignedJacAndGradientsGeneral(numJacNodesFast, gradShapeMatXFast,
+                                     gradShapeMatYFast, gradShapeMatZFast,
+                                     nodesXYZ, normals, JDJ);
+   }
+   inline void getSignedIdealJacAndGradients(const fullMatrix<double> &nodesXYZ,
+                                             const fullMatrix<double> &normals,
+                                             fullMatrix<double> &JDJ) const {
+     getSignedJacAndGradientsGeneral(numJacNodes, _gradBasis->gradShapeIdealMatX,
+                                     _gradBasis->gradShapeIdealMatY,
+                                     _gradBasis->gradShapeIdealMatZ,
+                                     nodesXYZ, normals, JDJ);
    }
    void getMetricMinAndGradients(const fullMatrix<double> &nodesXYZ,
                                  const fullMatrix<double> &nodesXYZStraight,
++<<<<<<< HEAD
 +                                fullVector<double> &lambdaJ , fullMatrix<double> &gradLambdaJ) const;
 +  inline void getSignedJacobian(const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const {
 +    getSignedJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
 +        _gradBasis->gradShapeMatY, _gradBasis->gradShapeMatZ,nodesXYZ,jacobian);
 +  }
 +  inline void getSignedJacobian(const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const {
 +    getSignedJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
 +        _gradBasis->gradShapeMatY, _gradBasis->gradShapeMatZ,nodesX,nodesY,nodesZ,jacobian);
 +  }
 +  inline void getScaledJacobian(const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const {
 +    getScaledJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
 +        _gradBasis->gradShapeMatY, _gradBasis->gradShapeMatZ,nodesXYZ,jacobian);
 +  }
 +  inline void getScaledJacobian(const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const {
 +    getScaledJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
 +        _gradBasis->gradShapeMatY, _gradBasis->gradShapeMatZ,nodesX,nodesY,nodesZ,jacobian);
 +  }
 +  inline void getSignedJacobianFast(const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const {
 +    getSignedJacobianGeneral(numJacNodesFast,gradShapeMatXFast,gradShapeMatYFast,gradShapeMatZFast,nodesXYZ,jacobian);
++=======
+                                 fullVector<double> &lambdaJ,
+                                 fullMatrix<double> &gradLambdaJ) const;
+   inline void getSignedJacobian(const fullMatrix<double> &nodesXYZ,
+                                 fullVector<double> &jacobian) const {
+     getJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
+                        _gradBasis->gradShapeMatY,
+                        _gradBasis->gradShapeMatZ,
+                        nodesXYZ, false, false, jacobian);
    }
-   inline void getScaledJacobianFast(const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const {
-     getScaledJacobianGeneral(numJacNodesFast,gradShapeMatXFast,gradShapeMatYFast,gradShapeMatZFast,nodesXYZ,jacobian);
+   inline void getSignedJacobian(const fullMatrix<double> &nodesX,
+                                 const fullMatrix<double> &nodesY,
+                                 const fullMatrix<double> &nodesZ,
+                                 fullMatrix<double> &jacobian) const {
+     getJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
+                        _gradBasis->gradShapeMatY,
+                        _gradBasis->gradShapeMatZ,
+                        nodesX, nodesY, nodesZ, false, false, jacobian);
    }
-   //
+   inline void getSignedIdealJacobian(const fullMatrix<double> &nodesXYZ,
+                                      fullVector<double> &jacobian) const {
+     getJacobianGeneral(numJacNodes, _gradBasis->gradShapeIdealMatX,
+                        _gradBasis->gradShapeIdealMatY,
+                        _gradBasis->gradShapeIdealMatZ,
+                        nodesXYZ, true, false, jacobian);
+   }
+   inline void getSignedIdealJacobian(const fullMatrix<double> &nodesX,
+                                      const fullMatrix<double> &nodesY,
+                                      const fullMatrix<double> &nodesZ,
+                                      fullMatrix<double> &jacobian) const {
+     getJacobianGeneral(numJacNodes, _gradBasis->gradShapeIdealMatX,
+                        _gradBasis->gradShapeIdealMatY,
+                        _gradBasis->gradShapeIdealMatZ,
+                        nodesX, nodesY, nodesZ, true, false, jacobian);
+   }
+   inline void getScaledJacobian(const fullMatrix<double> &nodesXYZ,
+                                 fullVector<double> &jacobian) const {
+     getJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
+                        _gradBasis->gradShapeMatY,
+                        _gradBasis->gradShapeMatZ,
+                        nodesXYZ, false, true, jacobian);
++>>>>>>> upstream/2.9.3+dfsg1
+   }
+   inline void getScaledJacobian(const fullMatrix<double> &nodesX,
+                                 const fullMatrix<double> &nodesY,
+                                 const fullMatrix<double> &nodesZ,
+                                 fullMatrix<double> &jacobian) const {
+     getJacobianGeneral(numJacNodes, _gradBasis->gradShapeMatX,
+                        _gradBasis->gradShapeMatY,
+                        _gradBasis->gradShapeMatZ,
+                        nodesX, nodesY, nodesZ, false, true, jacobian);
+   }
+   inline void getSignedJacobianFast(const fullMatrix<double> &nodesXYZ,
+                                     fullVector<double> &jacobian) const {
+     getJacobianGeneral(numJacNodesFast, gradShapeMatXFast,
+                        gradShapeMatYFast, gradShapeMatZFast,
+                        nodesXYZ, false, false, jacobian);
+   }
+   inline void getScaledJacobianFast(const fullMatrix<double> &nodesXYZ,
+                                     fullVector<double> &jacobian) const {
+     getJacobianGeneral(numJacNodesFast, gradShapeMatXFast,
+                        gradShapeMatYFast, gradShapeMatZFast,
+                        nodesXYZ, false, true, jacobian);
+   }
+ 
    inline void lag2Bez(const fullVector<double> &jac, fullVector<double> &bez) const {
-     bezier->matrixLag2Bez.mult(jac,bez);
+     getBezier()->matrixLag2Bez.mult(jac,bez);
    }
    inline void lag2Bez(const fullMatrix<double> &jac, fullMatrix<double> &bez) const {
-     bezier->matrixLag2Bez.mult(jac,bez);
+     getBezier()->matrixLag2Bez.mult(jac,bez);
    }
    inline void primJac2Jac(const fullVector<double> &primJac, fullVector<double> &jac) const {
      matrixPrimJac2Jac.mult(primJac,jac);
    }
++<<<<<<< HEAD
 +  inline void subdivideBezierCoeff(const fullVector<double> &bez, fullVector<double> &result) const {
 +    bezier->subDivisor.mult(bez,result);
 +  }
 +  //
 +  void interpolate(const fullVector<double> &jacobian,
 +                   const fullMatrix<double> &uvw,
 +                   fullMatrix<double> &result, bool areBezier = false) const;
 +
 +  //
 +  static int jacobianOrder(int parentType, int order);
 +  static fullMatrix<double> generateJacMonomialsPyramid(int order);
 +  static fullMatrix<double> generateJacPointsPyramid(int order);
 +
 +
 + private :
 +  template<bool scaling>
 +  inline void getJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                 const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                 const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const;
 +  template<bool scaling>
 +  inline void getJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                 const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                 const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                 const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const;
 +  void getSignedJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const;
 +  void getSignedJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const;
 +  void getScaledJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                const fullMatrix<double> &nodesXYZ, fullVector<double> &jacobian) const;
 +  void getScaledJacobianGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                const fullMatrix<double> &nodesX, const fullMatrix<double> &nodesY,
 +                                const fullMatrix<double> &nodesZ, fullMatrix<double> &jacobian) const;
 +
 +  void getSignedJacAndGradientsGeneral(int nJacNodes, const fullMatrix<double> &gSMatX,
 +                                       const fullMatrix<double> &gSMatY, const fullMatrix<double> &gSMatZ,
 +                                       const fullMatrix<double> &nodesXYZ, const fullMatrix<double> &normals,
 +                                       fullMatrix<double> &JDJ) const;
++=======
+ 
+   void interpolate(const fullVector<double> &jacobian,
+                    const fullMatrix<double> &uvw,
+                    fullMatrix<double> &result, bool areBezier = false) const;
+ 
+   static int jacobianOrder(int tag);
+   static int jacobianOrder(int parentType, int order);
+   static FuncSpaceData jacobianMatrixSpace(int type, int order);
+ 
+ 
+  private :
+   void getJacobianGeneral(int nJacNodes,
+                           const fullMatrix<double> &gSMatX,
+                           const fullMatrix<double> &gSMatY,
+                           const fullMatrix<double> &gSMatZ,
+                           const fullMatrix<double> &nodesXYZ,
+                           bool idealNorm, bool scaling,
+                           fullVector<double> &jacobian) const;
+   void getJacobianGeneral(int nJacNodes,
+                           const fullMatrix<double> &gSMatX,
+                           const fullMatrix<double> &gSMatY,
+                           const fullMatrix<double> &gSMatZ,
+                           const fullMatrix<double> &nodesX,
+                           const fullMatrix<double> &nodesY,
+                           const fullMatrix<double> &nodesZ,
+                           bool idealNorm, bool scaling,
+                           fullMatrix<double> &jacobian) const;
+ 
+   void getSignedJacAndGradientsGeneral(int nJacNodes,
+                                        const fullMatrix<double> &gSMatX,
+                                        const fullMatrix<double> &gSMatY,
+                                        const fullMatrix<double> &gSMatZ,
+                                        const fullMatrix<double> &nodesXYZ,
+                                        const fullMatrix<double> &normals,
+                                        fullMatrix<double> &JDJ) const;
+   void getSignedIdealJacAndGradientsGeneral(int nJacNodes,
+                                             const fullMatrix<double> &gSMatX,
+                                             const fullMatrix<double> &gSMatY,
+                                             const fullMatrix<double> &gSMatZ,
+                                             const fullMatrix<double> &nodesXYZ,
+                                             const fullMatrix<double> &normals,
+                                             fullMatrix<double> &JDJ) const;
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  #endif
diff --cc Numeric/MetricBasis.cpp
index c94a392,319070b..4fb1064
--- a/Numeric/MetricBasis.cpp
+++ b/Numeric/MetricBasis.cpp
@@@ -1,18 -1,19 +1,36 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2013 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
  
++<<<<<<< HEAD
 +#include "MetricBasis.h"
 +#include "BasisFactory.h"
 +#include "pointsGenerators.h"
 +#include "BasisFactory.h"
 +#include <queue>
 +#include "OS.h"
 +#include <sstream>
 +
 +double MetricBasis::_tol = 1e-2;
 +int MetricBasis::_which = 0;
++=======
+ #include "MElement.h"
+ #include "AnalyseCurvedMesh.h"
+ #include "MetricBasis.h"
+ #include "BasisFactory.h"
+ #include "pointsGenerators.h"
+ #include "OS.h"
+ #include <queue>
+ #include <sstream>
+ #include <limits>
+ 
+ double MetricBasis::_tol = 1e-3;
++>>>>>>> upstream/2.9.3+dfsg1
  
  namespace {
    double cubicCardanoRoot(double p, double q)
@@@ -46,412 -47,187 +64,586 @@@
      for (int i = 1; i <= k; i++, n--) (c *= n) /= i;
      return c;
    }
++<<<<<<< HEAD
 +}
 +
 +MetricBasis::MetricBasis(int tag)
 +{
 +  const int type = ElementType::ParentTypeFromTag(tag);
 +  const int metOrder = metricOrder(tag);
 +  if (type == TYPE_HEX || type == TYPE_PRI) {
 +    int order = ElementType::OrderFromTag(tag);
 +    _jacobian = new JacobianBasis(tag, 3*order);
 +  }
 +  else if (type == TYPE_TET)
 +    _jacobian = BasisFactory::getJacobianBasis(tag);
 +  else
 +    Msg::Fatal("metric not implemented for element tag %d", tag);
 +  _gradients = BasisFactory::getGradientBasis(tag, metOrder);
 +  _bezier = BasisFactory::getBezierBasis(type, metOrder);
 +
 +  _fillInequalities(metOrder);
 +  __TotSubdivision = 0;
++=======
+ 
+   double symRand(double f = 1)
+   {
+     return f * (rand()%2001 - 1000) / 1000.;
+   }
+ }
+ 
+ MetricBasis::MetricBasis(int tag) :
+   _jacobian(NULL), _type(ElementType::ParentTypeFromTag(tag)),
+   _dim(ElementType::DimensionFromTag(tag))
+ {
+   const bool serendip = false;
+   const int metOrder = metricOrder(tag);
+   const int jacOrder = 3*metOrder/2;
+ 
+   // get bezier and gradients for metric space
+   FuncSpaceData *metricSpace = NULL;
+   if (_type != TYPE_PYR)
+     metricSpace = new FuncSpaceData(true, tag, metOrder, &serendip);
+   else
+     metricSpace = new FuncSpaceData(true, tag, false, metOrder+2,
+                                     metOrder, &serendip);
+ 
+   _gradients = BasisFactory::getGradientBasis(*metricSpace);
+   _bezier = BasisFactory::getBezierBasis(*metricSpace);
+   delete metricSpace;
+ 
+   // get jacobian
+   FuncSpaceData *jacSpace = NULL;
+   if (_type == TYPE_TET || _type == TYPE_HEX || _type == TYPE_PRI) {
+     jacSpace = new FuncSpaceData(true, tag, jacOrder, &serendip);
+   }
+   else if (_type == TYPE_PYR) {
+     jacSpace = new FuncSpaceData(true, tag, false, jacOrder+3,
+                                  jacOrder, &serendip);
+   }
+   else if (_type != TYPE_TRI && _type != TYPE_QUA)
+     Msg::Fatal("metric not implemented for element tag %d", tag);
+ 
+   if (jacSpace) {
+     _jacobian = BasisFactory::getJacobianBasis(*jacSpace);
+     delete jacSpace;
+   }
+ 
+   _fillInequalities(metOrder);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  double MetricBasis::boundMinR(MElement *el)
  {
    MetricBasis *metric = (MetricBasis*)BasisFactory::getMetricBasis(el->getTypeForMSH());
++<<<<<<< HEAD
 +  MetricData *md = NULL;
 +  fullMatrix<double> dummy;
 +  return metric->getBoundRmin(el, md, dummy);
 +}
 +
 +double MetricBasis::sampleR(MElement *el, int order)
 +{
 +  MetricBasis *metric = (MetricBasis*)BasisFactory::getMetricBasis(el->getTypeForMSH());
 +  MetricData *md = NULL;
 +  fullMatrix<double> dummy;
 +  return metric->getMinR(el, md, order);
 +}
 +
 +double MetricBasis::getMinR(MElement *el, MetricData *&md, int deg) const
 +{
 +  fullMatrix<double> samplingPoints;
 +
 +  switch (el->getType()) {
 +    case TYPE_PNT :
 +      samplingPoints = gmshGeneratePointsLine(0);
 +      break;
 +    case TYPE_LIN :
 +      samplingPoints = gmshGeneratePointsLine(deg);
 +      break;
 +    case TYPE_TRI :
 +      samplingPoints = gmshGeneratePointsTriangle(deg,false);
 +      break;
 +    case TYPE_QUA :
 +      samplingPoints = gmshGeneratePointsQuadrangle(deg,false);
 +      break;
 +    case TYPE_TET :
 +      samplingPoints = gmshGeneratePointsTetrahedron(deg,false);
 +      break;
 +    case TYPE_PRI :
 +      samplingPoints = gmshGeneratePointsPrism(deg,false);
 +      break;
 +    case TYPE_HEX :
 +      samplingPoints = gmshGeneratePointsHexahedron(deg,false);
 +      break;
 +    case TYPE_PYR :
 +      samplingPoints = JacobianBasis::generateJacPointsPyramid(deg);
 +      break;
 +    default :
 +      Msg::Error("Unknown Jacobian function space for element type %d", el->getType());
 +      return -1;
 +  }
 +
 +  if (!md) _getMetricData(el, md);
 +
 +  static unsigned int aa = 200;
 +  bool write = false;
 +  if (md->_num < 100000 && ++aa < 200) {
 +    write = true;
 +    std::stringstream name;
 +    name << "HoleMetric_" << el->getNum() << "_";
 +    name << (md->_num % 10);
 +    name << (md->_num % 100)/10;
 +    name << (md->_num % 1000)/100;
 +    name << (md->_num % 10000)/1000;
 +    name << (md->_num % 100000)/10000;
 +    name << ".txt";
 +    ((MetricBasis*)this)->file.open(name.str().c_str(), std::fstream::out);
 +
 +    {
 +      fullMatrix<double> *coeff = md->_metcoeffs;
 +      fullVector<double> *jac = md->_jaccoeffs;
 +      double minp, minpp, maxp, minJ2, maxJ2, minK, mina, maxa, beta, minq, maxq, maxa2, maxa3, maxK2, maxK3, RminBez, RminLag;
 +      minp = _minp(*coeff);
 +      minpp = _minp2(*coeff);
 +      maxp = _maxp(*coeff);
 +      minq = _minq(*coeff);
 +      maxq = _maxq(*coeff);
 +      _minMaxJacobianSqr(*jac, minJ2, maxJ2);
 +      _minJ2P3(*coeff, *jac, minK);
 +      _minMaxA(*coeff, mina, maxa);
 +
 +      double phip, term1, dRda;
 +      _computeTermBeta(mina, minK, dRda, term1, phip);
 +      beta = -3 * mina*mina * term1 / dRda / 6;
 +      if (beta*minK-mina*mina*mina < 0) {
 +        _maxAstKneg(*coeff, *jac, minK, beta, maxa3);
 +        _maxAstKpos(*coeff, *jac, minK, beta, maxa2);
 +      }
 +      else {
 +        _maxAstKpos(*coeff, *jac, minK, beta, maxa3);
 +        _maxAstKneg(*coeff, *jac, minK, beta, maxa2);
 +        if (beta*minK-maxa3*maxa3*maxa3 < 0) {
 +          _maxAstKneg(*coeff, *jac, minK, beta, maxa3);
 +          _maxAstKpos(*coeff, *jac, minK, beta, maxa2);
 +        }
 +      }
 +      _maxKstAfast(*coeff, *jac, mina, beta, maxK2);
 +      _maxKstAsharp(*coeff, *jac, mina, beta, maxK3);
 +
 +      /*if (md->_num == 22)
 +        _computeRmin(*coeff, *jac, RminLag, RminBez, 0, true);
 +      else*/
 +      _computeRmin(*coeff, *jac, RminLag, RminBez, 0, false);
 +
 +      double betaOpt = beta, minaOpt = mina, maxaOpt = maxa3, RminBezOpt;
 +      {
 +        /*const */double phi = std::acos(.5*(minK-maxa3*maxa3*maxa3+3*maxa3))/3;
 +        RminBezOpt = (maxa3+2*std::cos(phi+2*M_PI/3))/(maxa3+2*std::cos(phi));
 +        RminBezOpt = std::sqrt(RminBezOpt);
 +
 +        double RminBez0 = (mina+2*std::cos(phip+M_PI/3))/(mina+2*std::cos(phip-M_PI/3));
 +        RminBez0 = std::sqrt(RminBez0);
 +        double curmina = mina;
 +        double curmaxa = maxa3;
 +        while (std::min(RminLag, RminBez0)-RminBezOpt > MetricBasis::_tol) {
 +          minaOpt = (curmina + curmaxa) / 2;
 +          maxaOpt = curmina;
 +          while (maxaOpt < minaOpt) {
 +            _computeTermBeta(minaOpt, minK, dRda, term1, phip);
 +            betaOpt = -3 * minaOpt*minaOpt * term1 / dRda / 6;
 +            if (betaOpt*minK-minaOpt*minaOpt*minaOpt < 0)
 +              _maxAstKneg(*coeff, *jac, minK, betaOpt, maxaOpt);
 +            else {
 +              _maxAstKpos(*coeff, *jac, minK, betaOpt, maxaOpt);
 +              if (betaOpt*minK-maxaOpt*maxaOpt*maxaOpt < 0)
 +                _maxAstKneg(*coeff, *jac, minK, betaOpt, maxaOpt);
 +            }
 +            minaOpt = (curmina + minaOpt) / 2;
 +          }
 +          curmina = minaOpt;
 +          curmaxa = maxaOpt;
 +          phi = std::acos(.5*(minK-curmaxa*curmaxa*curmaxa+3*curmaxa))/3;
 +          RminBezOpt = (curmaxa+2*std::cos(phi+2*M_PI/3))/(curmaxa+2*std::cos(phi));
 +          phi = std::acos(.5*(minK-curmina*curmina*curmina+3*curmina))/3;
 +          RminBez0 = (curmina+2*std::cos(phi+2*M_PI/3))/(curmina+2*std::cos(phi));
 +          RminBezOpt = std::sqrt(RminBezOpt);
 +          RminBez0 = std::sqrt(RminBez0);
 +        }
 +      }
 +
 +      ((MetricBasis*)this)->file << minK << " ";
 +      ((MetricBasis*)this)->file << maxJ2/minpp/minpp/minpp << " ";
 +      ((MetricBasis*)this)->file << mina << " " << maxa << " ";
 +      ((MetricBasis*)this)->file << beta << " ";
 +      ((MetricBasis*)this)->file << minp << " " << maxp << " ";
 +      ((MetricBasis*)this)->file << minJ2 << " " << maxJ2 << " ";
 +      ((MetricBasis*)this)->file << minpp << " ";
 +      ((MetricBasis*)this)->file << minq << " " << maxq << " ";
 +      ((MetricBasis*)this)->file << maxa2 << " ";
 +      ((MetricBasis*)this)->file << maxa3 << " ";
 +      ((MetricBasis*)this)->file << maxK2 << " ";
 +      ((MetricBasis*)this)->file << maxK3 << " ";
 +      ((MetricBasis*)this)->file << RminBez << " " << RminLag << " ";
 +      ((MetricBasis*)this)->file << betaOpt << " ";
 +      ((MetricBasis*)this)->file << minaOpt << " " << maxaOpt << std::endl;
 +    }
 +  }
 +
 +  double uvw[3];
 +  double minmaxQ[2];
 +  uvw[0] = samplingPoints(0, 0);
 +  uvw[1] = samplingPoints(0, 1);
 +  uvw[2] = samplingPoints(0, 2);
 +
 +  interpolate(el, md, uvw, minmaxQ, write);
 +  double min, max = min = std::sqrt(minmaxQ[0]/minmaxQ[1]);
 +  for (int i = 1; i < samplingPoints.size1(); ++i) {
 +    uvw[0] = samplingPoints(i, 0);
 +    uvw[1] = samplingPoints(i, 1);
 +    uvw[2] = samplingPoints(i, 2);
 +    interpolate(el, md, uvw, minmaxQ, write);
 +    double tmp = std::sqrt(minmaxQ[0]/minmaxQ[1]);
 +    min = std::min(min, tmp);
 +    max = std::max(max, tmp);
 +    //Msg::Info("%g (%g, %g)", tmp, min, max);
 +  }
 +  if (write) {
 +    ((MetricBasis*)this)->file.close();
 +  }
 +  return min;
 +}
 +
 +bool MetricBasis::notStraight(MElement *el, double &metric, int deg) const
 +{
 +  fullMatrix<double> samplingPoints;
 +
 +  switch (el->getType()) {
 +    case TYPE_PNT :
 +      samplingPoints = gmshGeneratePointsLine(0);
 +      break;
 +    case TYPE_LIN :
 +      samplingPoints = gmshGeneratePointsLine(deg);
 +      break;
 +    case TYPE_TRI :
 +      samplingPoints = gmshGeneratePointsTriangle(deg,false);
 +      break;
 +    case TYPE_QUA :
 +      samplingPoints = gmshGeneratePointsQuadrangle(deg,false);
 +      break;
 +    case TYPE_TET :
 +      samplingPoints = gmshGeneratePointsTetrahedron(deg,false);
 +      break;
 +    case TYPE_PRI :
 +      samplingPoints = gmshGeneratePointsPrism(deg,false);
 +      break;
 +    case TYPE_HEX :
 +      samplingPoints = gmshGeneratePointsHexahedron(deg,false);
 +      break;
 +    case TYPE_PYR :
 +      samplingPoints = JacobianBasis::generateJacPointsPyramid(deg);
 +      break;
 +    default :
 +      Msg::Error("Unknown Jacobian function space for element type %d", el->getType());
 +      return false;
 +  }
++=======
+   return metric->getBoundMinR(el);
+ }
+ 
+ double MetricBasis::minRCorner(MElement *el)
+ {
+   int tag = el->getTypeForMSH();
+   int order = 1;
+   if (el->getType() == TYPE_TRI || el->getType() == TYPE_TET) order = 0;
+ 
+   const GradientBasis *gradients;
+   const JacobianBasis *jacobian;
+   if (el->getType() != TYPE_PYR) {
+     gradients = BasisFactory::getGradientBasis(tag, order);
+     jacobian = BasisFactory::getJacobianBasis(tag, order);
+   }
+   else {
+     const bool serendip = false;
+     FuncSpaceData fsd(true, tag, false, 1, 0, &serendip);
+     gradients = BasisFactory::getGradientBasis(fsd);
+     jacobian = BasisFactory::getJacobianBasis(fsd);
+   }
+ 
+   int nSampPnts = jacobian->getNumJacNodes();
+   if (el->getType() == TYPE_PYR) nSampPnts = 4;
+   int nMapping = gradients->getNumMapNodes();
+ 
+   // Nodes
+   fullMatrix<double> nodes(nMapping, 3);
+   el->getNodesCoord(nodes);
+ 
+   // Jacobian coefficients
+   fullVector<double> jacLag(jacobian->getNumJacNodes());
+   jacobian->getSignedJacobian(nodes, jacLag);
+ 
+   // Metric coefficients
+   fullMatrix<double> metCoeffLag;
+   _fillCoeff<false>(el->getDim(), gradients, nodes, metCoeffLag);
+ 
+   // Compute min_corner(R)
+   return _computeMinlagR(jacLag, metCoeffLag, nSampPnts);
+ }
+ 
+ double MetricBasis::minSampledR(MElement *el, int order)
+ {
+   MetricBasis *metric = (MetricBasis*)BasisFactory::getMetricBasis(el->getTypeForMSH());
+   return metric->getMinSampledR(el, order);
+ }
+ 
+ double MetricBasis::getMinSampledR(MElement *el, int deg) const
+ {
+   fullMatrix<double> samplingPoints;
+   bool serendip = false;
+   gmshGeneratePoints(FuncSpaceData(el, deg, &serendip), samplingPoints);
++>>>>>>> upstream/2.9.3+dfsg1
  
    MetricData *md;
    _getMetricData(el, md);
  
++<<<<<<< HEAD
 +  double uvw[3];
 +  double minmaxQ[2];
 +  uvw[0] = samplingPoints(0, 0);
 +  uvw[1] = samplingPoints(0, 1);
 +  uvw[2] = samplingPoints(0, 2);
 +
 +  interpolate(el, md, uvw, minmaxQ);
 +  double min, max = min = std::sqrt(minmaxQ[0]/minmaxQ[1]);
 +  for (int i = 1; i < samplingPoints.size1(); ++i) {
 +    uvw[0] = samplingPoints(i, 0);
 +    uvw[1] = samplingPoints(i, 1);
 +    uvw[2] = samplingPoints(i, 2);
 +    interpolate(el, md, uvw, minmaxQ);
 +    double tmp = std::sqrt(minmaxQ[0]/minmaxQ[1]);
 +    min = std::min(min, tmp);
 +    max = std::max(max, tmp);
 +    //Msg::Info("%g (%g, %g)", tmp, min, max);
 +  }
 +
 +  if (max-min < max*1e-12) {
 +    metric = min;
 +    return false;
 +  }
 +  else {
 +    metric = -1;
 +    return true;
 +  }
 +}
 +
 +double MetricBasis::getBoundRmin(MElement *el, MetricData *&md, fullMatrix<double> &lagCoeff)
 +{
 +  __curElem = el;
 +  int nSampPnts = _gradients->getNumSamplingPoints();
 +  int nMapping = _gradients->getNumMapNodes();
 +  fullMatrix<double> nodes(nMapping, 3);
 +  el->getNodesCoord(nodes);
 +
 +  // Metric coefficients
 +  fullMatrix<double> metCoeffLag;
 +
 +  switch (el->getDim()) {
 +  case 0 :
 +    return -1.;
 +  case 1 :
 +  case 2 :
 +    Msg::Fatal("not implemented");
 +    break;
 +
 +  case 3 :
 +    {
 +      fullMatrix<double> dxyzdX(nSampPnts,3), dxyzdY(nSampPnts,3), dxyzdZ(nSampPnts,3);
 +      _gradients->getGradientsFromNodes(nodes, &dxyzdX, &dxyzdY, &dxyzdZ);
 +
 +      metCoeffLag.resize(nSampPnts, 7);
 +      for (int i = 0; i < nSampPnts; i++) {
 +        const double &dxdX = dxyzdX(i,0), &dydX = dxyzdX(i,1), &dzdX = dxyzdX(i,2);
 +        const double &dxdY = dxyzdY(i,0), &dydY = dxyzdY(i,1), &dzdY = dxyzdY(i,2);
 +        const double &dxdZ = dxyzdZ(i,0), &dydZ = dxyzdZ(i,1), &dzdZ = dxyzdZ(i,2);
 +        const double dvxdX = dxdX*dxdX + dydX*dydX + dzdX*dzdX;
 +        const double dvxdY = dxdY*dxdY + dydY*dydY + dzdY*dzdY;
 +        const double dvxdZ = dxdZ*dxdZ + dydZ*dydZ + dzdZ*dzdZ;
 +        metCoeffLag(i, 0) = (dvxdX + dvxdY + dvxdZ) / 3;
 +        metCoeffLag(i, 1) = dvxdX - metCoeffLag(i, 0);
 +        metCoeffLag(i, 2) = dvxdY - metCoeffLag(i, 0);
 +        metCoeffLag(i, 3) = dvxdZ - metCoeffLag(i, 0);
 +        const double fact = std::sqrt(2);
 +        metCoeffLag(i, 4) = fact * (dxdX*dxdY + dydX*dydY + dzdX*dzdY);
 +        metCoeffLag(i, 5) = fact * (dxdZ*dxdY + dydZ*dydY + dzdZ*dzdY);
 +        metCoeffLag(i, 6) = fact * (dxdX*dxdZ + dydX*dydZ + dzdX*dzdZ);
 +      }
 +    }
 +    break;
 +  }
 +
 +  lagCoeff = metCoeffLag;
++=======
+   fullMatrix<double> R;
+   interpolate(el, md, samplingPoints, R);
+ 
+   if (R.size1() < 1) {
+     delete md;
+     return -1;
+   }
+ 
+   double min = R(0, 1);
+   for (int i = 1; i < R.size1(); ++i)
+     min = std::min(min, R(i, 1));
+ 
+   delete md;
+   return min;
+ }
+ 
+ double MetricBasis::getBoundMinR(MElement *el) const
+ {
+   int nSampPnts = _gradients->getNumSamplingPoints();
+   int nMapping = _gradients->getNumMapNodes();
+ 
+   // Nodes
+   fullMatrix<double> nodes(nMapping, 3);
+   el->getNodesCoord(nodes);
+ 
+   // Jacobian coefficients
+   fullVector<double> *jac = NULL;
+   if (_jacobian) {
+     fullVector<double> jacLag(_jacobian->getNumJacNodes());
+     jac = new fullVector<double>(_jacobian->getNumJacNodes());
+     _jacobian->getSignedIdealJacobian(nodes, jacLag);
+     _jacobian->lag2Bez(jacLag, *jac);
+   }
+ 
+   // Metric coefficients
+   fullMatrix<double> metCoeffLag;
+   _fillCoeff<true>(el->getDim(), _gradients, nodes, metCoeffLag);
++>>>>>>> upstream/2.9.3+dfsg1
    fullMatrix<double> *metCoeff;
    metCoeff = new fullMatrix<double>(nSampPnts, metCoeffLag.size2());
    _bezier->matrixLag2Bez.mult(metCoeffLag, *metCoeff);
  
++<<<<<<< HEAD
 +  // Jacobian coefficients
 +  fullVector<double> jacLag(_jacobian->getNumJacNodes());
 +  fullVector<double> *jac = new fullVector<double>(_jacobian->getNumJacNodes());
 +  _jacobian->getSignedJacobian(nodes, jacLag);
 +  _jacobian->lag2Bez(jacLag, *jac);
 +
 +  //
 +  double RminLag, RminBez;
 +
 +  /*Msg::Info("----------------");
 +  Msg::Info("Jacobian");
 +  for (int i = 0; i < jac->size(); ++i) {
 +    Msg::Info("%g", (*jac)(i));
 +  }
 +  Msg::Info("----------------");
 +  Msg::Info("Metric");
 +  for (int i = 0; i < metCoeff->size1(); ++i) {
 +    Msg::Info("%g %g %g %g %g %g %g", (*metCoeff)(i, 0), (*metCoeff)(i, 1), (*metCoeff)(i, 2), (*metCoeff)(i, 3), (*metCoeff)(i, 4), (*metCoeff)(i, 5), (*metCoeff)(i, 6));
 +  }
 +  Msg::Info("----------------");*/
 +
 +  _computeRmin(*metCoeff, *jac, RminLag, RminBez, 0);
 +  //Msg::Info("el %d", el->getNum());
 +  double mina, maxa;
 +  _minMaxA(*metCoeff, mina, maxa);
 +  static int cntRight = 0, cntTOT = 0;
 +  ++cntTOT;
 +  if (maxa-mina < 1e-10) {
 +    ++cntRight;
 +  }
 +  //Msg::Info("right %d/%d", cntRight, cntTOT);
 +
 +
 +    fullVector<double> *jjac = new fullVector<double>(*jac);
 +    fullMatrix<double> *mmet = new fullMatrix<double>(*metCoeff);
 +    /*for (int i = 0; i < jjac->size(); ++i) {
 +      Msg::Info(":%g", (*jjac)(i));
 +    }
 +    for (int i = 0; i < mmet->size1(); ++i) {
 +      Msg::Info(":%g | %g %g %g %g %g %g", (*mmet)(i, 0), (*mmet)(i, 1), (*mmet)(i, 2), (*mmet)(i, 3), (*mmet)(i, 4), (*mmet)(i, 5), (*mmet)(i, 6));
 +    }*/
 +    md = new MetricData(mmet, jjac, RminBez, 0, 0);
 +      //Msg::Info("+1 %d", md);
 +
 +  if (RminLag-RminBez < MetricBasis::_tol) {
 +    //Msg::Info("RETURNING %g", RminBez);
 +    //Msg::Info("0 subdivision");
 +    return RminBez;
 +  }
 +  else {
 +    //MetricData md(metCoeff, jac, RminBez, 0);
 +    MetricData *md2 = new MetricData(metCoeff, jac, RminBez, 0, 0);
 +      //Msg::Info("+2 %d", md2);
 +    ((MetricBasis*)this)->__numSubdivision = 0;
 +    ((MetricBasis*)this)->__numSub.resize(20);
 +    for (unsigned int i = 0; i < __numSub.size(); ++i) ((MetricBasis*)this)->__numSub[i] = 0;
 +    ((MetricBasis*)this)->__maxdepth = 0;
 +    //double time = Cpu();
 +    static int maxsub = 0, elmax;
 +    double tt = _subdivideForRmin(md2, RminLag, MetricBasis::_tol, MetricBasis::_which);
 +    if (maxsub < __numSubdivision && tt > 10-10) {
 +      maxsub = __numSubdivision;
 +      elmax = el->getNum();
 +    }
 +    //Msg::Info("%d subdivisions (max %d, %d), el %d", __numSubdivision, maxsub, elmax, el->getNum());
 +    /*//Msg::Info("> computation time %g", Cpu() - time);
 +    Msg::Info("> maxDepth %d", __maxdepth);
 +    Msg::Info("> numSubdivision %d", __numSubdivision);
 +    int last = __numSub.size();
 +    while (--last > 0 && __numSub[last] == 0);
 +    for (unsigned int i = 0; i < last+1; ++i) {
 +      Msg::Info("> depth %d: %d", i, __numSub[i]);
 +    }
 +    Msg::Info("RETURNING %g after subdivision", tt);*/
++=======
+   // Compute min(R, _tol)
+   double RminLag, RminBez;
+   _computeRmin(*metCoeff, *jac, RminLag, RminBez);
+ 
+   if (RminLag-RminBez < MetricBasis::_tol) {
+     delete jac;
+     delete metCoeff;
+     return RminBez;
+   }
+   else {
+     MetricData *md2 = new MetricData(metCoeff, jac, RminBez, 0, 0);
+     double tt = _subdivideForRmin(md2, RminLag, MetricBasis::_tol);
++>>>>>>> upstream/2.9.3+dfsg1
      return tt;
    }
  }
  
  void MetricBasis::_fillInequalities(int metricOrder)
  {
++<<<<<<< HEAD
 +  int dimSimplex = _bezier->_dimSimplex;
 +  int dim = _bezier->getDim();
++=======
+   if (_type == TYPE_PYR) {
+     _fillInequalitiesPyr(metricOrder);
+     return;
+   }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    fullMatrix<int> exp(_bezier->_exponents.size1(), _bezier->_exponents.size2());
    for (int i = 0; i < _bezier->_exponents.size1(); ++i) {
      for (int j = 0; j < _bezier->_exponents.size2(); ++j) {
        exp(i, j) = static_cast<int>(_bezier->_exponents(i, j) + .5);
      }
    }
++<<<<<<< HEAD
 +  int ncoeff = _gradients->getNumSamplingPoints();
++=======
+ 
+   int ncoeff = _gradients->getNumSamplingPoints();
+   int dimSimplex = _bezier->getDimSimplex();
+   int dim = _bezier->getDim();
++>>>>>>> upstream/2.9.3+dfsg1
  
    int countP3 = 0, countJ2 = 0, countA = 0;
    for (int i = 0; i < ncoeff; i++) {
@@@ -533,11 -309,16 +725,24 @@@
      }
    }
  
++<<<<<<< HEAD
 +  exp.resize(_jacobian->bezier->_exponents.size1(),
 +             _jacobian->bezier->_exponents.size2());
 +  for (int i = 0; i < _jacobian->bezier->_exponents.size1(); ++i) {
 +    for (int j = 0; j < _jacobian->bezier->_exponents.size2(); ++j) {
 +      exp(i, j) = static_cast<int>(_jacobian->bezier->_exponents(i, j) + .5);
++=======
+   if (_dim == 2) {
+     _lightenInequalities(countJ2, countP3, countA);
+     return;
+   }
+ 
+   exp.resize(_jacobian->getBezier()->_exponents.size1(),
+              _jacobian->getBezier()->_exponents.size2());
+   for (int i = 0; i < _jacobian->getBezier()->_exponents.size1(); ++i) {
+     for (int j = 0; j < _jacobian->getBezier()->_exponents.size2(); ++j) {
+       exp(i, j) = static_cast<int>(_jacobian->getBezier()->_exponents(i, j) + .5);
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    int njac = _jacobian->getNumJacNodes();
@@@ -576,10 -357,116 +781,123 @@@
    }
  
    _lightenInequalities(countJ2, countP3, countA);
++<<<<<<< HEAD
 +
 +  /*Msg::Info("A : %d / %d", countA, ncoeff*(ncoeff+1)/2);
 +  Msg::Info("J2 : %d / %d", countJ2, njac*(njac+1)/2);
 +  Msg::Info("P3 : %d / %d", countP3, ncoeff*(ncoeff+1)*(ncoeff+2)/6);*/
++=======
+ }
+ 
+ void MetricBasis::_fillInequalitiesPyr(int metricOrder)
+ {
+   fullMatrix<int> exp(_bezier->_exponents.size1(), _bezier->_exponents.size2());
+   for (int i = 0; i < _bezier->_exponents.size1(); ++i) {
+     for (int j = 0; j < _bezier->_exponents.size2(); ++j) {
+       exp(i, j) = static_cast<int>(_bezier->_exponents(i, j) + .5);
+     }
+   }
+ 
+   int ncoeff = _gradients->getNumSamplingPoints();
+ 
+   int countP3 = 0, countJ2 = 0, countA = 0;
+   for (int i = 0; i < ncoeff; i++) {
+     for (int j = i; j < ncoeff; j++) {
+       double num, den;
+       num = nChoosek(metricOrder+2, exp(i, 0))
+           * nChoosek(metricOrder+2, exp(i, 1))
+           * nChoosek(metricOrder  , exp(i, 2))
+           * nChoosek(metricOrder+2, exp(j, 0))
+           * nChoosek(metricOrder+2, exp(j, 1))
+           * nChoosek(metricOrder  , exp(j, 2));
+       den = nChoosek(2*metricOrder+4, exp(i, 0) + exp(j, 0))
+           * nChoosek(2*metricOrder+4, exp(i, 1) + exp(j, 1))
+           * nChoosek(2*metricOrder  , exp(i, 2) + exp(j, 2));
+ 
+       if (i != j) num *= 2;
+ 
+       ++countA;
+       int hash = 0;
+       for (int l = 0; l < 3; l++) {
+         hash += (exp(i, l)+exp(j, l)) * pow_int(2*metricOrder+1, l);
+       }
+       _ineqA[hash].push_back(IneqData(num/den, i, j));
+ 
+ 
+       for (int k = j; k < ncoeff; ++k) {
+         double num, den;
+         num = nChoosek(metricOrder+2, exp(i, 0))
+             * nChoosek(metricOrder+2, exp(i, 1))
+             * nChoosek(metricOrder  , exp(i, 2))
+             * nChoosek(metricOrder+2, exp(j, 0))
+             * nChoosek(metricOrder+2, exp(j, 1))
+             * nChoosek(metricOrder  , exp(j, 2))
+             * nChoosek(metricOrder+2, exp(k, 0))
+             * nChoosek(metricOrder+2, exp(k, 1))
+             * nChoosek(metricOrder  , exp(k, 2));
+         den = nChoosek(3*metricOrder+6, exp(i, 0) + exp(j, 0) + exp(k, 0))
+             * nChoosek(3*metricOrder+6, exp(i, 1) + exp(j, 1) + exp(k, 1))
+             * nChoosek(3*metricOrder  , exp(i, 2) + exp(j, 2) + exp(k, 2));
+ 
+         if (i == j) {
+           if (j != k) num *= 3;
+         }
+         else {
+           if (j == k || i == k) {
+             num *= 3;
+           }
+           else num *= 6;
+         }
+ 
+         ++countP3;
+         int hash = 0;
+         for (int l = 0; l < 3; l++) {
+           hash += (exp(i, l)+exp(j, l)+exp(k, l)) * pow_int(3*metricOrder+1, l);
+         }
+         if (j == k && j != i)
+           _ineqP3[hash].push_back(IneqData(num/den, k, j, i));
+         else
+           _ineqP3[hash].push_back(IneqData(num/den, i, j, k));
+       }
+     }
+   }
+ 
+   exp.resize(_jacobian->getBezier()->_exponents.size1(),
+              _jacobian->getBezier()->_exponents.size2());
+   for (int i = 0; i < _jacobian->getBezier()->_exponents.size1(); ++i) {
+     for (int j = 0; j < _jacobian->getBezier()->_exponents.size2(); ++j) {
+       exp(i, j) = static_cast<int>(_jacobian->getBezier()->_exponents(i, j) + .5);
+     }
+   }
+   int njac = _jacobian->getNumJacNodes();
+   for (int i = 0; i < njac; i++) {
+     for (int j = i; j < njac; j++) {
+       int order = metricOrder/2*3;
+ 
+       double num, den;
+       num = nChoosek(order+3, exp(i, 0))
+           * nChoosek(order+3, exp(i, 1))
+           * nChoosek(order  , exp(i, 2))
+           * nChoosek(order+3, exp(j, 0))
+           * nChoosek(order+3, exp(j, 1))
+           * nChoosek(order  , exp(j, 2));
+       den = nChoosek(2*order+6, exp(i, 0) + exp(j, 0))
+           * nChoosek(2*order+6, exp(i, 1) + exp(j, 1))
+           * nChoosek(2*order  , exp(i, 2) + exp(j, 2));
+ 
+       if (i != j) num *= 2;
+ 
+       ++countJ2;
+       int hash = 0;
+       for (int k = 0; k < 3; k++) {
+         hash += (exp(i, k)+exp(j, k)) * pow_int(2*order+1, k);
+       }
+       _ineqJ2[hash].push_back(IneqData(num/den, i, j));
+     }
+   }
+ 
+   _lightenInequalities(countJ2, countP3, countA);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  void MetricBasis::_lightenInequalities(int &countj, int &countp, int &counta)
@@@ -617,142 -504,369 +935,508 @@@
    counta -= cnt[2];
  }
  
++<<<<<<< HEAD
 +void MetricBasis::interpolate(const MElement *el, const MetricData *md, const double *uvw, double *minmaxQ, bool write) const
 +{
 +  if (minmaxQ == NULL) {
 +    Msg::Error("Cannot write solution of interpolation");
 +    return;
 +  }
 +
 +  int order = _bezier->getOrder();
 +
 +  int dimSimplex = 0;
 +  fullMatrix<double> exponents;
 +  double bezuvw[3];
 +  switch (el->getType()) {
 +  case TYPE_PYR:
 +    bezuvw[0] = .5 * (1 + uvw[0]);
 +    bezuvw[1] = .5 * (1 + uvw[1]);
 +    bezuvw[2] = uvw[2];
 +    //_interpolateBezierPyramid(uvw, minmaxQ);
 +    return;
 +
 +  case TYPE_HEX:
 +    bezuvw[0] = .5 * (1 + uvw[0]);
 +    bezuvw[1] = .5 * (1 + uvw[1]);
 +    bezuvw[2] = .5 * (1 + uvw[2]);
 +    dimSimplex = 0;
 +    exponents = gmshGenerateMonomialsHexahedron(order);
 +    break;
 +
 +  case TYPE_TET:
 +    bezuvw[0] = uvw[0];
 +    bezuvw[1] = uvw[1];
 +    bezuvw[2] = uvw[2];
 +    dimSimplex = 3;
 +    exponents = gmshGenerateMonomialsTetrahedron(order);
 +    break;
 +
 +  case TYPE_PRI:
 +    bezuvw[0] = uvw[0];
 +    bezuvw[1] = uvw[1];
 +    bezuvw[2] = .5 * (1 + uvw[2]);
 +    dimSimplex = 2;
 +    exponents = gmshGenerateMonomialsPrism(order);
 +    break;
 +  }
 +
 +  int numCoeff = exponents.size1();
 +  int dim = exponents.size2();
 +
 +  fullMatrix<double> metcoeffs = *md->_metcoeffs;
 +  fullVector<double> jaccoeffs = *md->_jaccoeffs;
 +
 +  double *terms = new double[metcoeffs.size2()];
 +  for (int t = 0; t < metcoeffs.size2(); ++t) {
 +    terms[t] = 0;
 +    for (int i = 0; i < numCoeff; i++) {
 +      double dd = 1;
 +      double pointCompl = 1.;
 +      int exponentCompl = order;
 +      for (int k = 0; k < dimSimplex; k++) {
 +        dd *= nChoosek(exponentCompl, (int) exponents(i, k))
 +          * pow(bezuvw[k], exponents(i, k));
 +        pointCompl -= bezuvw[k];
 +        exponentCompl -= (int) exponents(i, k);
 +      }
 +      dd *= pow(pointCompl, exponentCompl);
 +
 +      for (int k = dimSimplex; k < dim; k++)
 +        dd *= nChoosek(order, (int) exponents(i, k))
 +            * pow(bezuvw[k], exponents(i, k))
 +            * pow(1. - bezuvw[k], order - exponents(i, k));
 +      terms[t] += metcoeffs(i, t) * dd;
 +    }
 +  }
 +
 +  switch (metcoeffs.size2()) {
 +  case 1:
 +    minmaxQ[0] = terms[0];
 +    minmaxQ[1] = terms[0];
 +    break;
 +
 +  case 3:
 +  {
 +    double tmp = pow(terms[1], 2);
 +    tmp += pow(terms[2], 2);
 +    tmp = std::sqrt(tmp);
 +    minmaxQ[0] = terms[0] - tmp;
 +    minmaxQ[1] = terms[0] + tmp;
 +  }
 +    break;
 +
 +  case 7:
 +  {
 +    double tmp = pow(terms[1], 2);
 +    tmp += pow(terms[2], 2);
 +    tmp += pow(terms[3], 2);
 +    tmp += pow(terms[4], 2);
 +    tmp += pow(terms[5], 2);
 +    tmp += pow(terms[6], 2);
 +    tmp = std::sqrt(tmp);
 +    double factor = std::sqrt(6)/3;
 +    if (tmp < 1e-3*terms[0]) {
 +      minmaxQ[0] = terms[0] - factor * tmp;
 +      minmaxQ[1] = terms[0] + factor * tmp;
 +    }
 +    else {
 +      double phi;
 +      //{
 +        fullMatrix<double> nodes(1, 3);
 +        nodes(0, 0) = uvw[0];
 +        nodes(0, 1) = uvw[1];
 +        nodes(0, 2) = uvw[2];
 +
 +        fullMatrix<double> result;
 +        _jacobian->interpolate(jaccoeffs, nodes, result, true);
 +        phi = result(0, 0)*result(0, 0);
 +      //}
 +      phi -= terms[0]*terms[0]*terms[0];
 +      phi += .5*terms[0]*tmp*tmp;
 +      phi /= tmp*tmp*tmp;
 +      phi *= 3*std::sqrt(6);
 +      if (phi >  1) phi =  1;
 +      if (phi < -1) phi = -1;
 +      phi = std::acos(phi)/3;
 +      minmaxQ[0] = terms[0] + factor * tmp * std::cos(phi + 2*M_PI/3);
 +      minmaxQ[1] = terms[0] + factor * tmp * std::cos(phi);
 +      ((MetricBasis*)this)->file << terms[0] << " " << tmp/std::sqrt(6) << " " << result(0, 0) << std::endl;
 +    }
 +  }
 +  break;
 +
 +  default:
 +    Msg::Error("Wrong number of functions for metric: %d",
 +               metcoeffs.size2());
 +  }
 +
 +  delete[] terms;
++=======
+ bool MetricBasis::validateBezierForMetricAndJacobian()
+ {
+   Msg::Info("Testing Bezier interpolation and subdivision "
+       "for jacobien and metric on all element types...");
+   int numError = 0;
+ 
+   // Parameters
+   const int numType = 6;
+   const int acceptedTypes[numType] = {TYPE_TRI, TYPE_QUA, TYPE_TET,
+                                       TYPE_PYR, TYPE_PRI, TYPE_HEX};
+   const int maxOrder = 3; // at least 3 (so that serendip tet are tested)
+   const int numElem = 5; // at least 2 (first is reference element)
+   const int numSubdiv = 2; // at least 1
+   const int numSampPnt = 10; // at least 1
+   const double toleranceTensor = 1e-11; // at most 1e-5 (metric takes values in [0,1])
+   double tolerance; // computed in function of tag
+ 
+   //
+   static const double epsilon = std::numeric_limits<double>::epsilon();
+ 
+   for (int tag = 1; tag <= MSH_NUM_TYPE; ++tag) {
+     if (tag > 66 && tag < 71) continue; //not conventional elements
+     if (tag > 75 && tag < 79) continue; //no element tag 76, 77, 78...
+ 
+     // Check if accepted type
+     const int type = ElementType::ParentTypeFromTag(tag);
+     bool knownType = false;
+     for (int i = 0; i < numType; ++i) {
+       knownType = (knownType || type == acceptedTypes[i]);
+     }
+     if (!knownType) continue;
+ 
+     const int order = ElementType::OrderFromTag(tag);
+     const int dim = ElementType::DimensionFromTag(tag);
+     const bool serendip = ElementType::SerendipityFromTag(tag) > 1;
+ 
+     // Skip p0 elements and elements for which order > 'maxOrder'
+     // and skip for now serendipty pyramids (not implemented)
+     if (order < 1 || order > maxOrder) continue;
+     if (type == TYPE_PYR && serendip) continue;
+ 
+     Msg::Info("... testing element tag %d", tag);
+ 
+     // Compute tolerance
+     tolerance = epsilon * pow_int(10, order*dim);
+     if (type == TYPE_PYR) tolerance = std::max(tolerance, epsilon*1e9);
+ 
+     // Get reference nodes
+     const nodalBasis *mapBasis = BasisFactory::getNodalBasis(tag);
+     fullMatrix<double> nodes;
+     mapBasis->getReferenceNodes(nodes);
+ 
+     // Create 'numElem' elements more and more randomized
+     for (int iel = 0; iel < numElem; ++iel) {
+       const double range = static_cast<double>(iel) / (numElem-1) / order;
+       std::vector<MVertex*> vertices(nodes.size1());
+       for (int i = 0; i < nodes.size1(); ++i) {
+         vertices[i] = new MVertex(nodes(i, 0) + symRand(range),
+                                   dim > 1 ? nodes(i, 1) + symRand(range) : 0,
+                                   dim > 2 ? nodes(i, 2) + symRand(range) : 0);
+       }
+       MElement *el = MElement::createElement(tag, vertices);
+       if (el != NULL) {
+         Msg::Error("MElement was unable to create element for tag %d", tag);
+         ++numError;
+       }
+ 
+       numError += validateBezierForMetricAndJacobian(el, numSampPnt, numSubdiv,
+                                                      toleranceTensor, tolerance);
+     }
+   }
+ 
+   if (numError) Msg::Error("Validation of Bezier terminated with %d errors!", numError);
+   else Msg::Info("Validation of Bezier terminated without errors");
+   return numError;
+ }
+ 
+ int MetricBasis::validateBezierForMetricAndJacobian(MElement *el,
+                                                     int numSampPnt,
+                                                     int numSubdiv,
+                                                     double toleranceTensor,
+                                                     double tolerance)
+ {
+   const int tag = el->getTypeForMSH();
+   const MetricBasis *metricBasis = BasisFactory::getMetricBasis(tag);
+ 
+   // compare the two metric
+   fullMatrix<double> metric_Bez(numSampPnt, 2);
+   fullVector<int> isub(numSubdiv);
+   fullMatrix<double> uvw(numSampPnt, 3);
+   metricBasis->interpolateAfterNSubdivisions(el, numSubdiv, numSampPnt,
+                                              isub, uvw, metric_Bez);
+ 
+   int numBadMatch = 0;
+   int numBadMatchTensor = 0;
+   double maxBadMatch = 0;
+   double maxBadMatchTensor = 0;
+   for (int isamp = 0; isamp < numSampPnt; ++isamp) {
+     double dum[3];
+     double &u = uvw(isamp, 0);
+     double &v = uvw(isamp, 1);
+     double &w = uvw(isamp, 2);
+     double metric_Lag = el->getEigenvaluesMetric(u, v, w, dum);
+ 
+     double diff = std::abs(metric_Lag - metric_Bez(isamp, 0));
+     double diffTensor = std::abs(metric_Lag - metric_Bez(isamp, 1));
+ 
+     if (diffTensor > toleranceTensor) {
+       ++numBadMatchTensor;
+       maxBadMatchTensor = std::max(maxBadMatchTensor, diffTensor);
+     }
+     else if (diff > tolerance) {
+       ++numBadMatch;
+       maxBadMatch = std::max(maxBadMatch, diff);
+     }
+   }
+ 
+   if (numBadMatchTensor > .2*numSampPnt) {
+     Msg::Error("Too much errors "
+         "even when computing by metric tensor (max %g)", maxBadMatchTensor);
+     return 1;
+   }
+   else if (numBadMatch > .5*numSampPnt) {
+     Msg::Error("Too much errors (max %g)", maxBadMatch);
+     return 1;
+   }
+   return 0;
+ }
+ 
+ void MetricBasis::interpolate(const MElement *el,
+                               const MetricData *md,
+                               const fullMatrix<double> &nodes,
+                               fullMatrix<double> &R) const
+ {
+   fullMatrix<double> &metcoeffs = *md->_metcoeffs, *metric = new fullMatrix<double>;
+   fullVector<double> &jaccoeffs = *md->_jaccoeffs, *jac = new fullVector<double>;
+ 
+   _bezier->interpolate(metcoeffs, nodes, *metric);
+ 
+   R.resize(nodes.size1(), 2);
+ 
+   switch (metcoeffs.size2()) {
+   case 1:
+     for (int i = 0; i < R.size1(); ++i)
+       R(i, 0) = R(i, 1) = 1;
+     break;
+ 
+   case 3:
+     for (int i = 0; i < R.size1(); ++i) {
+       // Compute from q, p
+       double p = pow((*metric)(i, 1), 2);
+       p += pow((*metric)(i, 2), 2);
+       p = std::sqrt(p);
+       R(i, 0) = std::sqrt(_R2Dsafe((*metric)(i, 0), p));
+       // Comppute from tensor
+       fullMatrix<double> metricTensor(2, 2);
+       metricTensor(0, 0) = (*metric)(i, 0) + (*metric)(i, 1);
+       metricTensor(1, 1) = (*metric)(i, 0) - (*metric)(i, 1);
+       metricTensor(0, 1) = metricTensor(1, 0) = (*metric)(i, 2);
+       fullVector<double> valReal(2), valImag(2);
+       fullMatrix<double> vecLeft(2, 2), vecRight(2, 2);
+       metricTensor.eig(valReal, valImag, vecLeft, vecRight, true);
+       R(i, 1) = std::sqrt(valReal(0) / valReal(1));
+       }
+     break;
+ 
+   case 7:
+     _jacobian->getBezier()->interpolate(jaccoeffs, nodes, *jac);
+     for (int i = 0; i < R.size1(); ++i) {
+       // Compute from q, p, J
+       double p = 0;
+       for (int k = 1; k < 7; ++k) p += pow((*metric)(i, k), 2);
+       p = std::sqrt(p);
+       R(i, 0) = std::sqrt(_R3Dsafe((*metric)(i, 0), p, (*jac)(i)));
+       // Compute from tensor
+       fullMatrix<double> metricTensor(3, 3);
+       for (int k = 0; k < 3; ++k) {
+         static double fact1 = std::sqrt(6.);
+         static double fact2 = std::sqrt(3.);
+         const int ki = k%2;
+         const int kj = std::min(k+1, 2);
+         metricTensor(k, k) = (*metric)(i, k+1)*fact1 + (*metric)(i, 0);
+         metricTensor(ki, kj) = metricTensor(kj, ki) = (*metric)(i, k+4)*fact2;
+       }
+       fullVector<double> valReal(3), valImag(3);
+       fullMatrix<double> vecLeft(3, 3), vecRight(3, 3);
+       metricTensor.eig(valReal, valImag, vecLeft, vecRight, true);
+       R(i, 1) = std::sqrt(valReal(0) / valReal(2));
+     }
+     break;
+ 
+   default:
+     Msg::Error("Wrong number of functions for metric: %d",
+                metcoeffs.size2());
+   }
+ 
+   delete jac;
+   delete metric;
+ }
+ 
+ void MetricBasis::interpolateAfterNSubdivisions(
+     const MElement *el, int numSubdiv, int numPnt,
+     fullVector<int> &isub,
+     fullMatrix<double> &uvw,
+     fullMatrix<double> &metric) const
+ {
+   // Interpolate metric after 'numSub' random subdivision at
+   //   'numPnt' random points.
+   // Return: isub, the subdomain tag of each subdivision,
+   //         uvw, the reference points at which metric has been interpolated.
+   //         metric, the interpolation.
+ 
+   MetricData *md;
+   _getMetricData(el, md);
+ 
+   // Keep trace of subdomain to be able to compute uvw.
+   // (Ensure to have the tag for the complete element):
+   const nodalBasis *mapBasis = BasisFactory::getNodalBasis(el->getTypeForMSH());
+   fullMatrix<double> nodes;
+   mapBasis->getReferenceNodesForBezier(nodes);
+ 
+   const int nSub = _bezier->getNumDivision();
+   const int numCoeff = md->_metcoeffs->size2();
+   const int numMetPnts = md->_metcoeffs->size1();
+   const int numJacPnts = md->haveJac() ? md->_jaccoeffs->size() : 0;
+   const int numNodPnts = nodes.size1();
+ 
+   const bezierBasis *bezierMapping;
+   if (el->getType() != TYPE_PYR)
+     bezierMapping = BasisFactory::getBezierBasis(el->getTypeForMSH());
+   else {
+     FuncSpaceData data(true, el->getTypeForMSH(), false,
+                        el->getPolynomialOrder(), el->getPolynomialOrder());
+     bezierMapping = BasisFactory::getBezierBasis(data);
+   }
+ 
+   for (int k = 0; k < numSubdiv; ++k) {
+     fullMatrix<double> subcoeffs, subnodes;
+     fullVector<double> subjac;
+     _bezier->subdivideBezCoeff(*md->_metcoeffs, subcoeffs);
+     bezierMapping->subdivideBezCoeff(nodes, subnodes);
+ 
+     if (_dim == 3)
+       _jacobian->getBezier()->subdivideBezCoeff(*md->_jaccoeffs, subjac);
+     delete md;
+ 
+     isub(k) = std::rand() % nSub;
+ 
+     fullMatrix<double> *coeff = new fullMatrix<double>(numMetPnts, numCoeff);
+     coeff->copy(subcoeffs, isub(k) * numMetPnts, numMetPnts, 0, numCoeff, 0, 0);
+     nodes.copy(subnodes, isub(k) * numNodPnts, numNodPnts, 0, _dim, 0, 0);
+     fullVector<double> *jac = NULL;
+     if (_dim == 3) {
+       jac = new fullVector<double>(numJacPnts);
+       jac->copy(subjac, isub(k) * numJacPnts, numJacPnts, 0);
+     }
+ 
+     md = new MetricData(coeff, jac);
+   }
+ 
+   // compute a random convex combination of reference nodes
+   fullMatrix<double> subuvw(uvw.size1(), _dim);
+   {
+     int tagPrimary = ElementType::getTag(el->getType(), 1);
+     const nodalBasis *primMapBasis = BasisFactory::getNodalBasis(tagPrimary);
+     fullMatrix<double> refNodes;
+     primMapBasis->getReferenceNodes(refNodes);
+     double *c = new double[refNodes.size1()];
+ 
+     for (int k = 0; k < uvw.size1(); ++k) {
+       double sum = 0;
+       int exp = 1 + std::rand() % 5;
+       for (int i = 0; i < refNodes.size1(); ++i) {
+         c[i] = pow_int((std::rand() % 1000) / 1000., exp);
+         sum += c[i];
+       }
+       for (int i = 0; i < refNodes.size1(); ++i) {
+         c[i] /= sum;
+         subuvw(k, 0) += c[i] * refNodes(i, 0);
+         if (_dim > 1) subuvw(k, 1) += c[i] * refNodes(i, 1);
+         if (_dim > 2) subuvw(k, 2) += c[i] * refNodes(i, 2);
+       }
+     }
+ 
+     delete[] c;
+   }
+ 
+   interpolate(el, md, subuvw, metric);
+   bezierMapping->interpolate(nodes, subuvw, uvw, false);
+   delete md;
+ }
+ 
+ void MetricBasis::statsForMatlab(MElement *el, int deg, MetricData *md) const
+ {
+   fullMatrix<double> samplingPoints;
+   bool serendip = false;
+   gmshGeneratePoints(FuncSpaceData(el, deg, &serendip), samplingPoints);
+ 
+   if (!md) _getMetricData(el, md);
+ 
+   static unsigned int aa = 0;
+   if (md->_num < 100 && ++aa < 200) {
+     std::stringstream name;
+     name << "metricStat_" << el->getNum() << "_";
+     name << (md->_num % 10);
+     name << (md->_num % 100)/10;
+     name << (md->_num % 1000)/100;
+     name << (md->_num % 10000)/1000;
+     name << (md->_num % 100000)/10000;
+     name << ".txt";
+     ((MetricBasis*)this)->file.open(name.str().c_str(), std::fstream::out);
+ 
+     {
+       int dim = el->getDim();
+       fullMatrix<double> *coeff = md->_metcoeffs;
+       fullVector<double> *jac = md->_jaccoeffs;
+ 
+       double mina, maxa, minK;
+       _minMaxA(*coeff, mina, maxa);
+ 
+       double dRda, term1, phip, beta;
+       double maxaPos, maxaNeg;
+       double maxKfast, maxKsharp;
+       if (dim == 3) {
+         _minK(*coeff, *jac, minK);
+         double tmpa = mina, tmpK = minK;
+         _computeTermBeta(tmpa, tmpK, dRda, term1, phip);
+         beta = -3 * mina*mina * term1 / dRda / 6;
+ 
+         _maxAstKneg(*coeff, *jac, minK, beta, maxaPos);
+         _maxAstKpos(*coeff, *jac, minK, beta, maxaNeg);
+ 
+         _maxKstAfast(*coeff, *jac, mina, beta, maxKfast);
+         _maxKstAsharp(*coeff, *jac, mina, beta, maxKsharp);
+       }
+       else {
+         minK = dRda = term1 = phip = beta = maxaPos = maxaNeg = maxKfast = maxKsharp = -1;
+       }
+ 
+       ((MetricBasis*)this)->file << mina << " " << maxa << " " << minK << " ";
+       ((MetricBasis*)this)->file << dRda << " " << term1 << " " << phip << " ";
+       ((MetricBasis*)this)->file << beta << " ";
+       ((MetricBasis*)this)->file << maxaPos << " " << maxaNeg << " ";
+       ((MetricBasis*)this)->file << maxKfast << " " << maxKsharp << std::endl;
+     }
+   }
+ 
+   fullMatrix<double> R;
+   interpolate(el, md, samplingPoints, R);
+ 
+   if (R.size1() < 1) {
+     ((MetricBasis*)this)->file << -1 << " ";
+     ((MetricBasis*)this)->file.close();
+     return;
+   }
+ 
+   double min = R(0, 1);
+   for (int i = 1; i < R.size1(); ++i)
+     min = std::min(min, R(i, 1));
+ 
+   //((MetricBasis*)this)->file << min << " ";
+   ((MetricBasis*)this)->file.close();
+   return;
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  int MetricBasis::metricOrder(int tag)
@@@ -766,12 -880,13 +1450,22 @@@
      case TYPE_LIN : return order;
  
      case TYPE_TRI :
++<<<<<<< HEAD
 +    case TYPE_TET : return 2*order-2;
 +
 +    case TYPE_QUA :
 +    case TYPE_PRI :
 +    case TYPE_HEX :
 +    case TYPE_PYR : return 2*order;
++=======
+     case TYPE_TET :
+     case TYPE_PYR : return 2*order-2;
+ 
+     case TYPE_QUA :
+     case TYPE_PRI :
+     case TYPE_HEX : return 2*order;
+ 
++>>>>>>> upstream/2.9.3+dfsg1
      default :
        Msg::Error("Unknown element type %d, return order 0", parentType);
        return 0;
@@@ -780,56 -895,23 +1474,76 @@@
  
  void MetricBasis::_computeRmin(
      const fullMatrix<double> &coeff, const fullVector<double> &jac,
++<<<<<<< HEAD
 +    double &RminLag, double &RminBez,
 +    int depth, bool debug) const
 +{
 +  RminLag = 1.;
 +
 +  for (int i = 0; i < _bezier->getNumLagCoeff(); ++i) {
 +    double q = coeff(i, 0);
 +    double p = 0;
 +    for (int k = 1; k < 7; ++k) {
 +      p += pow_int(coeff(i, k), 2);
 +    }
 +    p = std::sqrt(p/6);
 +    const double a = q/p;
 +    if (a > 1e4) {
 +      RminLag = std::min(RminLag, std::sqrt((a - std::sqrt(3)) / (a + std::sqrt(3))));
 +    }
 +    else {
 +      const double x = .5 * (jac(i)/p/p*jac(i)/p - a*a*a + 3*a);
 +      if (x >  1.1 || x < -1.1) {
 +        if (!depth) {
 +          Msg::Error("+ phi %g (jac %g, q %g, p %g)", x, jac(i), q, p);
 +          Msg::Info("%g + %g - %g = %g", jac(i)*jac(i)/p/p/p, .5 * q/p, q*q*q/p/p/p, (jac(i)*jac(i)+.5 * q*p*p-q*q*q)/p/p/p);
 +        }
 +        else if (depth == 1)
 +          Msg::Error("- phi %g @ %d(%d) (jac %g, q %g, p %g)", x, depth, i, jac(i), q, p);
 +      }
 +
 +      double tmpR;
 +      if (x >=  1)
 +        tmpR = (a - 1) / (a + 2);
 +      else if (x <= -1)
 +        tmpR = (a - 2) / (a + 1);
 +      else {
 +        const double phi = std::acos(x)/3;
 +        tmpR = (a + 2*std::cos(phi + 2*M_PI/3)) / (a + 2*std::cos(phi));
 +      }
 +      if (tmpR < 0) {
 +        if (tmpR < -1e-7) Msg::Fatal("3 s normal ? %g (%g, %g, %g) or (%g, %g)",
 +            tmpR, p/std::sqrt(6), q, jac(i)*jac(i),
 +            q/p*std::sqrt(6), jac(i)*jac(i)/p/p/p*6*std::sqrt(6));
 +        else tmpR = 0;
 +      }
 +      RminLag = std::min(RminLag, std::sqrt(tmpR));
 +    }
 +  }
 +
 +  //static int numtot = 0;
 +  //++numtot;
 +  double minK;
 +  _minJ2P3(coeff, jac, minK);
++=======
+     double &RminLag, double &RminBez) const
+ {
+   RminLag = _computeMinlagR(jac, coeff, _bezier->getNumLagCoeff());
+   if (RminLag == 0) {
+     RminBez = 0;
+     return;
+   }
+ 
+   if (coeff.size2() == 3) { // 2d element
+     double mina, dummy;
+     _minMaxA(coeff, mina, dummy);
+     RminBez = std::sqrt(_R2Dsafe(mina));
+     return;
+   }
+ 
+   double minK;
+   _minK(coeff, jac, minK);
++>>>>>>> upstream/2.9.3+dfsg1
    if (minK < 1e-10) {
      RminBez = 0;
      return;
@@@ -883,11 -965,9 +1597,17 @@@
        double am1 = std::pow(amApprox*amApprox*amApprox+da+.05, 1/3.);
        //double am0S = am0, am1S = am1;
        double am = (am0 + am1)/2;
++<<<<<<< HEAD
 +      double R0 = _Rsafe(am0, minK);
 +      double R1 = _Rsafe(am1, minK);
 +      double Rnew = _Rsafe(am, minK);
 +      if (_chkaK(am0, minK)) Msg::Error("chk am0: %d (%g, %g)", _chkaK(am0, minK), am0, minK);
 +      if (_chkaK(am1, minK)) Msg::Error("chk am1: %d (%g, %g)", _chkaK(am1, minK), am1, minK);
++=======
+       double R0 = _R3Dsafe(am0, minK);
+       double R1 = _R3Dsafe(am1, minK);
+       double Rnew = _R3Dsafe(am, minK);
++>>>>>>> upstream/2.9.3+dfsg1
  
        int cnt = 0;
        while (std::abs(R0-Rnew) > _tol*.01 || std::abs(R1-Rnew) > _tol*.01) {
@@@ -901,64 -981,18 +1621,77 @@@
            R1 = Rnew;
          }
          am = (am0 + am1)/2;
++<<<<<<< HEAD
 +        Rnew = _Rsafe(am, minK);
 +      }
 +      /*static int maxcnt = 0, numcnt = 0, totcnt = 0;
 +      ++numcnt;
 +      totcnt += cnt;
 +      if (maxcnt < cnt) {
 +        maxcnt = cnt;
 +      }
 +      Msg::Info("maxcnt %d (num %d/%d=%g average %g)", maxcnt, numcnt, numtot, (double)numcnt/numtot, (double)totcnt/numcnt);
 +      double TESTdRda, dum0, dum1;
 +      _computeTermBeta(am0, minK, TESTdRda, dum0, dum1);
 +      if (TESTdRda > 1e12) Msg::Fatal("> 0 [%g %g %g] (%g, %g), %g -> [%g, %g] for el %d", R0, Rnew, R1, am, minK, amApprox, am0S, am1S, __curElem->getNum());
 +      _computeTermBeta(am1, minK, TESTdRda, dum0, dum1);
 +      if (TESTdRda < -1e12) Msg::Fatal("< 0 [%g %g %g] (%g, %g), %g -> [%g, %g] for el %d", R0, Rnew, R1, am, minK, amApprox, am0S, am1S, __curElem->getNum());*/
 +      if (am < maxa) {
 +        RminBez = _Rsafe(am, minK);
 +        //Msg::Info("cpt 1: %d (%g, %g, %g)", _chkaKR(am, minK, RminBez), am, minK, RminBez);
 +        if (_chkaKR(am, minK, RminBez)) Msg::Error("cpt 1: %d (%g, %g, %g)", _chkaKR(am, minK, RminBez), am, minK, RminBez);
++=======
+         Rnew = _R3Dsafe(am, minK);
+       }
+ 
+       if (am < maxa) {
+         RminBez = _R3Dsafe(am, minK);
++>>>>>>> upstream/2.9.3+dfsg1
          RminBez = std::sqrt(RminBez);
          return;
        }
      }
  
++<<<<<<< HEAD
 +    RminBez = _Rsafe(maxa, minK);
 +    //Msg::Info("cpt 2: %d (%g, %g, %g)", _chkaKR(maxa, minK, RminBez), maxa, minK, RminBez);
 +    if (_chkaKR(maxa, minK, RminBez)) Msg::Error("cpt 2: %d (%g, %g, %g)", _chkaKR(maxa, minK, RminBez), maxa, minK, RminBez);
 +    RminBez = std::sqrt(RminBez);
 +
 +    /*double RminBez0 = (mina+2*std::cos(phip+M_PI/3))/(mina+2*std::cos(phip-M_PI/3));
 +    RminBez0 = std::sqrt(RminBez0);
 +    double curmina = mina;
 +    double curmaxa = maxa;
 +      //Msg::Info(" ");
 +    while (std::min(RminLag, RminBez0)-RminBez > MetricBasis::_tol) {
 +      //Msg::Info("%g vs %g", RminBez0, RminBez);
 +      double a = (curmina + curmaxa) / 2;
 +      double newa = curmina;
 +      while (newa < a) {
 +        _computeTermBeta(a, minK, dRda, term1, phip, sqrt);
 +        beta = -3 * a*a * term1 / sqrt / dRda / 6;
 +        if (beta*minK-a*a*a < 0)
 +          _maxAstKneg(coeff, jac, minK, beta, newa);
 +        else {
 +          _maxAstKpos(coeff, jac, minK, beta, newa);
 +          if (newa < am && beta*minK-newa*newa*newa < 0)
 +            _maxAstKneg(coeff, jac, minK, beta, newa);
 +        }
 +        a = (curmina + a) / 2;
 +      }
 +      curmina = a;
 +      curmaxa = newa;
 +      phi = std::acos(.5*(minK-curmaxa*curmaxa*curmaxa+3*curmaxa))/3;
 +      RminBez = (curmaxa+2*std::cos(phi+2*M_PI/3))/(curmaxa+2*std::cos(phi));
 +      phi = std::acos(.5*(minK-curmina*curmina*curmina+3*curmina))/3;
 +      RminBez0 = (curmina+2*std::cos(phi+2*M_PI/3))/(curmina+2*std::cos(phi));
 +      RminBez = std::sqrt(RminBez);
 +      RminBez0 = std::sqrt(RminBez0);
 +    }*/
++=======
+     RminBez = _R3Dsafe(maxa, minK);
+     RminBez = std::sqrt(RminBez);
++>>>>>>> upstream/2.9.3+dfsg1
      return;
    }
    else if (term1 < 0) {
@@@ -970,44 -1004,19 +1703,58 @@@
      const double x = .5*(maxK-mina*mina*mina+3*mina);
      const double phimin = std::acos(-1/mina) - M_PI/3;
      double myphi;
++<<<<<<< HEAD
 +    int which = 0;
 +    double tmpphi;
 +    if (std::abs(x) > 1) {
 +      myphi = phimin;
 +      which = 2;
 +    }
 +    else {
 +      const double phimaxK = std::acos(x)/3;
 +      tmpphi = phimaxK;
 +      myphi = std::max(phimin, phimaxK);
 +      if (phimin > phimaxK)
 +        which = 2;
 +      else
 +        which = 1;
 +    }
 +    RminBez = (mina+2*std::cos(myphi+2*M_PI/3))/(mina+2*std::cos(myphi));
 +    //Msg::Info("cpt 3: %d", _chkaKR(mina, maxK, RminBez));
 +    int check;
 +    if (which == 1) {
 +      check = _chkaKR(mina, maxK, RminBez);
 +      if (check) {
 +        Msg::Error("cpt 3.1: %d (%g, %g, %g)", check, mina, maxK, RminBez);
 +        double Kphimin = 2 * std::cos(3*phimin) + mina*mina*mina - 3*mina;
 +        Msg::Info("%g->%g %g->%g", maxK, tmpphi/M_PI, Kphimin, phimin/M_PI);
 +      }
 +    }
 +    else {
 +      double Kphimin = 2 * std::cos(3*phimin) + mina*mina*mina - 3*mina;
 +      check = _chkaKR(mina, Kphimin, RminBez);
 +      if (check) Msg::Error("cpt 3.2: %d (%g, %g, %g)", check, mina, Kphimin, RminBez);
 +    }
++=======
+     if (std::abs(x) > 1) {
+       myphi = phimin;
+     }
+     else {
+       const double phimaxK = std::acos(x)/3;
+       myphi = std::max(phimin, phimaxK);
+     }
+     RminBez = (mina+2*std::cos(myphi+2*M_PI/3))/(mina+2*std::cos(myphi));
++>>>>>>> upstream/2.9.3+dfsg1
      RminBez = std::sqrt(RminBez);
      return;
    }
    else {
      RminBez = (mina+2*std::cos(phip+M_PI/3))/(mina+2*std::cos(phip-M_PI/3));
++<<<<<<< HEAD
 +    //Msg::Info("cpt 4: %d", _chkaKR(mina, minK, RminBez));
 +    if (_chkaKR(mina, minK, RminBez)) Msg::Error("cpt 4: %d (%g, %g, %g) dRda %g", _chkaKR(mina, minK, RminBez), mina, minK, RminBez, dRda);
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      RminBez = std::sqrt(RminBez);
      return;
    }
@@@ -1025,191 -1034,158 +1772,339 @@@ void MetricBasis::_computeRmax
      for (int k = 1; k < 7; ++k) {
        p += pow_int(coeff(i, k), 2);
      }
++<<<<<<< HEAD
 +    p = std::sqrt(p/6);
 +    const double a = q/p;
 +    if (a > 1e4) {
 +      RmaxLag = std::max(RmaxLag, std::sqrt((a - std::sqrt(3)) / (a + std::sqrt(3))));
 +    }
 +    else {
 +      const double x = .5 * (jac(i)/p/p*jac(i)/p - a*a*a + 3*a);
 +
 +      double tmpR;
 +      if (x >=  1)
 +        tmpR = (a - 1) / (a + 2);
 +      else if (x <= -1)
 +        tmpR = (a - 2) / (a + 1);
 +      else {
 +        const double phi = std::acos(x)/3;
 +        tmpR = (a + 2*std::cos(phi + 2*M_PI/3)) / (a + 2*std::cos(phi));
 +      }
 +      if (tmpR < 0) {
 +        if (tmpR < -1e-7) Msg::Fatal("3 s normal ? %g (%g, %g, %g) or (%g, %g)",
 +            tmpR, p/std::sqrt(6), q, jac(i)*jac(i),
 +            q/p*std::sqrt(6), jac(i)*jac(i)/p/p/p*6*std::sqrt(6));
 +        else tmpR = 0;
 +      }
++=======
+     p = std::sqrt(p);
+     const double a = q/p;
+     if (a > 1e4) {
+       RmaxLag = std::max(RmaxLag, std::sqrt((a - std::sqrt(3.)) / (a + std::sqrt(3.))));
+     }
+     else {
+       const double tmpR = _R3Dsafe(a, jac(i)/p/p*jac(i)/p);
++>>>>>>> upstream/2.9.3+dfsg1
        RmaxLag = std::max(RmaxLag, std::sqrt(tmpR));
      }
    }
  }
  
++<<<<<<< HEAD
 +double MetricBasis::_subdivideForRmin(
 +    MetricData *md, double RminLag, double tol, int which) const
 +{
 +  std::priority_queue<MetricData*, std::vector<MetricData*>, lessMinB> subdomains;
 +  const int numCoeff = md->_metcoeffs->size2();
 +  const int numMetPnts = md->_metcoeffs->size1();
 +  const int numJacPnts = md->_jaccoeffs->size();
 +  const int numSub = _jacobian->getNumDivisions();
 +  subdomains.push(md);
 +
 +  static unsigned int aa = 200;
 +  //bool write = false;
 +  if (++aa < 200) {
 +    getMinR(__curElem, md, 16);
 +  }
 +
 +  std::vector<fullVector<double>*> trash;
 +
 +  //Msg::Info("lagrange %g", RminLag);
 +
 +  while (RminLag - subdomains.top()->_RminBez > tol && subdomains.size() < 25000) {
 +    //Msg::Info("%g - %g > %g && %d < %d", RminLag, subdomains.top()->_RminBez, tol, subdomains.size(), pow_int(8,8));
 +    fullMatrix<double> *subcoeffs, *coeff;
 +    fullVector<double> *subjac, *jac;
 +
 +    MetricData *current = subdomains.top();
 +    subcoeffs = new fullMatrix<double>(numSub*numMetPnts, numCoeff);
 +    subjac = new fullVector<double>(numSub*numJacPnts);
 +    _bezier->subDivisor.mult(*current->_metcoeffs, *subcoeffs);
 +    _jacobian->subdivideBezierCoeff(*current->_jaccoeffs, *subjac);
 +    int depth = current->_depth;
 +    int num = current->_num;
 +      //Msg::Info("d %d RminBez %g / %g", depth, current->_RminBez, RminLag);
 +
 +    //Msg::Info("delete %d (%d)", current, depth);
 +    //Msg::Info(" ");
 +    delete current;
 +    subdomains.pop();
 +
 +    ++((MetricBasis*)this)->__numSubdivision;
 +    ++((MetricBasis*)this)->__TotSubdivision;
 +    ++((MetricBasis*)this)->__numSub[depth];
 +    ((MetricBasis*)this)->__maxdepth = std::max(__maxdepth, depth+1);
 +      //Msg::Info("subdividing %d", current);
 +
 +    for (int i = 0; i < numSub; ++i) {
 +      coeff = new fullMatrix<double>(numMetPnts, numCoeff);
 +      coeff->copy(*subcoeffs, i * numMetPnts, numMetPnts, 0, numCoeff, 0, 0);
 +      jac = new fullVector<double>;
 +      jac->setAsProxy(*subjac, i * numJacPnts, numJacPnts);
 +      double minLag, minBez;
 +      _computeRmin(*coeff, *jac, minLag, minBez, depth+1);
 +      //Msg::Info("new RminBez %g", minBez);
 +      RminLag = std::min(RminLag, minLag);
 +      int newNum = num + (i+1) * pow_int(10, depth);
 +      MetricData *metData = new MetricData(coeff, jac, minBez, depth+1, newNum);
 +
 +      if (aa < 200) {
 +        getMinR(__curElem, metData, 16);
 +      }
 +
 +      //Msg::Info("    %g (%d)", minLag, metData);
 +      //Msg::Info("+4 %d", metData);
 +      subdomains.push(metData);
 +    }
 +    trash.push_back(subjac);
 +    delete subcoeffs;
 +
 +    /*for (unsigned int i = 0; i < vect.size(); ++i) {
 +      Msg::Info("v %g", vect[i]->_RminBez);
 +    }
 +    Msg::Info("top %g (RminLag %g)", subdomains.top()->_RminBez, RminLag);
 +    return 0;*/
 +    //Msg::Info("RminLag %g - RminBez %g  @ %d", RminLag, subdomains.top()->_RminBez, subdomains.top()->_depth);
 +  }
 +  //Msg::Info("%g - %g = %g >? %g", RminLag, subdomains.top()->_RminBez, RminLag - subdomains.top()->_RminBez, tol);
 +  //Msg::Info("%d <? %d", subdomains.size(), 25000);
 +
 +  md = subdomains.top();
 +  double ans = md->_RminBez;
 +  if (_chknumber(ans)) Msg::Error("ISNAN %d", subdomains.size());
 +
 +  while (subdomains.size()) {
 +    md = subdomains.top();
 +    subdomains.pop();
 +    //Msg::Info("del %d", md);
 +    //Msg::Info(" ");
++=======
+ double MetricBasis::_subdivideForRmin(MetricData *md, double RminLag, double tol, MElement *el) const
+ {
+   std::priority_queue<MetricData*, std::vector<MetricData*>, lessMinB> subdomains;
+   const bool for3d = md->_jaccoeffs;
+   const int numCoeff = md->_metcoeffs->size2();
+   const int numMetPnts = md->_metcoeffs->size1();
+   const int numJacPnts = for3d ? md->_jaccoeffs->size() : 0;
+   const int numSub = _bezier->getNumDivision();
+   subdomains.push(md);
+ 
+   std::vector<fullVector<double>*> trash;
+ 
+   while (RminLag - subdomains.top()->_RminBez > tol && subdomains.size() < 25000) {
+     fullMatrix<double> *subcoeffs, *coeff;
+     fullVector<double> *subjac, *jac = NULL;
+ 
+     MetricData *current = subdomains.top();
+     subcoeffs = new fullMatrix<double>(numSub*numMetPnts, numCoeff);
+     _bezier->subDivisor.mult(*current->_metcoeffs, *subcoeffs);
+     if (for3d) {
+       subjac = new fullVector<double>(numSub*numJacPnts);
+       _jacobian->getBezier()->subDivisor.mult(*current->_jaccoeffs, *subjac);
+     }
+     int depth = current->_depth;
+     int num = current->_num;
+     delete current;
+     subdomains.pop();
+ 
+     for (int i = 0; i < numSub; ++i) {
+       coeff = new fullMatrix<double>(numMetPnts, numCoeff);
+       coeff->copy(*subcoeffs, i * numMetPnts, numMetPnts, 0, numCoeff, 0, 0);
+       if (for3d) {
+         jac = new fullVector<double>;
+         jac->setAsProxy(*subjac, i * numJacPnts, numJacPnts);
+       }
+       double minLag, minBez;
+       _computeRmin(*coeff, *jac, minLag, minBez);
+       RminLag = std::min(RminLag, minLag);
+       int newNum = num + (i+1) * pow_int(10, depth);
+       MetricData *metData = new MetricData(coeff, jac, minBez, depth+1, newNum);
+       //if (el) statsForMatlab(el, 20, metData);
+       subdomains.push(metData);
+     }
+     if (for3d) trash.push_back(subjac);
+     delete subcoeffs;
+   }
+ 
+   double ans = subdomains.top()->_RminBez;
+   while (subdomains.size()) {
+     md = subdomains.top();
+     subdomains.pop();
++>>>>>>> upstream/2.9.3+dfsg1
      delete md;
    }
    for (unsigned int i = 0; i < trash.size(); ++i) {
      delete trash[i];
    }
  
++<<<<<<< HEAD
 +  //Msg::Info("bez%g lag%g", ans, RminLag);
 +  return ans;
 +}
 +
 +void MetricBasis::_computeTermBeta(double &a, double &K,
 +                                   double &dRda, double &term1,
 +                                   double &phip) const
 +{
 +  double x0 = .5 * (K - a*a*a + 3*a);
 +  double sin, sqrt;
 +  if (x0 > 1) {
 +    const double p = -3;
 +    double q = -K + 2;
 +    a = cubicCardanoRoot(p, q);
 +
 +    x0 = 1;
 +    phip = M_PI / 3;
 +    term1 = 1 + .5 * a;
 +    sin = std::sqrt(3) / 2;
 +    sqrt = 0;
 +  }
 +  else if (x0 < -1) {
 +    K = -2 + a*a*a - 3*a;
 +
 +    x0 = -1;
 +    phip = 2 * M_PI / 3;
 +    term1 = 1 - .5 * a;
 +    sin = std::sqrt(3) / 2;
 +    sqrt = 0;
 +  }
 +  else {
 +    phip = (std::acos(x0) + M_PI) / 3;
 +    term1 = 1 + a * std::cos(phip);
 +    sin = std::sin(phip);
 +    sqrt = std::sqrt(1-x0*x0);
 +  }
 +  dRda = sin * sqrt + .5 * term1 * (1-a*a);
 +}
 +
 +void MetricBasis::_getMetricData(MElement *el, MetricData *&md) const
 +{
 +  int nSampPnts = _gradients->getNumSamplingPoints();
 +  int nMapping = _gradients->getNumMapNodes();
 +  fullMatrix<double> nodes(nMapping, 3);
 +  el->getNodesCoord(nodes);
 +
 +  // Metric coefficients
 +  fullMatrix<double> metCoeffLag;
 +
 +  switch (el->getDim()) {
 +  case 0 :
 +    md = NULL;
 +    return;
 +  case 1 :
 +  case 2 :
 +    Msg::Fatal("not implemented");
++=======
+   return ans;
+ }
+ 
+ void MetricBasis::_getMetricData(const MElement *el, MetricData *&md) const
+ {
+   int nSampPnts = _gradients->getNumSamplingPoints();
+   int nMapping = _gradients->getNumMapNodes();
+ 
+   // Nodes
+   fullMatrix<double> nodes(nMapping, 3);
+   el->getNodesCoord(nodes);
+ 
+   // Jacobian coefficients
+   fullVector<double> *jac = NULL;
+   if (_dim == 3) {
+     fullVector<double> jacLag(_jacobian->getNumJacNodes());
+     jac = new fullVector<double>(_jacobian->getNumJacNodes());
+     _jacobian->getSignedIdealJacobian(nodes, jacLag);
+     _jacobian->lag2Bez(jacLag, *jac);
+   }
+ 
+   // Metric coefficients
+   fullMatrix<double> metCoeffLag;
+   _fillCoeff<true>(el->getDim(), _gradients, nodes, metCoeffLag);
+   fullMatrix<double> *metCoeff;
+   metCoeff = new fullMatrix<double>(nSampPnts, metCoeffLag.size2());
+   _bezier->matrixLag2Bez.mult(metCoeffLag, *metCoeff);
+ 
+   md = new MetricData(metCoeff, jac, -1, 0, 0);
+ }
+ 
+ template<bool ideal>
+ void MetricBasis::_fillCoeff(int dim, const GradientBasis *gradients,
+     const fullMatrix<double> &nodes, fullMatrix<double> &coeff)
+ {
+   const int nSampPnts = gradients->getNumSamplingPoints();
+ 
+   switch (dim) {
+   case 0 :
+     return;
+   case 1 :
+     Msg::Fatal("Should not be here, metric for 1d not implemented");
+     break;
+ 
+   case 2 :
+     {
+       fullMatrix<double> dxydX(nSampPnts,3), dxydY(nSampPnts,3);
+       if (ideal)
+         gradients->getIdealGradientsFromNodes(nodes, &dxydX, &dxydY, NULL);
+       else
+         gradients->getGradientsFromNodes(nodes, &dxydX, &dxydY, NULL);
+ 
+       coeff.resize(nSampPnts, 3);
+       for (int i = 0; i < nSampPnts; i++) {
+         const double &dxdX = dxydX(i,0), &dydX = dxydX(i,1);
+         const double &dxdY = dxydY(i,0), &dydY = dxydY(i,1);
+         double dzdX, dzdY;
+         if (nodes.size2() > 2) {
+           dzdX = dxydX(i,2);
+           dzdY = dxydY(i,2);
+         }
+         else {
+           dzdX = 0;
+           dzdY = 0;
+         }
+         const double dvxdX = dxdX*dxdX + dydX*dydX + dzdX*dzdX;
+         const double dvxdY = dxdY*dxdY + dydY*dydY + dzdY*dzdY;
+         coeff(i, 0) = (dvxdX + dvxdY) / 2;
+         coeff(i, 1) = dvxdX - coeff(i, 0);
+         coeff(i, 2) = (dxdX*dxdY + dydX*dydY + dzdX*dzdY);
+       }
+     }
++>>>>>>> upstream/2.9.3+dfsg1
      break;
  
    case 3 :
      {
        fullMatrix<double> dxyzdX(nSampPnts,3), dxyzdY(nSampPnts,3), dxyzdZ(nSampPnts,3);
++<<<<<<< HEAD
 +      _gradients->getGradientsFromNodes(nodes, &dxyzdX, &dxyzdY, &dxyzdZ);
 +
 +      metCoeffLag.resize(nSampPnts, 7);
++=======
+       if (ideal)
+         gradients->getIdealGradientsFromNodes(nodes, &dxyzdX, &dxyzdY, &dxyzdZ);
+       else
+         gradients->getGradientsFromNodes(nodes, &dxyzdX, &dxyzdY, &dxyzdZ);
+ 
+       coeff.resize(nSampPnts, 7);
++>>>>>>> upstream/2.9.3+dfsg1
        for (int i = 0; i < nSampPnts; i++) {
          const double &dxdX = dxyzdX(i,0), &dydX = dxyzdX(i,1), &dzdX = dxyzdX(i,2);
          const double &dxdY = dxyzdY(i,0), &dydY = dxyzdY(i,1), &dzdY = dxyzdY(i,2);
@@@ -1217,116 -1193,70 +2112,180 @@@
          const double dvxdX = dxdX*dxdX + dydX*dydX + dzdX*dzdX;
          const double dvxdY = dxdY*dxdY + dydY*dydY + dzdY*dzdY;
          const double dvxdZ = dxdZ*dxdZ + dydZ*dydZ + dzdZ*dzdZ;
++<<<<<<< HEAD
 +        metCoeffLag(i, 0) = (dvxdX + dvxdY + dvxdZ) / 3;
 +        metCoeffLag(i, 1) = dvxdX - metCoeffLag(i, 0);
 +        metCoeffLag(i, 2) = dvxdY - metCoeffLag(i, 0);
 +        metCoeffLag(i, 3) = dvxdZ - metCoeffLag(i, 0);
 +        const double fact = std::sqrt(2);
 +        metCoeffLag(i, 4) = fact * (dxdX*dxdY + dydX*dydY + dzdX*dzdY);
 +        metCoeffLag(i, 5) = fact * (dxdZ*dxdY + dydZ*dydY + dzdZ*dzdY);
 +        metCoeffLag(i, 6) = fact * (dxdX*dxdZ + dydX*dydZ + dzdX*dzdZ);
++=======
+         coeff(i, 0) = (dvxdX + dvxdY + dvxdZ) / 3;
+         static double fact1 = 1./std::sqrt(6.);
+         static double fact2 = 1./std::sqrt(3.);
+         coeff(i, 1) = fact1 * (dvxdX - coeff(i, 0));
+         coeff(i, 2) = fact1 * (dvxdY - coeff(i, 0));
+         coeff(i, 3) = fact1 * (dvxdZ - coeff(i, 0));
+         coeff(i, 4) = fact2 * (dxdX*dxdY + dydX*dydY + dzdX*dzdY);
+         coeff(i, 5) = fact2 * (dxdZ*dxdY + dydZ*dydY + dzdZ*dzdY);
+         coeff(i, 6) = fact2 * (dxdX*dxdZ + dydX*dydZ + dzdX*dzdZ);
++>>>>>>> upstream/2.9.3+dfsg1
        }
      }
      break;
    }
++<<<<<<< HEAD
 +
 +  fullMatrix<double> *metCoeff;
 +  metCoeff = new fullMatrix<double>(nSampPnts, metCoeffLag.size2());
 +  _bezier->matrixLag2Bez.mult(metCoeffLag, *metCoeff);
 +
 +  // Jacobian coefficients
 +  fullVector<double> jacLag(_jacobian->getNumJacNodes());
 +  fullVector<double> *jac = new fullVector<double>(_jacobian->getNumJacNodes());
 +  _jacobian->getSignedJacobian(nodes, jacLag);
 +  _jacobian->lag2Bez(jacLag, *jac);
 +
 +  md = new MetricData(metCoeff, jac, -1, 0, 0);
 +}
 +
 +double MetricBasis::_minp2(const fullMatrix<double> &coeff) const
 +{
 +  double min = 1e10;
 +  std::map<int, std::vector<IneqData> >::const_iterator it = _ineqA.begin();
 +  while (it != _ineqA.end()) {
 +    double val = 0;
 +    for (unsigned int k = 0; k < it->second.size(); ++k) {
 +      const int i = it->second[k].i;
 +      const int j = it->second[k].j;
 +      double tmp = 0;
 +      for (int l = 1; l < 7; ++l) {
 +        tmp += coeff(i, l) * coeff(j, l);
 +      }
 +      val += it->second[k].val * tmp;
 +    }
 +    min = std::min(val, min);
 +    ++it;
 +  }
 +
 +  return min > 0 ? std::sqrt(min/6) : 0;
 +}
 +
 +double MetricBasis::_minp(const fullMatrix<double> &coeff) const
 +{
 +  fullMatrix<double> minmaxCoeff(2, 6);
 +  for (int j = 0; j < 6; ++j) {
 +    minmaxCoeff(0, j) = coeff(0, j+1);
 +    minmaxCoeff(1, j) = coeff(0, j+1);
 +  }
 +
 +  for (int i = 1; i < coeff.size1(); ++i) {
 +    for (int j = 0; j < 6; ++j) {
 +      minmaxCoeff(0, j) = std::min(coeff(i, j+1), minmaxCoeff(0, j));
 +      minmaxCoeff(1, j) = std::max(coeff(i, j+1), minmaxCoeff(1, j));
 +    }
 +  }
 +
 +  double ans = 0;
 +  for (int j = 0; j < 6; ++j) {
 +    if (minmaxCoeff(0, j) * minmaxCoeff(1, j) > 0) {
 +      ans += minmaxCoeff(0, j) > 0 ?
 +          pow_int(minmaxCoeff(0, j), 2) :
 +          pow_int(minmaxCoeff(1, j), 2);
 +    }
 +  }
 +  return std::sqrt(ans/6);
 +}
 +
 +double MetricBasis::_minq(const fullMatrix<double> &coeff) const
 +{
 +  double ans = coeff(0, 0);
 +  for (int i = 1; i < coeff.size1(); ++i) {
 +    if (ans > coeff(i, 0)) ans = coeff(i, 0);
 +  }
 +  return ans;
 +}
 +
 +double MetricBasis::_maxp(const fullMatrix<double> &coeff) const
 +{
 +  double ans = 0;
 +  for (int i = 0; i < coeff.size1(); ++i) {
 +    double tmp = 0;
 +    for (int j = 1; j < 7; ++j) {
 +      tmp += pow_int(coeff(i, j), 2);
 +    }
 +    ans = std::max(ans, tmp);
 +  }
 +  return std::sqrt(ans/6);
 +}
 +
 +double MetricBasis::_maxq(const fullMatrix<double> &coeff) const
 +{
 +  double ans = coeff(0, 0);
 +  for (int i = 1; i < coeff.size1(); ++i) {
 +    if (ans < coeff(i, 0)) ans = coeff(i, 0);
 +  }
 +  return ans;
++=======
+ }
+ 
+ double MetricBasis::_computeMinlagR(const fullVector<double> &jac,
+                                     const fullMatrix<double> &coeff, int num)
+ {
+   double Rmin = 1.;
+ 
+   switch (coeff.size2()) {
+   case 7:
+     for (int i = 0; i < num; ++i) {
+       if (jac(i) <= 0.) return 0;
+ 
+       const double q = coeff(i, 0);
+       double p = 0;
+       for (int k = 1; k < 7; ++k) {
+         p += pow_int(coeff(i, k), 2);
+       }
+       p = std::sqrt(p);
+       const double a = q/p;
+       if (a > 1e4) { // TODO: from _tol ?
+         Rmin = std::min(Rmin, std::sqrt((a - std::sqrt(3.)) / (a + std::sqrt(3.))));
+       }
+       else {
+         const double tmpR = _R3Dsafe(a, jac(i)/p/p*jac(i)/p);
+         Rmin = std::min(Rmin, std::sqrt(tmpR));
+       }
+     }
+     return Rmin;
+ 
+   case 3:
+     for (int i = 0; i < num; ++i) {
+       const double &q = coeff(i, 0);
+       const double p = pow_int(coeff(i, 1), 2) + pow_int(coeff(i, 2), 2);
+       const double tmpR = _R2Dsafe(q, std::sqrt(p));
+       Rmin = std::min(Rmin, std::sqrt(tmpR));
+     }
+     return Rmin;
+ 
+   default:
+     Msg::Error("coeff have not right number of column");
+     return -1;
+   }
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  void MetricBasis::_minMaxA(
      const fullMatrix<double> &coeff, double &min, double &max) const
  {
++<<<<<<< HEAD
 +  min = 1e10;
 +  max = 0;
++=======
+   min = std::numeric_limits<double>::max();
+   min = 1e10;
+   //max = 1; // max is not used actually
+   double minLowBound = -min;
++>>>>>>> upstream/2.9.3+dfsg1
    std::map<int, std::vector<IneqData> >::const_iterator it = _ineqA.begin();
    while (it != _ineqA.end()) {
      double num = 0;
@@@ -1335,61 -1265,57 +2294,112 @@@
        const int i = it->second[k].i;
        const int j = it->second[k].j;
        double tmp = 0;
++<<<<<<< HEAD
 +      for (int l = 1; l < 7; ++l) {
++=======
+       for (int l = 1; l < coeff.size2(); ++l) {
++>>>>>>> upstream/2.9.3+dfsg1
          tmp += coeff(i, l) * coeff(j, l);
        }
        den += it->second[k].val * tmp;
        num += it->second[k].val * coeff(i, 0) * coeff(j, 0);
      }
      double val = num/den;
++<<<<<<< HEAD
 +    min = std::min(val, min);
 +    max = std::max(val, max);
 +    ++it;
 +  }
 +  min *= 6;
 +  max *= 6;
 +
 +  min = min > 1 ? std::sqrt(min) : 1;
 +  max = std::sqrt(max);
 +}
 +
 +void MetricBasis::_minMaxJacobianSqr(
 +    const fullVector<double> &jac, double &min, double &max) const
 +{
 +  static int a = 1;
 +  if (++a == 1) {
 +    for (int i = 1; i < jac.size(); ++i) {
 +      Msg::Info("<%g>", jac(i));
 +    }
 +  }
 +  min = max = jac(0);
 +  for (int i = 1; i < jac.size(); ++i) {
 +    if (min > jac(i)) min = jac(i);
 +    if (max < jac(i)) max = jac(i);
 +  }
 +
 +  if (a == 1) {
 +      Msg::Info("%g %g", min, max);
 +  }
 +
 +  if (min*max < 0) {
 +    max = max > -min ? max*max : min*min;
 +    min = 0;
 +  }
 +  else {
 +    if (max > 0) {
 +      max = max*max;
 +      min = min*min;
 +    }
 +    else {
 +      double tmp = max;
 +      max = min*min;
 +      min = tmp*tmp;
 +    }
 +  }
 +}
 +
 +void MetricBasis::_minJ2P3(const fullMatrix<double> &coeff,
++=======
+     if (num < 0) {
+       if (den > 0) {
+         _minA(coeff, min);
+         return;
+       }
+       minLowBound = std::max(val, minLowBound);
+     }
+     else if (den > 0) {
+       min = std::min(val, min);
+       //max = std::max(val, max);
+     }
+     ++it;
+   }
+ 
+   if (min < minLowBound) {
+     _minA(coeff, min);
+     return;
+   }
+ 
+   min = min > 1 ? std::sqrt(min) : 1;
+   //max = std::sqrt(max);
+ }
+ 
+ void MetricBasis::_minA(const fullMatrix<double> &coeff, double &mina) const
+ {
+   double minq = coeff(0, 0);
+   for (int i = 1; i < coeff.size1(); ++i) {
+    if (minq > coeff(i, 0)) minq = coeff(i, 0);
+   }
+ 
+   double maxp = 0;
+   for (int i = 0; i < coeff.size1(); ++i) {
+     double tmp = 0;
+     for (int j = 1; j < 7; ++j) {
+       tmp += pow_int(coeff(i, j), 2);
+     }
+     maxp = std::max(maxp, tmp);
+   }
+ 
+   mina = minq/maxp;
+   if (mina < 1) mina = 1;
+ }
+ 
+ void MetricBasis::_minK(const fullMatrix<double> &coeff,
++>>>>>>> upstream/2.9.3+dfsg1
      const fullVector<double> &jac, double &min) const
  {
    fullVector<double> r(coeff.size1());
@@@ -1398,7 -1324,7 +2408,11 @@@
      for (int l = 1; l < 7; ++l) {
        r(i) += coeff(i, l) * coeff(i, l);
      }
++<<<<<<< HEAD
 +    r(i) = std::sqrt(r(i)/6);
++=======
+     r(i) = std::sqrt(r(i));
++>>>>>>> upstream/2.9.3+dfsg1
    }
  
    min = 1e10;
@@@ -1450,7 -1376,7 +2464,11 @@@ void MetricBasis::_maxAstKpos(const ful
      for (int l = 1; l < 7; ++l) {
        P(i) += coeff(i, l) * coeff(i, l);
      }
++<<<<<<< HEAD
 +    P(i) = std::sqrt(P(i)/6);
++=======
+     P(i) = std::sqrt(P(i));
++>>>>>>> upstream/2.9.3+dfsg1
    }
  
    double min = 1e10;
@@@ -1492,13 -1418,12 +2510,20 @@@ void MetricBasis::_maxAstKneg(const ful
      for (int l = 1; l < 7; ++l) {
        P(i) += coeff(i, l) * coeff(i, l);
      }
++<<<<<<< HEAD
 +    P(i) = std::sqrt(P(i)/6);
++=======
+     P(i) = std::sqrt(P(i));
++>>>>>>> upstream/2.9.3+dfsg1
      for (int j = 0; j < coeff.size1(); ++j) {
        Q(i, j) = 0;
        for (int l = 1; l < 7; ++l) {
          Q(i, j) += coeff(i, l) * coeff(j, l);
        }
++<<<<<<< HEAD
 +      Q(i, j) /= 6;
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
  
@@@ -1543,7 -1468,7 +2568,11 @@@ void MetricBasis::_maxKstAfast(const fu
      for (int l = 1; l < 7; ++l) {
        r(i) += coeff(i, l) * coeff(i, l);
      }
++<<<<<<< HEAD
 +    r(i) = std::sqrt(r(i)/6);
++=======
+     r(i) = std::sqrt(r(i));
++>>>>>>> upstream/2.9.3+dfsg1
    }
  
    double min = 1e10;
@@@ -1585,13 -1510,12 +2614,20 @@@ void MetricBasis::_maxKstAsharp(const f
      for (int l = 1; l < 7; ++l) {
        P(i) += coeff(i, l) * coeff(i, l);
      }
++<<<<<<< HEAD
 +    P(i) = std::sqrt(P(i)/6);
++=======
+     P(i) = std::sqrt(P(i));
++>>>>>>> upstream/2.9.3+dfsg1
      for (int j = 0; j < coeff.size1(); ++j) {
        Q(i, j) = 0;
        for (int l = 1; l < 7; ++l) {
          Q(i, j) += coeff(i, l) * coeff(j, l);
        }
++<<<<<<< HEAD
 +      Q(i, j) /= 6;
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
  
@@@ -1626,3 -1550,89 +2662,92 @@@
  
    maxK = 1/beta*(mina*mina*mina-min);
  }
++<<<<<<< HEAD
++=======
+ 
+ void MetricBasis::_computeTermBeta(double &a, double &K,
+                                    double &dRda, double &term1,
+                                    double &phip) const
+ {
+   double x0 = .5 * (K - a*a*a + 3*a);
+   double sin, sqrt;
+   if (x0 > 1) {
+     const double p = -3;
+     double q = -K + 2;
+     a = cubicCardanoRoot(p, q);
+ 
+     x0 = 1;
+     phip = M_PI / 3;
+     term1 = 1 + .5 * a;
+     sin = std::sqrt(3.) / 2;
+     sqrt = 0;
+   }
+   else if (x0 < -1) {
+     K = -2 + a*a*a - 3*a;
+ 
+     x0 = -1;
+     phip = 2 * M_PI / 3;
+     term1 = 1 - .5 * a;
+     sin = std::sqrt(3.) / 2;
+     sqrt = 0;
+   }
+   else {
+     phip = (std::acos(x0) + M_PI) / 3;
+     term1 = 1 + a * std::cos(phip);
+     sin = std::sin(phip);
+     sqrt = std::sqrt(1-x0*x0);
+   }
+   dRda = sin * sqrt + .5 * term1 * (1-a*a);
+ }
+ 
+ double MetricBasis::_R3Dsafe(double q, double p, double J)
+ {
+   if (q > 1e5*p) {
+     const double m = p*std::sqrt(3.)/q;
+     return (1-m) / (1+m);
+   }
+   const double a = q/p;
+   const double K = J*J/p/p/p;
+   return _R3Dsafe(a, K);
+ }
+ 
+ double MetricBasis::_R3Dsafe(double a, double K)
+ {
+   const double x = .5 * (K + (3 - a*a)*a);
+   if (x > 1+1e-7 || x < -1-1e-7) {
+     Msg::Warning("x = %g (a,K) = (%g,%g)", x, a, K);
+   }
+ 
+   double ans;
+   if (x >= 1)       ans = (a - 1) / (a + 2);
+   else if (x <= -1) ans = (a - 2) / (a + 1);
+   else {
+     const double phi = std::acos(x) / 3;
+     ans = (a + 2*std::cos(phi + 2*M_PI/3)) / (a + 2*std::cos(phi));
+   }
+ 
+   if (ans < 0 || ans > 1) {
+     if (ans < 0) return 0;
+     else return 1;
+   }
+   return ans;
+ }
+ 
+ double MetricBasis::_R2Dsafe(double q, double p)
+ {
+   if (q < 0 || p < 0 || p > q)
+     Msg::Error("wrong argument for 2d metric (%g, %g)", q, p);
+   return (q-p) / (q+p);
+ }
+ 
+ double MetricBasis::_R2Dsafe(double a)
+ {
+   if (a < 1
+ #if !defined(_MSC_VER)
+       || !std::isfinite(a)
+ #endif
+       )
+     Msg::Error("wrong argument for 2d metric (%g)", a);
+   return (a - 1) / (a + 1);
+ }
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc Numeric/MetricBasis.h
index f1cf8e0,da4825f..50b1bdc
--- a/Numeric/MetricBasis.h
+++ b/Numeric/MetricBasis.h
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2013 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
@@@ -6,25 -6,22 +10,40 @@@
  #ifndef _METRIC_BASIS_H_
  #define _METRIC_BASIS_H_
  
++<<<<<<< HEAD
 +#include "MElement.h"
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  #include "JacobianBasis.h"
  #include "fullMatrix.h"
  #include <fstream>
  #include <cmath>
++<<<<<<< HEAD
++=======
+ class MElement;
++>>>>>>> upstream/2.9.3+dfsg1
  
  class MetricBasis {
    friend class MetricCoefficient;
    friend class GMSH_AnalyseCurvedMeshPlugin;
++<<<<<<< HEAD
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  private:
    const JacobianBasis *_jacobian;
    const GradientBasis *_gradients;
    const bezierBasis *_bezier;
    static double _tol;
++<<<<<<< HEAD
 +  static int _which;
 +
 +  int __maxdepth, __numSubdivision, __TotSubdivision;
 +  std::vector<int> __numSub;
 +  MElement *__curElem;
++=======
+   const int _type, _dim;
++>>>>>>> upstream/2.9.3+dfsg1
  
    std::fstream file;
  
@@@ -37,6 -34,8 +56,11 @@@
      IneqData(double val, int i, int j, int k = -1) : i(i), j(j), k(k), val(val) {}
    };
  
++<<<<<<< HEAD
++=======
+   std::map<int, std::vector<IneqData> > _ineqJ2, _ineqP3, _ineqA;
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    class MetricData {
     public:
      fullMatrix<double> *_metcoeffs;
@@@ -45,59 -44,87 +69,139 @@@
      int _depth, _num;
  
     public:
++<<<<<<< HEAD
 +    MetricData(fullMatrix<double> *m, fullVector<double> *j, double r, int d, int num) :
++=======
+     MetricData(fullMatrix<double> *m, fullVector<double> *j,
+                double r = -1, int d = -1, int num = -1) :
++>>>>>>> upstream/2.9.3+dfsg1
        _metcoeffs(m), _jaccoeffs(j), _RminBez(r), _depth(d), _num(num) {}
      ~MetricData() {
        delete _metcoeffs;
        delete _jaccoeffs;
      }
++<<<<<<< HEAD
 +  };
 +
 +  std::map<int, std::vector<IneqData> > _ineqJ2, _ineqP3, _ineqA;
++=======
+ 
+     bool haveJac() {return _jaccoeffs != NULL;}
+   };
++>>>>>>> upstream/2.9.3+dfsg1
  
  public:
    MetricBasis(int elementTag);
  
    static void setTol(double tol) {_tol = tol;}
++<<<<<<< HEAD
 +  static double getTol() {return _tol;}
 +  static void setWhich(int which) {_which = which;}
 +
 +  double getBoundRmin(MElement*, MetricData*&, fullMatrix<double>&);
 +  double getMinR(MElement*, MetricData*&, int) const;
 +  bool notStraight(MElement*, double &metric, int order) const;
 +  static double boundMinR(MElement *el);
 +  static double sampleR(MElement *el, int order);
 +  //double getBoundRmin(int, MElement**, double*);
 +  //static double boundRmin(int, MElement**, double*, bool sameType = false);
 +
 +  void interpolate(const MElement*, const MetricData*, const double *uvw, double *minmaxQ, bool write = false) const;
 +
 +  static int metricOrder(int tag);
 +  void printTotSubdiv(double n) const {
 +    Msg::Info("SUBDIV %d, %g", __TotSubdivision, __TotSubdivision/2776.);
 +  }
 +
 +private:
 +  void _fillInequalities(int order);
 +  void _lightenInequalities(int&, int&, int&); //TODO change
 +
 +  void _computeRmin(const fullMatrix<double>&, const fullVector<double>&,
 +                    double &RminLag, double &RminBez, int depth, bool debug = false) const;
 +  void _computeRmax(const fullMatrix<double>&, const fullVector<double>&,
 +                    double &RmaxLag) const;
 +  void _computeTermBeta(double &a, double &K, double &dRda,
 +                        double &term1, double &phip) const;
 +  void _getMetricData(MElement*, MetricData*&) const;
 +
 +  double _subdivideForRmin(MetricData*, double RminLag, double tol, int which) const;
 +
 +  double _minp(const fullMatrix<double>&) const;
 +  double _minp2(const fullMatrix<double>&) const;
 +  double _minq(const fullMatrix<double>&) const;
 +  double _maxp(const fullMatrix<double>&) const;
 +  double _maxq(const fullMatrix<double>&) const;
 +  void _minMaxA(const fullMatrix<double>&, double &min, double &max) const;
 +  void _minJ2P3(const fullMatrix<double>&, const fullVector<double>&, double &min) const;
++=======
+ 
+   const JacobianBasis* getJacobianForMetric() const {return _jacobian;}
+   const bezierBasis* getBezier() const {return _bezier;}
+   int getNumMetricNodes() const {return _gradients->getNumSamplingPoints();}
+ 
+   static double boundMinR(MElement *el);
+   static double minSampledR(MElement *el, int order);
+   double getBoundMinR(MElement*) const;
+   double getMinSampledR(MElement*, int order) const;
+ 
+   static double minRCorner(MElement *el);
+ 
+   template<bool ideal>
+   void getMetricCoeff(const fullMatrix<double> &nodes,
+                             fullMatrix<double> &coeff) const {
+     _fillCoeff<ideal>(_dim, _gradients, nodes, coeff);
+   }
+   void lag2Bez(const fullMatrix<double> &metCoeffLag,
+                      fullMatrix<double> &metCoeffBez) const {
+     _bezier->matrixLag2Bez.mult(metCoeffLag, metCoeffBez);
+   }
+ 
+   static int metricOrder(int tag);
+ 
+ public:
+   // Validation for computation of Bezier coefficients & subdivision
+   // of Jacobian determinant and Metric stuffs
+   static bool validateBezierForMetricAndJacobian();
+   static int validateBezierForMetricAndJacobian(MElement *el,
+                                                 int numSampPnt,
+                                                 int numSubdiv,
+                                                 double toleranceTensor,
+                                                 double tolerance);
+   void statsForMatlab(MElement *el, int deg, MetricData *md) const;
+   void interpolate(const MElement*, const MetricData*, const double *uvw, double *minmaxQ) const;
+   void interpolate(const MElement*, const MetricData*,
+                    const fullMatrix<double> &nodes, fullMatrix<double> &R) const;
+   void interpolateAfterNSubdivisions(const MElement *el,
+                                      int numSubdiv, int numPnt,
+                                      fullVector<int> &isub,
+                                      fullMatrix<double> &uvw,
+                                      fullMatrix<double> &metric) const;
+ 
+ private:
+   void _fillInequalities(int order);
+   void _fillInequalitiesPyr(int order);
+   void _lightenInequalities(int&, int&, int&); //TODO change
+ 
+   void _computeRmin(const fullMatrix<double>&, const fullVector<double>&,
+                     double &RminLag, double &RminBez) const;
+   void _computeRmax(const fullMatrix<double>&, const fullVector<double>&,
+                     double &RmaxLag) const;
+   void _getMetricData(const MElement*, MetricData*&) const;
+ 
+   double _subdivideForRmin(MetricData*, double RminLag, double tol, MElement *el=NULL) const;
+   template<bool ideal>
+   static void _fillCoeff(int dim, const GradientBasis*,
+                   const fullMatrix<double> &nodes, fullMatrix<double> &coeff);
+   static double _computeMinlagR(const fullVector<double> &jac,
+                                 const fullMatrix<double> &coeff, int num);
+ 
+   void _minMaxA(const fullMatrix<double>&, double &min, double &max) const;
+   void _minA(const fullMatrix<double>&, double &min) const;
+   void _minK(const fullMatrix<double>&, const fullVector<double>&, double &min) const;
+   void _computeTermBeta(double &a, double &K, double &dRda,
+                         double &term1, double &phip) const;
++>>>>>>> upstream/2.9.3+dfsg1
    void _maxAstKpos(const fullMatrix<double>&, const fullVector<double>&,
                   double minK, double beta, double &maxa) const;
    void _maxAstKneg(const fullMatrix<double>&, const fullVector<double>&,
@@@ -106,40 -133,11 +210,48 @@@
                   double mina, double beta, double &maxK) const;
    void _maxKstAsharp(const fullMatrix<double>&, const fullVector<double>&,
                   double mina, double beta, double &maxK) const;
++<<<<<<< HEAD
 +  void _minMaxJacobianSqr(const fullVector<double>&, double &min, double &max) const;
 +
 +  double _Rsafe(double a, double K) const {
 +    const double x = .5 * (K - a*a*a + 3*a);
 +    const double phi = std::acos(x) / 3;
 +    return (a + 2*std::cos(phi + 2*M_PI/3)) / (a + 2*std::cos(phi));
 +  }
 +  bool _chknumber(double val) const {
 +#if defined(_MSC_VER)
 +    return _isnan(val) || !_finite(val);
 +#else
 +    return std::isnan(val) || std::isinf(val);
 +#endif
 +  }
 +  bool _chka(double a) const {return _chknumber(a) || a < 1;}
 +  bool _chkK(double K) const {return _chknumber(K) || K < 0;}
 +  int _chkaK(double a, double K) const {
 +    if (_chka(a)) return 1;
 +    if (_chkK(K)) return 2;
 +    if (std::abs(K - a*a*a + 3*a) > 2) {
 +      Msg::Warning("x = %g", .5 * (K - a*a*a + 3*a));
 +      return 3;
 +    }
 +    return 0;
 +  }
 +  bool _chkR(double R) const {return _chknumber(R) || R < 0 || R > 1;}
 +  int _chkaKR(double a, double K, double R) const {
 +    const int aK = _chkaK(a, K);
 +    if (aK) return aK;
 +    if (_chkR(R)) return 4;
 +    const double myR = _Rsafe(a, K);
 +    if (std::abs(myR-R) > 1e-10) return 5;
 +    return 0;
 +  }
++=======
+ 
+   static double _R3Dsafe(double a, double K);
+   static double _R3Dsafe(double q, double p, double J);
+   static double _R2Dsafe(double a);
+   static double _R2Dsafe(double q, double p);
++>>>>>>> upstream/2.9.3+dfsg1
  
  private:
    class gterIneq {
diff --cc Numeric/Numeric.cpp
index 4748ba7,784c023..6c020b3
--- a/Numeric/Numeric.cpp
+++ b/Numeric/Numeric.cpp
@@@ -1282,8 -1291,8 +1291,13 @@@ void signedDistancesPointsEllipseLine(s
    }
  }
  
++<<<<<<< HEAD
 +int intersection_segments(const SPoint3 &p1, const SPoint3 &p2,
 +                          const SPoint3 &q1, const SPoint3 &q2,
++=======
+ int intersection_segments(const SPoint2 &p1, const SPoint2 &p2,
+                           const SPoint2 &q1, const SPoint2 &q2,
++>>>>>>> upstream/2.9.3+dfsg1
                            double x[2])
  {
    double xp_max = std::max(p1.x(), p2.x());
diff --cc Numeric/Numeric.h
index bb05902,17aad6e..f4ebafc
--- a/Numeric/Numeric.h
+++ b/Numeric/Numeric.h
@@@ -144,6 -154,9 +154,12 @@@ void signedDistancesPointsEllipseLine (
  
  int intersection_segments (const SPoint3 &p1, const SPoint3 &p2,
  			   const SPoint3 &q1, const SPoint3 &q2,
++<<<<<<< HEAD
++=======
+ 			   double x[2]);
+ int intersection_segments (const SPoint2 &p1, const SPoint2 &p2,
+ 			   const SPoint2 &q1, const SPoint2 &q2,
++>>>>>>> upstream/2.9.3+dfsg1
  			   double x[2]);
  
  //tools for projection onto plane
diff --cc Numeric/bezierBasis.cpp
index 0fd6fdb,ca19e34..e9375a9
--- a/Numeric/bezierBasis.cpp
+++ b/Numeric/bezierBasis.cpp
@@@ -143,6 -143,6 +143,7 @@@ std::vector< fullMatrix<double> > gener
  
    return subPoints;
  }
++<<<<<<< HEAD
  
  std::vector< fullMatrix<double> > generateSubPointsPrism(int order)
  {
@@@ -216,6 -216,6 +217,41 @@@ std::vector< fullMatrix<double> > gener
    prox.setAsProxy(subPoints[6], 2, 1);
    prox.add(.5);
  
++=======
++
++std::vector< fullMatrix<double> > generateSubPointsPrism(int order)
++{
++  std::vector< fullMatrix<double> > subPoints(8);
++  fullMatrix<double> prox;
++
++  subPoints[0] = gmshGenerateMonomialsPrism(order);
++  subPoints[0].scale(.5/order);
++
++  subPoints[1].copy(subPoints[0]);
++  prox.setAsProxy(subPoints[1], 0, 1);
++  prox.add(.5);
++
++  subPoints[2].copy(subPoints[0]);
++  prox.setAsProxy(subPoints[2], 1, 1);
++  prox.add(.5);
++
++  subPoints[3].copy(subPoints[0]);
++  prox.setAsProxy(subPoints[3], 0, 2);
++  prox.scale(-1.);
++  prox.add(.5);
++
++  subPoints[4].copy(subPoints[0]);
++  prox.setAsProxy(subPoints[4], 2, 1);
++  prox.add(.5);
++
++  subPoints[5].copy(subPoints[1]);
++  prox.setAsProxy(subPoints[5], 2, 1);
++  prox.add(.5);
++
++  subPoints[6].copy(subPoints[2]);
++  prox.setAsProxy(subPoints[6], 2, 1);
++  prox.add(.5);
++
    subPoints[7].copy(subPoints[3]);
    prox.setAsProxy(subPoints[7], 2, 1);
    prox.add(.5);
@@@ -223,14 -223,14 +259,65 @@@
    return subPoints;
  }
  
++std::vector< fullMatrix<double> > generateSubPointsHex(int order)
++{
++  std::vector< fullMatrix<double> > subPoints(8);
++  fullMatrix<double> prox;
++
++  subPoints[0] = gmshGenerateMonomialsHexahedron(order);
++  subPoints[0].scale(.5/order);
++
++  subPoints[1].copy(subPoints[0]);
++  prox.setAsProxy(subPoints[1], 0, 1);
++  prox.add(.5);
++
++  subPoints[2].copy(subPoints[0]);
++  prox.setAsProxy(subPoints[2], 1, 1);
++  prox.add(.5);
++
++  subPoints[3].copy(subPoints[1]);
++  prox.setAsProxy(subPoints[3], 1, 1);
++  prox.add(.5);
++
++  subPoints[4].copy(subPoints[0]);
++  prox.setAsProxy(subPoints[4], 2, 1);
++  prox.add(.5);
++
++  subPoints[5].copy(subPoints[1]);
++  prox.setAsProxy(subPoints[5], 2, 1);
++  prox.add(.5);
++
++  subPoints[6].copy(subPoints[2]);
++  prox.setAsProxy(subPoints[6], 2, 1);
++  prox.add(.5);
++
++>>>>>>> upstream/2.9.3+dfsg1
++  subPoints[7].copy(subPoints[3]);
++  prox.setAsProxy(subPoints[7], 2, 1);
++  prox.add(.5);
++
++  return subPoints;
++}
++
++<<<<<<< HEAD
 +std::vector< fullMatrix<double> > generateSubPointsPyr(int order)
 +{
 +  if (order == 0) {
 +    std::vector< fullMatrix<double> > subPoints(4);
 +    fullMatrix<double> prox;
 +
 +    subPoints[0] = JacobianBasis::generateJacMonomialsPyramid(0);
 +    subPoints[0].scale(.5/(order+2));
++=======
+ std::vector< fullMatrix<double> > generateSubPointsPyr(int nij, int nk)
+ {
+   if (nk == 0) {
+     std::vector< fullMatrix<double> > subPoints(4);
+     fullMatrix<double> prox;
+ 
+     subPoints[0] = gmshGenerateMonomialsPyramidGeneral(false, nij, nk);
+     subPoints[0].scale(.5/nij);
++>>>>>>> upstream/2.9.3+dfsg1
  
      subPoints[1].copy(subPoints[0]);
      prox.setAsProxy(subPoints[1], 0, 1);
@@@ -250,8 -250,11 +337,16 @@@
      std::vector< fullMatrix<double> > subPoints(8);
      fullMatrix<double> ref, prox;
  
++<<<<<<< HEAD
 +    subPoints[0] = JacobianBasis::generateJacMonomialsPyramid(order);
 +    subPoints[0].scale(.5/(order+2));
++=======
+     subPoints[0] = gmshGenerateMonomialsPyramidGeneral(false, nij, nk);
+     prox.setAsProxy(subPoints[0], 2, 1);
+     prox.scale(-1);
+     prox.add(nk);
+     subPoints[0].scale(.5/std::max(nij,nk));
++>>>>>>> upstream/2.9.3+dfsg1
  
      subPoints[1].copy(subPoints[0]);
      prox.setAsProxy(subPoints[1], 0, 1);
@@@ -281,18 -284,15 +376,17 @@@
      prox.setAsProxy(subPoints[7], 2, 1);
      prox.add(.5);
  
 +    const int nPts = subPoints[0].size1();
      for (int i = 0; i < 8; ++i) {
-       for (int j = 0; j < nPts; ++j) {
-         const double factor = (1. - subPoints[i](j, 2));
-         subPoints[i](j, 0) = subPoints[i](j, 0) * factor;
-         subPoints[i](j, 1) = subPoints[i](j, 1) * factor;
-       }
+       prox.setAsProxy(subPoints[i], 2, 1);
+       prox.scale(-1);
+       prox.add(1);
      }
  
      return subPoints;
    }
  }
++<<<<<<< HEAD
  
  // Matrices generation
  int nChoosek(int n, int k)
@@@ -324,6 -324,6 +418,39 @@@ fullMatrix<double> generateBez2LagMatri
      return fullMatrix<double>(1, 1);
    }
  
++=======
++
++// Matrices generation
++int nChoosek(int n, int k)
++{
++  if (n < k || k < 0) {
++    Msg::Error("Wrong argument for combination. (%d, %d)", n, k);
++    return 1;
++  }
++
++  if (k > n/2) k = n-k;
++  if (k == 1)
++    return n;
++  if (k == 0)
++    return 1;
++
++  int c = 1;
++  for (int i = 1; i <= k; i++, n--) (c *= n) /= i;
++  return c;
++}
++
++fullMatrix<double> generateBez2LagMatrix
++  (const fullMatrix<double> &exponent, const fullMatrix<double> &point,
++   int order, int dimSimplex)
++{
++  if(exponent.size1() != point.size1() || exponent.size2() != point.size2()){
++    Msg::Fatal("Wrong sizes for bez2lag matrix generation %d %d -- %d %d",
++      exponent.size1(),point.size1(),
++      exponent.size2(),point.size2());
++    return fullMatrix<double>(1, 1);
++  }
++
++>>>>>>> upstream/2.9.3+dfsg1
    int ndofs = exponent.size1();
    int dim = exponent.size2();
  
@@@ -357,32 -357,33 +484,60 @@@
  
  fullMatrix<double> generateBez2LagMatrixPyramid
    (const fullMatrix<double> &exponent, const fullMatrix<double> &point,
++<<<<<<< HEAD
 +   int order)
 +{
 +  if(exponent.size1() != point.size1() || exponent.size2() != point.size2() ||
 +      exponent.size2() != 3){
 +    Msg::Fatal("Wrong sizes for bez2lag matrix generation %d %d -- %d %d",
 +      exponent.size1(),point.size1(),
 +      exponent.size2(),point.size2());
++=======
+    bool pyr, int nij, int nk)
+ {
+   if(exponent.size1() != point.size1() || exponent.size2() != point.size2() ||
+       exponent.size2() != 3){
+     Msg::Fatal("Wrong sizes for pyramid's bez2lag matrix generation %d %d -- %d %d",
+       exponent.size1(), point.size1(),
+       exponent.size2(), point.size2());
++>>>>>>> upstream/2.9.3+dfsg1
      return fullMatrix<double>(1, 1);
    }
  
    const int ndofs = exponent.size1();
  
++<<<<<<< HEAD
 +  fullMatrix<double> bez2Lag(ndofs, ndofs);
 +  for (int i = 0; i < ndofs; i++) {
 +    for (int j = 0; j < ndofs; j++) {
 +      double denom = 1. - point(i, 2);
 +      bez2Lag(i, j) =
 +            nChoosek(order + 2, exponent(j, 0))
 +          * nChoosek(order + 2, exponent(j, 1))
 +          * nChoosek(order, exponent(j, 2))
 +          * pow_int(point(i, 0) / denom, exponent(j, 0))
 +          * pow_int(point(i, 1) / denom, exponent(j, 1))
 +          * pow_int(point(i, 2)        , exponent(j, 2))
 +          * pow_int(1. - point(i, 0) / denom, order + 2 - exponent(j, 0))
 +          * pow_int(1. - point(i, 1) / denom, order + 2 - exponent(j, 1))
 +          * pow_int(1. - point(i, 2)        , order     - exponent(j, 2));
++=======
+   int n01 = nij;
+   fullMatrix<double> bez2Lag(ndofs, ndofs);
+   for (int i = 0; i < ndofs; i++) {
+     for (int j = 0; j < ndofs; j++) {
+       if (pyr) n01 = exponent(j, 2) + nij;
+       bez2Lag(i, j) =
+             nChoosek(n01, exponent(j, 0))
+           * nChoosek(n01, exponent(j, 1))
+           * nChoosek(nk , exponent(j, 2))
+           * pow_int(point(i, 0), exponent(j, 0))
+           * pow_int(point(i, 1), exponent(j, 1))
+           * pow_int(point(i, 2), exponent(j, 2))
+           * pow_int(1. - point(i, 0), n01 - exponent(j, 0))
+           * pow_int(1. - point(i, 1), n01 - exponent(j, 1))
+           * pow_int(1. - point(i, 2), nk  - exponent(j, 2));
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    return bez2Lag;
@@@ -416,7 -417,7 +571,11 @@@ fullMatrix<double> generateSubDiviso
  
  fullMatrix<double> generateSubDivisorPyramid
    (const fullMatrix<double> &exponents, const std::vector< fullMatrix<double> > &subPoints,
++<<<<<<< HEAD
 +   const fullMatrix<double> &lag2Bez, int order)
++=======
+    const fullMatrix<double> &lag2Bez, bool pyr, int nij, int nk)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    if (exponents.size1() != lag2Bez.size1() || exponents.size1() != lag2Bez.size2()){
      Msg::Fatal("Wrong sizes for Bezier Divisor %d %d -- %d %d",
@@@ -433,186 -434,237 +592,397 @@@
  
    for (unsigned int i = 0; i < subPoints.size(); i++) {
      fullMatrix<double> intermediate1 =
++<<<<<<< HEAD
 +      generateBez2LagMatrixPyramid(exponents, subPoints[i], order);
 +    lag2Bez.mult(intermediate1, intermediate2);
 +    subDivisor.copy(intermediate2, 0, nbPts, 0, nbPts, i*nbPts, 0);
 +  }
 +  return subDivisor;
 +}
 +}
 +
 +void bezierBasis::interpolate(const fullMatrix<double> &coeffs,
 +                              const fullMatrix<double> &uvw,
 +                              fullMatrix<double> &result,
 +                              bool bezCoord) const
 +{
 +  result.resize(uvw.size1(), coeffs.size2());
 +  int dimSimplex;
 +  fullMatrix<double> bezuvw = uvw;
 +  switch (type) {
 +  case TYPE_HEX:
 +    if (!bezCoord) {
 +      bezuvw.add(1);
 +      bezuvw.scale(.5);
 +    }
 +    dimSimplex = 0;
 +    break;
 +
 +  case TYPE_TET:
 +    dimSimplex = 3;
 +    break;
 +
 +  case TYPE_PRI:
 +    if (!bezCoord) {
 +      fullMatrix<double> tmp;
 +      tmp.setAsProxy(bezuvw, 3, 1);
 +      tmp.add(1);
 +      tmp.scale(.5);
 +    }
 +    dimSimplex = 2;
 +    break;
 +
 +  default:
 +  case TYPE_PYR:
 +    Msg::Error("Bezier interpolation not implemented for type of element %d", type);
 +    /*bezuvw[0] = .5 * (1 + uvw[0]);
 +    bezuvw[1] = .5 * (1 + uvw[1]);
 +    bezuvw[2] = uvw[2];
 +    _interpolateBezierPyramid(uvw, minmaxQ);*/
 +    return;
 +  }
 +
 +  int numCoeff = _exponents.size1();
 +
 +  for (int m = 0; m < uvw.size1(); ++m) {
 +    for (int n = 0; n < coeffs.size2(); ++n) result(m, n) = 0;
 +    for (int i = 0; i < numCoeff; i++) {
 +      double dd = 1;
 +      double pointCompl = 1.;
 +      int exponentCompl = order;
 +      for (int k = 0; k < dimSimplex; k++) {
 +        dd *= nChoosek(exponentCompl, (int) _exponents(i, k))
 +          * pow(bezuvw(m, k), _exponents(i, k));
 +        pointCompl -= bezuvw(m, k);
 +        exponentCompl -= (int) _exponents(i, k);
 +      }
 +      dd *= pow_int(pointCompl, exponentCompl);
 +
 +      for (int k = dimSimplex; k < dim; k++) {
 +        dd *= nChoosek(order, (int) _exponents(i, k))
 +            * pow_int(bezuvw(m, k), _exponents(i, k))
 +            * pow_int(1. - bezuvw(m, k), order - _exponents(i, k));
 +      }
 +      for (int n = 0; n < coeffs.size2(); ++n)
 +        result(m, n) += coeffs(i, n) * dd;
 +    }
++=======
+       generateBez2LagMatrixPyramid(exponents, subPoints[i],
+                                    pyr, nij, nk);
+     lag2Bez.mult(intermediate1, intermediate2);
+     subDivisor.copy(intermediate2, 0, nbPts, 0, nbPts, i*nbPts, 0);
++>>>>>>> upstream/2.9.3+dfsg1
    }
+   return subDivisor;
+ }
  }
  
- void bezierBasis::_construct(int parentType, int p)
+ void bezierBasis::generateBezierPoints(fullMatrix<double> &points) const
  {
++<<<<<<< HEAD
 +  order = p;
 +  type = parentType;
 +  std::vector< fullMatrix<double> > subPoints;
 +
 +  if (parentType == TYPE_PYR) {
 +    dim = 3;
 +    numLagCoeff = 8;
 +    _exponents = JacobianBasis::generateJacMonomialsPyramid(order);
 +
 +    subPoints = generateSubPointsPyr(order);
 +    numDivisions = static_cast<int>(subPoints.size());
 +
 +    fullMatrix<double> bezierPoints;
 +    bezierPoints.resize(_exponents.size1(), _exponents.size2());
 +    const double p = order + 2;
 +    for (int i = 0; i < bezierPoints.size1(); ++i) {
 +      bezierPoints(i, 2) = _exponents(i, 2) / p;
 +      const double scale = 1. - bezierPoints(i, 2);
 +      bezierPoints(i, 0) = _exponents(i, 0) / p * scale;
 +      bezierPoints(i, 1) = _exponents(i, 1) / p * scale;
 +    }
 +
 +    matrixBez2Lag = generateBez2LagMatrixPyramid(_exponents, bezierPoints, order);
 +    matrixBez2Lag.invert(matrixLag2Bez);
 +    subDivisor = generateSubDivisorPyramid(_exponents, subPoints, matrixLag2Bez, order);
++=======
+   gmshGenerateMonomials(_data, points);
+   points.scale(1./_data.spaceOrder());
+ 
+   if (_data.elementType() == TYPE_PYR && _data.nk() < _data.spaceOrder()) {
+     fullMatrix<double> prox;
+     prox.setAsProxy(points, 2, 1);
+     prox.add(1-static_cast<double>(_data.nk())/_data.spaceOrder());
+   }
+ }
+ 
+ void bezierBasis::_FEpoints2BezPoints(fullMatrix<double> &points) const
+ {
+   switch (_data.elementType()) {
+   case TYPE_TRI:
+   case TYPE_TET:
+     break;
+ 
+   case TYPE_QUA:
+   case TYPE_HEX:
+     points.add(1);
+     points.scale(.5);
+     break;
+ 
+   case TYPE_PRI:
+     {
+       fullMatrix<double> tmp;
+       tmp.setAsProxy(points, 2, 1);
+       tmp.add(1);
+       tmp.scale(.5);
+     }
+     break;
+ 
+   case TYPE_PYR:
+     for (int i = 0; i < points.size1(); ++i) {
+       points(i, 2) = 1. - points(i, 2);
+       points(i, 0) = .5 * (1 + points(i, 0) / points(i, 2));
+       points(i, 1) = .5 * (1 + points(i, 1) / points(i, 2));
+     }
+     break;
+ 
+   default:
+     Msg::Error("_FEpoints2BezPoints not implemented for "
+                "type of element %d", _data.elementType());
++>>>>>>> upstream/2.9.3+dfsg1
      return;
    }
+ }
+ 
+ void bezierBasis::interpolate(const fullMatrix<double> &coeffs,
+                               const fullMatrix<double> &uvw,
+                               fullMatrix<double> &result,
+                               bool bezCoord) const
+ {
+   if (result.size1() != uvw.size1() || result.size2() != coeffs.size2())
+     result.resize(uvw.size1(), coeffs.size2());
+ 
+   fullMatrix<double> bezuvw = uvw;
+   if (!bezCoord) _FEpoints2BezPoints(bezuvw);
+ 
+   const int numCoeff = _exponents.size1();
+   const int dim = _exponents.size2();
+   int order[3];
+ 
+   for (int m = 0; m < uvw.size1(); ++m) {
+     for (int n = 0; n < coeffs.size2(); ++n) result(m, n) = 0;
+     for (int i = 0; i < numCoeff; i++) {
+       _data.getOrderForBezier(order, _exponents(i, dim-1));
+       double dd = 1;
+       double pointCompl = 1.;
+       int exponentCompl = order[0];
+       for (int k = 0; k < _dimSimplex; k++) {
+         dd *= nChoosek(exponentCompl, (int) _exponents(i, k))
+           * pow(bezuvw(m, k), _exponents(i, k));
+         pointCompl -= bezuvw(m, k);
+         exponentCompl -= (int) _exponents(i, k);
+       }
+       dd *= pow_int(pointCompl, exponentCompl);
+ 
+       for (int k = _dimSimplex; k < dim; k++) {
+         dd *= nChoosek(order[k], (int) _exponents(i, k))
+             * pow_int(bezuvw(m, k), _exponents(i, k))
+             * pow_int(1. - bezuvw(m, k), order[k] - _exponents(i, k));
+       }
+       for (int n = 0; n < coeffs.size2(); ++n)
+         result(m, n) += coeffs(i, n) * dd;
+     }
+   }
+ }
+ 
+ void bezierBasis::lag2Bez(const fullMatrix<double> &lag,
+                           fullMatrix<double> &bez) const
+ {
+   if (lag.size1() != matrixLag2Bez.size1()) {
+     Msg::Error("matrix not the right size in lag2Bez function %d vs %d",
+         lag.size1(), matrixLag2Bez.size1());
+   }
+   if (bez.size1() != lag.size1() || bez.size2() != lag.size2()) {
+     bez.resize(lag.size1(), lag.size2());
+   }
+   matrixLag2Bez.mult(lag, bez);
+ }
  
+ void bezierBasis::subdivideBezCoeff(const fullMatrix<double> &coeff,
+                                     fullMatrix<double> &subCoeff) const
+ {
+   if (subCoeff.size1() != subDivisor.size1()
+       || subCoeff.size2() != coeff.size2()  ) {
+     subCoeff.resize(subDivisor.size1(), coeff.size2());
+   }
+   subDivisor.mult(coeff, subCoeff);
+ }
+ 
++<<<<<<< HEAD
 +  switch (parentType) {
 +    case TYPE_PNT :
 +      dim = 0;
 +      numLagCoeff = 1;
++=======
+ void bezierBasis::subdivideBezCoeff(const fullVector<double> &coeff,
+                                     fullVector<double> &subCoeff) const
+ {
+   if (subCoeff.size() != subDivisor.size1()) {
+     subCoeff.resize(subDivisor.size1());
+   }
+   subDivisor.mult(coeff, subCoeff);
+ }
+ 
+ void bezierBasis::_construct()
+ {
+   if (_data.elementType() == TYPE_PYR) {
+     Msg::Fatal("This bezierBasis constructor is not for pyramids !");
+   }
+ 
+   std::vector< fullMatrix<double> > subPoints;
+   int order = _data.spaceOrder();
+ 
+   switch (_data.elementType()) {
+     case TYPE_PNT :
+       _numLagCoeff = 1;
++>>>>>>> upstream/2.9.3+dfsg1
        _dimSimplex = 0;
        _exponents = gmshGenerateMonomialsLine(0);
        subPoints.push_back(gmshGeneratePointsLine(0));
        break;
      case TYPE_LIN : {
++<<<<<<< HEAD
 +      dim = 1;
 +      numLagCoeff = order == 0 ? 1 : 2;
++=======
+       _numLagCoeff = order ? 2 : 1;
++>>>>>>> upstream/2.9.3+dfsg1
        _dimSimplex = 0;
        _exponents = gmshGenerateMonomialsLine(order);
        subPoints = generateSubPointsLine(order);
        break;
      }
      case TYPE_TRI : {
++<<<<<<< HEAD
 +      dim = 2;
 +      numLagCoeff = order == 0 ? 1 : 3;
++=======
+       _numLagCoeff = order ? 3 : 1;
++>>>>>>> upstream/2.9.3+dfsg1
        _dimSimplex = 2;
        _exponents = gmshGenerateMonomialsTriangle(order);
        subPoints = generateSubPointsTriangle(order);
        break;
      }
      case TYPE_QUA : {
++<<<<<<< HEAD
 +      dim = 2;
 +      numLagCoeff = order == 0 ? 1 : 4;
++=======
+       _numLagCoeff = order ? 4 : 1;
++>>>>>>> upstream/2.9.3+dfsg1
        _dimSimplex = 0;
        _exponents = gmshGenerateMonomialsQuadrangle(order);
        subPoints = generateSubPointsQuad(order);
        break;
      }
      case TYPE_TET : {
++<<<<<<< HEAD
 +      dim = 3;
 +      numLagCoeff = order == 0 ? 1 : 4;
++=======
+       _numLagCoeff = order ? 4 : 1;
++>>>>>>> upstream/2.9.3+dfsg1
        _dimSimplex = 3;
        _exponents = gmshGenerateMonomialsTetrahedron(order);
        subPoints = generateSubPointsTetrahedron(order);
        break;
      }
      case TYPE_PRI : {
++<<<<<<< HEAD
 +      dim = 3;
 +      numLagCoeff = order == 0 ? 1 : 6;
++=======
+       _numLagCoeff = order ? 6 : 1;
++>>>>>>> upstream/2.9.3+dfsg1
        _dimSimplex = 2;
        _exponents = gmshGenerateMonomialsPrism(order);
        subPoints = generateSubPointsPrism(order);
        break;
      }
      case TYPE_HEX : {
++<<<<<<< HEAD
 +      dim = 3;
 +      numLagCoeff = order == 0 ? 1 : 8;
++=======
+       _numLagCoeff = order ? 8 : 1;
++>>>>>>> upstream/2.9.3+dfsg1
        _dimSimplex = 0;
        _exponents = gmshGenerateMonomialsHexahedron(order);
        subPoints = generateSubPointsHex(order);
        break;
      }
      default : {
++<<<<<<< HEAD
 +      Msg::Error("Unknown function space of parentType %d : "
 +          "reverting to TET_1", parentType);
 +      dim = 3;
 +      order = 0;
 +      numLagCoeff = 4;
 +      _dimSimplex = 3;
 +      _exponents = gmshGenerateMonomialsTetrahedron(order);
 +      subPoints = generateSubPointsTetrahedron(order);
 +      break;
++=======
+       Msg::Fatal("Unknown function space for parentType %d", _data.elementType());
+       return;
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
-   numDivisions = static_cast<int>(subPoints.size());
+   _numDivisions = static_cast<int>(subPoints.size());
  
    fullMatrix<double> bezierPoints = _exponents;
++<<<<<<< HEAD
 +  bezierPoints.scale(1./order);
++=======
+   if (order) bezierPoints.scale(1./order);
++>>>>>>> upstream/2.9.3+dfsg1
  
    matrixBez2Lag = generateBez2LagMatrix(_exponents, bezierPoints, order, _dimSimplex);
    matrixBez2Lag.invert(matrixLag2Bez);
    subDivisor = generateSubDivisor(_exponents, subPoints, matrixLag2Bez, order, _dimSimplex);
++<<<<<<< HEAD
++=======
+ }
+ 
+ void bezierBasis::_constructPyr()
+ {
+   if (_data.elementType() != TYPE_PYR) {
+     Msg::Fatal("This bezierBasis constructor is for pyramids !");
+   }
+ 
+   const bool pyr = _data.isPyramidalSpace();
+   const int nij = _data.nij(), nk = _data.nk();
+ 
+   _numLagCoeff = nk == 0 ? 4 : 8;
+   _dimSimplex = 0;
+   gmshGenerateMonomials(_data, _exponents);
+ 
+   fullMatrix<double> bezierPoints;
+   generateBezierPoints(bezierPoints);
+   matrixBez2Lag = generateBez2LagMatrixPyramid(_exponents, bezierPoints,
+                                                pyr, nij, nk);
+   matrixBez2Lag.invert(matrixLag2Bez);
+   if (pyr) {
+     _numDivisions = 0;
+   }
+   else {
+     std::vector< fullMatrix<double> > subPoints;
+     subPoints = generateSubPointsPyr(nij, nk);
+     _numDivisions = static_cast<int>(subPoints.size());
+     subDivisor = generateSubDivisorPyramid(_exponents, subPoints, matrixLag2Bez,
+                                            pyr, nij, nk);
+   }
+   return;
++>>>>>>> upstream/2.9.3+dfsg1
  }
diff --cc Numeric/bezierBasis.h
index 257e54b,7a1f3bd..7ced57e
--- a/Numeric/bezierBasis.h
+++ b/Numeric/bezierBasis.h
@@@ -16,11 -17,11 +17,19 @@@ class MElement
  class bezierBasis {
   private :
    // the 'numLagCoeff' first exponents are related to 'Lagrangian' values
++<<<<<<< HEAD
 +  int numLagCoeff;
 +  int dim, type, order;
 +  int numDivisions;
 + public:
 +  int _dimSimplex;
++=======
+   int _numLagCoeff;
+   int _numDivisions, _dimSimplex;
+   const FuncSpaceData _data;
+ 
+   friend class MetricBasis;
++>>>>>>> upstream/2.9.3+dfsg1
    fullMatrix<double> _exponents;
  
   public :
@@@ -37,21 -38,47 +46,55 @@@
    }
  
    // get methods
-   inline int getDim() const {return dim;}
-   inline int getOrder() const {return order;}
-   inline int getNumLagCoeff() const {return numLagCoeff;}
-   inline int getNumDivision() const {return numDivisions;}
+   inline int getDim() const {return _exponents.size2();}
+   inline int getOrder() const {return _data.spaceOrder();}
+   inline int getDimSimplex() const {return _dimSimplex;}
+   inline int getNumLagCoeff() const {return _numLagCoeff;}
+   inline int getNumDivision() const {return _numDivisions;}
+   inline int getNumSubNodes() const {return subDivisor.size1();}
+ 
+   // generate Bezier points
+   void generateBezierPoints(fullMatrix<double>&) const;
+ 
+   // transform coeff Lagrange into Bezier coeff
+   void lag2Bez(const fullMatrix<double> &lag, fullMatrix<double> &bez) const;
+ 
+   // Subdivide Bezier coefficients
+   void subdivideBezCoeff(const fullMatrix<double> &coeff,
+                          fullMatrix<double> &subCoeff) const;
+   void subdivideBezCoeff(const fullVector<double> &coeff,
+                          fullVector<double> &subCoeff) const;
+ 
+   // Interpolation of n functions on N points :
+   // coeffs(numCoeff, n) and uvw(N, dim)
+   // => result(N, n)
+   void interpolate(const fullMatrix<double> &coeffs,
+                    const fullMatrix<double> &uvw,
+                    fullMatrix<double> &result,
+                    bool bezCoord = false) const;
+   void interpolate(const fullVector<double> &coeffs,
+                    const fullMatrix<double> &uvw,
+                    fullVector<double> &result,
+                    bool bezCoord = false) const {
+     int size = uvw.size1();
+     result.resize(size);
+     fullMatrix<double> c(const_cast<double*>(coeffs.getDataPtr()), size, 1);
+     fullMatrix<double> r(const_cast<double*>(result.getDataPtr()), size, 1);
+     interpolate(c, uvw, r, bezCoord);
+   }
  
 +  // Interpolation of n functions on N points :
 +  // coeffs(numCoeff, n) and uvw(N, dim)
 +  // => result(N, n)
 +  void interpolate(const fullMatrix<double> &coeffs,
 +                   const fullMatrix<double> &uvw,
 +                   fullMatrix<double> &result,
 +                   bool bezCoord = false) const;
 +
   private :
-   void _construct(int parendtType, int order);
+   void _construct();
+   void _constructPyr();
+   void _FEpoints2BezPoints(fullMatrix<double>&) const;
  };
  
  #endif
diff --cc Numeric/decasteljau.cpp
index 74cd872,942aa25..4380e99
--- a/Numeric/decasteljau.cpp
+++ b/Numeric/decasteljau.cpp
@@@ -1,10 -1,11 +1,18 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
  //
  // Contributed by J. Lambrechts
  
++<<<<<<< HEAD
++=======
+ #include <algorithm>
++>>>>>>> upstream/2.9.3+dfsg1
  #include "decasteljau.h"
  #include "SPoint3.h"
  #include "SVector3.h"
diff --cc Numeric/decasteljau.h
index b013592,b2dc2c7..240c8f0
--- a/Numeric/decasteljau.h
+++ b/Numeric/decasteljau.h
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Numeric/discreteFrechetDistance.cpp
index 94f4cad,919e56c..df20070
--- a/Numeric/discreteFrechetDistance.cpp
+++ b/Numeric/discreteFrechetDistance.cpp
@@@ -1,12 -1,14 +1,25 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
  
++<<<<<<< HEAD
 +#include "discreteFrechetDistance.h"
 +#include "fullMatrix.h"
 +
 +static double distance (const SPoint3 &p1, const SPoint3 &p2){
++=======
+ #include <algorithm>
+ #include "discreteFrechetDistance.h"
+ #include "fullMatrix.h"
+ 
+ static double distance (const SPoint3 &p1, const SPoint3 &p2)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    return p1.distance(p2);
  }
  
diff --cc Numeric/discreteFrechetDistance.h
index 439b0c9,a4fadcd..1d98a4e
--- a/Numeric/discreteFrechetDistance.h
+++ b/Numeric/discreteFrechetDistance.h
@@@ -1,7 -1,15 +1,24 @@@
++<<<<<<< HEAD
 +#ifndef _DISCRETE_FRECHET_DISTANCE_
 +#define _DISCRETE_FRECHET_DISTANCE_
 +#include <vector>
 +#include "SPoint3.h"
 +double discreteFrechetDistance (const std::vector<SPoint3> &P, 
 +				const std::vector<SPoint3> &Q);
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
+ //
+ // See the LICENSE.txt file for license information. Please report all
+ // bugs and problems to the public mailing list <gmsh at geuz.org>.
+ 
+ #ifndef _DISCRETE_FRECHET_DISTANCE_
+ #define _DISCRETE_FRECHET_DISTANCE_
+ 
+ #include <vector>
+ #include "SPoint3.h"
+ 
+ double discreteFrechetDistance (const std::vector<SPoint3> &P,
+ 				const std::vector<SPoint3> &Q);
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #endif
diff --cc Numeric/hausdorffDistance.cpp
index 0c7ba1a,0797b0d..d02d8cc
--- a/Numeric/hausdorffDistance.cpp
+++ b/Numeric/hausdorffDistance.cpp
@@@ -1,8 -1,14 +1,22 @@@
++<<<<<<< HEAD
 +/*
 +compute the hausdorff distance between two polygonal curves 
 +in n*m time where n and m are the nb of points of the 
 +polygonal curves
 +*/
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
+ //
+ // See the LICENSE.txt file for license information. Please report all
+ // bugs and problems to the public mailing list <gmsh at geuz.org>.
+ 
+ /*
+   compute the hausdorff distance between two polygonal curves
+   in n*m time where n and m are the nb of points of the
+   polygonal curves
+ */
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #include "SVector3.h"
  #include "hausdorffDistance.h"
  
@@@ -20,7 -26,8 +34,12 @@@ static double intersect (SPoint3 &q, SV
    return t;
  }
  
++<<<<<<< HEAD
 +static double projection (SPoint3 &p1, SPoint3 &p2, SPoint3 &q, SPoint3 &result){
++=======
+ static double projection (SPoint3 &p1, SPoint3 &p2, SPoint3 &q, SPoint3 &result)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    // x = p1 + t (p2 - p1)
    // (x - q) * (p2 - p1) = 0
    // (p1 + t (p2 - p1) - q) (p2 - p1) = 0
@@@ -29,18 -36,19 +48,32 @@@
    const double t = dot(q-p1,p21)/dot(p21,p21);
    result = p1 *(1.-t)+ p2*t;
    return t;
++<<<<<<< HEAD
 +}  
 +
 +static SPoint3 closestPoint (SPoint3 &p1, SPoint3 &p2, SPoint3 &q){
++=======
+ }
+ 
+ static SPoint3 closestPoint (SPoint3 &p1, SPoint3 &p2, SPoint3 &q)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    double result;
    const double t = projection (p1,p2,q,result);
    if (t >= 0.0 && t <= 1.0)return result;
    if (t < 0)return p1;
    return p2;
++<<<<<<< HEAD
 +}  
 +
 +
 +double closestPoint (const std::vector<SPoint3> &P, const SPoint3 &p, SPoint3 & result){
++=======
+ }
+ 
+ double closestPoint (const std::vector<SPoint3> &P, const SPoint3 &p, SPoint3 & result)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    double closestDistance = 1.e22;
    for (unsigned int i=1;i<P.size();i++){
      SPoint3 q = closestPoint (P[i-1],P[i],p);
@@@ -48,18 -56,19 +81,34 @@@
      if (pq < closestDistance){
        closestDistance = pq;
        result = q;
++<<<<<<< HEAD
 +    }   
 +  }
 +  return closestDistance;
 +} 
 +
 +// we test all points of P plus all points that are the intersections
 +// of angle bissectors of Q with P
 +double oneSidedHausdorffDistance (const std::vector<SPoint3> &P, 
 +				  const std::vector<SPoint3> &Q, 
 +				  SPoint3 &p1, SPoint3 &p2){
 +  const double hausdorffDistance = 0.0;
 +  
++=======
+     }
+   }
+   return closestDistance;
+ }
+ 
+ // we test all points of P plus all points that are the intersections
+ // of angle bissectors of Q with P
+ double oneSidedHausdorffDistance (const std::vector<SPoint3> &P,
+ 				  const std::vector<SPoint3> &Q,
+ 				  SPoint3 &p1, SPoint3 &p2)
+ {
+   const double hausdorffDistance = 0.0;
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    // first test the points
    for (unsigned int i=0;i<P.size();i++){
      SPoint3 result;
@@@ -92,7 -101,7 +141,11 @@@
      for (unsigned int i=1;i<P.size();i++){
        SPoint3 result;
        const double t = intersect (b, n, P[i-1],P[i],result);
++<<<<<<< HEAD
 +      if (t >=0 && t <=1)intersections.push_back(result);	
++=======
+       if (t >=0 && t <=1)intersections.push_back(result);
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
  
@@@ -108,8 -117,9 +161,16 @@@
    return hausdorffDistance;
  }
  
++<<<<<<< HEAD
 +double hausdorffDistance (const std::vector<SPoint3> &P, 
 +			  const std::vector<SPoint3> &Q){
 +  return std::max(oneSidedHausdorffDistance (P,Q),
 +		  oneSidedHausdorffDistance (Q,P));  
++=======
+ double hausdorffDistance (const std::vector<SPoint3> &P,
+ 			  const std::vector<SPoint3> &Q)
+ {
+   return std::max(oneSidedHausdorffDistance (P,Q),
+ 		  oneSidedHausdorffDistance (Q,P));
++>>>>>>> upstream/2.9.3+dfsg1
  }
diff --cc Numeric/miniBasis.cpp
index b893ebc,ff7dd44..8c16b5f
--- a/Numeric/miniBasis.cpp
+++ b/Numeric/miniBasis.cpp
@@@ -1,6 -1,12 +1,18 @@@
++<<<<<<< HEAD
 +#include "miniBasis.h"
 +#include "BasisFactory.h"
 +miniBasis::miniBasis()
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
+ //
+ // See the LICENSE.txt file for license information. Please report all
+ // bugs and problems to the public mailing list <gmsh at geuz.org>.
+ 
+ #include "miniBasis.h"
+ #include "BasisFactory.h"
+ 
+ miniBasisTri::miniBasisTri()
++>>>>>>> upstream/2.9.3+dfsg1
  {
    type = MSH_TRI_MINI;
    parentType = TYPE_TRI;
@@@ -21,6 -27,20 +33,23 @@@
    points(1, 0) = 1.; points(1, 1) = 0.;
    points(2, 0) = 0.; points(2, 1) = 1.;
    points(3, 0) = 1./3; points(3, 1) = 1./3;
++<<<<<<< HEAD
++=======
+   /*
+   monomials :
+     0 : 1
+     1 : x
+     2 : y
+     3 : xy
+     4 : x²y
+     5 : xy²
+   fs :
+     0 : 1 -1 -1  0  0  0 : 1 - x - y
+     1 : 1  0  0  0  0  0 : x
+     2 : 0  1  0  0  0  0 : y
+     3 : 0  0  0  1 -1 -1 : xy - x²y - xy² = (1 - x - y) x y
+   */
++>>>>>>> upstream/2.9.3+dfsg1
    monomials.resize(6, 2);
    monomials(0, 0) = 0.; monomials(0, 1) = 0.;
    monomials(1, 0) = 1.; monomials(1, 1) = 0.;
@@@ -33,5 -53,61 +62,65 @@@
    coefficients(0, 0) = 1.; coefficients(0, 1) = -1.; coefficients(0, 2) = -1.;
    coefficients(1, 1) = 1.;
    coefficients(2, 2) = 1.;
++<<<<<<< HEAD
 +  coefficients(3, 3) = 1.; coefficients(3, 4) = -1.; coefficients(3, 5) = -1.; 
++=======
+   coefficients(3, 3) = 1.; coefficients(3, 4) = -1.; coefficients(3, 5) = -1.;
+ }
+ 
+ miniBasisTet::miniBasisTet()
+ {
+   type = MSH_TET_MINI;
+   parentType = TYPE_TET;
+   order = 3;
+   dimension = 3;
+   numFaces = 4;
+   serendip = false;
+   const nodalBasis &p1 = *BasisFactory::getNodalBasis(MSH_TET_4);
+   closures = p1.closures;
+   fullClosures = p1.fullClosures;
+   for(size_t i = 0; i < fullClosures.size(); ++i) {
+     fullClosures[i].push_back(4);
+   }
+   closureRef = p1.closureRef;
+   points.resize(5, 3);
+   for (int i = 0; i < 4; ++i)
+     for (int j = 0; j < 3; ++j)
+       points(i, j) = p1.points(i, j);
+   points(4, 0) = points(4, 1) = points(4, 2) = 1./4;
+ 
+   /*
+   monomials :
+     0 : 1
+     1 : x
+     2 : y
+     3 : z
+     4 : xyz
+     5 : x²yz
+     6 : xy²z
+     7 : xyz²
+   sf :
+     0 : 1 -1 -1 -1  0  0  0  0 : 1 - x - y - z
+     1 : 0  1  0  0  0  0  0  0 : x
+     2 : 0  0  1  0  0  0  0  0 : y
+     3 : 0  0  0  1  0  0  0  0 : z
+     4 : 0  0  0  0  1 -1 -1 -1 : xyz - x²yz - xy²z - xyz² = (1 - x - y - z) x y z
+   */
+   monomials.resize(8, 3);
+   monomials(0, 0) = 0.; monomials(0, 1) = 0.; monomials(0, 2) = 0.;
+   monomials(1, 0) = 1.; monomials(1, 1) = 0.; monomials(1, 2) = 0.;
+   monomials(2, 0) = 0.; monomials(2, 1) = 1.; monomials(2, 2) = 0.;
+   monomials(3, 0) = 0.; monomials(3, 1) = 0.; monomials(3, 2) = 1.;
+   monomials(4, 0) = 1.; monomials(4, 1) = 1.; monomials(4, 2) = 1.;
+   monomials(5, 0) = 2.; monomials(5, 1) = 1.; monomials(5, 2) = 1.;
+   monomials(6, 0) = 1.; monomials(6, 1) = 2.; monomials(6, 2) = 1.;
+   monomials(7, 0) = 1.; monomials(7, 1) = 1.; monomials(7, 2) = 2.;
+   coefficients.resize(5, 8);
+   coefficients.setAll(0.);
+   coefficients(0, 0) = 1.; coefficients(0, 1) = -1.; coefficients(0, 2) = -1.; coefficients(0, 3) = -1.;
+   coefficients(1, 1) = 1.;
+   coefficients(2, 2) = 1.;
+   coefficients(3, 3) = 1.;
+   coefficients(4, 4) = 1.; coefficients(4, 5) = -1.; coefficients(4, 6) = -1.; coefficients(4, 7) = -1.;
++>>>>>>> upstream/2.9.3+dfsg1
  }
diff --cc Numeric/miniBasis.h
index 631980a,79d8b93..17309f6
--- a/Numeric/miniBasis.h
+++ b/Numeric/miniBasis.h
@@@ -1,8 -1,22 +1,32 @@@
++<<<<<<< HEAD
 +#ifndef _MINI_BASIS_H_
 +#define _MINI_BASIS_H_
 +#include "polynomialBasis.h"
 +class miniBasis : public polynomialBasis { // mini is NOT a real nodal basis but in GMSH, only the nodal basis have closure and mini have closure so...
 +  public:
 +    miniBasis();
 +};
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
+ //
+ // See the LICENSE.txt file for license information. Please report all
+ // bugs and problems to the public mailing list <gmsh at geuz.org>.
+ 
+ #ifndef _MINI_BASIS_H_
+ #define _MINI_BASIS_H_
+ 
+ #include "polynomialBasis.h"
+ // mini is NOT a real nodal basis but in GMSH, only the nodal basis have closure
+ // and mini have closure so...
+ 
+ class miniBasisTri : public polynomialBasis {
+   public:
+     miniBasisTri();
+ };
+ class miniBasisTet : public polynomialBasis {
+   public:
+     miniBasisTet();
+ };
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #endif
diff --cc Numeric/nodalBasis.h
index 25b8556,b5466a6..9d3148f
--- a/Numeric/nodalBasis.h
+++ b/Numeric/nodalBasis.h
@@@ -15,7 -15,7 +15,11 @@@ class nodalBasis 
    bool serendip;
    fullMatrix<double> points;
  
++<<<<<<< HEAD
 +  nodalBasis() {};
++=======
+   nodalBasis() {}
++>>>>>>> upstream/2.9.3+dfsg1
    nodalBasis(int tag);
    virtual ~nodalBasis() {}
  
diff --cc Parser/FunctionManager.cpp
index d12d7bf,2f980fc..a4709f7
--- a/Parser/FunctionManager.cpp
+++ b/Parser/FunctionManager.cpp
@@@ -54,8 -45,8 +45,13 @@@ FunctionManager *FunctionManager::Insta
    return instance;
  }
  
++<<<<<<< HEAD
 +int FunctionManager::enterFunction(char *name, gmshFILE * f, std::string &filename,
 +                                   int &lno) const
++=======
+ int FunctionManager::enterFunction(const std::string &name, gmshFILE * f,
+                                    std::string &filename, int &lno) const
++>>>>>>> upstream/2.9.3+dfsg1
  {
    if(functions->m.find(name) == functions->m.end())
      return 0;
@@@ -87,8 -78,8 +83,13 @@@ int FunctionManager::leaveFunction(gmsh
    return 1;
  }
  
++<<<<<<< HEAD
 +int FunctionManager::createFunction(char *name, gmshFILE  f, std::string &filename,
 +                                    int lno)
++=======
+ int FunctionManager::createFunction(const std::string &name, gmshFILE f,
+                                     const std::string &filename, int lno)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    File_Position fp;
    fp.file = f;
diff --cc Parser/FunctionManager.h
index 8e6d33a,328f697..dddfe03
--- a/Parser/FunctionManager.h
+++ b/Parser/FunctionManager.h
@@@ -22,8 -22,10 +22,15 @@@ class FunctionManage
    static FunctionManager *instance;
   public :
    static FunctionManager* Instance();
++<<<<<<< HEAD
 +  int createFunction(char *name, gmshFILE f, std::string &filename, int lineno);
 +  int enterFunction(char *name, gmshFILE *f, std::string &filename, int &lineno) const;
++=======
+   int createFunction(const std::string &name, gmshFILE f,
+                      const std::string &filename, int lineno);
+   int enterFunction(const std::string &name, gmshFILE *f,
+                     std::string &filename, int &lineno) const;
++>>>>>>> upstream/2.9.3+dfsg1
    int leaveFunction(gmshFILE *f, std::string &filename, int &lineno);
  };
  
diff --cc Parser/Gmsh.l
index 5253e2b,47892e9..274f16b
--- a/Parser/Gmsh.l
+++ b/Parser/Gmsh.l
@@@ -163,7 -163,9 +163,13 @@@ Exists                  return tExists
  
  Fabs                    return tFabs;
  Field                   return tField;
++<<<<<<< HEAD
 +FileExists              return tFileExists;
++=======
+ Find                    return tFind;
+ FileExists              return tFileExists;
+ FixRelativePath         return tFixRelativePath;
++>>>>>>> upstream/2.9.3+dfsg1
  Floor                   return tFloor;
  Fmod                    return tFmod;
  For                     return tFor;
@@@ -205,6 -207,7 +211,10 @@@ Memory                  return tMemory
  Nurbs			return tNurbs;
  
  OnelabAction            return tOnelabAction;
++<<<<<<< HEAD
++=======
+ OnelabRun               return tOnelabRun;
++>>>>>>> upstream/2.9.3+dfsg1
  Order			return tNurbsOrder;
  
  Periodic                return tPeriodic;
diff --cc Parser/Gmsh.tab.cpp
index fdc4530,8bd1d1e..ba33707
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@@ -55,364 -52,27 +52,380 @@@
  /* Pure parsers.  */
  #define YYPURE 0
  
++<<<<<<< HEAD
 +/* Using locations.  */
 +#define YYLSP_NEEDED 0
 +
 +/* Substitute the variable and function names.  */
 +#define yyparse gmsh_yyparse
 +#define yylex   gmsh_yylex
 +#define yyerror gmsh_yyerror
 +#define yylval  gmsh_yylval
 +#define yychar  gmsh_yychar
 +#define yydebug gmsh_yydebug
 +#define yynerrs gmsh_yynerrs
 +
 +
 +/* Tokens.  */
 +#ifndef YYTOKENTYPE
 +# define YYTOKENTYPE
 +   /* Put the tokens into the symbol table, so that GDB and other debuggers
 +      know about them.  */
 +   enum yytokentype {
 +     tDOUBLE = 258,
 +     tSTRING = 259,
 +     tBIGSTR = 260,
 +     tEND = 261,
 +     tAFFECT = 262,
 +     tDOTS = 263,
 +     tPi = 264,
 +     tMPI_Rank = 265,
 +     tMPI_Size = 266,
 +     tEuclidian = 267,
 +     tCoordinates = 268,
 +     tExp = 269,
 +     tLog = 270,
 +     tLog10 = 271,
 +     tSqrt = 272,
 +     tSin = 273,
 +     tAsin = 274,
 +     tCos = 275,
 +     tAcos = 276,
 +     tTan = 277,
 +     tRand = 278,
 +     tAtan = 279,
 +     tAtan2 = 280,
 +     tSinh = 281,
 +     tCosh = 282,
 +     tTanh = 283,
 +     tFabs = 284,
 +     tFloor = 285,
 +     tCeil = 286,
 +     tRound = 287,
 +     tFmod = 288,
 +     tModulo = 289,
 +     tHypot = 290,
 +     tList = 291,
 +     tPrintf = 292,
 +     tError = 293,
 +     tStr = 294,
 +     tSprintf = 295,
 +     tStrCat = 296,
 +     tStrPrefix = 297,
 +     tStrRelative = 298,
 +     tStrReplace = 299,
 +     tStrFind = 300,
 +     tStrCmp = 301,
 +     tTextAttributes = 302,
 +     tBoundingBox = 303,
 +     tDraw = 304,
 +     tSetChanged = 305,
 +     tToday = 306,
 +     tOnelabAction = 307,
 +     tSyncModel = 308,
 +     tCpu = 309,
 +     tMemory = 310,
 +     tTotalMemory = 311,
 +     tCreateTopology = 312,
 +     tCreateTopologyNoHoles = 313,
 +     tDistanceFunction = 314,
 +     tDefineConstant = 315,
 +     tUndefineConstant = 316,
 +     tDefineNumber = 317,
 +     tDefineString = 318,
 +     tPoint = 319,
 +     tCircle = 320,
 +     tEllipse = 321,
 +     tLine = 322,
 +     tSphere = 323,
 +     tPolarSphere = 324,
 +     tSurface = 325,
 +     tSpline = 326,
 +     tVolume = 327,
 +     tCharacteristic = 328,
 +     tLength = 329,
 +     tParametric = 330,
 +     tElliptic = 331,
 +     tRefineMesh = 332,
 +     tAdaptMesh = 333,
 +     tRelocateMesh = 334,
 +     tPlane = 335,
 +     tRuled = 336,
 +     tTransfinite = 337,
 +     tComplex = 338,
 +     tPhysical = 339,
 +     tCompound = 340,
 +     tPeriodic = 341,
 +     tUsing = 342,
 +     tPlugin = 343,
 +     tDegenerated = 344,
 +     tRecursive = 345,
 +     tRotate = 346,
 +     tTranslate = 347,
 +     tSymmetry = 348,
 +     tDilate = 349,
 +     tExtrude = 350,
 +     tLevelset = 351,
 +     tRecombine = 352,
 +     tSmoother = 353,
 +     tSplit = 354,
 +     tDelete = 355,
 +     tCoherence = 356,
 +     tIntersect = 357,
 +     tMeshAlgorithm = 358,
 +     tReverse = 359,
 +     tLayers = 360,
 +     tScaleLast = 361,
 +     tHole = 362,
 +     tAlias = 363,
 +     tAliasWithOptions = 364,
 +     tCopyOptions = 365,
 +     tQuadTriAddVerts = 366,
 +     tQuadTriNoNewVerts = 367,
 +     tQuadTriSngl = 368,
 +     tQuadTriDbl = 369,
 +     tRecombLaterals = 370,
 +     tTransfQuadTri = 371,
 +     tText2D = 372,
 +     tText3D = 373,
 +     tInterpolationScheme = 374,
 +     tTime = 375,
 +     tCombine = 376,
 +     tBSpline = 377,
 +     tBezier = 378,
 +     tNurbs = 379,
 +     tNurbsOrder = 380,
 +     tNurbsKnots = 381,
 +     tColor = 382,
 +     tColorTable = 383,
 +     tFor = 384,
 +     tIn = 385,
 +     tEndFor = 386,
 +     tIf = 387,
 +     tEndIf = 388,
 +     tExit = 389,
 +     tAbort = 390,
 +     tField = 391,
 +     tReturn = 392,
 +     tCall = 393,
 +     tFunction = 394,
 +     tShow = 395,
 +     tHide = 396,
 +     tGetValue = 397,
 +     tGetEnv = 398,
 +     tGetString = 399,
 +     tHomology = 400,
 +     tCohomology = 401,
 +     tBetti = 402,
 +     tSetOrder = 403,
 +     tExists = 404,
 +     tFileExists = 405,
 +     tGMSH_MAJOR_VERSION = 406,
 +     tGMSH_MINOR_VERSION = 407,
 +     tGMSH_PATCH_VERSION = 408,
 +     tAFFECTDIVIDE = 409,
 +     tAFFECTTIMES = 410,
 +     tAFFECTMINUS = 411,
 +     tAFFECTPLUS = 412,
 +     tOR = 413,
 +     tAND = 414,
 +     tNOTEQUAL = 415,
 +     tEQUAL = 416,
 +     tGREATEROREQUAL = 417,
 +     tLESSOREQUAL = 418,
 +     UNARYPREC = 419,
 +     tMINUSMINUS = 420,
 +     tPLUSPLUS = 421
 +   };
 +#endif
 +/* Tokens.  */
 +#define tDOUBLE 258
 +#define tSTRING 259
 +#define tBIGSTR 260
 +#define tEND 261
 +#define tAFFECT 262
 +#define tDOTS 263
 +#define tPi 264
 +#define tMPI_Rank 265
 +#define tMPI_Size 266
 +#define tEuclidian 267
 +#define tCoordinates 268
 +#define tExp 269
 +#define tLog 270
 +#define tLog10 271
 +#define tSqrt 272
 +#define tSin 273
 +#define tAsin 274
 +#define tCos 275
 +#define tAcos 276
 +#define tTan 277
 +#define tRand 278
 +#define tAtan 279
 +#define tAtan2 280
 +#define tSinh 281
 +#define tCosh 282
 +#define tTanh 283
 +#define tFabs 284
 +#define tFloor 285
 +#define tCeil 286
 +#define tRound 287
 +#define tFmod 288
 +#define tModulo 289
 +#define tHypot 290
 +#define tList 291
 +#define tPrintf 292
 +#define tError 293
 +#define tStr 294
 +#define tSprintf 295
 +#define tStrCat 296
 +#define tStrPrefix 297
 +#define tStrRelative 298
 +#define tStrReplace 299
 +#define tStrFind 300
 +#define tStrCmp 301
 +#define tTextAttributes 302
 +#define tBoundingBox 303
 +#define tDraw 304
 +#define tSetChanged 305
 +#define tToday 306
 +#define tOnelabAction 307
 +#define tSyncModel 308
 +#define tCpu 309
 +#define tMemory 310
 +#define tTotalMemory 311
 +#define tCreateTopology 312
 +#define tCreateTopologyNoHoles 313
 +#define tDistanceFunction 314
 +#define tDefineConstant 315
 +#define tUndefineConstant 316
 +#define tDefineNumber 317
 +#define tDefineString 318
 +#define tPoint 319
 +#define tCircle 320
 +#define tEllipse 321
 +#define tLine 322
 +#define tSphere 323
 +#define tPolarSphere 324
 +#define tSurface 325
 +#define tSpline 326
 +#define tVolume 327
 +#define tCharacteristic 328
 +#define tLength 329
 +#define tParametric 330
 +#define tElliptic 331
 +#define tRefineMesh 332
 +#define tAdaptMesh 333
 +#define tRelocateMesh 334
 +#define tPlane 335
 +#define tRuled 336
 +#define tTransfinite 337
 +#define tComplex 338
 +#define tPhysical 339
 +#define tCompound 340
 +#define tPeriodic 341
 +#define tUsing 342
 +#define tPlugin 343
 +#define tDegenerated 344
 +#define tRecursive 345
 +#define tRotate 346
 +#define tTranslate 347
 +#define tSymmetry 348
 +#define tDilate 349
 +#define tExtrude 350
 +#define tLevelset 351
 +#define tRecombine 352
 +#define tSmoother 353
 +#define tSplit 354
 +#define tDelete 355
 +#define tCoherence 356
 +#define tIntersect 357
 +#define tMeshAlgorithm 358
 +#define tReverse 359
 +#define tLayers 360
 +#define tScaleLast 361
 +#define tHole 362
 +#define tAlias 363
 +#define tAliasWithOptions 364
 +#define tCopyOptions 365
 +#define tQuadTriAddVerts 366
 +#define tQuadTriNoNewVerts 367
 +#define tQuadTriSngl 368
 +#define tQuadTriDbl 369
 +#define tRecombLaterals 370
 +#define tTransfQuadTri 371
 +#define tText2D 372
 +#define tText3D 373
 +#define tInterpolationScheme 374
 +#define tTime 375
 +#define tCombine 376
 +#define tBSpline 377
 +#define tBezier 378
 +#define tNurbs 379
 +#define tNurbsOrder 380
 +#define tNurbsKnots 381
 +#define tColor 382
 +#define tColorTable 383
 +#define tFor 384
 +#define tIn 385
 +#define tEndFor 386
 +#define tIf 387
 +#define tEndIf 388
 +#define tExit 389
 +#define tAbort 390
 +#define tField 391
 +#define tReturn 392
 +#define tCall 393
 +#define tFunction 394
 +#define tShow 395
 +#define tHide 396
 +#define tGetValue 397
 +#define tGetEnv 398
 +#define tGetString 399
 +#define tHomology 400
 +#define tCohomology 401
 +#define tBetti 402
 +#define tSetOrder 403
 +#define tExists 404
 +#define tFileExists 405
 +#define tGMSH_MAJOR_VERSION 406
 +#define tGMSH_MINOR_VERSION 407
 +#define tGMSH_PATCH_VERSION 408
 +#define tAFFECTDIVIDE 409
 +#define tAFFECTTIMES 410
 +#define tAFFECTMINUS 411
 +#define tAFFECTPLUS 412
 +#define tOR 413
 +#define tAND 414
 +#define tNOTEQUAL 415
 +#define tEQUAL 416
 +#define tGREATEROREQUAL 417
 +#define tLESSOREQUAL 418
 +#define UNARYPREC 419
 +#define tMINUSMINUS 420
 +#define tPLUSPLUS 421
++=======
+ /* Push parsers.  */
+ #define YYPUSH 0
++>>>>>>> upstream/2.9.3+dfsg1
  
+ /* Pull parsers.  */
+ #define YYPULL 1
  
  
+ /* Substitute the variable and function names.  */
+ #define yyparse         gmsh_yyparse
+ #define yylex           gmsh_yylex
+ #define yyerror         gmsh_yyerror
+ #define yylval          gmsh_yylval
+ #define yychar          gmsh_yychar
+ #define yydebug         gmsh_yydebug
+ #define yynerrs         gmsh_yynerrs
  
  /* Copy the first part of user declarations.  */
+ /* Line 371 of yacc.c  */
  #line 1 "Gmsh.y"
  
- // Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
@@@ -523,15 -187,202 +540,206 @@@ struct doubleXstring
  # define YYERROR_VERBOSE 0
  #endif
  
- /* Enabling the token table.  */
- #ifndef YYTOKEN_TABLE
- # define YYTOKEN_TABLE 0
+ /* In a future release of Bison, this section will be replaced
+    by #include "Gmsh.tab.hpp".  */
+ #ifndef YY_GMSH_YY_GMSH_TAB_HPP_INCLUDED
+ # define YY_GMSH_YY_GMSH_TAB_HPP_INCLUDED
+ /* Enabling traces.  */
+ #ifndef YYDEBUG
+ # define YYDEBUG 0
+ #endif
+ #if YYDEBUG
+ extern int gmsh_yydebug;
+ #endif
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+    /* Put the tokens into the symbol table, so that GDB and other debuggers
+       know about them.  */
+    enum yytokentype {
+      tDOUBLE = 258,
+      tSTRING = 259,
+      tBIGSTR = 260,
+      tEND = 261,
+      tAFFECT = 262,
+      tDOTS = 263,
+      tPi = 264,
+      tMPI_Rank = 265,
+      tMPI_Size = 266,
+      tEuclidian = 267,
+      tCoordinates = 268,
+      tExp = 269,
+      tLog = 270,
+      tLog10 = 271,
+      tSqrt = 272,
+      tSin = 273,
+      tAsin = 274,
+      tCos = 275,
+      tAcos = 276,
+      tTan = 277,
+      tRand = 278,
+      tAtan = 279,
+      tAtan2 = 280,
+      tSinh = 281,
+      tCosh = 282,
+      tTanh = 283,
+      tFabs = 284,
+      tFloor = 285,
+      tCeil = 286,
+      tRound = 287,
+      tFmod = 288,
+      tModulo = 289,
+      tHypot = 290,
+      tList = 291,
+      tPrintf = 292,
+      tError = 293,
+      tStr = 294,
+      tSprintf = 295,
+      tStrCat = 296,
+      tStrPrefix = 297,
+      tStrRelative = 298,
+      tStrReplace = 299,
+      tFind = 300,
+      tStrFind = 301,
+      tStrCmp = 302,
+      tStrChoice = 303,
+      tTextAttributes = 304,
+      tBoundingBox = 305,
+      tDraw = 306,
+      tSetChanged = 307,
+      tToday = 308,
+      tFixRelativePath = 309,
+      tSyncModel = 310,
+      tOnelabAction = 311,
+      tOnelabRun = 312,
+      tCpu = 313,
+      tMemory = 314,
+      tTotalMemory = 315,
+      tCreateTopology = 316,
+      tCreateTopologyNoHoles = 317,
+      tDistanceFunction = 318,
+      tDefineConstant = 319,
+      tUndefineConstant = 320,
+      tDefineNumber = 321,
+      tDefineString = 322,
+      tPoint = 323,
+      tCircle = 324,
+      tEllipse = 325,
+      tLine = 326,
+      tSphere = 327,
+      tPolarSphere = 328,
+      tSurface = 329,
+      tSpline = 330,
+      tVolume = 331,
+      tCharacteristic = 332,
+      tLength = 333,
+      tParametric = 334,
+      tElliptic = 335,
+      tRefineMesh = 336,
+      tAdaptMesh = 337,
+      tRelocateMesh = 338,
+      tPlane = 339,
+      tRuled = 340,
+      tTransfinite = 341,
+      tComplex = 342,
+      tPhysical = 343,
+      tCompound = 344,
+      tPeriodic = 345,
+      tUsing = 346,
+      tPlugin = 347,
+      tDegenerated = 348,
+      tRecursive = 349,
+      tRotate = 350,
+      tTranslate = 351,
+      tSymmetry = 352,
+      tDilate = 353,
+      tExtrude = 354,
+      tLevelset = 355,
+      tRecombine = 356,
+      tSmoother = 357,
+      tSplit = 358,
+      tDelete = 359,
+      tCoherence = 360,
+      tIntersect = 361,
+      tMeshAlgorithm = 362,
+      tReverse = 363,
+      tLayers = 364,
+      tScaleLast = 365,
+      tHole = 366,
+      tAlias = 367,
+      tAliasWithOptions = 368,
+      tCopyOptions = 369,
+      tQuadTriAddVerts = 370,
+      tQuadTriNoNewVerts = 371,
+      tQuadTriSngl = 372,
+      tQuadTriDbl = 373,
+      tRecombLaterals = 374,
+      tTransfQuadTri = 375,
+      tText2D = 376,
+      tText3D = 377,
+      tInterpolationScheme = 378,
+      tTime = 379,
+      tCombine = 380,
+      tBSpline = 381,
+      tBezier = 382,
+      tNurbs = 383,
+      tNurbsOrder = 384,
+      tNurbsKnots = 385,
+      tColor = 386,
+      tColorTable = 387,
+      tFor = 388,
+      tIn = 389,
+      tEndFor = 390,
+      tIf = 391,
+      tEndIf = 392,
+      tExit = 393,
+      tAbort = 394,
+      tField = 395,
+      tReturn = 396,
+      tCall = 397,
+      tFunction = 398,
+      tShow = 399,
+      tHide = 400,
+      tGetValue = 401,
+      tGetEnv = 402,
+      tGetString = 403,
+      tHomology = 404,
+      tCohomology = 405,
+      tBetti = 406,
+      tSetOrder = 407,
+      tExists = 408,
+      tFileExists = 409,
+      tGMSH_MAJOR_VERSION = 410,
+      tGMSH_MINOR_VERSION = 411,
+      tGMSH_PATCH_VERSION = 412,
+      tAFFECTDIVIDE = 413,
+      tAFFECTTIMES = 414,
+      tAFFECTMINUS = 415,
+      tAFFECTPLUS = 416,
+      tOR = 417,
+      tAND = 418,
+      tNOTEQUAL = 419,
+      tEQUAL = 420,
+      tGREATEROREQUAL = 421,
+      tLESSOREQUAL = 422,
+      UNARYPREC = 423,
+      tMINUSMINUS = 424,
+      tPLUSPLUS = 425
+    };
  #endif
  
+ 
  #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
  typedef union YYSTYPE
++<<<<<<< HEAD
 +#line 100 "Gmsh.y"
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  {
+ /* Line 387 of yacc.c  */
+ #line 99 "Gmsh.y"
+ 
    char *c;
    int i;
    unsigned int u;
@@@ -539,22 -390,38 +747,51 @@@
    double v[5];
    Shape s;
    List_T *l;
++<<<<<<< HEAD
 +}
 +/* Line 193 of yacc.c.  */
 +#line 545 "Gmsh.tab.cpp"
 +	YYSTYPE;
++=======
+ 
+ 
+ /* Line 387 of yacc.c  */
+ #line 397 "Gmsh.tab.cpp"
+ } YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
++>>>>>>> upstream/2.9.3+dfsg1
  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
  # define YYSTYPE_IS_DECLARED 1
- # define YYSTYPE_IS_TRIVIAL 1
  #endif
  
+ extern YYSTYPE gmsh_yylval;
+ 
+ #ifdef YYPARSE_PARAM
+ #if defined __STDC__ || defined __cplusplus
+ int gmsh_yyparse (void *YYPARSE_PARAM);
+ #else
+ int gmsh_yyparse ();
+ #endif
+ #else /* ! YYPARSE_PARAM */
+ #if defined __STDC__ || defined __cplusplus
+ int gmsh_yyparse (void);
+ #else
+ int gmsh_yyparse ();
+ #endif
+ #endif /* ! YYPARSE_PARAM */
  
+ #endif /* !YY_GMSH_YY_GMSH_TAB_HPP_INCLUDED  */
  
  /* Copy the second part of user declarations.  */
  
++<<<<<<< HEAD
 +
 +/* Line 216 of yacc.c.  */
 +#line 558 "Gmsh.tab.cpp"
++=======
+ /* Line 390 of yacc.c  */
+ #line 425 "Gmsh.tab.cpp"
++>>>>>>> upstream/2.9.3+dfsg1
  
  #ifdef short
  # undef short
@@@ -769,20 -650,20 +1020,37 @@@ union yyallo
  /* YYFINAL -- State number of the termination state.  */
  #define YYFINAL  5
  /* YYLAST -- Last index in YYTABLE.  */
++<<<<<<< HEAD
 +#define YYLAST   8039
 +
 +/* YYNTOKENS -- Number of terminals.  */
 +#define YYNTOKENS  187
 +/* YYNNTS -- Number of nonterminals.  */
 +#define YYNNTS  97
 +/* YYNRULES -- Number of rules.  */
 +#define YYNRULES  466
 +/* YYNRULES -- Number of states.  */
 +#define YYNSTATES  1613
 +
 +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 +#define YYUNDEFTOK  2
 +#define YYMAXUTOK   421
++=======
+ #define YYLAST   9474
+ 
+ /* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  191
+ /* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  97
+ /* YYNRULES -- Number of rules.  */
+ #define YYNRULES  485
+ /* YYNRULES -- Number of states.  */
+ #define YYNSTATES  1715
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   425
++>>>>>>> upstream/2.9.3+dfsg1
  
  #define YYTRANSLATE(YYX)						\
    ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@@ -793,16 -674,16 +1061,29 @@@ 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,
++<<<<<<< HEAD
 +       2,     2,     2,   172,     2,   182,     2,   171,     2,     2,
 +     177,   178,   169,   167,   183,   168,   181,   170,     2,     2,
 +       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 +     163,     2,   164,   158,     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,   179,     2,   180,   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,   184,     2,   185,   186,     2,     2,     2,
++=======
+        2,     2,     2,   176,     2,   186,     2,   175,     2,     2,
+      181,   182,   173,   171,   187,   172,   185,   174,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      167,     2,   168,   162,     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,   183,     2,   184,   180,     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,   188,     2,   189,   190,     2,     2,     2,
++>>>>>>> upstream/2.9.3+dfsg1
         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,
@@@ -831,8 -712,8 +1112,13 @@@
       125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
       135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
       145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
++<<<<<<< HEAD
 +     155,   156,   157,   159,   160,   161,   162,   165,   166,   173,
 +     174,   175
++=======
+      155,   156,   157,   158,   159,   160,   161,   163,   164,   165,
+      166,   169,   170,   177,   178,   179
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  #if YYDEBUG
@@@ -847,364 -728,382 +1133,739 @@@ static const yytype_uint16 yyprhs[] 
       141,   145,   147,   151,   152,   153,   164,   166,   170,   171,
       185,   187,   191,   192,   208,   217,   232,   233,   240,   242,
       244,   246,   248,   250,   252,   254,   256,   258,   260,   262,
++<<<<<<< HEAD
 +     268,   274,   279,   286,   294,   302,   310,   320,   330,   334,
 +     341,   348,   353,   360,   370,   377,   387,   393,   402,   411,
 +     423,   430,   440,   446,   454,   464,   474,   486,   494,   504,
 +     514,   515,   517,   518,   522,   528,   529,   539,   545,   546,
 +     556,   557,   561,   565,   571,   572,   575,   579,   585,   589,
 +     590,   593,   597,   601,   607,   609,   611,   612,   618,   619,
 +     622,   630,   631,   641,   648,   656,   661,   669,   678,   687,
 +     695,   703,   715,   724,   733,   734,   744,   753,   763,   767,
 +     772,   783,   791,   799,   808,   817,   830,   831,   841,   850,
 +     858,   867,   868,   878,   884,   896,   902,   912,   922,   927,
 +     937,   947,   949,   951,   952,   955,   962,   969,   976,   983,
 +     992,  1003,  1018,  1035,  1048,  1057,  1066,  1073,  1088,  1093,
 +    1100,  1107,  1111,  1116,  1122,  1129,  1133,  1137,  1142,  1148,
 +    1153,  1159,  1163,  1171,  1179,  1183,  1191,  1195,  1198,  1201,
 +    1204,  1207,  1223,  1226,  1229,  1232,  1235,  1238,  1255,  1259,
 +    1266,  1275,  1284,  1295,  1297,  1300,  1302,  1306,  1311,  1313,
 +    1319,  1331,  1345,  1346,  1354,  1355,  1369,  1370,  1386,  1387,
 +    1394,  1403,  1412,  1421,  1434,  1447,  1460,  1475,  1490,  1505,
 +    1506,  1519,  1520,  1533,  1534,  1547,  1548,  1565,  1566,  1583,
 +    1584,  1601,  1602,  1621,  1622,  1641,  1642,  1661,  1663,  1666,
 +    1672,  1680,  1690,  1693,  1696,  1699,  1703,  1706,  1710,  1713,
 +    1717,  1720,  1724,  1734,  1741,  1742,  1746,  1747,  1749,  1750,
 +    1753,  1754,  1757,  1765,  1772,  1781,  1787,  1791,  1799,  1805,
 +    1810,  1817,  1824,  1837,  1848,  1859,  1870,  1881,  1892,  1897,
 +    1902,  1907,  1912,  1917,  1920,  1924,  1931,  1933,  1935,  1937,
 +    1940,  1946,  1954,  1965,  1967,  1971,  1974,  1977,  1980,  1984,
 +    1988,  1992,  1996,  2000,  2004,  2008,  2012,  2016,  2020,  2024,
 +    2028,  2032,  2036,  2042,  2047,  2052,  2057,  2062,  2067,  2072,
 +    2077,  2082,  2087,  2092,  2099,  2104,  2109,  2114,  2119,  2124,
 +    2129,  2134,  2141,  2148,  2155,  2160,  2162,  2164,  2166,  2168,
 +    2170,  2172,  2174,  2176,  2178,  2180,  2181,  2188,  2190,  2195,
 +    2200,  2205,  2210,  2215,  2218,  2224,  2230,  2234,  2241,  2246,
 +    2254,  2261,  2268,  2275,  2280,  2282,  2285,  2288,  2292,  2296,
 +    2308,  2318,  2326,  2334,  2336,  2340,  2342,  2344,  2347,  2351,
 +    2356,  2362,  2364,  2366,  2369,  2373,  2377,  2383,  2388,  2391,
 +    2394,  2397,  2400,  2406,  2412,  2418,  2424,  2426,  2428,  2432,
 +    2437,  2444,  2446,  2448,  2452,  2456,  2466,  2474,  2476,  2482,
 +    2486,  2493,  2495,  2499,  2501,  2503,  2507,  2514,  2516,  2518,
 +    2520,  2525,  2532,  2539,  2544,  2549,  2558,  2563,  2568,  2575,
 +    2576,  2583,  2585,  2589,  2595,  2601,  2603
++=======
+      268,   274,   279,   286,   293,   301,   309,   317,   327,   337,
+      341,   348,   355,   360,   367,   377,   384,   394,   400,   409,
+      418,   430,   437,   447,   453,   461,   471,   481,   493,   501,
+      511,   521,   522,   524,   525,   529,   535,   536,   546,   552,
+      553,   563,   564,   568,   572,   578,   579,   582,   586,   592,
+      596,   597,   600,   604,   608,   614,   616,   618,   620,   622,
+      624,   626,   628,   630,   631,   637,   638,   641,   649,   658,
+      665,   673,   678,   686,   695,   704,   712,   720,   732,   741,
+      750,   759,   768,   778,   782,   787,   798,   806,   814,   823,
+      832,   845,   854,   863,   871,   880,   889,   895,   907,   913,
+      923,   933,   938,   948,   958,   960,   962,   963,   966,   973,
+      980,   987,   994,  1003,  1014,  1029,  1046,  1059,  1068,  1077,
+     1084,  1099,  1104,  1111,  1118,  1122,  1127,  1133,  1140,  1144,
+     1148,  1153,  1159,  1164,  1170,  1174,  1180,  1188,  1196,  1200,
+     1208,  1212,  1215,  1218,  1221,  1224,  1240,  1243,  1246,  1249,
+     1252,  1255,  1272,  1276,  1283,  1292,  1301,  1312,  1314,  1317,
+     1319,  1323,  1328,  1330,  1336,  1348,  1362,  1363,  1371,  1372,
+     1386,  1387,  1403,  1404,  1411,  1420,  1429,  1438,  1451,  1464,
+     1477,  1492,  1507,  1522,  1523,  1536,  1537,  1550,  1551,  1564,
+     1565,  1582,  1583,  1600,  1601,  1618,  1619,  1638,  1639,  1658,
+     1659,  1678,  1680,  1683,  1689,  1697,  1707,  1710,  1713,  1716,
+     1720,  1723,  1727,  1730,  1734,  1737,  1741,  1751,  1758,  1759,
+     1763,  1764,  1766,  1767,  1770,  1771,  1774,  1775,  1778,  1786,
+     1793,  1802,  1808,  1812,  1820,  1826,  1831,  1838,  1845,  1859,
+     1870,  1881,  1892,  1903,  1914,  1919,  1924,  1929,  1934,  1939,
+     1942,  1946,  1953,  1955,  1957,  1959,  1962,  1968,  1976,  1987,
+     1989,  1993,  1996,  1999,  2002,  2006,  2010,  2014,  2018,  2022,
+     2026,  2030,  2034,  2038,  2042,  2046,  2050,  2054,  2058,  2064,
+     2069,  2074,  2079,  2084,  2089,  2094,  2099,  2104,  2109,  2114,
+     2121,  2126,  2131,  2136,  2141,  2146,  2151,  2156,  2163,  2170,
+     2177,  2182,  2184,  2186,  2188,  2190,  2192,  2194,  2196,  2198,
+     2200,  2202,  2203,  2210,  2212,  2217,  2222,  2227,  2232,  2237,
+     2240,  2246,  2252,  2256,  2263,  2268,  2276,  2283,  2290,  2297,
+     2304,  2309,  2311,  2314,  2317,  2321,  2325,  2337,  2347,  2355,
+     2363,  2365,  2369,  2371,  2373,  2376,  2380,  2385,  2391,  2393,
+     2395,  2398,  2402,  2406,  2412,  2417,  2420,  2423,  2426,  2429,
+     2433,  2437,  2441,  2445,  2451,  2457,  2463,  2469,  2486,  2503,
+     2520,  2537,  2539,  2541,  2545,  2549,  2554,  2561,  2568,  2570,
+     2572,  2576,  2580,  2590,  2598,  2600,  2606,  2610,  2617,  2619,
+     2623,  2625,  2627,  2631,  2638,  2640,  2642,  2644,  2649,  2656,
+     2661,  2666,  2671,  2680,  2685,  2694,  2699,  2706,  2711,  2712,
+     2719,  2721,  2725,  2731,  2737,  2739
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
  static const yytype_int16 yyrhs[] =
  {
++<<<<<<< HEAD
 +     188,     0,    -1,   189,    -1,     1,     6,    -1,    -1,   189,
 +     190,    -1,   193,    -1,   192,    -1,   213,    -1,   227,    -1,
 +     232,    -1,   236,    -1,   237,    -1,   238,    -1,   241,    -1,
 +     261,    -1,   262,    -1,   240,    -1,   239,    -1,   235,    -1,
 +     264,    -1,   164,    -1,   164,   164,    -1,    37,   177,   278,
 +     178,     6,    -1,    38,   177,   278,   178,     6,    -1,    37,
 +     177,   278,   178,   191,   278,     6,    -1,    37,   177,   278,
 +     183,   274,   178,     6,    -1,    38,   177,   278,   183,   274,
 +     178,     6,    -1,    37,   177,   278,   183,   274,   178,   191,
 +     278,     6,    -1,     4,   278,   184,   194,   185,     6,    -1,
 +     108,     4,   179,   265,   180,     6,    -1,   109,     4,   179,
 +     265,   180,     6,    -1,   110,     4,   179,   265,   183,   265,
 +     180,     6,    -1,    -1,   194,   197,    -1,   194,   201,    -1,
 +     194,   204,    -1,   194,   206,    -1,   194,   207,    -1,   265,
 +      -1,   195,   183,   265,    -1,   265,    -1,   196,   183,   265,
 +      -1,    -1,    -1,     4,   198,   177,   195,   178,   199,   184,
 +     196,   185,     6,    -1,   278,    -1,   200,   183,   278,    -1,
 +      -1,   117,   177,   265,   183,   265,   183,   265,   178,   202,
 +     184,   200,   185,     6,    -1,   278,    -1,   203,   183,   278,
 +      -1,    -1,   118,   177,   265,   183,   265,   183,   265,   183,
 +     265,   178,   205,   184,   203,   185,     6,    -1,   119,   184,
 +     270,   185,   184,   270,   185,     6,    -1,   119,   184,   270,
 +     185,   184,   270,   185,   184,   270,   185,   184,   270,   185,
 +       6,    -1,    -1,   120,   208,   184,   196,   185,     6,    -1,
 +       7,    -1,   157,    -1,   156,    -1,   155,    -1,   154,    -1,
 +     175,    -1,   174,    -1,   177,    -1,   179,    -1,   178,    -1,
 +     180,    -1,    60,   179,   215,   180,     6,    -1,    61,   179,
 +     218,   180,     6,    -1,   283,   209,   271,     6,    -1,     4,
 +     179,   180,   209,   271,     6,    -1,     4,   179,   265,   180,
 +     209,   265,     6,    -1,     4,   177,   265,   178,   209,   265,
 +       6,    -1,   282,   179,   265,   180,   209,   265,     6,    -1,
 +       4,   211,   184,   274,   185,   212,   209,   271,     6,    -1,
 +     282,   177,   184,   274,   185,   178,   209,   271,     6,    -1,
 +     283,   210,     6,    -1,     4,   179,   265,   180,   210,     6,
 +      -1,   282,   179,   265,   180,   210,     6,    -1,   283,     7,
 +     279,     6,    -1,     4,   181,     4,     7,   279,     6,    -1,
 +       4,   179,   265,   180,   181,     4,     7,   279,     6,    -1,
 +       4,   181,     4,   209,   265,     6,    -1,     4,   179,   265,
 +     180,   181,     4,   209,   265,     6,    -1,     4,   181,     4,
 +     210,     6,    -1,     4,   179,   265,   180,   181,     4,   210,
 +       6,    -1,     4,   181,   127,   181,     4,     7,   275,     6,
 +      -1,     4,   179,   265,   180,   181,   127,   181,     4,     7,
 +     275,     6,    -1,     4,   181,   128,     7,   276,     6,    -1,
 +       4,   179,   265,   180,   181,   128,     7,   276,     6,    -1,
 +       4,   136,     7,   265,     6,    -1,   136,   179,   265,   180,
 +       7,     4,     6,    -1,   136,   179,   265,   180,   181,     4,
 +       7,   265,     6,    -1,   136,   179,   265,   180,   181,     4,
 +       7,   279,     6,    -1,   136,   179,   265,   180,   181,     4,
 +       7,   184,   274,   185,     6,    -1,   136,   179,   265,   180,
 +     181,     4,     6,    -1,    88,   177,     4,   178,   181,     4,
 +       7,   265,     6,    -1,    88,   177,     4,   178,   181,     4,
 +       7,   279,     6,    -1,    -1,   183,    -1,    -1,   215,   214,
 +     283,    -1,   215,   214,   283,     7,   265,    -1,    -1,   215,
 +     214,   283,     7,   184,   265,   216,   220,   185,    -1,   215,
 +     214,   283,     7,   279,    -1,    -1,   215,   214,   283,     7,
 +     184,   279,   217,   222,   185,    -1,    -1,   218,   214,   278,
 +      -1,   265,     7,   279,    -1,   219,   183,   265,     7,   279,
 +      -1,    -1,   220,   221,    -1,   183,     4,   271,    -1,   183,
 +       4,   184,   219,   185,    -1,   183,     4,   279,    -1,    -1,
 +     222,   223,    -1,   183,     4,   265,    -1,   183,     4,   279,
 +      -1,   183,     4,   184,   281,   185,    -1,   265,    -1,   279,
 +      -1,    -1,   130,    68,   184,   265,   185,    -1,    -1,    80,
 +     268,    -1,    64,   177,   265,   178,     7,   268,     6,    -1,
 +      -1,    84,    64,   228,   177,   224,   178,     7,   271,     6,
 +      -1,    73,    74,   271,     7,   265,     6,    -1,    67,   177,
 +     265,   178,     7,   271,     6,    -1,    89,    67,   271,     6,
 +      -1,    71,   177,   265,   178,     7,   271,     6,    -1,    65,
 +     177,   265,   178,     7,   271,   226,     6,    -1,    66,   177,
 +     265,   178,     7,   271,   226,     6,    -1,   122,   177,   265,
 +     178,     7,   271,     6,    -1,   123,   177,   265,   178,     7,
 +     271,     6,    -1,   124,   177,   265,   178,     7,   271,   126,
 +     271,   125,   265,     6,    -1,    67,     4,   177,   265,   178,
 +       7,   271,     6,    -1,    85,    67,   177,   265,   178,     7,
 +     271,     6,    -1,    -1,    84,    67,   229,   177,   224,   178,
 +       7,   271,     6,    -1,    80,    70,   177,   265,   178,     7,
 +     271,     6,    -1,    81,    70,   177,   265,   178,     7,   271,
 +     225,     6,    -1,    12,    13,     6,    -1,    13,    70,   265,
 +       6,    -1,    75,    70,   177,   265,   178,     7,     5,     5,
 +       5,     6,    -1,    68,   177,   265,   178,     7,   271,     6,
 +      -1,    69,   177,   265,   178,     7,   271,     6,    -1,    70,
 +       4,   177,   265,   178,     7,   271,     6,    -1,    85,    70,
 +     177,   265,   178,     7,   271,     6,    -1,    85,    70,   177,
 +     265,   178,     7,   271,     4,   184,   270,   185,     6,    -1,
 +      -1,    84,    70,   230,   177,   224,   178,     7,   271,     6,
 +      -1,    83,    72,   177,   265,   178,     7,   271,     6,    -1,
 +      72,   177,   265,   178,     7,   271,     6,    -1,    85,    72,
 +     177,   265,   178,     7,   271,     6,    -1,    -1,    84,    72,
 +     231,   177,   224,   178,     7,   271,     6,    -1,    92,   268,
 +     184,   233,   185,    -1,    91,   184,   268,   183,   268,   183,
 +     265,   185,   184,   233,   185,    -1,    93,   268,   184,   233,
 +     185,    -1,    94,   184,   268,   183,   265,   185,   184,   233,
 +     185,    -1,    94,   184,   268,   183,   268,   185,   184,   233,
 +     185,    -1,     4,   184,   233,   185,    -1,   102,    67,   184,
 +     274,   185,    70,   184,   265,   185,    -1,    99,    67,   177,
 +     265,   178,   184,   274,   185,     6,    -1,   234,    -1,   232,
 +      -1,    -1,   234,   227,    -1,   234,    64,   184,   274,   185,
 +       6,    -1,   234,    67,   184,   274,   185,     6,    -1,   234,
 +      70,   184,   274,   185,     6,    -1,   234,    72,   184,   274,
 +     185,     6,    -1,    96,    80,   177,   265,   178,     7,   271,
 +       6,    -1,    96,    64,   177,   265,   178,     7,   184,   270,
 +     185,     6,    -1,    96,    80,   177,   265,   178,     7,   184,
 +     268,   183,   268,   183,   274,   185,     6,    -1,    96,    80,
 +     177,   265,   178,     7,   184,   268,   183,   268,   183,   268,
 +     183,   274,   185,     6,    -1,    96,    68,   177,   265,   178,
 +       7,   184,   268,   183,   274,   185,     6,    -1,    96,     4,
 +     177,   265,   178,     7,   271,     6,    -1,    96,     4,   177,
 +     265,   178,     7,     5,     6,    -1,    96,     4,   184,   265,
 +     185,     6,    -1,    96,     4,   177,   265,   178,     7,   184,
 +     268,   183,   268,   183,   274,   185,     6,    -1,   100,   184,
 +     234,   185,    -1,   100,   136,   179,   265,   180,     6,    -1,
 +     100,     4,   179,   265,   180,     6,    -1,   100,     4,     6,
 +      -1,   100,     4,     4,     6,    -1,   127,   275,   184,   234,
 +     185,    -1,    90,   127,   275,   184,   234,   185,    -1,   140,
 +       5,     6,    -1,   141,     5,     6,    -1,   140,   184,   234,
 +     185,    -1,    90,   140,   184,   234,   185,    -1,   141,   184,
 +     234,   185,    -1,    90,   141,   184,   234,   185,    -1,     4,
 +     279,     6,    -1,     4,     4,   179,   265,   180,   278,     6,
 +      -1,     4,     4,     4,   179,   265,   180,     6,    -1,     4,
 +     265,     6,    -1,    88,   177,     4,   178,   181,     4,     6,
 +      -1,   121,     4,     6,    -1,   134,     6,    -1,   135,     6,
 +      -1,    53,     6,    -1,    48,     6,    -1,    48,   184,   265,
 +     183,   265,   183,   265,   183,   265,   183,   265,   183,   265,
 +     185,     6,    -1,    49,     6,    -1,    50,     6,    -1,    57,
 +       6,    -1,    58,     6,    -1,    77,     6,    -1,    78,   184,
 +     274,   185,   184,   274,   185,   184,   270,   185,   184,   265,
 +     183,   265,   185,     6,    -1,   148,   265,     6,    -1,   129,
 +     177,   265,     8,   265,   178,    -1,   129,   177,   265,     8,
 +     265,     8,   265,   178,    -1,   129,     4,   130,   184,   265,
 +       8,   265,   185,    -1,   129,     4,   130,   184,   265,     8,
 +     265,     8,   265,   185,    -1,   131,    -1,   139,     4,    -1,
 +     137,    -1,   138,     4,     6,    -1,   132,   177,   265,   178,
 +      -1,   133,    -1,    95,   268,   184,   234,   185,    -1,    95,
 +     184,   268,   183,   268,   183,   265,   185,   184,   234,   185,
 +      -1,    95,   184,   268,   183,   268,   183,   268,   183,   265,
 +     185,   184,   234,   185,    -1,    -1,    95,   268,   184,   234,
 +     242,   255,   185,    -1,    -1,    95,   184,   268,   183,   268,
 +     183,   265,   185,   184,   234,   243,   255,   185,    -1,    -1,
 +      95,   184,   268,   183,   268,   183,   268,   183,   265,   185,
 +     184,   234,   244,   255,   185,    -1,    -1,    95,   184,   234,
 +     245,   255,   185,    -1,    95,    64,   184,   265,   183,   268,
 +     185,     6,    -1,    95,    67,   184,   265,   183,   268,   185,
 +       6,    -1,    95,    70,   184,   265,   183,   268,   185,     6,
 +      -1,    95,    64,   184,   265,   183,   268,   183,   268,   183,
 +     265,   185,     6,    -1,    95,    67,   184,   265,   183,   268,
 +     183,   268,   183,   265,   185,     6,    -1,    95,    70,   184,
 +     265,   183,   268,   183,   268,   183,   265,   185,     6,    -1,
 +      95,    64,   184,   265,   183,   268,   183,   268,   183,   268,
 +     183,   265,   185,     6,    -1,    95,    67,   184,   265,   183,
 +     268,   183,   268,   183,   268,   183,   265,   185,     6,    -1,
 +      95,    70,   184,   265,   183,   268,   183,   268,   183,   268,
 +     183,   265,   185,     6,    -1,    -1,    95,    64,   184,   265,
 +     183,   268,   185,   246,   184,   255,   185,     6,    -1,    -1,
 +      95,    67,   184,   265,   183,   268,   185,   247,   184,   255,
 +     185,     6,    -1,    -1,    95,    70,   184,   265,   183,   268,
 +     185,   248,   184,   255,   185,     6,    -1,    -1,    95,    64,
 +     184,   265,   183,   268,   183,   268,   183,   265,   185,   249,
 +     184,   255,   185,     6,    -1,    -1,    95,    67,   184,   265,
 +     183,   268,   183,   268,   183,   265,   185,   250,   184,   255,
 +     185,     6,    -1,    -1,    95,    70,   184,   265,   183,   268,
 +     183,   268,   183,   265,   185,   251,   184,   255,   185,     6,
 +      -1,    -1,    95,    64,   184,   265,   183,   268,   183,   268,
 +     183,   268,   183,   265,   185,   252,   184,   255,   185,     6,
 +      -1,    -1,    95,    67,   184,   265,   183,   268,   183,   268,
 +     183,   268,   183,   265,   185,   253,   184,   255,   185,     6,
 +      -1,    -1,    95,    70,   184,   265,   183,   268,   183,   268,
 +     183,   268,   183,   265,   185,   254,   184,   255,   185,     6,
 +      -1,   256,    -1,   255,   256,    -1,   105,   184,   265,   185,
 +       6,    -1,   105,   184,   271,   183,   271,   185,     6,    -1,
 +     105,   184,   271,   183,   271,   183,   271,   185,     6,    -1,
 +     106,     6,    -1,    97,     6,    -1,   113,     6,    -1,   113,
 +     115,     6,    -1,   114,     6,    -1,   114,   115,     6,    -1,
 +     111,     6,    -1,   111,   115,     6,    -1,   112,     6,    -1,
 +     112,   115,     6,    -1,   107,   177,   265,   178,     7,   271,
 +      87,   265,     6,    -1,    87,     4,   179,   265,   180,     6,
 +      -1,    -1,    87,     4,   265,    -1,    -1,     4,    -1,    -1,
 +       7,   271,    -1,    -1,     7,   265,    -1,    82,    67,   272,
 +       7,   265,   257,     6,    -1,    82,    70,   272,   259,   258,
 +       6,    -1,    76,    70,   184,   265,   185,     7,   271,     6,
 +      -1,    82,    72,   272,   259,     6,    -1,   116,   272,     6,
 +      -1,   103,    70,   184,   274,   185,   265,     6,    -1,    97,
 +      70,   272,   260,     6,    -1,    97,    72,   272,     6,    -1,
 +      98,    70,   271,     7,   265,     6,    -1,    86,    67,   271,
 +       7,   271,     6,    -1,    86,    70,   265,   184,   274,   185,
 +       7,   265,   184,   274,   185,     6,    -1,    64,   184,   274,
 +     185,   130,    70,   184,   265,   185,     6,    -1,    67,   184,
 +     274,   185,   130,    70,   184,   265,   185,     6,    -1,    64,
 +     184,   274,   185,   130,    72,   184,   265,   185,     6,    -1,
 +      67,   184,   274,   185,   130,    72,   184,   265,   185,     6,
 +      -1,    70,   184,   274,   185,   130,    72,   184,   265,   185,
 +       6,    -1,   104,    70,   272,     6,    -1,   104,    67,   272,
 +       6,    -1,    79,    64,   272,     6,    -1,    79,    67,   272,
 +       6,    -1,    79,    70,   272,     6,    -1,   101,     6,    -1,
 +     101,     4,     6,    -1,   101,    64,   184,   274,   185,     6,
 +      -1,   145,    -1,   146,    -1,   147,    -1,   263,     6,    -1,
 +     263,   184,   271,   185,     6,    -1,   263,   184,   271,   183,
 +     271,   185,     6,    -1,   263,   177,   271,   178,   184,   271,
 +     183,   271,   185,     6,    -1,   266,    -1,   177,   265,   178,
 +      -1,   168,   265,    -1,   167,   265,    -1,   172,   265,    -1,
 +     265,   168,   265,    -1,   265,   167,   265,    -1,   265,   169,
 +     265,    -1,   265,   170,   265,    -1,   265,   171,   265,    -1,
 +     265,   176,   265,    -1,   265,   163,   265,    -1,   265,   164,
 +     265,    -1,   265,   166,   265,    -1,   265,   165,   265,    -1,
 +     265,   162,   265,    -1,   265,   161,   265,    -1,   265,   160,
 +     265,    -1,   265,   159,   265,    -1,   265,   158,   265,     8,
 +     265,    -1,    14,   211,   265,   212,    -1,    15,   211,   265,
 +     212,    -1,    16,   211,   265,   212,    -1,    17,   211,   265,
 +     212,    -1,    18,   211,   265,   212,    -1,    19,   211,   265,
 +     212,    -1,    20,   211,   265,   212,    -1,    21,   211,   265,
 +     212,    -1,    22,   211,   265,   212,    -1,    24,   211,   265,
 +     212,    -1,    25,   211,   265,   183,   265,   212,    -1,    26,
 +     211,   265,   212,    -1,    27,   211,   265,   212,    -1,    28,
 +     211,   265,   212,    -1,    29,   211,   265,   212,    -1,    30,
 +     211,   265,   212,    -1,    31,   211,   265,   212,    -1,    32,
 +     211,   265,   212,    -1,    33,   211,   265,   183,   265,   212,
 +      -1,    34,   211,   265,   183,   265,   212,    -1,    35,   211,
 +     265,   183,   265,   212,    -1,    23,   211,   265,   212,    -1,
 +       3,    -1,     9,    -1,    10,    -1,    11,    -1,   151,    -1,
 +     152,    -1,   153,    -1,    54,    -1,    55,    -1,    56,    -1,
 +      -1,    62,   211,   265,   267,   220,   212,    -1,   283,    -1,
 +       4,   179,   265,   180,    -1,   282,   179,   265,   180,    -1,
 +     149,   177,   283,   178,    -1,   150,   177,   279,   178,    -1,
 +     182,   283,   179,   180,    -1,   283,   210,    -1,     4,   179,
 +     265,   180,   210,    -1,   282,   179,   265,   180,   210,    -1,
 +       4,   181,     4,    -1,     4,   179,   265,   180,   181,     4,
 +      -1,     4,   181,     4,   210,    -1,     4,   179,   265,   180,
 +     181,     4,   210,    -1,   142,   177,   278,   183,   265,   178,
 +      -1,    45,   177,   278,   183,   278,   178,    -1,    46,   177,
 +     278,   183,   278,   178,    -1,    47,   177,   281,   178,    -1,
 +     269,    -1,   168,   268,    -1,   167,   268,    -1,   268,   168,
 +     268,    -1,   268,   167,   268,    -1,   184,   265,   183,   265,
 +     183,   265,   183,   265,   183,   265,   185,    -1,   184,   265,
 +     183,   265,   183,   265,   183,   265,   185,    -1,   184,   265,
 +     183,   265,   183,   265,   185,    -1,   177,   265,   183,   265,
 +     183,   265,   178,    -1,   271,    -1,   270,   183,   271,    -1,
 +     265,    -1,   273,    -1,   184,   185,    -1,   184,   274,   185,
 +      -1,   168,   184,   274,   185,    -1,   265,   169,   184,   274,
 +     185,    -1,   271,    -1,     5,    -1,   168,   273,    -1,   265,
 +     169,   273,    -1,   265,     8,   265,    -1,   265,     8,   265,
 +       8,   265,    -1,    64,   184,   265,   185,    -1,    64,     5,
 +      -1,    67,     5,    -1,    70,     5,    -1,    72,     5,    -1,
 +      84,    64,   184,   274,   185,    -1,    84,    67,   184,   274,
 +     185,    -1,    84,    70,   184,   274,   185,    -1,    84,    72,
 +     184,   274,   185,    -1,   232,    -1,   241,    -1,     4,   211,
 +     212,    -1,    36,   179,     4,   180,    -1,     4,   211,   184,
 +     274,   185,   212,    -1,   265,    -1,   273,    -1,   274,   183,
 +     265,    -1,   274,   183,   273,    -1,   184,   265,   183,   265,
 +     183,   265,   183,   265,   185,    -1,   184,   265,   183,   265,
 +     183,   265,   185,    -1,     4,    -1,     4,   181,   127,   181,
 +       4,    -1,   184,   277,   185,    -1,     4,   179,   265,   180,
 +     181,   128,    -1,   275,    -1,   277,   183,   275,    -1,   279,
 +      -1,   283,    -1,     4,   181,     4,    -1,     4,   179,   265,
 +     180,   181,     4,    -1,     5,    -1,    51,    -1,    52,    -1,
 +     143,   177,   278,   178,    -1,   144,   177,   278,   183,   278,
 +     178,    -1,    41,   211,   278,   183,   278,   212,    -1,    42,
 +     177,   278,   178,    -1,    43,   177,   278,   178,    -1,    44,
 +     177,   278,   183,   278,   183,   278,   178,    -1,    39,   211,
 +     281,   212,    -1,    40,   211,   278,   212,    -1,    40,   211,
 +     278,   183,   274,   212,    -1,    -1,    63,   211,   279,   280,
 +     222,   212,    -1,   278,    -1,   281,   183,   278,    -1,     4,
 +     186,   184,   265,   185,    -1,   282,   186,   184,   265,   185,
 +      -1,     4,    -1,   282,    -1
++=======
+      192,     0,    -1,   193,    -1,     1,     6,    -1,    -1,   193,
+      194,    -1,   197,    -1,   196,    -1,   217,    -1,   234,    -1,
+      235,    -1,   239,    -1,   240,    -1,   241,    -1,   244,    -1,
+      265,    -1,   266,    -1,   243,    -1,   242,    -1,   238,    -1,
+      268,    -1,   168,    -1,   168,   168,    -1,    37,   181,   282,
+      182,     6,    -1,    38,   181,   282,   182,     6,    -1,    37,
+      181,   282,   182,   195,   282,     6,    -1,    37,   181,   282,
+      187,   278,   182,     6,    -1,    38,   181,   282,   187,   278,
+      182,     6,    -1,    37,   181,   282,   187,   278,   182,   195,
+      282,     6,    -1,     4,   282,   188,   198,   189,     6,    -1,
+      112,     4,   183,   269,   184,     6,    -1,   113,     4,   183,
+      269,   184,     6,    -1,   114,     4,   183,   269,   187,   269,
+      184,     6,    -1,    -1,   198,   201,    -1,   198,   205,    -1,
+      198,   208,    -1,   198,   210,    -1,   198,   211,    -1,   269,
+       -1,   199,   187,   269,    -1,   269,    -1,   200,   187,   269,
+       -1,    -1,    -1,     4,   202,   181,   199,   182,   203,   188,
+      200,   189,     6,    -1,   282,    -1,   204,   187,   282,    -1,
+       -1,   121,   181,   269,   187,   269,   187,   269,   182,   206,
+      188,   204,   189,     6,    -1,   282,    -1,   207,   187,   282,
+       -1,    -1,   122,   181,   269,   187,   269,   187,   269,   187,
+      269,   182,   209,   188,   207,   189,     6,    -1,   123,   188,
+      274,   189,   188,   274,   189,     6,    -1,   123,   188,   274,
+      189,   188,   274,   189,   188,   274,   189,   188,   274,   189,
+        6,    -1,    -1,   124,   212,   188,   200,   189,     6,    -1,
+        7,    -1,   161,    -1,   160,    -1,   159,    -1,   158,    -1,
+      179,    -1,   178,    -1,   181,    -1,   183,    -1,   182,    -1,
+      184,    -1,    64,   183,   219,   184,     6,    -1,    65,   183,
+      222,   184,     6,    -1,   287,   213,   275,     6,    -1,     4,
+      183,   184,   213,   275,     6,    -1,   286,   183,   184,   213,
+      275,     6,    -1,     4,   183,   269,   184,   213,   269,     6,
+       -1,     4,   181,   269,   182,   213,   269,     6,    -1,   286,
+      183,   269,   184,   213,   269,     6,    -1,     4,   215,   188,
+      278,   189,   216,   213,   275,     6,    -1,   286,   215,   188,
+      278,   189,   216,   213,   275,     6,    -1,   287,   214,     6,
+       -1,     4,   183,   269,   184,   214,     6,    -1,   286,   183,
+      269,   184,   214,     6,    -1,   287,     7,   283,     6,    -1,
+        4,   185,     4,     7,   283,     6,    -1,     4,   183,   269,
+      184,   185,     4,     7,   283,     6,    -1,     4,   185,     4,
+      213,   269,     6,    -1,     4,   183,   269,   184,   185,     4,
+      213,   269,     6,    -1,     4,   185,     4,   214,     6,    -1,
+        4,   183,   269,   184,   185,     4,   214,     6,    -1,     4,
+      185,   131,   185,     4,     7,   279,     6,    -1,     4,   183,
+      269,   184,   185,   131,   185,     4,     7,   279,     6,    -1,
+        4,   185,   132,     7,   280,     6,    -1,     4,   183,   269,
+      184,   185,   132,     7,   280,     6,    -1,     4,   140,     7,
+      269,     6,    -1,   140,   183,   269,   184,     7,     4,     6,
+       -1,   140,   183,   269,   184,   185,     4,     7,   269,     6,
+       -1,   140,   183,   269,   184,   185,     4,     7,   283,     6,
+       -1,   140,   183,   269,   184,   185,     4,     7,   188,   278,
+      189,     6,    -1,   140,   183,   269,   184,   185,     4,     6,
+       -1,    92,   181,     4,   182,   185,     4,     7,   269,     6,
+       -1,    92,   181,     4,   182,   185,     4,     7,   283,     6,
+       -1,    -1,   187,    -1,    -1,   219,   218,   287,    -1,   219,
+      218,   287,     7,   269,    -1,    -1,   219,   218,   287,     7,
+      188,   269,   220,   224,   189,    -1,   219,   218,   287,     7,
+      283,    -1,    -1,   219,   218,   287,     7,   188,   283,   221,
+      226,   189,    -1,    -1,   222,   218,   282,    -1,   269,     7,
+      283,    -1,   223,   187,   269,     7,   283,    -1,    -1,   224,
+      225,    -1,   187,     4,   275,    -1,   187,     4,   188,   223,
+      189,    -1,   187,     4,   283,    -1,    -1,   226,   227,    -1,
+      187,     4,   269,    -1,   187,     4,   283,    -1,   187,     4,
+      188,   285,   189,    -1,   269,    -1,   283,    -1,   269,    -1,
+      283,    -1,   269,    -1,   283,    -1,   269,    -1,   283,    -1,
+       -1,   134,    72,   188,   269,   189,    -1,    -1,    84,   272,
+       -1,    68,   181,   269,   182,     7,   272,     6,    -1,    88,
+       68,   181,   228,   182,   213,   275,     6,    -1,    77,    78,
+      275,     7,   269,     6,    -1,    71,   181,   269,   182,     7,
+      275,     6,    -1,    93,    71,   275,     6,    -1,    75,   181,
+      269,   182,     7,   275,     6,    -1,    69,   181,   269,   182,
+        7,   275,   233,     6,    -1,    70,   181,   269,   182,     7,
+      275,   233,     6,    -1,   126,   181,   269,   182,     7,   275,
+        6,    -1,   127,   181,   269,   182,     7,   275,     6,    -1,
+      128,   181,   269,   182,     7,   275,   130,   275,   129,   269,
+        6,    -1,    71,     4,   181,   269,   182,     7,   275,     6,
+       -1,    89,    71,   181,   269,   182,     7,   275,     6,    -1,
+       88,    71,   181,   229,   182,   213,   275,     6,    -1,    84,
+       74,   181,   269,   182,     7,   275,     6,    -1,    85,    74,
+      181,   269,   182,     7,   275,   232,     6,    -1,    12,    13,
+        6,    -1,    13,    74,   269,     6,    -1,    79,    74,   181,
+      269,   182,     7,     5,     5,     5,     6,    -1,    72,   181,
+      269,   182,     7,   275,     6,    -1,    73,   181,   269,   182,
+        7,   275,     6,    -1,    74,     4,   181,   269,   182,     7,
+      275,     6,    -1,    89,    74,   181,   269,   182,     7,   275,
+        6,    -1,    89,    74,   181,   269,   182,     7,   275,     4,
+      188,   274,   189,     6,    -1,    88,    74,   181,   230,   182,
+      213,   275,     6,    -1,    87,    76,   181,   269,   182,     7,
+      275,     6,    -1,    76,   181,   269,   182,     7,   275,     6,
+       -1,    89,    76,   181,   269,   182,     7,   275,     6,    -1,
+       88,    76,   181,   231,   182,   213,   275,     6,    -1,    96,
+      272,   188,   236,   189,    -1,    95,   188,   272,   187,   272,
+      187,   269,   189,   188,   236,   189,    -1,    97,   272,   188,
+      236,   189,    -1,    98,   188,   272,   187,   269,   189,   188,
+      236,   189,    -1,    98,   188,   272,   187,   272,   189,   188,
+      236,   189,    -1,     4,   188,   236,   189,    -1,   106,    71,
+      188,   278,   189,    74,   188,   269,   189,    -1,   103,    71,
+      181,   269,   182,   188,   278,   189,     6,    -1,   237,    -1,
+      235,    -1,    -1,   237,   234,    -1,   237,    68,   188,   278,
+      189,     6,    -1,   237,    71,   188,   278,   189,     6,    -1,
+      237,    74,   188,   278,   189,     6,    -1,   237,    76,   188,
+      278,   189,     6,    -1,   100,    84,   181,   269,   182,     7,
+      275,     6,    -1,   100,    68,   181,   269,   182,     7,   188,
+      274,   189,     6,    -1,   100,    84,   181,   269,   182,     7,
+      188,   272,   187,   272,   187,   278,   189,     6,    -1,   100,
+       84,   181,   269,   182,     7,   188,   272,   187,   272,   187,
+      272,   187,   278,   189,     6,    -1,   100,    72,   181,   269,
+      182,     7,   188,   272,   187,   278,   189,     6,    -1,   100,
+        4,   181,   269,   182,     7,   275,     6,    -1,   100,     4,
+      181,   269,   182,     7,     5,     6,    -1,   100,     4,   188,
+      269,   189,     6,    -1,   100,     4,   181,   269,   182,     7,
+      188,   272,   187,   272,   187,   278,   189,     6,    -1,   104,
+      188,   237,   189,    -1,   104,   140,   183,   269,   184,     6,
+       -1,   104,     4,   183,   269,   184,     6,    -1,   104,     4,
+        6,    -1,   104,     4,     4,     6,    -1,   131,   279,   188,
+      237,   189,    -1,    94,   131,   279,   188,   237,   189,    -1,
+      144,     5,     6,    -1,   145,     5,     6,    -1,   144,   188,
+      237,   189,    -1,    94,   144,   188,   237,   189,    -1,   145,
+      188,   237,   189,    -1,    94,   145,   188,   237,   189,    -1,
+        4,   283,     6,    -1,    57,   181,   285,   182,     6,    -1,
+        4,     4,   183,   269,   184,   282,     6,    -1,     4,     4,
+        4,   183,   269,   184,     6,    -1,     4,   269,     6,    -1,
+       92,   181,     4,   182,   185,     4,     6,    -1,   125,     4,
+        6,    -1,   138,     6,    -1,   139,     6,    -1,    55,     6,
+       -1,    50,     6,    -1,    50,   188,   269,   187,   269,   187,
+      269,   187,   269,   187,   269,   187,   269,   189,     6,    -1,
+       51,     6,    -1,    52,     6,    -1,    61,     6,    -1,    62,
+        6,    -1,    81,     6,    -1,    82,   188,   278,   189,   188,
+      278,   189,   188,   274,   189,   188,   269,   187,   269,   189,
+        6,    -1,   152,   269,     6,    -1,   133,   181,   269,     8,
+      269,   182,    -1,   133,   181,   269,     8,   269,     8,   269,
+      182,    -1,   133,     4,   134,   188,   269,     8,   269,   189,
+       -1,   133,     4,   134,   188,   269,     8,   269,     8,   269,
+      189,    -1,   135,    -1,   143,     4,    -1,   141,    -1,   142,
+      287,     6,    -1,   136,   181,   269,   182,    -1,   137,    -1,
+       99,   272,   188,   237,   189,    -1,    99,   188,   272,   187,
+      272,   187,   269,   189,   188,   237,   189,    -1,    99,   188,
+      272,   187,   272,   187,   272,   187,   269,   189,   188,   237,
+      189,    -1,    -1,    99,   272,   188,   237,   245,   258,   189,
+       -1,    -1,    99,   188,   272,   187,   272,   187,   269,   189,
+      188,   237,   246,   258,   189,    -1,    -1,    99,   188,   272,
+      187,   272,   187,   272,   187,   269,   189,   188,   237,   247,
+      258,   189,    -1,    -1,    99,   188,   237,   248,   258,   189,
+       -1,    99,    68,   188,   269,   187,   272,   189,     6,    -1,
+       99,    71,   188,   269,   187,   272,   189,     6,    -1,    99,
+       74,   188,   269,   187,   272,   189,     6,    -1,    99,    68,
+      188,   269,   187,   272,   187,   272,   187,   269,   189,     6,
+       -1,    99,    71,   188,   269,   187,   272,   187,   272,   187,
+      269,   189,     6,    -1,    99,    74,   188,   269,   187,   272,
+      187,   272,   187,   269,   189,     6,    -1,    99,    68,   188,
+      269,   187,   272,   187,   272,   187,   272,   187,   269,   189,
+        6,    -1,    99,    71,   188,   269,   187,   272,   187,   272,
+      187,   272,   187,   269,   189,     6,    -1,    99,    74,   188,
+      269,   187,   272,   187,   272,   187,   272,   187,   269,   189,
+        6,    -1,    -1,    99,    68,   188,   269,   187,   272,   189,
+      249,   188,   258,   189,     6,    -1,    -1,    99,    71,   188,
+      269,   187,   272,   189,   250,   188,   258,   189,     6,    -1,
+       -1,    99,    74,   188,   269,   187,   272,   189,   251,   188,
+      258,   189,     6,    -1,    -1,    99,    68,   188,   269,   187,
+      272,   187,   272,   187,   269,   189,   252,   188,   258,   189,
+        6,    -1,    -1,    99,    71,   188,   269,   187,   272,   187,
+      272,   187,   269,   189,   253,   188,   258,   189,     6,    -1,
+       -1,    99,    74,   188,   269,   187,   272,   187,   272,   187,
+      269,   189,   254,   188,   258,   189,     6,    -1,    -1,    99,
+       68,   188,   269,   187,   272,   187,   272,   187,   272,   187,
+      269,   189,   255,   188,   258,   189,     6,    -1,    -1,    99,
+       71,   188,   269,   187,   272,   187,   272,   187,   272,   187,
+      269,   189,   256,   188,   258,   189,     6,    -1,    -1,    99,
+       74,   188,   269,   187,   272,   187,   272,   187,   272,   187,
+      269,   189,   257,   188,   258,   189,     6,    -1,   259,    -1,
+      258,   259,    -1,   109,   188,   269,   189,     6,    -1,   109,
+      188,   275,   187,   275,   189,     6,    -1,   109,   188,   275,
+      187,   275,   187,   275,   189,     6,    -1,   110,     6,    -1,
+      101,     6,    -1,   117,     6,    -1,   117,   119,     6,    -1,
+      118,     6,    -1,   118,   119,     6,    -1,   115,     6,    -1,
+      115,   119,     6,    -1,   116,     6,    -1,   116,   119,     6,
+       -1,   111,   181,   269,   182,     7,   275,    91,   269,     6,
+       -1,    91,     4,   183,   269,   184,     6,    -1,    -1,    91,
+        4,   269,    -1,    -1,     4,    -1,    -1,     7,   275,    -1,
+       -1,     7,   269,    -1,    -1,    91,   275,    -1,    86,    71,
+      276,     7,   269,   260,     6,    -1,    86,    74,   276,   262,
+      261,     6,    -1,    80,    74,   188,   269,   189,     7,   275,
+        6,    -1,    86,    76,   276,   262,     6,    -1,   120,   276,
+        6,    -1,   107,    74,   188,   278,   189,   269,     6,    -1,
+      101,    74,   276,   263,     6,    -1,   101,    76,   276,     6,
+       -1,   102,    74,   275,     7,   269,     6,    -1,    90,    71,
+      275,     7,   275,     6,    -1,    90,    74,   269,   188,   278,
+      189,     7,   269,   188,   278,   189,   264,     6,    -1,    68,
+      188,   278,   189,   134,    74,   188,   269,   189,     6,    -1,
+       71,   188,   278,   189,   134,    74,   188,   269,   189,     6,
+       -1,    68,   188,   278,   189,   134,    76,   188,   269,   189,
+        6,    -1,    71,   188,   278,   189,   134,    76,   188,   269,
+      189,     6,    -1,    74,   188,   278,   189,   134,    76,   188,
+      269,   189,     6,    -1,   108,    74,   276,     6,    -1,   108,
+       71,   276,     6,    -1,    83,    68,   276,     6,    -1,    83,
+       71,   276,     6,    -1,    83,    74,   276,     6,    -1,   105,
+        6,    -1,   105,     4,     6,    -1,   105,    68,   188,   278,
+      189,     6,    -1,   149,    -1,   150,    -1,   151,    -1,   267,
+        6,    -1,   267,   188,   275,   189,     6,    -1,   267,   188,
+      275,   187,   275,   189,     6,    -1,   267,   181,   275,   182,
+      188,   275,   187,   275,   189,     6,    -1,   270,    -1,   181,
+      269,   182,    -1,   172,   269,    -1,   171,   269,    -1,   176,
+      269,    -1,   269,   172,   269,    -1,   269,   171,   269,    -1,
+      269,   173,   269,    -1,   269,   174,   269,    -1,   269,   175,
+      269,    -1,   269,   180,   269,    -1,   269,   167,   269,    -1,
+      269,   168,   269,    -1,   269,   170,   269,    -1,   269,   169,
+      269,    -1,   269,   166,   269,    -1,   269,   165,   269,    -1,
+      269,   164,   269,    -1,   269,   163,   269,    -1,   269,   162,
+      269,     8,   269,    -1,    14,   215,   269,   216,    -1,    15,
+      215,   269,   216,    -1,    16,   215,   269,   216,    -1,    17,
+      215,   269,   216,    -1,    18,   215,   269,   216,    -1,    19,
+      215,   269,   216,    -1,    20,   215,   269,   216,    -1,    21,
+      215,   269,   216,    -1,    22,   215,   269,   216,    -1,    24,
+      215,   269,   216,    -1,    25,   215,   269,   187,   269,   216,
+       -1,    26,   215,   269,   216,    -1,    27,   215,   269,   216,
+       -1,    28,   215,   269,   216,    -1,    29,   215,   269,   216,
+       -1,    30,   215,   269,   216,    -1,    31,   215,   269,   216,
+       -1,    32,   215,   269,   216,    -1,    33,   215,   269,   187,
+      269,   216,    -1,    34,   215,   269,   187,   269,   216,    -1,
+       35,   215,   269,   187,   269,   216,    -1,    23,   215,   269,
+      216,    -1,     3,    -1,     9,    -1,    10,    -1,    11,    -1,
+      155,    -1,   156,    -1,   157,    -1,    58,    -1,    59,    -1,
+       60,    -1,    -1,    66,   215,   269,   271,   224,   216,    -1,
+      287,    -1,     4,   183,   269,   184,    -1,   286,   183,   269,
+      184,    -1,   153,   181,   287,   182,    -1,   154,   181,   283,
+      182,    -1,   186,   287,   183,   184,    -1,   287,   214,    -1,
+        4,   183,   269,   184,   214,    -1,   286,   183,   269,   184,
+      214,    -1,     4,   185,     4,    -1,     4,   183,   269,   184,
+      185,     4,    -1,     4,   185,     4,   214,    -1,     4,   183,
+      269,   184,   185,     4,   214,    -1,   146,   181,   282,   187,
+      269,   182,    -1,    45,   181,   275,   187,   275,   182,    -1,
+       46,   181,   282,   187,   282,   182,    -1,    47,   181,   282,
+      187,   282,   182,    -1,    49,   181,   285,   182,    -1,   273,
+       -1,   172,   272,    -1,   171,   272,    -1,   272,   172,   272,
+       -1,   272,   171,   272,    -1,   188,   269,   187,   269,   187,
+      269,   187,   269,   187,   269,   189,    -1,   188,   269,   187,
+      269,   187,   269,   187,   269,   189,    -1,   188,   269,   187,
+      269,   187,   269,   189,    -1,   181,   269,   187,   269,   187,
+      269,   182,    -1,   275,    -1,   274,   187,   275,    -1,   269,
+       -1,   277,    -1,   188,   189,    -1,   188,   278,   189,    -1,
+      172,   188,   278,   189,    -1,   269,   173,   188,   278,   189,
+       -1,   275,    -1,     5,    -1,   172,   277,    -1,   269,   173,
+      277,    -1,   269,     8,   269,    -1,   269,     8,   269,     8,
+      269,    -1,    68,   188,   269,   189,    -1,    68,     5,    -1,
+       71,     5,    -1,    74,     5,    -1,    76,     5,    -1,    88,
+       68,     5,    -1,    88,    71,     5,    -1,    88,    74,     5,
+       -1,    88,    76,     5,    -1,    88,    68,   188,   278,   189,
+       -1,    88,    71,   188,   278,   189,    -1,    88,    74,   188,
+      278,   189,    -1,    88,    76,   188,   278,   189,    -1,    68,
+      134,    50,   188,   269,   187,   269,   187,   269,   187,   269,
+      187,   269,   187,   269,   189,    -1,    71,   134,    50,   188,
+      269,   187,   269,   187,   269,   187,   269,   187,   269,   187,
+      269,   189,    -1,    74,   134,    50,   188,   269,   187,   269,
+      187,   269,   187,   269,   187,   269,   187,   269,   189,    -1,
+       76,   134,    50,   188,   269,   187,   269,   187,   269,   187,
+      269,   187,   269,   187,   269,   189,    -1,   235,    -1,   244,
+       -1,     4,   215,   216,    -1,   286,   215,   216,    -1,    36,
+      183,   287,   184,    -1,     4,   215,   188,   278,   189,   216,
+       -1,   286,   215,   188,   278,   189,   216,    -1,   269,    -1,
+      277,    -1,   278,   187,   269,    -1,   278,   187,   277,    -1,
+      188,   269,   187,   269,   187,   269,   187,   269,   189,    -1,
+      188,   269,   187,   269,   187,   269,   189,    -1,     4,    -1,
+        4,   185,   131,   185,     4,    -1,   188,   281,   189,    -1,
+        4,   183,   269,   184,   185,   132,    -1,   279,    -1,   281,
+      187,   279,    -1,   283,    -1,   287,    -1,     4,   185,     4,
+       -1,     4,   183,   269,   184,   185,     4,    -1,     5,    -1,
+       53,    -1,    56,    -1,   147,   181,   282,   182,    -1,   148,
+      181,   282,   187,   282,   182,    -1,    41,   215,   285,   216,
+       -1,    42,   181,   282,   182,    -1,    43,   181,   282,   182,
+       -1,    44,   181,   282,   187,   282,   187,   282,   182,    -1,
+       39,   215,   285,   216,    -1,    48,   215,   269,   187,   283,
+      187,   283,   216,    -1,    40,   215,   282,   216,    -1,    40,
+      215,   282,   187,   278,   216,    -1,    54,   215,   282,   216,
+       -1,    -1,    67,   215,   283,   284,   226,   216,    -1,   282,
+       -1,   285,   187,   282,    -1,     4,   190,   188,   269,   189,
+       -1,   286,   190,   188,   269,   189,    -1,     4,    -1,   286,
+       -1
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
  static const yytype_uint16 yyrline[] =
  {
++<<<<<<< HEAD
 +       0,   182,   182,   183,   188,   190,   194,   195,   196,   197,
 +     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
 +     208,   212,   216,   223,   228,   233,   247,   260,   273,   301,
 +     315,   328,   341,   360,   365,   366,   367,   368,   369,   373,
 +     375,   380,   382,   388,   492,   387,   510,   517,   528,   527,
 +     545,   552,   563,   562,   579,   596,   619,   618,   632,   633,
 +     634,   635,   636,   640,   641,   647,   647,   648,   648,   654,
 +     655,   656,   717,   746,   751,   756,   761,   768,   775,   790,
 +     795,   800,   809,   815,   824,   842,   860,   869,   881,   886,
 +     894,   914,   937,   948,   956,   978,  1001,  1027,  1048,  1060,
 +    1074,  1074,  1076,  1078,  1087,  1097,  1096,  1108,  1118,  1117,
 +    1131,  1133,  1141,  1147,  1154,  1155,  1159,  1170,  1185,  1195,
 +    1196,  1201,  1209,  1218,  1236,  1240,  1251,  1254,  1267,  1270,
 +    1280,  1304,  1303,  1323,  1345,  1363,  1384,  1402,  1432,  1462,
 +    1480,  1498,  1525,  1543,  1562,  1561,  1584,  1602,  1641,  1647,
 +    1653,  1660,  1685,  1710,  1727,  1746,  1781,  1780,  1804,  1822,
 +    1839,  1856,  1855,  1881,  1886,  1891,  1896,  1901,  1906,  1929,
 +    1935,  1946,  1947,  1952,  1955,  1959,  1982,  2005,  2028,  2056,
 +    2077,  2103,  2124,  2146,  2166,  2278,  2297,  2335,  2444,  2453,
 +    2459,  2474,  2502,  2519,  2528,  2542,  2548,  2554,  2563,  2572,
 +    2581,  2595,  2648,  2665,  2680,  2699,  2711,  2735,  2739,  2744,
 +    2751,  2757,  2762,  2768,  2776,  2780,  2784,  2789,  2844,  2857,
 +    2874,  2891,  2912,  2933,  2968,  2976,  2982,  2989,  2993,  3002,
 +    3010,  3018,  3027,  3026,  3041,  3040,  3055,  3054,  3069,  3068,
 +    3082,  3089,  3096,  3103,  3110,  3117,  3124,  3131,  3138,  3146,
 +    3145,  3159,  3158,  3172,  3171,  3185,  3184,  3198,  3197,  3211,
 +    3210,  3224,  3223,  3237,  3236,  3250,  3249,  3266,  3269,  3275,
 +    3287,  3307,  3331,  3335,  3339,  3343,  3347,  3353,  3359,  3363,
 +    3367,  3371,  3375,  3394,  3407,  3410,  3426,  3429,  3446,  3449,
 +    3455,  3458,  3465,  3521,  3591,  3596,  3663,  3699,  3707,  3750,
 +    3789,  3809,  3836,  3876,  3899,  3922,  3926,  3930,  3953,  3992,
 +    4031,  4052,  4073,  4100,  4104,  4114,  4149,  4150,  4151,  4155,
 +    4161,  4173,  4191,  4219,  4220,  4221,  4222,  4223,  4224,  4225,
 +    4226,  4227,  4234,  4235,  4236,  4237,  4238,  4239,  4240,  4241,
 +    4242,  4243,  4244,  4245,  4246,  4247,  4248,  4249,  4250,  4251,
 +    4252,  4253,  4254,  4255,  4256,  4257,  4258,  4259,  4260,  4261,
 +    4262,  4263,  4264,  4265,  4266,  4275,  4276,  4277,  4278,  4279,
 +    4280,  4281,  4282,  4283,  4284,  4289,  4288,  4296,  4313,  4331,
 +    4349,  4354,  4360,  4372,  4389,  4407,  4428,  4433,  4438,  4448,
 +    4458,  4463,  4472,  4477,  4504,  4508,  4512,  4516,  4520,  4527,
 +    4531,  4535,  4539,  4546,  4551,  4558,  4563,  4567,  4572,  4576,
 +    4584,  4595,  4599,  4611,  4619,  4627,  4634,  4644,  4664,  4668,
 +    4672,  4676,  4680,  4709,  4738,  4767,  4796,  4806,  4816,  4828,
 +    4840,  4861,  4866,  4870,  4874,  4886,  4890,  4902,  4909,  4919,
 +    4923,  4938,  4943,  4950,  4954,  4967,  4975,  4986,  4990,  4998,
 +    5004,  5012,  5020,  5028,  5042,  5056,  5068,  5084,  5088,  5108,
 +    5107,  5120,  5125,  5131,  5140,  5153,  5156
++=======
+        0,   183,   183,   184,   189,   191,   195,   196,   197,   198,
+      199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+      209,   213,   217,   224,   229,   234,   248,   261,   274,   302,
+      316,   329,   342,   361,   366,   367,   368,   369,   370,   374,
+      376,   381,   383,   389,   493,   388,   511,   518,   529,   528,
+      546,   553,   564,   563,   580,   597,   620,   619,   633,   634,
+      635,   636,   637,   641,   642,   648,   648,   649,   649,   655,
+      656,   657,   718,   747,   776,   781,   786,   791,   798,   805,
+      820,   825,   830,   839,   845,   854,   872,   890,   899,   911,
+      916,   924,   944,   967,   978,   986,  1008,  1031,  1057,  1078,
+     1090,  1104,  1104,  1106,  1108,  1117,  1127,  1126,  1138,  1148,
+     1147,  1161,  1163,  1171,  1177,  1184,  1185,  1189,  1200,  1215,
+     1225,  1226,  1231,  1239,  1248,  1266,  1270,  1279,  1283,  1292,
+     1296,  1305,  1309,  1319,  1322,  1335,  1338,  1348,  1371,  1403,
+     1426,  1444,  1465,  1483,  1513,  1543,  1561,  1579,  1606,  1624,
+     1642,  1677,  1695,  1734,  1740,  1746,  1753,  1778,  1803,  1820,
+     1839,  1873,  1909,  1927,  1944,  1960,  1997,  2002,  2007,  2012,
+     2017,  2022,  2045,  2051,  2062,  2063,  2068,  2071,  2075,  2098,
+     2121,  2144,  2172,  2193,  2219,  2240,  2262,  2282,  2394,  2413,
+     2451,  2560,  2569,  2575,  2590,  2618,  2635,  2644,  2658,  2664,
+     2670,  2679,  2688,  2697,  2711,  2767,  2785,  2802,  2817,  2836,
+     2848,  2872,  2876,  2881,  2888,  2894,  2899,  2905,  2913,  2917,
+     2921,  2926,  2981,  2994,  3011,  3028,  3049,  3070,  3105,  3113,
+     3119,  3126,  3130,  3139,  3147,  3155,  3164,  3163,  3178,  3177,
+     3192,  3191,  3206,  3205,  3219,  3226,  3233,  3240,  3247,  3254,
+     3261,  3268,  3275,  3283,  3282,  3296,  3295,  3309,  3308,  3322,
+     3321,  3335,  3334,  3348,  3347,  3361,  3360,  3374,  3373,  3387,
+     3386,  3403,  3406,  3412,  3424,  3444,  3468,  3472,  3476,  3480,
+     3484,  3490,  3496,  3500,  3504,  3508,  3512,  3531,  3544,  3547,
+     3563,  3566,  3583,  3586,  3592,  3595,  3602,  3605,  3612,  3668,
+     3738,  3743,  3810,  3846,  3854,  3897,  3936,  3956,  3983,  4032,
+     4060,  4088,  4092,  4096,  4124,  4163,  4202,  4223,  4244,  4271,
+     4275,  4285,  4320,  4321,  4322,  4326,  4332,  4344,  4362,  4390,
+     4391,  4392,  4393,  4394,  4395,  4396,  4397,  4398,  4405,  4406,
+     4407,  4408,  4409,  4410,  4411,  4412,  4413,  4414,  4415,  4416,
+     4417,  4418,  4419,  4420,  4421,  4422,  4423,  4424,  4425,  4426,
+     4427,  4428,  4429,  4430,  4431,  4432,  4433,  4434,  4435,  4436,
+     4437,  4446,  4447,  4448,  4449,  4450,  4451,  4452,  4453,  4454,
+     4455,  4460,  4459,  4467,  4484,  4502,  4520,  4525,  4531,  4543,
+     4560,  4578,  4599,  4604,  4609,  4619,  4629,  4634,  4645,  4654,
+     4659,  4686,  4690,  4694,  4698,  4702,  4709,  4713,  4717,  4721,
+     4728,  4733,  4740,  4745,  4749,  4754,  4758,  4766,  4777,  4781,
+     4793,  4801,  4809,  4816,  4826,  4855,  4859,  4863,  4867,  4871,
+     4875,  4879,  4883,  4887,  4916,  4945,  4974,  5003,  5016,  5029,
+     5042,  5055,  5065,  5075,  5087,  5099,  5111,  5129,  5150,  5155,
+     5159,  5163,  5175,  5179,  5191,  5198,  5208,  5212,  5227,  5232,
+     5239,  5243,  5256,  5264,  5275,  5279,  5287,  5293,  5301,  5309,
+     5324,  5338,  5352,  5364,  5380,  5391,  5395,  5414,  5422,  5421,
+     5434,  5439,  5445,  5454,  5467,  5470
++>>>>>>> upstream/2.9.3+dfsg1
  };
  #endif
  
@@@ -1219,9 -1118,10 +1880,16 @@@ static const char *const yytname[] 
    "tCos", "tAcos", "tTan", "tRand", "tAtan", "tAtan2", "tSinh", "tCosh",
    "tTanh", "tFabs", "tFloor", "tCeil", "tRound", "tFmod", "tModulo",
    "tHypot", "tList", "tPrintf", "tError", "tStr", "tSprintf", "tStrCat",
++<<<<<<< HEAD
 +  "tStrPrefix", "tStrRelative", "tStrReplace", "tStrFind", "tStrCmp",
 +  "tTextAttributes", "tBoundingBox", "tDraw", "tSetChanged", "tToday",
 +  "tOnelabAction", "tSyncModel", "tCpu", "tMemory", "tTotalMemory",
++=======
+   "tStrPrefix", "tStrRelative", "tStrReplace", "tFind", "tStrFind",
+   "tStrCmp", "tStrChoice", "tTextAttributes", "tBoundingBox", "tDraw",
+   "tSetChanged", "tToday", "tFixRelativePath", "tSyncModel",
+   "tOnelabAction", "tOnelabRun", "tCpu", "tMemory", "tTotalMemory",
++>>>>>>> upstream/2.9.3+dfsg1
    "tCreateTopology", "tCreateTopologyNoHoles", "tDistanceFunction",
    "tDefineConstant", "tUndefineConstant", "tDefineNumber", "tDefineString",
    "tPoint", "tCircle", "tEllipse", "tLine", "tSphere", "tPolarSphere",
@@@ -1248,24 -1148,25 +1916,46 @@@
    "tPLUSPLUS", "'^'", "'('", "')'", "'['", "']'", "'.'", "'#'", "','",
    "'{'", "'}'", "'~'", "$accept", "All", "GeoFormatItems", "GeoFormatItem",
    "SendToFile", "Printf", "View", "Views", "ElementCoords",
++<<<<<<< HEAD
 +  "ElementValues", "Element", "@1", "@2", "Text2DValues", "Text2D", "@3",
 +  "Text3DValues", "Text3D", "@4", "InterpolationMatrix", "Time", "@5",
 +  "NumericAffectation", "NumericIncrement", "LP", "RP", "Affectation",
 +  "Comma", "DefineConstants", "@6", "@7", "UndefineConstants",
 +  "Enumeration", "FloatParameterOptions", "FloatParameterOption",
 +  "CharParameterOptions", "CharParameterOption", "PhysicalId",
 +  "InSphereCenter", "CircleOptions", "Shape", "@8", "@9", "@10", "@11",
 +  "Transform", "MultipleShape", "ListOfShapes", "LevelSet", "Delete",
 +  "Colorify", "Visibility", "Command", "Loop", "Extrude", "@12", "@13",
 +  "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23",
 +  "@24", "ExtrudeParameters", "ExtrudeParameter", "TransfiniteType",
 +  "TransfiniteArrangement", "TransfiniteCorners", "RecombineAngle",
 +  "Constraints", "Coherence", "HomologyCommand", "Homology", "FExpr",
 +  "FExpr_Single", "@25", "VExpr", "VExpr_Single",
 +  "RecursiveListOfListOfDouble", "ListOfDouble", "ListOfDoubleOrAll",
 +  "FExpr_Multi", "RecursiveListOfDouble", "ColorExpr", "ListOfColor",
 +  "RecursiveListOfColor", "StringExprVar", "StringExpr", "@26",
 +  "RecursiveListOfStringExprVar", "StringIndex", "String__Index", 0
++=======
+   "ElementValues", "Element", "$@1", "$@2", "Text2DValues", "Text2D",
+   "$@3", "Text3DValues", "Text3D", "$@4", "InterpolationMatrix", "Time",
+   "$@5", "NumericAffectation", "NumericIncrement", "LP", "RP",
+   "Affectation", "Comma", "DefineConstants", "$@6", "$@7",
+   "UndefineConstants", "Enumeration", "FloatParameterOptions",
+   "FloatParameterOption", "CharParameterOptions", "CharParameterOption",
+   "PhysicalId0", "PhysicalId1", "PhysicalId2", "PhysicalId3",
+   "InSphereCenter", "CircleOptions", "Shape", "Transform", "MultipleShape",
+   "ListOfShapes", "LevelSet", "Delete", "Colorify", "Visibility",
+   "Command", "Loop", "Extrude", "$@8", "$@9", "$@10", "$@11", "$@12",
+   "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "$@20",
+   "ExtrudeParameters", "ExtrudeParameter", "TransfiniteType",
+   "TransfiniteArrangement", "TransfiniteCorners", "RecombineAngle",
+   "PeriodicTransform", "Constraints", "Coherence", "HomologyCommand",
+   "Homology", "FExpr", "FExpr_Single", "$@21", "VExpr", "VExpr_Single",
+   "RecursiveListOfListOfDouble", "ListOfDouble", "ListOfDoubleOrAll",
+   "FExpr_Multi", "RecursiveListOfDouble", "ColorExpr", "ListOfColor",
+   "RecursiveListOfColor", "StringExprVar", "StringExpr", "$@22",
+   "RecursiveListOfStringExprVar", "StringIndex", "String__Index", YY_NULL
++>>>>>>> upstream/2.9.3+dfsg1
  };
  #endif
  
@@@ -1289,63 -1190,66 +1979,123 @@@ static const yytype_uint16 yytoknum[] 
       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,   400,   401,   402,   403,   404,
++<<<<<<< HEAD
 +     405,   406,   407,   408,   409,   410,   411,   412,    63,   413,
 +     414,   415,   416,    60,    62,   417,   418,    43,    45,    42,
 +      47,    37,    33,   419,   420,   421,    94,    40,    41,    91,
 +      93,    46,    35,    44,   123,   125,   126
++=======
+      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+      415,   416,    63,   417,   418,   419,   420,    60,    62,   421,
+      422,    43,    45,    42,    47,    37,    33,   423,   424,   425,
+       94,    40,    41,    91,    93,    46,    35,    44,   123,   125,
+      126
++>>>>>>> upstream/2.9.3+dfsg1
  };
  # endif
  
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
  static const yytype_uint16 yyr1[] =
  {
++<<<<<<< HEAD
 +       0,   187,   188,   188,   189,   189,   190,   190,   190,   190,
 +     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
 +     190,   191,   191,   192,   192,   192,   192,   192,   192,   193,
 +     193,   193,   193,   194,   194,   194,   194,   194,   194,   195,
 +     195,   196,   196,   198,   199,   197,   200,   200,   202,   201,
 +     203,   203,   205,   204,   206,   206,   208,   207,   209,   209,
 +     209,   209,   209,   210,   210,   211,   211,   212,   212,   213,
 +     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
 +     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
 +     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
 +     214,   214,   215,   215,   215,   216,   215,   215,   217,   215,
 +     218,   218,   219,   219,   220,   220,   221,   221,   221,   222,
 +     222,   223,   223,   223,   224,   224,   225,   225,   226,   226,
 +     227,   228,   227,   227,   227,   227,   227,   227,   227,   227,
 +     227,   227,   227,   227,   229,   227,   227,   227,   227,   227,
 +     227,   227,   227,   227,   227,   227,   230,   227,   227,   227,
 +     227,   231,   227,   232,   232,   232,   232,   232,   232,   232,
 +     232,   233,   233,   234,   234,   234,   234,   234,   234,   235,
 +     235,   235,   235,   235,   235,   235,   235,   235,   236,   236,
 +     236,   236,   236,   237,   237,   238,   238,   238,   238,   238,
 +     238,   239,   239,   239,   239,   239,   239,   239,   239,   239,
 +     239,   239,   239,   239,   239,   239,   239,   239,   239,   240,
 +     240,   240,   240,   240,   240,   240,   240,   240,   240,   241,
 +     241,   241,   242,   241,   243,   241,   244,   241,   245,   241,
 +     241,   241,   241,   241,   241,   241,   241,   241,   241,   246,
 +     241,   247,   241,   248,   241,   249,   241,   250,   241,   251,
 +     241,   252,   241,   253,   241,   254,   241,   255,   255,   256,
 +     256,   256,   256,   256,   256,   256,   256,   256,   256,   256,
 +     256,   256,   256,   256,   257,   257,   258,   258,   259,   259,
 +     260,   260,   261,   261,   261,   261,   261,   261,   261,   261,
 +     261,   261,   261,   261,   261,   261,   261,   261,   261,   261,
 +     261,   261,   261,   262,   262,   262,   263,   263,   263,   264,
 +     264,   264,   264,   265,   265,   265,   265,   265,   265,   265,
 +     265,   265,   265,   265,   265,   265,   265,   265,   265,   265,
 +     265,   265,   265,   265,   265,   265,   265,   265,   265,   265,
 +     265,   265,   265,   265,   265,   265,   265,   265,   265,   265,
 +     265,   265,   265,   265,   265,   266,   266,   266,   266,   266,
 +     266,   266,   266,   266,   266,   267,   266,   266,   266,   266,
 +     266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
 +     266,   266,   266,   266,   268,   268,   268,   268,   268,   269,
 +     269,   269,   269,   270,   270,   271,   271,   271,   271,   271,
 +     271,   272,   272,   273,   273,   273,   273,   273,   273,   273,
 +     273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
 +     273,   274,   274,   274,   274,   275,   275,   275,   275,   276,
 +     276,   277,   277,   278,   278,   278,   278,   279,   279,   279,
 +     279,   279,   279,   279,   279,   279,   279,   279,   279,   280,
 +     279,   281,   281,   282,   282,   283,   283
++=======
+        0,   191,   192,   192,   193,   193,   194,   194,   194,   194,
+      194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
+      194,   195,   195,   196,   196,   196,   196,   196,   196,   197,
+      197,   197,   197,   198,   198,   198,   198,   198,   198,   199,
+      199,   200,   200,   202,   203,   201,   204,   204,   206,   205,
+      207,   207,   209,   208,   210,   210,   212,   211,   213,   213,
+      213,   213,   213,   214,   214,   215,   215,   216,   216,   217,
+      217,   217,   217,   217,   217,   217,   217,   217,   217,   217,
+      217,   217,   217,   217,   217,   217,   217,   217,   217,   217,
+      217,   217,   217,   217,   217,   217,   217,   217,   217,   217,
+      217,   218,   218,   219,   219,   219,   220,   219,   219,   221,
+      219,   222,   222,   223,   223,   224,   224,   225,   225,   225,
+      226,   226,   227,   227,   227,   228,   228,   229,   229,   230,
+      230,   231,   231,   232,   232,   233,   233,   234,   234,   234,
+      234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
+      234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
+      234,   234,   234,   234,   234,   234,   235,   235,   235,   235,
+      235,   235,   235,   235,   236,   236,   237,   237,   237,   237,
+      237,   237,   238,   238,   238,   238,   238,   238,   238,   238,
+      238,   239,   239,   239,   239,   239,   240,   240,   241,   241,
+      241,   241,   241,   241,   242,   242,   242,   242,   242,   242,
+      242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
+      242,   242,   242,   243,   243,   243,   243,   243,   243,   243,
+      243,   243,   243,   244,   244,   244,   245,   244,   246,   244,
+      247,   244,   248,   244,   244,   244,   244,   244,   244,   244,
+      244,   244,   244,   249,   244,   250,   244,   251,   244,   252,
+      244,   253,   244,   254,   244,   255,   244,   256,   244,   257,
+      244,   258,   258,   259,   259,   259,   259,   259,   259,   259,
+      259,   259,   259,   259,   259,   259,   259,   259,   260,   260,
+      261,   261,   262,   262,   263,   263,   264,   264,   265,   265,
+      265,   265,   265,   265,   265,   265,   265,   265,   265,   265,
+      265,   265,   265,   265,   265,   265,   265,   265,   265,   266,
+      266,   266,   267,   267,   267,   268,   268,   268,   268,   269,
+      269,   269,   269,   269,   269,   269,   269,   269,   269,   269,
+      269,   269,   269,   269,   269,   269,   269,   269,   269,   269,
+      269,   269,   269,   269,   269,   269,   269,   269,   269,   269,
+      269,   269,   269,   269,   269,   269,   269,   269,   269,   269,
+      269,   270,   270,   270,   270,   270,   270,   270,   270,   270,
+      270,   271,   270,   270,   270,   270,   270,   270,   270,   270,
+      270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
+      270,   272,   272,   272,   272,   272,   273,   273,   273,   273,
+      274,   274,   275,   275,   275,   275,   275,   275,   276,   276,
+      277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
+      277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
+      277,   277,   277,   277,   277,   277,   277,   277,   278,   278,
+      278,   278,   279,   279,   279,   279,   280,   280,   281,   281,
+      282,   282,   282,   282,   283,   283,   283,   283,   283,   283,
+      283,   283,   283,   283,   283,   283,   283,   283,   284,   283,
+      285,   285,   286,   286,   287,   287
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@@ -1358,2203 -1262,2528 +2108,4714 @@@ static const yytype_uint8 yyr2[] 
         3,     1,     3,     0,     0,    10,     1,     3,     0,    13,
         1,     3,     0,    15,     8,    14,     0,     6,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     5,
++<<<<<<< HEAD
 +       5,     4,     6,     7,     7,     7,     9,     9,     3,     6,
 +       6,     4,     6,     9,     6,     9,     5,     8,     8,    11,
 +       6,     9,     5,     7,     9,     9,    11,     7,     9,     9,
 +       0,     1,     0,     3,     5,     0,     9,     5,     0,     9,
 +       0,     3,     3,     5,     0,     2,     3,     5,     3,     0,
 +       2,     3,     3,     5,     1,     1,     0,     5,     0,     2,
 +       7,     0,     9,     6,     7,     4,     7,     8,     8,     7,
 +       7,    11,     8,     8,     0,     9,     8,     9,     3,     4,
 +      10,     7,     7,     8,     8,    12,     0,     9,     8,     7,
 +       8,     0,     9,     5,    11,     5,     9,     9,     4,     9,
 +       9,     1,     1,     0,     2,     6,     6,     6,     6,     8,
 +      10,    14,    16,    12,     8,     8,     6,    14,     4,     6,
 +       6,     3,     4,     5,     6,     3,     3,     4,     5,     4,
 +       5,     3,     7,     7,     3,     7,     3,     2,     2,     2,
 +       2,    15,     2,     2,     2,     2,     2,    16,     3,     6,
 +       8,     8,    10,     1,     2,     1,     3,     4,     1,     5,
 +      11,    13,     0,     7,     0,    13,     0,    15,     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,     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,
 +       4,     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,
 +       4,     6,     6,     6,     4,     1,     1,     1,     1,     1,
 +       1,     1,     1,     1,     1,     0,     6,     1,     4,     4,
 +       4,     4,     4,     2,     5,     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,     4,
 +       6,     1,     1,     3,     3,     9,     7,     1,     5,     3,
 +       6,     1,     3,     1,     1,     3,     6,     1,     1,     1,
 +       4,     6,     6,     4,     4,     8,     4,     4,     6,     0,
 +       6,     1,     3,     5,     5,     1,     1
++=======
+        5,     4,     6,     6,     7,     7,     7,     9,     9,     3,
+        6,     6,     4,     6,     9,     6,     9,     5,     8,     8,
+       11,     6,     9,     5,     7,     9,     9,    11,     7,     9,
+        9,     0,     1,     0,     3,     5,     0,     9,     5,     0,
+        9,     0,     3,     3,     5,     0,     2,     3,     5,     3,
+        0,     2,     3,     3,     5,     1,     1,     1,     1,     1,
+        1,     1,     1,     0,     5,     0,     2,     7,     8,     6,
+        7,     4,     7,     8,     8,     7,     7,    11,     8,     8,
+        8,     8,     9,     3,     4,    10,     7,     7,     8,     8,
+       12,     8,     8,     7,     8,     8,     5,    11,     5,     9,
+        9,     4,     9,     9,     1,     1,     0,     2,     6,     6,
+        6,     6,     8,    10,    14,    16,    12,     8,     8,     6,
+       14,     4,     6,     6,     3,     4,     5,     6,     3,     3,
+        4,     5,     4,     5,     3,     5,     7,     7,     3,     7,
+        3,     2,     2,     2,     2,    15,     2,     2,     2,     2,
+        2,    16,     3,     6,     8,     8,    10,     1,     2,     1,
+        3,     4,     1,     5,    11,    13,     0,     7,     0,    13,
+        0,    15,     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,     2,     3,
+        2,     3,     2,     3,     2,     3,     9,     6,     0,     3,
+        0,     1,     0,     2,     0,     2,     0,     2,     7,     6,
+        8,     5,     3,     7,     5,     4,     6,     6,    13,    10,
+       10,    10,    10,    10,     4,     4,     4,     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,     4,     6,     6,     6,
+        4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+        1,     0,     6,     1,     4,     4,     4,     4,     4,     2,
+        5,     5,     3,     6,     4,     7,     6,     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,     3,
+        3,     3,     3,     5,     5,     5,     5,    16,    16,    16,
+       16,     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,     1,     4,     6,     4,
+        4,     4,     8,     4,     8,     4,     6,     4,     0,     6,
+        1,     3,     5,     5,     1,     1
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
- /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+ /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+    Performed when YYTABLE doesn't specify something else to do.  Zero
     means the default is an error.  */
  static const yytype_uint16 yydefact[] =
  {
++<<<<<<< HEAD
 +       0,     0,     0,     2,     3,     1,   465,     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,     0,     0,     0,   223,     0,
 +     228,     0,     0,     0,   225,     0,     0,     0,     0,   316,
 +     317,   318,     0,     5,     7,     6,     8,     9,    10,    19,
 +      11,    12,    13,    18,    17,    14,    15,    16,     0,    20,
 +     466,     0,   365,   465,   447,   366,   367,   368,     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,   448,
 +     449,   372,   373,   374,     0,     0,     0,     0,     0,     0,
 +       0,     0,   369,   370,   371,     0,     0,     0,    65,    66,
 +       0,     0,   173,     0,     0,     0,   323,     0,   443,   466,
 +     377,     0,     0,     0,     0,   210,     0,   212,   213,   209,
 +     214,   215,   102,   110,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +     216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,   131,   144,   156,   161,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,   394,     0,     0,     0,     0,     0,   173,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
 +       0,   313,     0,     0,     0,     0,     0,     0,     0,     0,
 +     465,   412,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,   426,   427,   405,   411,     0,   406,   377,     0,     0,
 +       0,     0,   437,     0,     0,     0,     0,     0,   207,   208,
 +       0,     0,   224,     0,   173,     0,   173,   465,     0,   319,
 +       0,     0,     0,     0,     0,    58,    62,    61,    60,    59,
 +      64,    63,     0,     0,     0,     0,     0,    65,    66,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++=======
+        0,     0,     0,     2,     3,     1,   484,     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,     0,     0,     0,     0,   227,
+        0,   232,     0,     0,     0,   229,     0,     0,     0,     0,
+      322,   323,   324,     0,     5,     7,     6,     8,     9,    10,
+       19,    11,    12,    13,    18,    17,    14,    15,    16,     0,
+       20,   485,     0,   371,   484,   464,   372,   373,   374,     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,   465,     0,   466,   378,   379,   380,     0,     0,
+        0,     0,     0,     0,     0,     0,   375,   376,   377,     0,
+        0,     0,    65,    66,     0,     0,   176,     0,     0,     0,
+      329,     0,   460,   485,   383,     0,     0,     0,     0,   214,
+        0,   216,   217,   213,     0,   218,   219,   103,   111,     0,
++>>>>>>> upstream/2.9.3+dfsg1
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,   220,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,   326,   325,
 +     327,     0,     0,     0,     0,     0,     0,   465,   466,     0,
 +       0,   172,     0,   171,     0,     0,   204,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++<<<<<<< HEAD
 +       0,     0,    33,   201,     0,   383,   148,     0,   465,     0,
 +     443,   444,     0,     0,   100,   100,     0,     0,   431,   432,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,   288,   288,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,   173,   173,     0,
 +     396,   395,     0,     0,     0,     0,   173,   173,     0,     0,
 +       0,     0,     0,     0,     0,   238,     0,   173,     0,     0,
 +       0,     0,     0,   290,     0,     0,     0,     0,   191,     0,
 +       0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
 +       0,    66,     0,     0,     0,   418,     0,   419,   420,   421,
 +       0,     0,     0,     0,     0,   325,   413,     0,   407,     0,
 +       0,     0,   296,   206,     0,     0,     0,     0,     0,   173,
 +       0,     0,     0,     0,   226,   195,     0,   196,     0,     0,
 +     218,     0,     0,     0,     0,     0,     0,     0,    78,     0,
 +       0,   386,     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,   375,   459,     0,     0,     0,     0,
 +       0,     0,   324,    58,     0,     0,    58,     0,     0,     0,
 +       0,     0,   168,     0,     0,     0,     0,   174,     0,     0,
 +       0,   341,   340,   339,   338,   334,   335,   337,   336,   329,
 +     328,   330,   331,   332,   333,     0,     0,   149,     0,     0,
 +       0,     0,     0,     0,     0,     0,   101,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,   310,
 +     311,   312,     0,     0,     0,     0,   286,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,   135,
 +     173,     0,     0,     0,     0,     0,   398,   397,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,   232,     0,     0,
 +       0,     0,     0,     0,     0,   299,     0,     0,   192,     0,
 +       0,   188,     0,     0,     0,   309,   308,     0,     0,     0,
 +       0,   386,    67,    68,     0,   428,     0,     0,     0,     0,
 +       0,     0,     0,   324,   408,   415,     0,   330,   414,     0,
 +       0,     0,     0,     0,     0,     0,     0,   227,     0,   197,
 +     199,     0,     0,     0,     0,     0,     0,    81,    71,     0,
 +     378,   388,   343,   344,   345,   346,   347,   348,   349,   350,
 +     351,   364,   352,     0,   354,   355,   356,   357,   358,   359,
 +     360,     0,     0,     0,     0,   456,     0,   457,     0,   453,
 +     454,     0,     0,     0,   393,   114,   119,    92,     0,   450,
 +       0,   380,   381,     0,     0,     0,     0,     0,     0,     0,
 +      86,     0,     0,     0,     0,   382,     0,     0,     0,     0,
 +     463,     0,     0,    43,     0,     0,     0,    56,     0,    34,
 +      35,    36,    37,    38,   379,     0,   445,    23,    21,     0,
 +       0,    24,     0,     0,    69,   103,    70,   111,     0,   433,
 +     434,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,   284,
 +     289,   287,     0,   295,     0,     0,   124,   125,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,   198,   200,
 +       0,     0,     0,   163,   165,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +     267,     0,   229,     0,     0,     0,     0,     0,     0,   291,
 +     298,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,   378,     0,   429,   417,     0,     0,     0,     0,   409,
 +       0,     0,     0,     0,     0,     0,     0,   193,     0,     0,
 +       0,     0,     0,     0,   320,     0,     0,     0,   464,     0,
 +       0,   384,     0,     0,     0,     0,     0,   462,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,    72,     0,
 +       0,     0,     0,    79,    82,    84,     0,     0,   441,     0,
 +      90,     0,     0,     0,     0,     0,   342,     0,     0,     0,
 +       0,     0,    29,   385,     0,    22,     0,     0,     0,     0,
 +       0,     0,     0,     0,   128,   128,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,   133,     0,     0,     0,
 +       0,     0,     0,     0,   293,     0,     0,     0,     0,     0,
 +       0,     0,     0,   301,     0,     0,   194,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,   273,     0,   272,     0,
 +     278,     0,   280,     0,   274,     0,   276,     0,   239,   268,
 +       0,     0,     0,   186,     0,     0,     0,   300,     0,   190,
 +     189,   315,     0,     0,    30,    31,     0,     0,     0,   422,
 +     423,   424,   425,   416,   410,     0,     0,     0,   438,     0,
 +       0,     0,   219,     0,     0,     0,     0,     0,     0,    80,
 +     203,   387,   202,   353,   361,   362,   363,   458,   452,     0,
 +     391,   392,     0,   376,   115,     0,   460,   120,   390,   451,
 +      74,    58,     0,     0,     0,     0,    73,     0,     0,     0,
 +     439,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +     403,     0,     0,    25,    26,     0,    27,     0,     0,   104,
 +     107,   130,     0,     0,     0,     0,     0,     0,   134,     0,
 +       0,   151,   152,     0,     0,   136,   159,     0,     0,     0,
 +       0,   126,     0,   292,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,   205,     0,     0,     0,     0,   173,   173,
 +       0,   249,     0,   251,     0,   253,     0,   405,     0,     0,
 +     279,   281,   275,   277,     0,     0,   233,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,   297,     0,   387,   430,
 +     139,   140,     0,     0,     0,     0,    93,    97,     0,     0,
 +     321,     0,    75,   389,     0,     0,     0,     0,     0,    87,
 +       0,     0,    88,     0,   442,   175,   176,   177,   178,     0,
 +       0,    39,     0,     0,     0,     0,     0,    41,   446,     0,
 +       0,   105,   108,     0,     0,   129,   137,   138,   142,     0,
 +       0,   153,     0,     0,   294,     0,   146,     0,     0,   285,
 +     158,     0,     0,     0,     0,   143,     0,   154,   160,     0,
 +       0,     0,     0,   402,     0,   401,     0,     0,     0,   240,
 +       0,     0,   241,     0,     0,   242,     0,     0,     0,     0,
 +       0,     0,     0,   185,     0,     0,   184,     0,     0,     0,
 +     179,     0,     0,    32,     0,     0,   436,     0,   221,   220,
 +       0,     0,     0,     0,     0,   455,     0,   116,   118,     0,
 +     121,   122,    83,    85,     0,    91,     0,    76,    44,     0,
 +       0,     0,   404,     0,     0,     0,    28,     0,   114,   119,
 +       0,     0,     0,     0,     0,     0,     0,     0,   147,   132,
 +     145,   157,   162,     0,     0,    98,    99,   173,     0,   166,
 +     167,     0,     0,     0,     0,     0,     0,     0,   269,     0,
 +       0,   173,     0,     0,     0,     0,     0,   170,   169,     0,
 +       0,     0,     0,    94,    95,     0,    77,     0,   431,     0,
 +       0,   440,     0,    40,     0,     0,     0,    42,    57,     0,
 +       0,     0,   303,   305,   304,   306,   307,   150,     0,     0,
 +       0,     0,     0,     0,   400,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,   283,     0,     0,     0,   234,     0,
 +       0,   180,     0,     0,     0,   435,   222,     0,   322,     0,
 +     117,     0,   123,    89,     0,     0,     0,     0,     0,   106,
 +     109,     0,     0,     0,     0,   164,     0,   255,     0,     0,
 +     257,     0,     0,   259,     0,     0,     0,   270,     0,   230,
 +       0,   173,     0,     0,     0,   141,    96,     0,   112,     0,
 +      48,     0,    54,     0,     0,     0,   127,   155,   302,   399,
 +     243,     0,     0,   250,   244,     0,     0,   252,   245,     0,
 +       0,   254,     0,     0,     0,   236,     0,   183,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,   261,     0,
 +     263,     0,   265,   271,   282,   235,   231,     0,     0,     0,
 +       0,   113,    45,     0,    52,     0,     0,     0,     0,   246,
 +       0,     0,   247,     0,     0,   248,     0,     0,   187,     0,
 +     181,     0,    46,     0,     0,   211,     0,     0,     0,     0,
 +       0,     0,     0,   237,     0,     0,     0,     0,     0,   217,
 +     256,     0,   258,     0,   260,     0,   182,    47,    49,     0,
 +      50,     0,     0,     0,     0,     0,     0,    55,   262,   264,
 +     266,    51,    53
++=======
+        0,     0,     0,     0,     0,     0,   401,     0,     0,     0,
+        0,     0,   176,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,   176,     0,   319,     0,     0,     0,
+        0,     0,     0,     0,     0,   484,   419,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,   441,   442,   412,   418,
+        0,   413,   485,   383,     0,     0,     0,     0,   454,     0,
+        0,     0,     0,     0,   211,   212,     0,   484,   485,     0,
+      228,     0,   176,     0,   176,   484,     0,   325,     0,     0,
+       65,    66,     0,     0,    58,    62,    61,    60,    59,    64,
+       63,     0,     0,     0,     0,     0,    66,     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,   332,
+      331,   333,     0,     0,     0,     0,     0,     0,     0,     0,
+      175,     0,   174,     0,     0,   208,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,    33,   204,     0,   389,   153,     0,   484,     0,   460,
+      461,     0,     0,   480,     0,   101,   101,     0,     0,   448,
+      449,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   292,   292,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,   176,   176,
+        0,   403,   402,     0,     0,     0,     0,   176,   176,     0,
+        0,     0,     0,     0,     0,     0,   242,     0,   176,     0,
+        0,     0,     0,     0,   294,     0,     0,     0,     0,   194,
+        0,     0,     0,   320,     0,     0,     0,     0,     0,     0,
+        0,     0,    66,     0,     0,     0,   425,     0,     0,   426,
+        0,   427,     0,   428,     0,     0,     0,     0,     0,     0,
+      331,   420,     0,   414,     0,     0,     0,   302,    66,     0,
+      210,     0,     0,     0,     0,     0,   176,     0,     0,     0,
+        0,   230,   198,     0,   199,     0,     0,   222,     0,     0,
+        0,     0,     0,     0,     0,     0,    79,     0,     0,   392,
+        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,   381,   478,     0,     0,     0,     0,
+        0,     0,   330,    58,     0,     0,    58,     0,     0,     0,
+        0,     0,   171,     0,     0,     0,     0,   177,     0,     0,
+        0,   347,   346,   345,   344,   340,   341,   343,   342,   335,
+      334,   336,   337,   338,   339,     0,     0,   154,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,   102,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,   316,   317,   318,     0,     0,     0,     0,   290,     0,
+        0,     0,   125,   126,     0,   127,   128,     0,   129,   130,
+        0,   131,   132,     0,     0,     0,     0,     0,     0,   141,
+      176,     0,     0,     0,     0,     0,   405,   404,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   236,     0,     0,
+        0,     0,     0,     0,     0,   305,     0,     0,   195,     0,
+        0,   191,     0,     0,     0,   315,   314,     0,     0,     0,
+        0,   392,    67,    68,     0,   443,     0,     0,     0,     0,
+        0,     0,   429,     0,   430,     0,   431,     0,   432,     0,
+        0,   330,   415,   422,     0,   336,   421,     0,   444,     0,
+        0,     0,     0,     0,     0,     0,     0,   231,     0,   200,
+      202,     0,     0,     0,     0,     0,     0,     0,    82,    71,
+        0,   384,   394,   349,   350,   351,   352,   353,   354,   355,
+      356,   357,   370,   358,     0,   360,   361,   362,   363,   364,
+      365,   366,     0,     0,     0,   473,     0,   475,   469,   470,
+      471,     0,     0,     0,     0,     0,   400,   477,   115,   120,
+       93,     0,   467,     0,   386,   387,     0,     0,     0,     0,
+        0,     0,     0,    87,     0,     0,     0,     0,   388,     0,
+        0,     0,     0,   482,     0,     0,    43,     0,     0,     0,
+       56,     0,    34,    35,    36,    37,    38,   385,     0,   462,
+       23,    21,     0,     0,    24,     0,     0,   205,   481,    69,
+      104,    70,   112,     0,   450,   451,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,   288,   293,   291,     0,   301,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,   201,   203,     0,     0,     0,   166,   168,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   271,     0,   233,     0,     0,     0,     0,
+        0,     0,   295,   304,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,   384,     0,   445,     0,   424,     0,
+        0,     0,     0,     0,     0,     0,   416,     0,     0,     0,
+        0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
+        0,     0,   326,     0,     0,     0,   483,     0,     0,     0,
+      390,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,    72,     0,     0,
+        0,     0,    80,    83,    85,     0,     0,   458,     0,    91,
+        0,     0,     0,     0,     0,   348,     0,     0,     0,     0,
+        0,    29,   391,     0,    22,     0,     0,     0,     0,     0,
+        0,     0,     0,   135,   135,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,   139,     0,     0,     0,     0,
+        0,     0,     0,   299,     0,     0,     0,     0,     0,     0,
+        0,     0,   307,     0,     0,   197,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,   277,     0,   276,     0,   282,
+        0,   284,     0,   278,     0,   280,     0,   243,   272,     0,
+        0,     0,   189,     0,     0,     0,   306,     0,   193,   192,
+      321,     0,     0,    30,    31,     0,     0,     0,     0,     0,
+        0,     0,   433,   434,   435,   436,   423,   417,     0,     0,
+        0,     0,   455,     0,     0,     0,   223,     0,     0,     0,
+        0,    73,     0,    81,     0,   207,   393,   206,   359,   367,
+      368,   369,   476,     0,   397,   398,   399,     0,     0,   382,
+      116,     0,   479,   121,   396,   468,    75,    58,     0,     0,
+        0,     0,    74,     0,     0,     0,   456,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,   410,     0,     0,    25,
+       26,     0,    27,     0,     0,   105,   108,   137,     0,     0,
+        0,     0,     0,     0,   140,     0,     0,   156,   157,     0,
+        0,   142,   163,     0,     0,     0,     0,   133,     0,   298,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,   209,
+        0,     0,     0,     0,   176,   176,     0,   253,     0,   255,
+        0,   257,     0,   412,     0,     0,   283,   285,   279,   281,
+        0,     0,   237,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   303,     0,   393,   446,     0,     0,     0,     0,
+      447,   145,   146,     0,     0,     0,     0,    94,    98,     0,
+        0,   327,    76,     0,   395,     0,     0,     0,     0,     0,
+        0,    88,     0,     0,    89,     0,   459,   178,   179,   180,
+      181,     0,     0,    39,     0,     0,     0,     0,     0,    41,
+      463,     0,     0,   106,   109,     0,     0,   136,   143,   144,
+      148,     0,     0,   158,     0,     0,   300,     0,   151,     0,
+        0,   289,   162,   138,   150,   161,   165,   149,     0,   159,
+      164,     0,     0,     0,     0,   409,     0,   408,     0,     0,
+        0,   244,     0,     0,   245,     0,     0,   246,     0,     0,
+        0,     0,     0,     0,     0,   188,     0,     0,   187,     0,
+        0,     0,   182,     0,     0,    32,     0,     0,     0,     0,
+        0,     0,   453,     0,   225,   224,     0,     0,     0,     0,
+        0,   472,   474,     0,   117,   119,     0,   122,   123,    84,
+       86,     0,    92,     0,    77,    44,     0,     0,     0,   411,
+        0,     0,     0,    28,     0,   115,   120,     0,     0,     0,
+        0,     0,     0,     0,     0,   152,     0,     0,    99,   100,
+      176,     0,   169,   170,     0,     0,     0,     0,     0,     0,
+        0,   273,     0,     0,   176,     0,     0,     0,     0,     0,
+      173,   172,     0,     0,     0,     0,     0,     0,     0,     0,
+       95,    96,     0,    78,     0,   448,     0,     0,   457,     0,
+       40,     0,     0,     0,    42,    57,     0,     0,     0,   309,
+      311,   310,   312,   313,   155,     0,     0,     0,     0,     0,
+        0,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,   287,     0,     0,     0,   238,     0,     0,   183,     0,
+        0,     0,     0,     0,     0,     0,   452,   226,     0,   328,
+        0,   118,     0,   124,    90,     0,     0,     0,     0,     0,
+      107,   110,     0,     0,     0,   296,   167,     0,   259,     0,
+        0,   261,     0,     0,   263,     0,     0,     0,   274,     0,
+      234,     0,   176,     0,     0,     0,     0,     0,     0,     0,
+      147,    97,     0,   113,     0,    48,     0,    54,     0,     0,
+        0,   134,   160,     0,     0,   406,   247,     0,     0,   254,
+      248,     0,     0,   256,   249,     0,     0,   258,     0,     0,
+        0,   240,     0,   186,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   297,   308,     0,
+      265,     0,   267,     0,   269,   275,   286,   239,   235,     0,
+        0,     0,     0,     0,     0,     0,     0,   114,    45,     0,
+       52,     0,     0,     0,     0,   250,     0,     0,   251,     0,
+        0,   252,     0,     0,   190,     0,   184,     0,     0,     0,
+        0,     0,    46,     0,     0,   215,     0,     0,     0,     0,
+        0,     0,     0,   241,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   221,   260,     0,   262,     0,   264,     0,
+      185,     0,     0,     0,     0,    47,    49,     0,    50,     0,
+        0,     0,     0,   437,   438,   439,   440,     0,     0,    55,
+      266,   268,   270,    51,    53
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  /* YYDEFGOTO[NTERM-NUM].  */
  static const yytype_int16 yydefgoto[] =
  {
++<<<<<<< HEAD
 +      -1,     2,     3,    83,   829,    84,    85,   615,  1250,  1256,
 +     819,   987,  1412,  1571,   820,  1532,  1599,   821,  1573,   822,
 +     823,   991,   312,   395,   164,   715,    86,   627,   404,  1358,
 +    1359,   405,  1407,   963,  1114,   964,  1117,   865,  1278,  1155,
 +     597,   435,   436,   437,   438,   271,   372,   373,    89,    90,
 +      91,    92,    93,    94,   272,   903,  1490,  1547,   685,  1300,
 +    1303,  1306,  1511,  1515,  1519,  1560,  1563,  1566,   899,   900,
 +    1023,   862,   656,   694,    96,    97,    98,    99,   273,   166,
 +     785,   451,   231,  1139,   274,   275,   276,   509,   284,   804,
 +     979,   564,   400,   786,   565,   169,   277
++=======
+       -1,     2,     3,    84,   872,    85,    86,   635,  1312,  1318,
+      862,  1036,  1479,  1661,   863,  1612,  1697,   864,  1663,   865,
+      866,  1040,   321,   404,   168,   745,    87,   649,   415,  1425,
+     1426,   416,  1474,  1012,  1170,  1013,  1173,   681,   684,   687,
+      690,  1340,  1211,   617,   276,   381,   382,    90,    91,    92,
+       93,    94,    95,   277,   946,  1561,  1629,   715,  1362,  1365,
+     1368,  1587,  1591,  1595,  1646,  1649,  1652,   942,   943,  1072,
+      907,   678,   724,  1584,    97,    98,    99,   100,   278,   170,
+      828,   462,   236,  1195,   279,   280,   281,   524,   290,   847,
+     1028,   413,   409,   829,   414,   173,   283
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
++<<<<<<< HEAD
 +#define YYPACT_NINF -1191
 +static const yytype_int16 yypact[] =
 +{
 +    5150,    28,    47,  5263, -1191, -1191,  2575,    11,     6,   -81,
 +     -47,    26,   142,   178,   188,   223,   241,    91,   108,  -149,
 +     156,   209,     1,   233,   255,    15,   268,   271,   240,   267,
 +     324,   455,   287,   476,   410,   465,    48,   490,   364,   535,
 +      61,   403,   533,   100,   432,   101,   101,   447,   -18,    46,
 +     -10,   587,   605,     9,    52,   615,   628,    72,   708,   712,
 +     713,  3297,   734,   522,   525,   560,    17,    39, -1191,   569,
 +   -1191,   753,   759,   594, -1191,   773,   777,    20,    21, -1191,
 +   -1191, -1191,  2334, -1191, -1191, -1191, -1191, -1191, -1191, -1191,
 +   -1191, -1191, -1191, -1191, -1191, -1191, -1191, -1191,    30, -1191,
 +      96,   217, -1191,     0, -1191, -1191, -1191, -1191,   -93,   -93,
 +     -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,
 +     -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,   -93,
 +     -93,   -93,   -93,   593,   613,   616,   617,   625,   630, -1191,
 +   -1191, -1191, -1191, -1191,   -93,   -93,   804,   637,   638,   646,
 +     650,   651, -1191, -1191, -1191,  2334,  2334,  2334,  2334,  2394,
 +      34,   832,   129,   658,   681,   237, -1191,   682,   868,  -122,
 +    -121,   876,  2334,   527,   527, -1191,  2334, -1191, -1191, -1191,
 +   -1191, -1191, -1191, -1191,  2334,  4823,  2334,  2334,   709,  2334,
 +    4823,  2334,  2334,   714,  4823,  2334,  2334,  3649,   731,   701,
 +   -1191,  4823,  3297,  3297,  3297,   739,   740,  3297,  3297,  3297,
 +     758, -1191, -1191, -1191, -1191,   763,   791,   797,  3649,  2334,
 +     903,  3649,    17,   746,   789,   101,   101,   101,  2334,  2334,
 +     -63, -1191,    58,   101,   793,   798,   802,  2001,   109,    90,
 +     810,   811,   812,  3297,  3297,  3649,   813,    36,   742, -1191,
 +     886, -1191,   808,   823,   824,  3297,  3297,   771,   830,   833,
 +     577, -1191,   834,    22,  1009,  1013,  1014,   719,  3825,  2334,
 +    2938, -1191, -1191,  2362, -1191,  1016, -1191,   201,  1017,  2334,
 +    2334,  2334,   839,  2334,   840,   895,  2334,  2334, -1191, -1191,
 +    2334,  1026, -1191,  1029, -1191,  1030, -1191,   137,   835, -1191,
 +    3649,  3649,   854,  2334,   859,  1925, -1191, -1191, -1191, -1191,
 +   -1191, -1191,  3649,  1038,   870,  2334,  1056, -1191, -1191,  2334,
 +    2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,
 +    2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,
 +    2334,   527,   527,   527,   527,   527,   527,   527,   527,   527,
 +    2334,  1925,  2334,   527,   527,   527,   832,  1925,   885,   885,
 +     885,  7149,    80,  6804,   265,   882,  1058,   902,   908,   910,
 +     911, -1191,   913,  5356,  2334,  4823, -1191,  2334,  2334,  2334,
 +    2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,  2334,
 +    2334,  2334, -1191, -1191,  2334, -1191, -1191,  1162,   263,   -86,
 +   -1191, -1191,   171,  6131,   290,   378,  7170,  4823,  3777, -1191,
 +     -76,  7191,  7212,  2334,  7233,   -29,  7254,  7275,  2334,    98,
 +    7296,  7317,  1089,  2334,  2334,   139,  1095,  1096,  1097,  2334,
 +    2334,  1098,  1104,  1104,  2334,   927,   935,   936,   941,  2334,
 +    2334,  2334,  1113,  6051,   961,  1137,   963, -1191, -1191,   -16,
 +   -1191, -1191,  6157,  6183,   101,   101,   129,   129,   143,  2334,
 +    2334,  2334,  2001,  2001,  2334,  5356,   152, -1191,  2334,  2334,
 +    2334,  2334,  2334,  1138,  1142,  1143,  2334,  1145, -1191,  2334,
 +    2334,   453, -1191,  4823,  4823,  4823,  1146,  1147,  2334,  2334,
 +    2334,  2334,  1151,    -4,  1153, -1191,  2334, -1191, -1191, -1191,
 +     965,   974,   977,   978,  4823,   885, -1191,  7338, -1191,   202,
 +    2334,  4001, -1191, -1191,  7359,  7380,  7401,  1036,  6209, -1191,
 +     980,  3946,  7422,  6827, -1191, -1191,   787, -1191,  1228,  2334,
 +   -1191,   988,   344,  4823,  6850,  2334,  1161,  1163, -1191,  2334,
 +    6873,    -2,  6781,  6781,  6781,  6781,  6781,  6781,  6781,  6781,
 +    6781,  6781,  6781,  6235,  6781,  6781,  6781,  6781,  6781,  6781,
 +    6781,  6261,  6287,  6313, -1191,   231,   404,   989,   995,   996,
 +     992,   999,  1000,   260,  7863, -1191,  1447,  1001,  1007,  1006,
 +    1012,  1015,    80, -1191,  3649,   134,  1925,  2334,  1172,  1175,
 +      18,  1018, -1191,   102,    12,    19,   148, -1191,  4792,   356,
 +    3965,  2148,  2296,   888,   888,   160,   160,   160,   160,    75,
 +      75,   885,   885,   885,   885,     5,  6896, -1191,  2334,  1190,
 +      31,  4823,  1189,  4823,  2334,  1191, -1191,   832,  1193,   527,
 +    1195,  4823,  4823,  1070,  1196,  1197,  7443,  1206,  1084,  1213,
 +    1214,  7464,  1092,  1217,  1218,  2334,  7485,  5323,  1045, -1191,
 +   -1191, -1191,  7506,  7527,  2334,  3649,  1229,  1233,  7548,  4993,
 +    4993,  4993,  4993,  7569,  7590,  7611,  3649,  4823,  1053, -1191,
 +   -1191,  1616,  1690,   101,  2334,  2334, -1191, -1191,  1059,  1060,
 +    2001,  6339,  6365,  6391,  6105,  1003,   101,  1869,  7632,  5351,
 +    7653,  7674,  7695,  2334,  1240, -1191,  2334,  7716, -1191,  6919,
 +    6942, -1191,   389,   398,   408, -1191, -1191,  6965,  6988,  6417,
 +    7011,   201, -1191, -1191,  4823, -1191,  1067,  5379,  4823,  4823,
 +    4823,  4823,   427, -1191, -1191,  4129,  4823,   885, -1191,  1241,
 +    1242,  1243,  1072,  2334,  2801,  2334,  2334, -1191,    37, -1191,
 +   -1191,  1075,  3649,  1248,   459,   440,  5407, -1191, -1191,  7034,
 +     411, -1191, -1191, -1191, -1191, -1191, -1191, -1191, -1191, -1191,
 +   -1191, -1191, -1191,  2334, -1191, -1191, -1191, -1191, -1191, -1191,
 +   -1191,  2334,  2334,  2334,   527, -1191,  4823, -1191,   527, -1191,
 +   -1191,   527,   527,   527, -1191, -1191, -1191, -1191,  2334, -1191,
 +     527, -1191, -1191,  2334,  1257,    41,  2334,  1259,  1264,  1486,
 +   -1191,  1266,  1099,    17,  1265, -1191,  4823,  4823,  4823,  4823,
 +   -1191,   315,  2334, -1191,  1100,  1106,  1090, -1191,  1269, -1191,
 +   -1191, -1191, -1191, -1191,   201,  7057, -1191, -1191,  1120,   527,
 +     374, -1191,   442,  6443, -1191,  1278, -1191, -1191,   101,  3777,
 +   -1191,   128,  3649,  3649,  1280,  3649,   147,  3649,  3649,  1281,
 +    1230,  3649,  3649,  1551,  1282,  1283,  4823,  1297,  1298,  4317,
 +   -1191, -1191,  1300, -1191,  1303,  1129,  7863, -1191,  1136,  1140,
 +    1141,  1308,  1332,  1334,  1338,   463,  1341,  2985, -1191, -1191,
 +     250,  6469,  6495, -1191, -1191,  5435,   -56,   101,   101,   101,
 +    1342,  1343,  1164,  1348,  1170,    25,    42,    45,    49,   516,
 +   -1191,   289, -1191,  1003,  1349,  1353,  1354,  1355,  1356,  7863,
 +   -1191,  1663,  1171,  1358,  1360,  1363,  1290,  2334,  1366,  1367,
 +    2334,   310,   467, -1191, -1191,   482,   496,   537,   559, -1191,
 +    2334,   572,  3649,  3649,  3649,  1370,  6521, -1191,  4298,   565,
 +    1381,  1383,  3649,  1203, -1191,  1211,  2334,  1384, -1191,  1385,
 +    1389, -1191,  1391,  6781,  6781,  6781,  6781, -1191,   428,   315,
 +    1212,  1221,  1222,   509,   530,  7737,  1224,  1688, -1191,   540,
 +    1223,  1396,  2094, -1191, -1191, -1191,    17,  2334, -1191,   591,
 +   -1191,   599,   620,   623,   627,    80,  7863,  1234,  2334,  2334,
 +    3649,  1226, -1191, -1191,  1236, -1191,  1399,    33,  1413,  2334,
 +    4529,    24,  1239,  1244,  1340,  1340,  3649,  1418,  1245,  1246,
 +    1420,  1425,  3649,  1249,  1426,  1429, -1191,  1432,  3649,   636,
 +    3649,  3649,  1421,  1433, -1191,  3649,  1431,  1434,  1435,  1437,
 +    3649,  3649,  3649, -1191,  1438,   417, -1191,  2334,  2334,  2334,
 +    1262,  1263,   -77,   -66,   -30,  1271, -1191,  3649, -1191,  2334,
 +   -1191,  1442, -1191,  1443, -1191,  1445, -1191,  1446, -1191, -1191,
 +    2001,   733,  3473, -1191,  1272,  1274,  4177, -1191,  4823, -1191,
 +   -1191, -1191,  1275,  2493, -1191, -1191,  7080,  1450,   315, -1191,
 +   -1191, -1191, -1191,  7863, -1191,  1454,  1456,  1337, -1191,  2334,
 +    2334,  2334, -1191,  1458,   544,  1286,  1464,    80,  2512, -1191,
 +   -1191,    64, -1191, -1191, -1191, -1191, -1191, -1191, -1191,   527,
 +   -1191, -1191,  1467, -1191, -1191,  1468, -1191, -1191, -1191, -1191,
 +   -1191,  1925,  2334,  1469,  1470,    18, -1191,  1471,  7103,    17,
 +   -1191,  1473,  1478,  1479,  1480,  3649,  2334,  6547,  6573,   639,
 +   -1191,  2334,  1472, -1191, -1191,   527, -1191,  6599,  4993,  7863,
 +   -1191, -1191,  2334,  2334,   101,  1481,  1482,  1483, -1191,  2334,
 +    2334, -1191, -1191,  1484,  2334, -1191, -1191,  1488,  1491,  1314,
 +    1493,  1371,  2334, -1191,  1494,  3649,  3649,  3649,  3649,  1496,
 +     756,  1497,  2334, -1191,  4993,  5463,  7758,  4491,   129,   129,
 +     101,  1498,   101,  1501,   101,  1502,  2334,    95,  1326,  7779,
 +   -1191, -1191, -1191, -1191,  5491,   300, -1191,  1505,  2761,  1506,
 +    3649,   101,  2761,  1507,   648,  2334, -1191,  1508,   201, -1191,
 +   -1191, -1191,  3649,  4937,   136,  7800, -1191, -1191,  4584,  3649,
 +   -1191,  3649, -1191, -1191,  1339,  3121,  4760,  1515,  2531, -1191,
 +    1520,  1522, -1191,  1357, -1191, -1191, -1191, -1191, -1191,  1523,
 +     454,  7863,  2334,  2334,  3649,  1350,   649,  7863, -1191,  1530,
 +    2334,  7863, -1191,  5519,  5547,   321, -1191, -1191, -1191,  5575,
 +    5603, -1191,  5631,  1532, -1191,  3649, -1191,  1474,  1533,  7863,
 +   -1191,  1535,  1539,  1540,  1541, -1191,  1364, -1191, -1191,  6078,
 +    3066,  1543,  1368, -1191,  2334, -1191,  1373,  1377,   329, -1191,
 +    1379,   347, -1191,  1380,   377, -1191,  1382,  7126,  1545,  3649,
 +    1558,  1386,  2334, -1191,  4353,   381, -1191,   652,   421,   451,
 +   -1191,  1563,  5659, -1191,  1448,  2334, -1191,  2334, -1191, -1191,
 +    4823,  3086,  1565,  1390,  1568, -1191,  2938, -1191, -1191,   527,
 +    7863, -1191, -1191, -1191,    17, -1191,  1449, -1191, -1191,  2334,
 +    6625,  6651, -1191,  3649,  2334,  1570, -1191,  6677, -1191, -1191,
 +    1572,  1573,  1574,  1575,  1577,  1580,   665,  1406, -1191, -1191,
 +   -1191, -1191, -1191,  3649,  4823, -1191, -1191,   129,  5288, -1191,
 +   -1191,  2001,  1003,  2001,  1003,  2001,  1003,  1585, -1191,   678,
 +    3649, -1191,  5687,   101,  1586,  4823,   101, -1191, -1191,  2334,
 +    5715,  5743,   690, -1191, -1191,  1587, -1191,   695,   340,   698,
 +    1588, -1191,  1411,  7863,  2334,  2334,   715,  7863, -1191,  2334,
 +     716,   729, -1191, -1191, -1191, -1191, -1191, -1191,  1412,  2334,
 +     730,   737,  1436,  2334, -1191,  5771,   468,   782,  5799,   486,
 +     934,  5827,   508,  1155, -1191,  3649,  1592,  1537,  3336,  1441,
 +     517, -1191,   741,   536,  3594, -1191, -1191,  1620, -1191,  2334,
 +   -1191,  1925, -1191, -1191,  2334,  7821,  6703,    27,  6729, -1191,
 +   -1191,  2334,  5855,  1621,  1624, -1191,  5883,  1625,  2334,  1627,
 +    1629,  2334,  1630,  1632,  2334,  1633,  1475, -1191,  2334, -1191,
 +    1003, -1191,  4823,  1635,  4353, -1191, -1191,   794, -1191,   744,
 +   -1191,  2334, -1191,  3649,  2334,  6755, -1191, -1191, -1191, -1191,
 +   -1191,  1477,  5911, -1191, -1191,  1487,  5939, -1191, -1191,  1489,
 +    5967, -1191,  1652,  3613,  1270,  3512,   761, -1191,   538,   762,
 +    1925,  1653,  1490,  7842,   766,  5995,  2334,  1003,  1657,  1003,
 +    1659,  1003,  1660, -1191, -1191, -1191, -1191,  1003,  1662,  4823,
 +    1664, -1191, -1191,   527, -1191,  1492,  1666,  6023,  1419, -1191,
 +    1495,  1811, -1191,  1511,  1873, -1191,  1524,  1979, -1191,   786,
 +   -1191,   795, -1191,  1542,  3649, -1191,  1669,  1684,  1003,  1686,
 +    1003,  1698,  1003, -1191,  1700,   527,  1701,   527,   796, -1191,
 +   -1191,  2012, -1191,  2102, -1191,  2192, -1191, -1191, -1191,   800,
 +   -1191,  1717,  1722,  1727,  1728,   527,  1735, -1191, -1191, -1191,
 +   -1191, -1191, -1191
++=======
+ #define YYPACT_NINF -1266
+ static const yytype_int16 yypact[] =
+ {
+     6317,    59,    44,  6434, -1266, -1266,  3274,   119,   -55,   -39,
+      -25,    39,   158,   202,   212,    78,   283,   297,   172,   188,
+     -148,   197,   221,     2,   240,   243,    14,   250,   253,   315,
+      372,   378,   456,   270,   342,   406,   416,    22,   445,   246,
+      329,   102,   360,   460,   -54,   361,   123,   123,   400,   338,
+       63,    72,   483,   529,    13,    21,   554,   558,   120,   624,
+      631,   638,  4042,   655,   484,   507,   514,    26,    56, -1266,
+      524, -1266,   646,   678,   528, -1266,   665,   713,    31,    33,
+    -1266, -1266, -1266,  6180, -1266, -1266, -1266, -1266, -1266, -1266,
+    -1266, -1266, -1266, -1266, -1266, -1266, -1266, -1266, -1266,     5,
+    -1266,  -126,    90, -1266,    -1, -1266, -1266, -1266, -1266,   -62,
+      -62,   -62,   -62,   -62,   -62,   -62,   -62,   -62,   -62,   -62,
+      -62,   -62,   -62,   -62,   -62,   -62,   -62,   -62,   -62,   -62,
+      -62,   -62,   -62,   -62,   543,   597,   602,   621,   633,   653,
+      -62,   658, -1266,   -62, -1266, -1266, -1266, -1266,   -62,   -62,
+      739,   661,   670,   682,   685,   707, -1266, -1266, -1266,  6180,
+     6180,  6180,  6180,   995,     8,   665,    62,   694,   770,   163,
+    -1266,   771,   790,  -115,   -34,   889,  6180,   550,   550, -1266,
+     6180, -1266, -1266, -1266,   550, -1266, -1266, -1266, -1266,  6180,
+     5953,  6180,  6180,   721,  6180,  5953,  6180,  6180,   734,  5953,
+     6180,  6180,  4821,   801,   788, -1266,  5953,  4042,  4042,  4042,
+      816,   819,  4042,  4042,  4042,   826,   827,   850,   851,   852,
+      853,   854,   856,  4821,  6180,   805,  4821,    26,   855,   857,
+      123,   123,   123,  6180,  6180,   -77, -1266,   127,   123,   858,
+      859,   860,  5721,   251,   131,   868,   876,   878,  4042,  4042,
+     4821,   879,    52,   880, -1266,  1032, -1266,   877,   881,   882,
+     4042,  4042,   885,   896,   897,   570, -1266,   898,    29,    15,
+       16,    17,   615,  5001,  6180,  3675, -1266, -1266,  3455, -1266,
+     1033, -1266,   -11,   166,  1076,  6180,  6180,  6180,   899,  6180,
+      903,   958,  6180,  6180, -1266, -1266,  6180,   905,   906,  1091,
+    -1266,  1092, -1266,  1095, -1266,   -98,  1152, -1266,  4821,  4821,
+    -1266,  6127,   915,   916,  1478, -1266, -1266, -1266, -1266, -1266,
+    -1266,  4821,  1099,   923,  6180,  1103, -1266,  6180,  6180,  6180,
+     6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,
+     6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,   550,
+      550,   550,   550,   550,   550,  4821,   550,   550,  6180,   550,
+      550,  6180,  1478,  6180,   550,   550,   550,   665,  1478,   930,
+      930,   930,  8580,   237,  8235,   229,   926,  1122,   947,   943,
+    -1266,   945,  4246,  6180,  5953, -1266,  6180,  6180,  6180,  6180,
+     6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,  6180,
+     6180, -1266, -1266,  6180, -1266, -1266,  1301,    -5,   352, -1266,
+    -1266,   369,  3314, -1266,   449,   195,   227,  8601,  5953,  3623,
+    -1266,   -51,  8622,  8643,  6180,  8664,   272,  8685,  8706,  6180,
+      319,  8727,  8748,  1125,  6180,  6180,   333,  1130,  1131,  1132,
+     6180,  6180,  1133,  1135,  1135,  6180,  5779,  5779,  5779,  5779,
+     6180,  6180,  6180,  1136,  6985,   957,  1138,   959, -1266, -1266,
+      -88, -1266, -1266,  7065,  7091,   123,   123,    62,    62,   137,
+     6180,  6180,  6180,  5721,  5721,  6180,  4246,   196, -1266,  6180,
+     6180,  6180,  6180,  6180,  1139,  1147,  1148,  6180,  1150, -1266,
+     6180,  6180,  1352, -1266,  5953,  5953,  5953,  1151,  1153,  6180,
+     6180,  6180,  6180,  1141,   434,   665, -1266,  1104,  6180, -1266,
+     1111, -1266,  1112, -1266,  1113,    34,    36,    37,    38,  5953,
+      930, -1266,  8769, -1266,   391,  6180,  5181, -1266,  6180,   488,
+    -1266,  8790,  8811,  8832,  1034,  7117, -1266,   976,  3642,  8853,
+     8258, -1266, -1266,  1517, -1266,  1867,  6180, -1266,   986,   452,
+      237,  8281,  6180,  5953,  1163,  1164, -1266,  6180,  8304,   213,
+     4128,  4128,  4128,  4128,  4128,  4128,  4128,  4128,  4128,  4128,
+     4128,  7143,  4128,  4128,  4128,  4128,  4128,  4128,  4128,  7169,
+     7195,  7221,   106,   395,   106,   990,   991,   988,   993,   998,
+     1002,  7247,   471,    81,  9294, -1266,  1625,  1003,   996,  1004,
+     1000,  1013,   237, -1266,  4821,   181,  1478,  6180,  1171,  1193,
+       27,  1015, -1266,   135,    19,    28,   177, -1266,  4551,   486,
+     3810,   754,  1333,   769,   769,   565,   565,   565,   565,   540,
+      540,   930,   930,   930,   930,     6,  8327, -1266,  6180,  1196,
+       45,  5953,  1198,  5953,  6180,  1199,   550,  1200, -1266,   665,
+     1201,   550,  1195,  5953,  5953,  1074,  1202,  1205,  8874,  1206,
+     1080,  1208,  1209,  8895,  1083,  1212,  1213,  6180,  8916,  4610,
+     1035, -1266, -1266, -1266,  8937,  8958,  6180,  4821,  1218,  1220,
+     8979,  1045,  9294, -1266,  1047,  9294, -1266,  1048,  9294, -1266,
+     1050,  9294, -1266,  9000,  9021,  9042,  4821,  5953,  1049, -1266,
+    -1266,  2020,  2143,   123,  6180,  6180, -1266, -1266,  1051,  1052,
+     5721,  7273,  7299,  7325,  7039,   366,   123,  2344,  9063,  4766,
+     9084,  9105,  9126,  6180,  1230, -1266,  6180,  9147, -1266,  8350,
+     8373, -1266,   534,   560,   578, -1266, -1266,  8396,  8419,  7351,
+     8442,   166, -1266, -1266,  5953, -1266,  1053,  1054,  4946,  1056,
+     1057,  1061, -1266,  5953, -1266,  5953, -1266,  5953, -1266,  5953,
+      581, -1266, -1266,  3831,  5953,   930, -1266,  5953, -1266,  1228,
+     1231,  1247,  1077,  6180,  2513,  6180,  6180, -1266,    43, -1266,
+    -1266,  1078,  4821,  1263,  4821,   259,  5126,   584, -1266, -1266,
+     8465,  1046, -1266, -1266, -1266, -1266, -1266, -1266, -1266, -1266,
+    -1266, -1266, -1266, -1266,  6180, -1266, -1266, -1266, -1266, -1266,
+    -1266, -1266,  6180,  6180,  6180, -1266,  5953, -1266, -1266, -1266,
+    -1266,   550,  4821,   550,   550,  1478, -1266, -1266, -1266, -1266,
+    -1266,  6180, -1266,   550, -1266, -1266,  6180,  1265,   130,  6180,
+     1268,  1269,  1664, -1266,  1271,  1093,    26,  1273, -1266,  5953,
+     5953,  5953,  5953, -1266,    81,  6180, -1266,  1100,  1101,  1096,
+    -1266,  1279, -1266, -1266, -1266, -1266, -1266,   166,  8488, -1266,
+    -1266,  1118,   550,   503, -1266,   517,  7377, -1266, -1266, -1266,
+     1281, -1266, -1266,   123,  3623, -1266,   700,  4821,  4821,  1282,
+     4821,   701,  4821,  4821,  1288,  1225,  4821,  4821,  1896,  1296,
+     1299,  5953,  1302,  1303,  2868, -1266, -1266,  1305, -1266,  1321,
+      237,   237,   237,   237,  1322,  1326,  1328,  1306,   595,  1298,
+     2582, -1266, -1266,   273,  7403,  7429, -1266, -1266,  5306,  -109,
+      123,   123,   123,  1304,  1331,  1175,  1360,  1186,    18,    42,
+       47,    48,   546, -1266,   300, -1266,   366,  1363,  1368,  1369,
+     1372,  1373,  9294, -1266,  1953,  1187,  1376,  1377,  1378,  1311,
+     6180,  1381,  1382,  6180,   285,   600, -1266,  6180, -1266,  6180,
+     6180,  6180,   603,   604,   608,   612, -1266,  6180,   616,   623,
+     4821,  4821,  4821,  1385,  7455, -1266,  3999,   953,  1386,  1387,
+     4821,  1203, -1266,  1388,  6180,  1389, -1266,    81,  1391,  1394,
+    -1266,  1393,  4128,  4128,  4128,  4128,   423,  1214,  1226,  1227,
+     1232,  1215,   547,   575,  9168,  1234,  2144, -1266,   290,  1222,
+     1411,  2277, -1266, -1266, -1266,    26,  6180, -1266,   628, -1266,
+      635,   636,   639,   640,   237,  9294,  1238,  6180,  6180,  4821,
+     1242, -1266, -1266,  1250, -1266,  1426,    75,  1432,  6180,  4222,
+       68,  1254,  1255,  1365,  1365,  4821,  1441,  1264,  1266,  1447,
+     1451,  4821,  1270,  1454,  1455, -1266,  1457,  4821,   644,  4821,
+     4821,  1473,  1479, -1266,  4821,  4821,  4821,  4821,  4821,  4821,
+     4821,  4821, -1266,  1480,   726, -1266,  6180,  6180,  6180,  1300,
+     1307,  -101,   -46,    84,  1313, -1266,  4821, -1266,  6180, -1266,
+     1483, -1266,  1484, -1266,  1504, -1266,  1506, -1266, -1266,  5721,
+      591,  4402, -1266,  1327,  1336,  5361, -1266,  5953, -1266, -1266,
+    -1266,  1337,  2377, -1266, -1266,  8511,  1482,    81,  7481,  7507,
+     7533,  7559, -1266, -1266, -1266, -1266,  9294, -1266,    81,  1508,
+     1521,  1398, -1266,  6180,  6180,  6180, -1266,  1527,   901,  1349,
+     1531, -1266,  2514, -1266,   237, -1266,   350, -1266, -1266, -1266,
+    -1266, -1266, -1266,   550, -1266, -1266, -1266,  1478,  1536, -1266,
+    -1266,  1538, -1266, -1266, -1266, -1266, -1266,  1478,  6180,  1537,
+     1540,    27, -1266,  1541,  8534,    26, -1266,  1542,  1543,  1545,
+     1546,  4821,  6180,  7585,  7611,   648, -1266,  6180,  1549, -1266,
+    -1266,   550, -1266,  7637,  5779,  9294, -1266, -1266,  6180,  6180,
+      123,  1548,  1550,  1551, -1266,  6180,  6180, -1266, -1266,  1552,
+     6180, -1266, -1266,  1556,  1557,  1358,  1558,  1421,  6180, -1266,
+     1560,  1561,  1562,  1563,  1564,  1565,   834,  1566,  6180, -1266,
+     5779,  5486,  9189,  3228,    62,    62,   123,  1567,   123,  1568,
+      123,  1570,  6180,   112,  1390,  9210, -1266, -1266, -1266, -1266,
+     5690,   317, -1266,  1572,  3488,  1573,  4821,   123,  3488,  1575,
+      663,  6180, -1266,  1576,   166, -1266,  6180,  6180,  6180,  6180,
+    -1266, -1266, -1266,  4821,  4178,   396,  9231, -1266, -1266,  4582,
+     4821, -1266, -1266,  4821, -1266,  1401,    81,  3862,  4641,  1578,
+     2948, -1266,  1588,  1591, -1266,  1413, -1266, -1266, -1266, -1266,
+    -1266,  1593,   561,  9294,  6180,  6180,  4821,  1412,   668,  9294,
+    -1266,  1597,  6180,  9294, -1266,  5748,  5898,   775, -1266, -1266,
+    -1266,  6085,  6425, -1266,  6453,  1602, -1266,  4821, -1266,  1539,
+     1603,  9294, -1266, -1266, -1266, -1266, -1266, -1266,  1420, -1266,
+    -1266,  7012,  3006,  1607,  1427, -1266,  6180, -1266,  1425,  1429,
+      326, -1266,  1428,   340, -1266,  1431,   343, -1266,  1433,  8557,
+     1614,  4821,  1615,  1435,  6180, -1266,  5541,   346, -1266,   672,
+      353,   412, -1266,  1618,  6481, -1266,  7663,  7689,  7715,  7741,
+     1498,  6180, -1266,  6180, -1266, -1266,  5953,  3079,  1623,  1443,
+     1624, -1266, -1266,  3675, -1266, -1266,   550,  9294, -1266, -1266,
+    -1266,    26, -1266,  1501, -1266, -1266,  6180,  7767,  7793, -1266,
+     4821,  6180,  1628, -1266,  7819, -1266, -1266,  1629,  1631,  1633,
+     1635,  1636,  1640,   675,  1459, -1266,  4821,  5953, -1266, -1266,
+       62,  4347, -1266, -1266,  5721,   366,  5721,   366,  5721,   366,
+     1642, -1266,   683,  4821, -1266,  6509,   123,  1643,  5953,   123,
+    -1266, -1266,  6180,  6180,  6180,  6180,  6180,  6537,  6565,   684,
+    -1266, -1266,  1646, -1266,   687,  3436,   688,  1647, -1266,  1466,
+     9294,  6180,  6180,   691,  9294, -1266,  6180,   692,   714, -1266,
+    -1266, -1266, -1266, -1266, -1266,  1467,  6180,   727,   746,  1468,
+     6180, -1266,  6593,   415,   795,  6621,   437,  1142,  6649,   440,
+     1182, -1266,  4821,  1650,  1569,  2789,  1470,   443, -1266,   767,
+      462,  7845,  7871,  7897,  7923,  3189, -1266, -1266,  1656, -1266,
+     6180, -1266,  1478, -1266, -1266,  6180,  9252,  7949,    46,  7975,
+    -1266, -1266,  6180,  6677,  1657,  1574, -1266,  6705,  1661,  6180,
+     1662,  1663,  6180,  1665,  1666,  6180,  1667,  1485, -1266,  6180,
+    -1266,   366, -1266,  5953,  1669,  5541,  6180,  6180,  6180,  6180,
+    -1266, -1266,   800, -1266,   768, -1266,  6180, -1266,  4821,  6180,
+     8001, -1266, -1266,  4821,  1671, -1266, -1266,  1491,  6733, -1266,
+    -1266,  1492,  6761, -1266, -1266,  1493,  6789, -1266,  1676,  3209,
+     1295,  2825,   796, -1266,   473,   799,  8027,  8053,  8079,  8105,
+     1478,  1677,  1496,  9273,   802,  6817,  6180, -1266, -1266,   366,
+     1679,   366,  1680,   366,  1681, -1266, -1266, -1266, -1266,   366,
+     1687,  5953,  1689,  6180,  6180,  6180,  6180, -1266, -1266,   550,
+    -1266,  1509,  1690,  6845,  2048, -1266,  1510,  2070, -1266,  1512,
+     2083, -1266,  1514,  2237, -1266,   803, -1266,  8131,  8157,  8183,
+     8209,   806, -1266,  1515,  4821, -1266,  1701,  1702,   366,  1704,
+      366,  1705,   366, -1266,  1706,  6180,  6180,  6180,  6180,   550,
+     1707,   550,   807, -1266, -1266,  2286, -1266,  2420, -1266,  2602,
+    -1266,  6873,  6901,  6929,  6957, -1266, -1266,   814, -1266,  1708,
+     1710,  1711,  1716, -1266, -1266, -1266, -1266,   550,  1725, -1266,
+    -1266, -1266, -1266, -1266, -1266
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  /* YYPGOTO[NTERM-NUM].  */
  static const yytype_int16 yypgoto[] =
  {
++<<<<<<< HEAD
 +   -1191, -1191, -1191, -1191,   745, -1191, -1191, -1191, -1191,   279,
 +   -1191, -1191, -1191, -1191, -1191, -1191, -1191, -1191, -1191, -1191,
 +   -1191, -1191,  -352,   -72,  4949,  -477, -1191,  1344, -1191, -1191,
 +   -1191, -1191, -1191,   386, -1191,   391, -1191,  -296, -1191,   743,
 +    1742, -1191, -1191, -1191, -1191,     3,  -449,  -235, -1191, -1191,
 +   -1191, -1191, -1191, -1191,  1748, -1191, -1191, -1191, -1191, -1191,
 +   -1191, -1191, -1191, -1191, -1191, -1191, -1191, -1191,  -892,  -884,
 +   -1191, -1191,  1319, -1191, -1191, -1191, -1191, -1191,   747, -1191,
 +   -1191,   204, -1191, -1190,  1260,  -109,  1011,   -58,  -204,   641,
 +   -1191,    35,   107, -1191,  -348,    14,    -3
++=======
+    -1266, -1266, -1266, -1266,   690, -1266, -1266, -1266, -1266,   198,
+    -1266, -1266, -1266, -1266, -1266, -1266, -1266, -1266, -1266, -1266,
+    -1266, -1266,  -338,   -73,  1229,  -460, -1266,  1318, -1266, -1266,
+    -1266, -1266, -1266,   312, -1266,   313, -1266, -1266, -1266, -1266,
+    -1266, -1266,   686,  1735,    11,  -459,  -226, -1266, -1266, -1266,
+    -1266, -1266, -1266,  1739, -1266, -1266, -1266, -1266, -1266, -1266,
+    -1266, -1266, -1266, -1266, -1266, -1266, -1266,  -942,  -881, -1266,
+    -1266,  1314, -1266, -1266, -1266, -1266, -1266, -1266,  1529, -1266,
+    -1266,     0, -1266, -1265,  2159,   287,   997,   101,  -225,   562,
+    -1266,    20,     7, -1266,  -344,    -3,    76
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule which
++<<<<<<< HEAD
 +   number is the opposite.  If zero, do what YYDEFACT says.
 +   If YYTABLE_NINF, syntax error.  */
 +#define YYTABLE_NINF -447
 +static const yytype_int16 yytable[] =
 +{
 +     101,   573,   465,   170,   314,   188,    88,   678,   679,   813,
 +     584,  1061,   587,   247,   481,  1059,   188,   100,   446,   193,
 +    1317,   282,   802,   193,   171,   293,   295,   495,   184,   313,
 +    1151,  1050,   175,  1502,     4,   185,   299,   827,   364,  1144,
 +     477,   167,   478,   285,   940,   969,   234,     5,  1052,   235,
 +     239,  1054,   236,   310,   311,  1056,   250,   394,   251,   526,
 +     243,   528,   244,  -444,   304,   752,   753,   754,   755,   756,
 +     757,   758,   759,   760,   761,   762,   172,   764,   765,   766,
 +     767,   768,   769,   770,   317,  1366,   318,   583,   775,   777,
 +     454,   455,   620,   426,   427,   428,   173,   621,   431,   432,
 +     433,   454,   455,   510,   454,   455,  1190,   632,  1191,   633,
 +     240,   454,   455,   168,   241,   207,   252,  1192,   208,  1193,
 +     209,   456,   814,   815,   816,   817,   242,   410,   218,  1041,
 +     174,   219,   415,   370,   473,   474,   419,   454,   455,   255,
 +    1051,   583,   256,   425,  1327,   248,   486,   487,   177,   226,
 +     227,   454,   455,  1194,   632,  1195,   638,  1053,   369,   228,
 +    1055,   365,   366,  1416,  1057,   371,   237,   673,   970,   971,
 +     401,   401,   310,   311,   712,   368,   713,  1059,   189,   315,
 +     714,   316,  -445,  1430,   178,   190,   163,   368,   368,   189,
 +     818,   454,   455,   249,   179,   828,   807,   828,  1002,   194,
 +    1003,   283,   803,   808,   294,   296,   496,   300,   399,   402,
 +     176,  1503,   671,   672,   301,   479,   286,  1008,   941,  1009,
 +      44,    45,    46,    47,   305,   454,   455,   222,    52,   180,
 +     793,    55,   687,   796,   306,   307,   308,   309,   310,   311,
 +     223,   224,   457,   376,   388,   389,   390,   181,  -446,   230,
 +     232,   391,   238,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   511,   389,   390,   468,   226,   227,
 +     182,   391,   586,   302,   469,   303,   454,   455,   228,   184,
 +    1308,   632,   304,   642,   734,   229,   806,   183,   306,   307,
 +     308,   309,   588,   467,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,   310,   311,
 +     454,   455,   391,  1534,   197,   795,   529,   599,   492,   454,
 +     455,  1328,   632,   163,   648,   196,   680,   386,   387,   388,
 +     389,   390,   809,   186,   985,   686,   391,   198,   401,   401,
 +     401,   401,   401,   401,   401,   401,   401,  1461,   510,   622,
 +     401,   401,   401,   580,   623,   368,   368,   368,   368,   368,
 +     368,   368,   368,   368,   868,   869,   870,   368,   368,   368,
 +     368,   306,   307,   308,   309,   310,   311,   566,   567,   568,
 +     569,   570,   571,   572,  1588,   632,   187,   724,   577,   578,
 +     579,   310,   311,   946,   199,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,   712,
 +     191,   713,   536,   391,   774,   398,   104,   454,   455,   306,
 +     307,   308,   309,  1183,  1184,   702,   703,   704,   211,   449,
 +     450,   212,   192,  1037,   213,   877,   214,   458,   784,   310,
 +     311,   466,   618,   774,   619,   195,   722,   583,   196,   163,
 +     130,   131,   132,   133,   134,   135,   454,   455,   575,   371,
 +     371,   200,   139,   140,   581,     7,     8,   454,   455,   751,
 +     625,   201,  1060,   626,   145,   744,  1103,  1104,  1105,  1106,
 +     205,  1107,  1108,  1312,   310,   311,  1113,  1116,   454,   455,
 +    1437,  1077,  1440,   712,  1443,   713,   454,   455,   377,   378,
 +     379,   380,   381,   382,   383,   384,   385,   386,   387,   631,
 +     389,   390,  1381,   797,   454,   455,   391,   593,    20,    21,
 +     594,    23,    24,   595,    26,   596,    28,   742,    29,   743,
 +    1383,   398,   104,    34,    35,   206,    37,    38,    39,   632,
 +     202,   811,    42,   203,   454,   455,   204,  1121,   454,   455,
 +    1227,  1228,   997,  1059,   148,   149,  1059,   632,   628,  1059,
 +    1385,   626,   210,   830,  1393,   832,   130,   131,   132,   133,
 +     134,   135,   632,  1091,   915,    63,    64,    65,   139,   140,
 +     220,   632,   712,   916,   713,   310,   311,   776,   454,   455,
 +     145,   632,   950,   917,   306,   307,   308,   309,  1524,   978,
 +     221,  1219,   215,   890,  1395,   216,   712,   217,   713,   875,
 +     632,   632,   929,   891,   310,   311,   225,  1122,   454,   455,
 +     998,   892,   893,   894,   835,   632,   401,   895,   896,   897,
 +     898,   233,  1348,  1135,  1396,   454,   455,  1349,   701,   751,
 +    1059,   368,   632,   368,   945,  1558,   632,  1561,  1034,  1564,
 +     632,  1478,  1078,   454,   455,  1567,   922,   245,   676,   677,
 +     925,   926,   927,   928,   837,   632,   450,  1079,   931,  1481,
 +     148,   149,   246,   947,  1059,   454,   455,  1059,   951,   632,
 +    1059,  1080,   253,  1059,   454,   455,  1591,   712,  1593,   713,
 +    1595,  1484,  1112,   798,   306,   307,   308,   309,   254,   279,
 +    1492,  1058,   280,   454,   455,   454,   455,  1059,   712,  1059,
 +     713,  1059,   257,  1115,   310,   311,   258,   259,   958,  1494,
 +     632,  1549,  1081,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,   281,   278,  1296,
 +    1297,   391,   632,  1092,  1082,  1231,   287,   401,   981,   982,
 +     983,   984,   993,   165,   317,   632,   491,  1084,   492,   288,
 +    1286,   162,  1287,   163,   368,   289,   867,   867,   867,   867,
 +     344,   401,  1127,   290,  1129,   401,  1130,   291,   401,   401,
 +     401,   292,   632,   500,  1131,   952,   501,   401,   368,   502,
 +     345,   503,   368,   346,   347,   368,   368,   368,  1019,     7,
 +       8,  1530,   348,   632,   368,  1132,   632,   349,  1133,   957,
 +     632,   352,  1134,   959,   353,   354,   960,   961,   962,   632,
 +     890,  1169,  1254,   355,  1255,   966,   401,   356,   357,   298,
 +     891,   632,  1354,  1321,  1355,  1254,   367,  1394,   892,   893,
 +     894,   530,   374,   368,   895,   896,   897,   898,  1254,   951,
 +    1428,   593,    20,    21,   594,    23,    24,   595,    26,   596,
 +      28,  1445,    29,  1446,   996,   375,   392,    34,    35,   890,
 +      37,    38,    39,   632,   393,  1457,    42,   880,  1459,   891,
 +    1460,   774,   396,  1462,   886,   424,   413,   892,   893,   894,
 +     901,   418,   482,   895,   896,   897,   898,  1123,  1254,  1112,
 +    1467,  1469,   358,   359,   360,   361,   363,   444,   423,    63,
 +      64,    65,  1115,  1254,  1470,  1473,   429,   430,  1206,   397,
 +     632,   480,  1474,   403,   632,  1244,  1493,  1354,  1432,  1531,
 +     447,   406,   408,   411,   412,   434,   414,   408,   416,   417,
 +     439,   408,   420,   421,   632,   632,  1548,  1550,   408,  1254,
 +     488,  1555,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,   443,  1479,   440,   632,
 +     391,  1584,   739,   448,   441,   452,   453,   459,  1585,  1254,
 +    1586,  1601,   460,  1605,   453,  1606,   461,   470,   471,   472,
 +     476,  1409,   483,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,   484,   485,   489,
 +    1214,   391,   490,   494,   497,   505,   507,   408,   498,   499,
 +     517,   890,   512,   513,   519,   520,   514,   515,   516,  1233,
 +     518,   891,   524,   521,   522,   525,   527,   523,   533,   892,
 +     893,   894,  1001,   535,   538,   895,   896,   897,   898,   539,
 +     534,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +     541,   391,   540,   589,   391,   590,   542,   543,   544,   545,
 +     546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
 +     556,   557,   558,   559,   560,   561,   562,   563,   163,   591,
 +     890,  1042,  1043,  1044,   304,   162,   645,   574,   592,   576,
 +     891,   649,   650,   651,   659,   654,   401,  1150,   892,   893,
 +     894,   655,   660,   661,   895,   896,   897,   898,   662,  1482,
 +     666,   598,   408,   368,   600,   601,   602,   603,   604,   605,
 +     606,   607,   608,   609,   610,   611,   612,   613,   614,   668,
 +    1410,   616,   401,   669,  1234,   693,  1233,   670,   695,   718,
 +     696,   698,   705,   706,   505,   711,  1448,   716,   719,   368,
 +     636,   720,   721,   732,   735,   641,   741,   747,   617,   748,
 +     646,   647,   778,   779,   780,   781,   652,   653,   800,   801,
 +    1259,   658,   782,   783,   788,   789,   663,   664,   665,   790,
 +     791,   371,   371,   792,   826,   831,   409,   834,   805,   836,
 +     841,   409,   838,   842,   843,   409,   681,   682,   683,   358,
 +     359,   684,   409,   845,   846,   688,   689,   690,   691,   692,
 +     847,   848,   850,   697,   851,   852,   699,   700,  1237,   856,
 +     408,   408,   408,   861,   876,   707,   708,   709,   710,   863,
 +       7,     8,   890,   717,   883,   884,   910,   923,   932,   933,
 +     934,   408,   891,   935,   944,  1262,  1525,   725,   727,   942,
 +     892,   893,   894,   968,  1205,   973,   895,   896,   897,   898,
 +     974,   980,  1402,   976,   990,   992,   710,   988,   977,   506,
 +     408,   409,   746,   989,   995,  1000,   749,  1006,  1012,  1017,
 +    1018,  1291,   593,    20,    21,   594,    23,    24,   595,    26,
 +     596,    28,  1013,    29,  1020,  1021,  1024,  1026,    34,    35,
 +    1025,    37,    38,    39,  1027,  1030,  1431,    42,  1028,  1029,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,   799,  1332,   401,  1452,   391,  1031,
 +    1485,  1032,  1338,  1341,  1033,  1035,  1045,  1049,  1047,  1046,
 +      63,    64,    65,   368,  1048,  1068,  1062,   890,  1265,  1063,
 +    1072,  1064,  1065,  1066,  1069,   825,  1070,   891,   408,  1071,
 +     408,   833,  1074,  1075,  1088,   892,   893,   894,   727,   839,
 +     371,   895,   896,   897,   898,  1093,   409,  1094,  1096,  1097,
 +    1099,  1100,   853,  1101,  1298,  1109,  1301,  1102,  1304,  1110,
 +    1111,   859,  1119,  1125,  1124,  1143,   866,   866,   866,   866,
 +    1141,  1136,  1315,   740,   408,  1318,  1319,  1142,   506,  1146,
 +    1154,   881,   882,  1152,  1158,  1172,  1161,   885,  1153,  1159,
 +    1160,  1162,  1165,  1164,  1526,  1166,  1529,  1167,  1175,  1173,
 +     909,  1176,  1177,   911,  1178,  1182,  1188,  1189,  1200,  1201,
 +    1196,  1202,  1203,   787,  1218,  1545,  1210,   422,  1211,  1215,
 +    1220,   408,  1221,  1222,  1226,   408,   408,   408,   408,  1229,
 +    1230,  1235,  1236,   408,  1240,  1239,  1258,  1242,   442,  1245,
 +     936,   445,   938,   939,  1246,  1247,  1248,  1266,  1267,  1268,
 +    1271,  1569,   975,  1273,   409,   409,   409,  1274,  1275,  1276,
 +    1280,  1277,  1285,  1288,  1299,   475,   890,  1302,  1305,  1309,
 +     953,  1313,  1316,  1320,  1323,   409,   891,  1335,   954,   955,
 +     956,  1342,   728,   408,   892,   893,   894,  1344,  1345,  1347,
 +     895,   896,   897,   898,  1353,   965,  1356,  1365,  1346,  1368,
 +     967,  1369,  1367,   972,   409,  1370,  1371,  1372,  1373,  1376,
 +     401,  1388,  1377,   408,   408,   408,   408,  1016,  1379,   986,
 +     531,   532,  1380,  1382,  1384,  1390,  1386,   368,  1498,  1397,
 +    1391,  1404,   537,  1399,  1406,  1405,  1418,  1411,  1422,  1423,
 +    1424,  1425,   401,  1426,   401,  1436,  1427,  1439,  1572,  1442,
 +    1429,  1444,  1451,  1458,  1463,  1464,  1471,  1450,  1487,   368,
 +    1453,   368,   401,   408,  1577,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,   368,
 +    1597,  1475,  1600,   391,  1488,  1491,  1496,  1507,     7,     8,
 +    1508,  1510,   409,  1513,   409,  1514,  1517,  1551,  1518,  1521,
 +    1611,  1527,   728,   840,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,  1543,  1552,
 +    1522,  1537,   391,  1559,  1073,  1562,  1565,  1076,  1568,  1067,
 +    1570,  1539,  1575,  1541,  1553,  1589,  1574,  1083,   409,  1578,
 +     593,    20,    21,   594,    23,    24,   595,    26,   596,    28,
 +    1590,    29,  1592,  1098,  1120,  1580,    34,    35,  1528,    37,
 +      38,    39,     7,     8,  1594,    42,  1596,  1598,  1582,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,  1607,  1128,   409,  1587,   391,  1608,   409,
 +     409,   409,   409,  1609,  1610,  1137,  1138,   409,    63,    64,
 +      65,  1612,  1145,  1499,  1420,    87,  1147,  1149,  1156,   629,
 +    1421,    95,   657,     0,   593,    20,    21,   594,    23,    24,
 +     595,    26,   596,    28,     0,    29,  1241,     0,     0,     0,
 +      34,    35,     0,    37,    38,    39,     0,     0,     0,    42,
 +       0,     0,     0,     0,  1185,  1186,  1187,   409,     0,     0,
 +       0,     0,     0,     0,  1197,     0,  1199,     0,     0,     0,
 +       0,   878,     0,     0,     0,     0,     0,  1204,     0,     0,
 +       0,     0,    63,    64,    65,   408,     0,   409,   409,   409,
 +     409,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,  1223,  1224,  1225,   391,
 +       0,     0,     0,     0,   794,     0,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,     0,     0,   409,     0,  1238,
 +       0,     0,     0,     0,     0,   879,     0,     0,     0,     0,
 +       0,     7,     8,  1251,     0,     0,     0,     0,  1257,     0,
 +       0,     0,     0,     0,     0,  1261,     0,     0,   890,  1263,
 +    1264,     0,     0,     0,     0,     0,  1269,  1270,   891,     0,
 +       0,  1272,     0,     0,     0,   860,   892,   893,   894,  1279,
 +       0,     0,   895,   896,   897,   898,   874,     0,     0,  1289,
 +     104,  1290,     0,   593,    20,    21,   594,    23,    24,   595,
 +      26,   596,    28,  1307,    29,     0,     0,     0,     0,    34,
 +      35,     0,    37,    38,    39,   408,     0,     0,    42,   408,
 +     890,     0,  1322,     0,   130,   131,   132,   133,   134,   135,
 +     891,     0,     0,     0,     0,  1331,   139,   140,   892,   893,
 +     894,     0,     0,  1340,   895,   896,   897,   898,   145,     0,
 +       0,    63,    64,    65,     0,     0,  1579,     0,     0,  1350,
 +    1351,     0,   943,     0,   102,   297,     0,  1357,     0,     0,
 +     105,   106,   107,     0,     0,   108,   109,   110,   111,   112,
 +     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
 +     123,   124,   125,   126,   127,   128,   129,     0,     0,     0,
 +       0,  1378,     0,     0,     0,     0,   136,   137,   138,     0,
 +       0,     0,     0,     0,   902,   141,   142,   143,  1581,  1392,
 +       0,   505,     0,   144,     0,     0,   890,     0,   148,   149,
 +       0,     0,  1400,     0,  1401,     0,   891,   408,     0,   409,
 +       0,     0,     0,  1408,   892,   893,   894,     0,     0,     0,
 +     895,   896,   897,   898,     0,     0,  1413,     0,     0,   890,
 +    1126,  1417,  1004,  1005,     0,  1007,     0,  1010,  1011,   891,
 +       0,  1014,  1015,     0,     0,     0,     0,   892,   893,   894,
 +       0,   408,     0,   895,   896,   897,   898,     0,  1435,     0,
 +    1438,     0,  1441,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,   408,   147,     0,     0,  1454,     0,     0,     0,
 +     150,   151,   152,   153,   154,     0,     0,     0,     0,     0,
 +       0,  1465,  1466,     0,  1583,     0,  1468,     0,   462,   463,
 +       0,     0,     0,   157,     0,     0,  1472,     0,   464,     0,
 +    1476,     0,     0,   161,     0,   229,     0,     0,     0,   890,
 +       0,     0,  1085,  1086,  1087,     0,     0,  1602,     0,   891,
 +       0,     0,  1095,     0,     0,     0,  1497,   892,   893,   894,
 +       0,  1257,     0,   895,   896,   897,   898,     0,  1505,   409,
 +       0,     0,     0,   409,     0,  1512,     0,     0,  1516,     0,
 +       0,  1520,     0,     0,     0,  1523,     0,     0,     0,   408,
 +       0,   408,     0,     0,     0,     0,     0,     0,  1533,     0,
 +    1140,  1535,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,  1157,     0,     0,     0,
 +     391,     0,  1163,     0,     0,     0,     0,     0,  1168,   890,
 +    1170,  1171,     0,  1557,     0,  1174,     0,  1603,     0,   891,
 +    1179,  1180,  1181,     0,     0,     0,   408,   892,   893,   894,
 +       0,     0,     0,   895,   896,   897,   898,  1198,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,  1209,     0,   391,   506,  1213,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,   102,   297,     0,
 +       0,   409,     0,   105,   106,   107,     0,   409,   108,   109,
 +     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
 +     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
 +     510,     0,     0,     0,     0,     0,     0,  1604,     0,   136,
 +     137,   138,     0,     0,     0,   409,     0,     0,   141,   142,
 +     143,     0,     0,     0,     0,  1249,   144,   102,   297,     0,
 +       0,     0,     0,   105,   106,   107,   409,     0,   108,   109,
 +     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
 +     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
 +       0,     0,     0,     0,     0,  1281,  1282,  1283,  1284,   136,
 +     137,   138,     0,     0,     0,     0,     0,     0,   141,   142,
 +     143,     0,     0,     0,     0,     0,   144,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +    1140,     0,   391,     0,     0,     0,   147,     0,     0,     0,
 +       0,     0,  1324,   150,   151,   152,   153,   154,     0,  1333,
 +       0,  1334,     0,     0,     0,  1337,     0,     0,     0,  1216,
 +       0,   155,   156,   409,     0,   409,   157,     0,     0,     0,
 +       0,   269,     0,     0,  1352,     0,   161,     0,  1232,     0,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   511,   389,   390,     0,  1140,   147,  1343,   391,     0,
 +       0,     0,     0,   150,   151,   152,   153,   154,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +     409,   155,   156,     0,     0,     0,   157,     0,     0,  1389,
 +       0,   269,     0,     0,   362,     0,   161,     0,   102,   103,
 +     104,     0,     0,     0,   105,   106,   107,     0,     0,   108,
 +     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
 +     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
 +     129,     0,     0,  1140,   130,   131,   132,   133,   134,   135,
 +     136,   137,   138,     0,     0,     0,   139,   140,     0,   141,
 +     142,   143,     0,  1140,     0,     0,     0,   144,   145,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +    1447,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,     0,     0,     0,     0,   391,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,  1486,     0,   391,     0,     0,
 +       0,   146,     0,     0,     0,     0,     0,   147,   148,   149,
 +       0,     0,     0,     0,   150,   151,   152,   153,   154,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,   155,   156,     0,     0,     0,   157,     0,     0,
 +       0,     0,   158,     0,   159,     0,   160,   161,     0,   162,
 +       0,   163,     0,  1140,   102,   260,     0,     0,     0,     0,
 +     105,   106,   107,     0,     0,   108,   109,   110,   111,   112,
 +     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
 +     123,   124,   125,   126,   127,   128,   129,   262,     0,     0,
 +       0,     0,     0,     0,     0,     0,   136,   137,   138,     0,
 +       0,     0,     0,     7,     8,   141,   142,   143,     0,     0,
 +       0,     0,     0,   144,     0,   263,     0,     0,   264,     0,
 +       0,   265,     0,   266,  1140,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,   267,     0,     0,     0,     0,
 +       0,     0,    44,    45,    46,    47,    48,     0,     0,     0,
 +      52,     0,     0,    55,     0,   593,    20,    21,   594,    23,
 +      24,   595,    26,   596,    28,     0,    29,     0,     0,     0,
 +       0,    34,    35,     0,    37,    38,    39,     0,     0,     0,
 +      42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,   147,     0,     0,     0,     0,     0,     0,
 +     150,   151,   152,   153,   154,     0,     0,     0,     0,     0,
 +       0,     0,     0,    63,    64,    65,     0,     0,   462,  1314,
 +       0,     0,     0,   157,     0,     0,     0,     0,   464,     0,
 +       0,   102,   260,   161,     0,   229,   508,   105,   106,   107,
 +       0,     0,   108,   109,   110,   111,   112,   113,   114,   115,
 +     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
 +     126,   127,   128,   129,   262,     0,     0,     0,     0,     0,
 +       0,     0,     0,   136,   137,   138,   937,     0,     0,     0,
 +       0,     0,   141,   142,   143,     0,     0,     7,     8,     0,
 +     144,     0,   263,     0,     0,   264,     0,     0,   265,     0,
 +     266,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,   267,     0,     0,     0,     0,     0,     0,    44,
 +      45,    46,    47,    48,     0,     0,     0,    52,     0,     0,
 +      55,     0,     0,     0,     0,     0,     0,     0,     0,   593,
 +      20,    21,   594,    23,    24,   595,    26,   596,    28,     0,
 +      29,     0,     0,     0,     0,    34,    35,     0,    37,    38,
 +      39,     0,  1375,     0,    42,     0,     0,     0,     0,     0,
 +     147,     0,     0,     0,     0,     0,     0,   150,   151,   152,
 +     153,   154,  1403,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,   155,   407,    63,    64,    65,
 +     157,     0,     0,     0,     0,   269,     0,     0,     0,     0,
 +     161,     0,     0,   508,   102,   260,   104,     0,     0,     0,
 +     105,   106,   107,     0,     0,   108,   109,   110,   111,   112,
 +     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
 +     123,   124,   125,   126,   127,   128,   129,   262,     0,     0,
 +     130,   131,   132,   133,   134,   135,   136,   137,   138,     0,
 +    1036,     0,   139,   140,     0,   141,   142,   143,     0,     0,
 +       0,     0,     0,   144,   145,   263,     0,     0,   264,     0,
 +       0,   265,     0,   266,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,   267,     0,     0,     0,     0,
 +       0,     0,    44,    45,    46,    47,    48,     0,     0,     0,
 +      52,     0,     0,    55,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,     0,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,   147,   148,   149,     0,     0,     0,     0,
 +     150,   151,   152,   153,   154,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,   155,   268,
 +       0,     0,     0,   157,     0,     0,     0,     0,   269,     0,
 +     102,   260,   261,   161,     0,  1336,   105,   106,   107,     0,
 +       0,   108,   109,   110,   111,   112,   113,   114,   115,   116,
 +     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
 +     127,   128,   129,   262,     0,     0,     0,     0,     0,     0,
 +       0,     0,   136,   137,   138,     0,     0,     0,     7,     8,
 +       0,   141,   142,   143,     0,     0,     0,     0,     0,   144,
 +       0,   263,     0,     0,   264,     0,     0,   265,     0,   266,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,   267,     0,     0,     0,     0,     0,     0,    44,    45,
 +      46,    47,    48,     0,     0,     0,    52,     0,     0,    55,
 +     593,    20,    21,   594,    23,    24,   595,    26,   596,    28,
 +       0,    29,     0,     0,     0,     0,    34,    35,     0,    37,
 +      38,    39,     0,     0,     0,    42,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,   147,
 +       0,     0,     0,     0,     0,     0,   150,   151,   152,   153,
 +     154,     0,     0,     0,     0,     0,     0,     0,    63,    64,
 +      65,     0,     0,     0,   155,   268,     0,     0,     0,   157,
 +       0,     0,     0,     0,   269,     0,   102,   260,  1207,   161,
 +       0,   270,   105,   106,   107,     0,     0,   108,   109,   110,
 +     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
 +     121,   122,   123,   124,   125,   126,   127,   128,   129,   262,
 +       0,     0,     0,     0,     0,     0,     0,     0,   136,   137,
 +     138,  1489,     0,     0,     7,     8,     0,   141,   142,   143,
 +       0,     0,     0,     0,     0,   144,     0,   263,     0,     0,
 +     264,     0,     0,   265,     0,   266,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,   267,     0,     0,
 +       0,     0,     0,     0,    44,    45,    46,    47,    48,     0,
 +       0,     0,    52,     0,     0,    55,   593,    20,    21,   594,
 +      23,    24,   595,    26,   596,    28,     0,    29,     0,     0,
 +       0,     0,    34,    35,     0,    37,    38,    39,     0,     0,
 +    1495,    42,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,   147,     0,     0,     0,  1544,
 +       0,     0,   150,   151,   152,   153,   154,     0,     0,     0,
 +       0,     0,     0,     0,    63,    64,    65,     0,     0,     0,
 +     155,   268,     0,     0,     0,   157,     0,     0,     0,     0,
 +     269,     0,   102,   260,     0,   161,     0,  1208,   105,   106,
 +     107,     0,     0,   108,   109,   110,   111,   112,   113,   114,
 +     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
 +     125,   126,   127,   128,   129,   262,     0,     0,     0,     0,
 +       0,     0,     0,     0,   136,   137,   138,  1546,     0,     0,
 +       0,     0,     0,   141,   142,   143,     0,     0,     0,     0,
 +       0,   144,     0,   263,     0,     0,   264,     0,     0,   265,
 +       0,   266,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,   267,     0,     0,     0,     0,     0,     0,
 +      44,    45,    46,    47,    48,     0,     0,     0,    52,     0,
 +       0,    55,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,     0,     0,     0,     0,
 +     391,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,   510,     0,     0,     0,   391,
 +       0,   147,     0,     0,     0,     0,     0,     0,   150,   151,
 +     152,   153,   154,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,   155,   268,     0,     0,
 +       0,   157,     0,     0,     0,     0,   269,     0,   102,   260,
 +       0,   161,     0,   270,   105,   106,   107,     0,     0,   108,
 +     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
 +     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
 +     129,   262,     0,     0,     0,     0,     0,     0,     0,     0,
 +     136,   137,   138,     0,     0,     0,     0,     0,     0,   141,
 +     142,   143,     0,     0,     0,     0,     0,   144,     0,   263,
 +       0,     0,   264,     0,     0,   265,     0,   266,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,   267,
 +       0,     0,     0,     0,     0,     0,    44,    45,    46,    47,
 +      48,     0,     0,     0,    52,     0,     0,    55,     0,     0,
 +       0,     0,     0,     0,     0,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   631,   389,   390,     0,
 +       0,     0,     0,   391,   736,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,   147,     0,     0,
 +       0,     0,     0,   812,   150,   151,   152,   153,   154,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,   155,   407,     0,     0,     0,   157,     0,     0,
 +       0,     0,   269,     0,   102,   260,     0,   161,     0,   504,
 +     105,   106,   107,     0,     0,   108,   109,   110,   111,   112,
 +     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
 +     123,   124,   125,   126,   127,   128,   129,   262,     0,     0,
 +       0,     0,     0,     0,     0,     0,   136,   137,   138,     0,
 +       0,     0,     0,     0,     0,   141,   142,   143,     0,     0,
 +       0,     0,     0,   144,     0,   263,     0,     0,   264,     0,
 +       0,   265,     0,   266,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,   267,     0,     0,     0,     0,
 +       0,     0,    44,    45,    46,    47,    48,     0,     0,     0,
 +      52,     0,     0,    55,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,   930,     0,     0,
 +       0,   391,     0,   147,     0,     0,     0,     0,     0,     0,
 +     150,   151,   152,   153,   154,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,   155,   407,
 +       0,     0,     0,   157,     0,     0,     0,     0,   269,     0,
 +     102,   260,     0,   161,     0,   726,   105,   106,   107,     0,
 +       0,   108,   109,   110,   111,   112,   113,   114,   115,   116,
 +     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
 +     127,   128,   129,   262,     0,     0,     0,     0,     0,     0,
 +       0,     0,   136,   137,   138,     0,     0,     0,     0,     0,
 +       0,   141,   142,   143,     0,     0,     0,     0,     0,   144,
 +       0,   263,     0,     0,   264,     0,     0,   265,     0,   266,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,   267,     0,     0,     0,     0,     0,     0,    44,    45,
 +      46,    47,    48,     0,     0,     0,    52,     0,     0,    55,
 +       0,     0,     0,     0,     0,     0,     0,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,  1090,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,   147,
 +       0,     0,     0,     0,     0,     0,   150,   151,   152,   153,
 +     154,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,   155,   268,     0,     0,     0,   157,
 +       0,     0,     0,     0,   269,     0,   102,   260,     0,   161,
 +       0,  1212,   105,   106,   107,     0,     0,   108,   109,   110,
 +     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
 +     121,   122,   123,   124,   125,   126,   127,   128,   129,   262,
 +       0,     0,     0,     0,     0,     0,     0,     0,   136,   137,
 +     138,     0,     0,     0,  1022,     0,     0,   141,   142,   143,
 +       0,     0,     0,     0,     0,   144,     0,   263,     0,     0,
 +     264,     0,     0,   265,     0,   266,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,   267,     0,     0,
 +       0,     0,     0,     0,    44,    45,    46,    47,    48,     0,
 +       0,     0,    52,     0,     0,    55,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,   147,     0,     0,     0,     0,
 +       0,     0,   150,   151,   152,   153,   154,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +     462,  1314,     0,     0,     0,   157,     0,     0,     0,     0,
 +     464,     0,   102,   297,   104,   161,     0,   229,   105,   106,
 +     107,     0,     0,   108,   109,   110,   111,   112,   113,   114,
 +     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
 +     125,   126,   127,   128,   129,     0,     0,     0,   130,   131,
 +     132,   133,   134,   135,   136,   137,   138,     0,     0,     0,
 +     139,   140,     0,   141,   142,   143,     0,   102,   297,   104,
 +       0,   144,   145,   105,   106,   107,     0,     0,   108,   109,
 +     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
 +     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
 +       0,     0,     0,   130,   131,   132,   133,   134,   135,   136,
 +     137,   138,     0,     0,     0,   139,   140,     0,   141,   142,
 +     143,     0,     0,     0,     0,     0,   144,   145,     0,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,   147,   148,   149,  1294,     0,  1295,     0,   150,   151,
 +     152,   153,   154,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,   155,   156,     0,     0,
 +       0,   157,     0,     0,     0,     0,   269,     0,     0,     0,
 +       0,   161,     0,  1148,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,   147,   148,   149,     0,
 +       0,     0,     0,   150,   151,   152,   153,   154,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,   155,   156,     0,     0,     0,   157,     0,     0,     0,
 +       0,   269,     0,   102,   297,   104,   161,     0,  1330,   105,
 +     106,   107,     0,     0,   108,   109,   110,   111,   112,   113,
 +     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
 +     124,   125,   126,   127,   128,   129,     0,     0,     0,   130,
 +     131,   132,   133,   134,   135,   136,   137,   138,     0,     0,
 +       0,   139,   140,     0,   141,   142,   143,     0,     0,     0,
 +       0,     0,   144,   145,     0,     0,   102,   260,     0,     0,
 +       0,     0,   105,   106,   107,     0,     0,   108,   109,   110,
 +     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
 +     121,   122,   123,   124,   125,   126,   127,   128,   129,   262,
 +       0,     0,     0,     0,     0,     0,     0,     0,   136,   137,
 +     138,     0,     0,     0,     0,     0,     0,   141,   142,   143,
 +       0,     0,     0,     0,     0,   144,     0,   263,     0,     0,
 +     264,     0,     0,   265,     0,   266,     0,     0,     0,     0,
 +       0,     0,   147,   148,   149,     0,     0,   267,     0,   150,
 +     151,   152,   153,   154,    44,    45,    46,    47,    48,     0,
 +       0,     0,    52,     0,     0,    55,     0,   155,   156,     0,
 +       0,     0,   157,     0,     0,     0,     0,   269,     0,     0,
 +       0,     0,   161,     0,  1339,     0,     0,     0,     0,     0,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,     0,   147,     0,     0,   391,     0,
 +       0,     0,   150,   151,   152,   153,   154,   810,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +     155,   407,     0,     0,     0,   157,   102,   297,   104,     0,
 +     269,     0,   105,   106,   107,   161,     0,   108,   109,   110,
 +     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
 +     121,   122,   123,   124,   125,   126,   127,   128,   129,     0,
 +       0,     0,   130,   131,   132,   133,   134,   135,   136,   137,
 +     138,     0,     0,     0,   139,   140,     0,   141,   142,   143,
 +       0,     0,     0,     0,     0,   144,   145,   319,   320,   321,
 +     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
 +     332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
 +     342,   343,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,   350,   351,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +    1325,     0,  1326,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,   147,   148,   149,     0,     0,
 +       0,     0,   150,   151,   152,   153,   154,     0,     0,     0,
 +      -4,     1,     0,     0,    -4,     0,     0,     0,     0,     0,
 +     155,   156,    -4,    -4,     0,   157,     0,     0,     0,     0,
 +     269,     0,     0,     0,     0,   161,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,    -4,    -4,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,    -4,    -4,
 +      -4,     0,     0,    -4,     0,     0,     0,    -4,    -4,   493,
 +      -4,    -4,     0,     0,    -4,    -4,    -4,    -4,    -4,    -4,
 +      -4,    -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,    -4,
 +      -4,    -4,    -4,    -4,    -4,     0,     0,     0,    -4,    -4,
 +      -4,     0,     0,     0,     0,     0,    -4,     6,     0,     0,
 +       0,    -4,    -4,    -4,    -4,     7,     8,    -4,     0,    -4,
 +       0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
 +      -4,    -4,     0,     0,     0,    -4,    -4,    -4,    -4,     0,
 +       9,    10,     0,     0,     0,     0,     0,     0,     0,     0,
 +       0,    11,    12,    13,     0,     0,    14,     0,     0,     0,
 +      15,    16,     0,    17,    18,     0,     0,    19,    20,    21,
 +      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
 +      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
 +       0,    41,    42,    43,    44,    45,    46,    47,    48,    49,
 +      50,    51,    52,    53,    54,    55,    56,    57,     7,     8,
 +       0,    58,    59,    60,     0,     0,     0,     0,     0,    61,
 +       0,     0,     0,     0,    62,    63,    64,    65,     0,     0,
 +      66,     0,    67,     0,    68,    69,    70,    71,    72,    73,
 +      74,    75,    76,    77,    78,     0,     0,     0,    79,    80,
 +      81,    82,     0,     0,     0,     0,     0,     0,     0,     0,
 +     593,    20,    21,   594,    23,    24,   595,    26,   596,    28,
 +       0,    29,     0,     0,     0,     0,    34,    35,     0,    37,
 +      38,    39,     0,     0,     0,    42,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,     0,     0,     0,     0,     0,
 +       0,  1433,     0,  1434,     0,     0,     0,     0,    63,    64,
 +      65,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,     0,     0,   855,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,     0,     0,   905,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,     0,     0,   924,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +       0,     0,   948,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,     0,     0,
 +    1040,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,     0,     0,  1292,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,     0,     0,  1311,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,     0,     0,  1360,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +       0,     0,  1361,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,     0,     0,
 +    1362,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,     0,     0,  1363,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,     0,     0,  1364,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,     0,     0,  1398,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +       0,     0,  1449,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,     0,     0,
 +    1455,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,     0,     0,  1456,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,     0,     0,  1477,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,     0,     0,  1480,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +       0,     0,  1483,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,     0,     0,
 +    1506,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,     0,     0,  1509,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,     0,     0,  1538,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,     0,     0,  1540,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +       0,     0,  1542,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,     0,     0,
 +    1556,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,     0,     0,  1576,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,     0,   667,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,     0,     0,     0,     0,     0,
 +       0,     0,  1374,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,   723,     0,     0,     0,     0,   674,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,   624,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +     674,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,   675,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,   733,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,   763,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,   771,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +     772,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,   773,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,   887,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,   888,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,   889,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +     920,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,   999,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,  1038,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,  1039,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,  1089,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +    1252,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,  1253,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,  1260,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,  1414,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,     0,     0,     0,  1415,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
 +    1419,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,     0,     0,     0,  1501,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,     0,
 +       0,     0,  1504,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,     0,     0,     0,  1536,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,   712,
 +       0,   713,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,     0,     0,     0,     0,
 +     391,     0,     0,     0,   585,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,   738,   377,   378,
 +     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
 +     389,   390,     0,     0,     0,     0,   391,     0,     0,     0,
 +     745,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,   750,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,     0,     0,     0,   824,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,     0,     0,   913,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,     0,     0,     0,     0,   391,     0,
 +       0,     0,   914,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,     0,     0,   918,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,     0,     0,     0,   919,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,     0,
 +       0,   921,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,     0,     0,     0,     0,
 +     391,     0,     0,     0,   949,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,     0,     0,   994,   377,   378,
 +     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
 +     389,   390,     0,     0,     0,     0,   391,     0,     0,     0,
 +    1217,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,     0,     0,  1243,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,     0,     0,     0,  1387,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,   582,   377,   378,
 +     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
 +     389,   390,     0,     0,     0,     0,   391,     0,   630,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,   634,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,     0,     0,     0,     0,   391,     0,
 +     635,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,   637,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,     0,     0,     0,     0,
 +     391,     0,   639,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,   640,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,     0,   643,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,   644,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,     0,   723,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,   729,   377,   378,
 +     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
 +     389,   390,     0,     0,     0,     0,   391,     0,   730,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,   731,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,     0,     0,     0,     0,   391,     0,
 +     737,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,   844,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,     0,     0,     0,     0,
 +     391,     0,   849,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,   854,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,     0,   857,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,   858,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,     0,   864,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,   871,   377,   378,
 +     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
 +     389,   390,     0,     0,     0,     0,   391,     0,   872,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,   873,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,     0,     0,     0,     0,   391,     0,
 +     904,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391,
 +       0,   906,   377,   378,   379,   380,   381,   382,   383,   384,
 +     385,   386,   387,   388,   389,   390,     0,     0,     0,     0,
 +     391,     0,   907,   377,   378,   379,   380,   381,   382,   383,
 +     384,   385,   386,   387,   388,   389,   390,     0,     0,     0,
 +       0,   391,     0,   908,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,     0,     0,
 +       0,     0,   391,     0,   912,   377,   378,   379,   380,   381,
 +     382,   383,   384,   385,   386,   387,   388,   389,   390,     0,
 +       0,     0,     0,   391,     0,  1118,   377,   378,   379,   380,
 +     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
 +       0,     0,     0,     0,   391,     0,  1293,   377,   378,   379,
 +     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
 +     390,     0,     0,     0,     0,   391,     0,  1310,   377,   378,
 +     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
 +     389,   390,     0,     0,     0,     0,   391,     0,  1329,   377,
 +     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
 +     388,   389,   390,     0,     0,     0,     0,   391,     0,  1500,
 +     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
 +     387,   388,   389,   390,     0,     0,     0,     0,   391,     0,
 +    1554,   377,   378,   379,   380,   381,   382,   383,   384,   385,
 +     386,   387,   388,   389,   390,     0,     0,     0,     0,   391
++=======
+    number is the opposite.  If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -464
+ static const yytype_int16 yytable[] =
+ {
+      101,  1379,   457,   323,  1110,   582,   193,   584,   708,   709,
+      856,   307,   375,   172,    89,   592,   476,   252,   198,   176,
+      509,   511,   513,   193,  1099,   255,   171,   256,   492,   322,
+      288,   845,   198,   189,   506,   604,   301,   607,   303,   752,
+      190,   754,   756,   758,     5,   179,   235,   237,  1101,   243,
+      988,   870,  1577,  1103,  1105,   310,   488,   311,   489,   282,
+      291,  1108,   465,   466,   312,     4,   379,   244,   403,   768,
+      465,   466,  1433,   298,  1207,   312,   543,   227,   545,   102,
+     1090,  1200,   174,   465,   466,   546,  1246,   503,  1247,   257,
+      228,   229,   167,   212,   465,   466,   213,   314,   214,   703,
+      793,   794,   795,   796,   797,   798,   799,   800,   801,   802,
+      803,   467,   805,   806,   807,   808,   809,   810,   811,   310,
+      525,   326,   815,   817,   818,   465,   466,   857,   858,   859,
+      860,   245,   175,   827,  1018,   246,   654,  1100,   655,   376,
+      377,  1248,   177,  1249,   319,   320,   248,   247,   249,   510,
+      512,   514,   299,   253,  -461,  1483,   178,    45,    46,    47,
+       48,  1102,   298,   507,   181,    53,  1104,  1106,    56,   385,
+      310,  1497,   528,   223,   298,   298,   224,   380,   638,   312,
+      639,   298,   324,   194,   325,   167,   308,   282,   603,   167,
+      195,   260,   282,   309,   261,   861,   282,   408,   411,   282,
+      194,   254,   199,   282,   282,   282,   282,   850,   182,   282,
+      282,   282,   784,   871,   289,   846,   851,   508,   183,   302,
+      282,   304,   753,   282,   755,   757,   759,   180,   989,  1108,
+      460,   461,   701,   702,  1578,   490,   606,   292,   469,   465,
+      466,   378,   477,   871,   603,   282,   282,   282,   315,   316,
+      317,   318,   717,   410,   410,   465,   466,   282,   282,   184,
+      410,  1019,  1020,   742,   836,   743,   603,   839,   319,   320,
+      282,  1250,   282,  1251,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   526,   398,   399,   742,   185,
+      743,   421,   400,   646,   231,   232,   426,  1177,   465,   466,
+      430,  1370,   608,   186,   233,   282,   282,   436,   465,   466,
+      774,   234,   479,  1614,   216,   468,   189,   217,   282,   480,
+      218,   554,   219,   849,   710,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,   315,
+      316,   317,   318,   400,   319,   320,   298,   298,   298,   298,
+      298,   298,   282,   298,   298,   187,   298,   298,   201,   319,
+      320,   298,   298,   298,   298,   852,   838,   465,   466,   595,
+      583,   188,   585,   586,   587,   601,   589,   590,   191,   647,
+      593,   282,   648,   716,   597,   598,   599,   315,   316,   317,
+      318,   319,   320,   202,  1034,   315,   316,   317,   318,  1682,
+      220,  -462,   192,   221,  1393,   222,   239,   319,   320,   240,
+      207,   650,   241,   208,   648,   282,   209,   315,   316,   317,
+      318,   196,   465,   466,   197,   410,   410,   410,   410,   410,
+      410,   200,   410,   410,   201,   410,   410,   319,   320,   478,
+      410,   410,   410,   600,   465,   466,   203,   994,   315,   316,
+      317,   318,   204,   683,   686,   689,   692,   933,   206,   654,
+     1086,   660,   205,   319,   320,   706,   707,   934,   319,   320,
+     1126,   465,   466,   461,   920,   935,   936,   937,   380,   380,
+      210,   938,   939,   940,   941,   619,   792,  1109,   465,   466,
+      211,   282,   282,   282,   437,   438,   439,   465,   466,   442,
+      443,   444,   298,  1504,  1374,  1507,   654,  1510,   664,   231,
+      232,   465,   466,  1444,   465,   466,   282,   465,   466,   233,
+      654,   215,   670,   282,   465,   466,   242,  1446,   319,   320,
+     1448,   226,   840,  1456,   640,   484,   485,  1154,  -463,   641,
+     1458,   225,  1158,  1159,  1160,  1161,  1162,   497,   498,   230,
+      282,   642,  1169,  1172,   407,   105,   643,   250,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,  1075,  1076,  1077,  1078,   400,   742,   654,   743,
+      762,   746,   816,   465,   466,  1394,   465,   466,   238,   131,
+      132,   133,   134,   135,   136,   732,   733,   734,   140,  1459,
+      251,   282,  1549,   142,   143,   742,   144,   743,   465,   466,
+      654,   465,   466,   841,   465,   466,   742,   149,   743,  1600,
+      760,  1027,   744,  1108,  1552,   258,  1108,  1555,   262,  1108,
+     1563,   645,   259,   465,   466,   263,   646,   933,   282,   782,
+      282,   783,   264,   298,   465,   466,   298,   934,   298,  1565,
+      282,   282,   294,   826,   787,   935,   936,   937,   646,   284,
+     1631,   938,   939,   940,   941,   285,   878,  1275,   792,   297,
+      742,   882,   743,   654,   282,   854,   767,  1644,  1280,  1647,
+     1178,  1650,   933,   515,   295,  1046,   516,  1653,   286,   517,
+      654,   518,   934,   282,   282,   287,  1191,   152,   153,  1047,
+      935,   936,   937,   923,   654,   293,   938,   939,   940,   941,
+      929,   296,   995,   397,   398,   399,   944,   300,  1000,  1108,
+      400,   654,   410,   958,   352,   880,  1685,   410,  1687,   742,
+     1689,   743,  1239,  1240,  1168,  1107,   395,   396,   397,   398,
+      399,   282,   873,  1415,   875,   400,   363,   654,  1416,   959,
+      282,   310,   282,   502,   282,   503,   282,   742,   166,   743,
+      167,   282,  1171,  1108,   282,   654,  1108,   960,   654,  1108,
+      976,   654,  1108,   997,  1051,  1057,  1052,  1058,   353,   282,
+     1262,   282,   654,   354,  1083,  1358,  1359,   654,   298,  1127,
+      654,   654,  1132,  1133,  1042,   654,   402,  1134,   918,   654,
+     1183,  1135,   355,   654,  1108,  1137,  1108,  1610,  1108,   455,
+      654,  1001,  1138,   282,   356,  1185,  1293,  1186,   298,   282,
+      298,   298,   654,   654,  1187,  1188,   654,   654,  1189,  1190,
+      298,   654,  1011,  1225,   357,  1316,  1402,  1317,  1348,   359,
+     1349,  1007,   364,  1009,  1010,   965,   282,   282,   282,   282,
+      654,   365,  1383,  1015,   972,  1421,   973,  1422,   974,  1316,
+      975,  1457,  1316,   366,  1495,   978,   367,   410,   979,   298,
+     1512,   654,  1513,  1528,  1530,   646,  1531,  1533,  1316,  1168,
+     1538,  1540,   383,  1050,   282,   282,   933,   282,   368,   282,
+      282,  1000,  1045,   282,   282,   405,   934,   410,   282,   410,
+      410,  1171,   424,  1541,   935,   936,   937,  1288,  1289,   410,
+      938,   939,   940,   941,  1316,   429,  1544,  1006,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     1091,  1092,  1093,   654,   400,  1545,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,  1179,   465,   466,   410,   400,
+     1030,  1031,  1032,  1033,   654,  1421,  1564,  1611,   384,   401,
+     1306,  1145,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,   435,   282,   282,   282,
+      400,  1499,   434,   654,  1550,  1630,   654,   282,  1632,  1316,
+      654,  1641,  1674,  1679,  1316,  1680,  1699,   440,   103,   305,
+      441,  1707,  1068,  1708,   106,   107,   108,   445,   446,   109,
+      110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+      120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+      130,   447,   448,   449,   450,   451,   282,   452,   493,   527,
+      137,   138,   139,   458,   141,   459,   470,   471,   472,   481,
+      407,   105,   282,   145,   146,   147,  1206,   482,   282,   483,
+      487,   148,  1476,   491,   282,   494,   282,   282,   499,   495,
+      496,   282,   282,   282,   282,   282,   282,   282,   282,   500,
+      501,   505,   530,  1294,   534,   131,   132,   133,   134,   135,
+      136,   536,   537,   282,   140,   167,   312,   541,   542,   142,
+      143,   544,   144,   552,   553,   556,   557,   559,   282,  1261,
+      400,   609,   282,   149,   282,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,   610,
+      611,   166,   667,   400,   612,  1146,   671,   672,   673,   698,
+      676,   151,   677,   696,   699,   741,   723,   700,   154,   155,
+      156,   157,   158,   725,   747,   726,   728,   735,   547,   736,
+      298,   749,   750,   751,   775,   772,   159,   160,   781,   788,
+      789,   161,   819,   820,  1296,   821,   274,   843,   832,   373,
+      822,   165,   834,  1295,  1299,   823,  1477,   420,   282,   824,
+      831,   833,   420,   152,   153,   835,   420,   844,   298,   848,
+      869,  1294,   883,   420,   874,   877,   879,   881,   886,   887,
+     1327,  1324,   888,   890,   891,   892,   893,   895,  1270,   896,
+      897,  1321,   906,   901,   319,   320,   908,   910,  1515,   911,
+      912,   999,   913,   933,   919,   980,   953,   966,   981,   410,
+      926,   927,   967,   934,   969,   970,  1360,  1353,  1363,   971,
+     1366,   935,   936,   937,   982,   380,   380,   938,   939,   940,
+      941,   282,   983,   282,  1377,   282,   990,  1380,  1381,   992,
+      521,  1017,   420,   933,  1022,  1023,  1026,   410,  1025,  1029,
+      282,  1037,  1038,   934,  1039,  1041,  1044,   282,  1049,  1055,
+      282,   935,   936,   937,   282,  1061,  1398,   938,   939,   940,
+      941,  1062,  1084,  1066,  1405,  1408,  1067,   637,  1094,  1069,
+     1070,  1073,  1082,   282,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,  1074,  1079,
+      313,  1553,   400,  1080,   282,  1081,  1601,  1095,   327,   328,
+      329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
+      339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
+      349,   350,   351,  1096,     7,     8,  1097,  1098,   282,   358,
+     1111,  1556,   360,   282,  1112,  1117,  1113,   361,   362,  1114,
+     1115,   420,  1118,  1119,  1120,  1121,   933,  1123,  1124,  1142,
+     1147,  1148,  1150,   282,  1151,  1153,   934,  1155,  1156,  1157,
+      282,  1163,  1167,   298,   935,   936,   937,  1180,  1164,  1165,
+      938,   939,   940,   941,  1166,   521,  1175,   282,  1181,  1192,
+      613,    21,    22,   614,    24,    25,   615,    27,   616,    29,
+     1197,    30,  1199,   282,   282,  1198,    35,    36,  1202,    38,
+       39,    40,  1208,  1209,  1503,    43,  1506,  1214,  1509,  1210,
+      282,   380,  1215,  1217,  1216,   282,  1517,  1218,  1220,  1520,
+     1221,  1222,  1223,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,  1228,    64,    65,
+       66,   400,   410,   105,  1627,  1229,  1274,  1238,  1244,  1256,
+     1257,   420,   420,   420,   504,  1245,  1252,  1469,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,   282,
+     1258,   529,  1259,   400,  1281,  1266,   420,   131,   132,   133,
+      134,   135,   136,   766,  1267,  1271,   140,  1282,  1283,     7,
+        8,   142,   143,  1287,   144,   169,  1290,  1291,  1498,  1573,
+     1297,   731,  1298,  1301,  1302,   149,  1337,  1304,  1307,  1308,
+      420,  1309,  1310,  1320,  1328,  1339,  1329,  1330,  1333,  1519,
+      282,  1335,   282,  1336,  1338,  1604,  1342,  1343,  1344,  1345,
+     1346,  1347,  1350,  1361,  1364,   282,  1367,  1371,  1375,  1378,
+      282,  1382,  1385,  1401,  1409,   613,    21,    22,   614,    24,
+       25,   615,    27,   616,    29,  1411,    30,  1412,  1413,  1414,
+     1420,    35,    36,  1423,    38,    39,    40,  1432,  1436,  1435,
+       43,  1434,   306,  1439,  1442,  1440,  1445,  1637,  1443,  1447,
+     1451,  1449,  1453,  1454,  1460,   152,   153,  1466,   282,  1471,
+     1473,   830,  1472,  1478,  1485,  1489,   298,  1490,   420,  1491,
+      420,  1492,  1493,    64,    65,    66,  1494,  1496,  1511,  1518,
+      766,   885,  1529,  1534,  1535,  1542,  1558,  1546,  1562,  1662,
+     1559,   282,  1571,  1582,  1602,  1583,  1605,  1586,  1589,  1590,
+     1024,  1593,  1594,  1597,  1598,  1603,   298,  1618,   298,  1619,
+     1621,  1623,  1625,  1638,  1639,  1645,  1648,  1651,   369,   370,
+      371,   372,   374,  1654,   420,  1656,  1665,  1664,  1668,  1695,
+     1670,  1698,  1672,  1681,   298,   406,   779,  1683,  1684,   412,
+     1686,  1688,  1690,  1696,  1709,   410,  1710,  1711,   417,   419,
+      422,   423,  1712,   425,   419,   427,   428,  1713,   419,   431,
+      432,  1714,  1655,  1574,   651,   419,  1201,  1487,    88,  1488,
+     1212,   420,    96,  1303,     0,     0,     0,     0,     0,     0,
+      420,     0,   420,   454,   420,   410,   420,   410,   679,     0,
+        0,   420,   463,   464,   420,     0,     0,     0,     0,     0,
+        0,   464,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   410,     0,     0,     0,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,   520,   522,   419,   400,     0,     0,     0,     0,
+        0,     0,     0,   420,   531,   532,   533,     0,   535,     0,
+        0,   538,   539,     0,     0,   540,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+      551,     0,     0,     0,   400,     0,   420,   420,   420,   420,
+        0,     0,     0,   558,     0,     0,   560,   561,   562,   563,
+      564,   565,   566,   567,   568,   569,   570,   571,   572,   573,
+      574,   575,   576,   577,   578,   579,   580,   581,     0,     7,
+        8,     0,     0,     0,     0,     0,     0,   591,     0,     0,
+      594,     0,   596,     0,     0,     0,     0,     0,   420,     0,
+        0,     0,  1065,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   618,   419,     0,   620,   621,   622,   623,   624,
+      625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
+        0,     0,   636,     0,     0,   613,    21,    22,   614,    24,
+       25,   615,    27,   616,    29,     0,    30,   520,     0,     0,
+        0,    35,    36,   658,    38,    39,    40,     0,   663,  1116,
+       43,     0,     0,   668,   669,     0,     0,     0,     0,   674,
+      675,     0,     0,     0,   680,   682,   685,   688,   691,   693,
+      694,   695,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,    64,    65,    66,     0,     0,     0,   711,
+      712,   713,   369,   370,   714,     0,     0,     0,   718,   719,
+      720,   721,   722,     0,     0,     0,   727,     0,     0,   729,
+      730,     0,     0,   419,   419,   419,     0,     0,   737,   738,
+      739,   740,     7,     8,     0,     0,     0,   748,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,   419,     0,
+        0,     0,     0,     0,   763,   765,   780,   636,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,   740,   400,     0,     0,     0,
+        0,   786,   419,     0,     0,     0,   790,     0,   613,    21,
+       22,   614,    24,    25,   615,    27,   616,    29,     0,    30,
+        0,     0,     0,     0,    35,    36,     0,    38,    39,    40,
+        0,     0,     0,    43,   420,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,   842,     0,     0,   933,
+        0,     0,     0,     0,     0,     0,    64,    65,    66,   934,
+     1176,     0,     0,     0,     0,     7,     8,   935,   936,   937,
+        0,   933,     0,   938,   939,   940,   941,   868,     0,     0,
+      419,   934,   419,   876,   933,     0,     0,     0,     0,   935,
+      936,   937,   765,   884,   934,   938,   939,   940,   941,     0,
+        0,     0,   935,   936,   937,     0,   898,     0,   938,   939,
+      940,   941,     0,     0,     0,   904,     0,     0,     0,   921,
+        0,   613,    21,    22,   614,    24,    25,   615,    27,   616,
+       29,     0,    30,     0,     0,     0,   419,    35,    36,     0,
+       38,    39,    40,   924,   925,     0,    43,  1667,     0,   928,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   952,     0,     0,   954,     0,     0,     0,  1669,
+        0,   420,     0,     0,     0,   420,     0,     0,     0,    64,
+       65,    66,  1671,   419,     0,     0,     0,     0,     0,     0,
+        0,     0,   419,  1182,   419,     0,   419,     0,   419,     0,
+        0,     0,     0,   419,     0,     0,   419,     0,     0,     0,
+        0,     0,   984,     0,   986,   987,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,     0,   400,     0,     0,     0,   933,     0,
+        0,     0,   922,  1002,     0,     0,     0,     0,   934,     0,
+        0,  1003,  1004,  1005,     0,   419,   935,   936,   937,     0,
+        0,     0,   938,   939,   940,   941,     7,     8,     0,     0,
+     1014,   433,     0,     0,     0,  1016,     0,     0,  1021,     0,
+        0,     0,     0,   521,     0,     0,     0,   933,   419,   419,
+      419,   419,   453,  1272,  1035,   456,     0,   934,     0,     0,
+        0,     0,     0,   420,     0,   935,   936,   937,     0,     0,
+      420,   938,   939,   940,   941,     0,     0,     0,     0,   486,
+        0,     0,   613,    21,    22,   614,    24,    25,   615,    27,
+      616,    29,     0,    30,     0,     0,  1673,     0,    35,    36,
+      419,    38,    39,    40,   420,     0,     0,    43,     0,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,   420,     0,   400,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   548,   549,     0,
+       64,    65,    66,     0,     0,  1700,     0,     0,     0,     0,
+      555,     0,     0,     0,     0,     0,     0,     0,     0,  1122,
+        0,     0,  1125,     0,     0,     0,  1128,     0,  1129,  1130,
+     1131,     0,     0,     0,     0,     0,  1136,     0,     0,     0,
+        0,   933,     0,     0,   588,     0,     0,     0,     0,     0,
+     1292,   934,     0,  1152,     0,     7,     8,     0,     0,   935,
+      936,   937,     0,   945,     0,   938,   939,   940,   941,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,  1184,     0,   400,     0,     0,
+      420,     0,   420,     0,     0,     0,  1193,  1194,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,  1203,  1205,     0,
+        0,   613,    21,    22,   614,    24,    25,   615,    27,   616,
+       29,     0,    30,     0,     7,     8,     0,    35,    36,     0,
+       38,    39,    40,     0,     0,     0,    43,     0,     0,  1701,
+        0,     0,     0,     0,     0,  1241,  1242,  1243,     0,     0,
+        0,     0,     0,     0,     0,  1253,     0,  1255,   420,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,  1260,    64,
+       65,    66,     0,     0,     0,     0,   419,     0,     0,     0,
+      613,    21,    22,   614,    24,    25,   615,    27,   616,    29,
+        0,    30,     0,     0,     0,     0,    35,    36,     0,    38,
+       39,    40,  1284,  1285,  1286,    43,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,   933,   400,     0,     0,     0,     0,     0,
+        0,     0,   985,   934,     0,     0,     0,  1300,    64,    65,
+       66,   935,   936,   937,     0,     0,     0,   938,   939,   940,
+      941,  1313,     0,     0,     0,     0,  1319,     0,     0,     0,
+        0,     0,     0,  1323,     0,     0,     0,  1325,  1326,     0,
+        0,     0,     0,     0,  1331,  1332,     0,     0,     0,  1334,
+        0,     0,     0,     0,     0,     0,     0,  1341,     0,     0,
+        0,     0,     0,   837,     0,     0,     0,  1351,     0,  1352,
+        0,  1085,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,  1369,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,  1702,     0,   419,     0,     0,     0,   419,     0,     0,
+     1384,     7,     8,     0,     0,  1386,  1387,  1388,  1389,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,  1397,     0,
+        0,     0,     0,     0,     0,     0,     0,  1407,     0,     0,
+        0,     0,     0,     0,     0,     0,   905,     7,     8,     0,
+        0,     0,     0,  1417,  1418,     0,     0,     0,     0,     0,
+        0,  1424,     0,     0,     0,   917,     0,   613,    21,    22,
+      614,    24,    25,   615,    27,   616,    29,     0,    30,     0,
+        0,     0,     0,    35,    36,     0,    38,    39,    40,     0,
+        0,     0,    43,     0,     0,  1441,     0,     0,     0,     0,
+        0,     0,     0,   613,    21,    22,   614,    24,    25,   615,
+       27,   616,    29,  1455,    30,   520,     0,     0,     0,    35,
+       36,     0,    38,    39,    40,    64,    65,    66,    43,     0,
+     1467,     0,  1468,     0,     0,   419,     0,     0,     0,     0,
+        0,     0,  1475,     0,     0,     0,     0,     0,     0,     0,
+        0,   991,     0,   993,     0,  1480,     0,     0,     0,     0,
+     1484,    64,    65,    66,  1410,     0,     0,     0,     0,  1071,
+        0,     0,     0,     0,     0,     0,   419,     0,     0,     0,
+        0,     0,     0,  1502,     0,  1505,     0,  1508,  1560,     0,
+        0,  1008,     0,     0,     0,     0,     0,   419,     0,     0,
+        0,  1521,  1522,  1523,  1524,  1525,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     1536,  1537,  1438,     0,  1628,  1539,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,  1543,     0,     0,     0,  1547,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,  1053,  1054,   400,  1056,
+        0,  1059,  1060,     0,     0,  1063,  1064,     0,     0,  1572,
+        0,     0,     0,     0,  1319,     0,     0,     0,     0,     0,
+        0,  1580,     0,     0,     0,     0,     0,     0,  1588,     0,
+        0,  1592,     0,     0,  1596,  1470,     0,     0,  1599,     0,
+        0,     0,   419,     0,   419,  1606,  1607,  1608,  1609,     0,
+        0,     0,     0,     0,     0,  1613,     0,     0,  1615,     0,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,  1139,
+     1140,  1141,     0,     0,     0,  1643,     0,     0,     0,  1149,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      419,     0,  1657,  1658,  1659,  1660,     0,     0,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,     0,     0,
+        0,     0,     0,     0,     0,  1570,     0,     0,  1196,     0,
+        0,     0,     0,     0,  1691,  1692,  1693,  1694,     0,     0,
+        0,     0,     0,     0,  1213,  1626,     0,     0,     0,     0,
+     1219,     0,     0,     0,     0,     0,  1224,     0,  1226,  1227,
+        0,     0,     0,  1230,  1231,  1232,  1233,  1234,  1235,  1236,
+     1237,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,  1254,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     1265,     0,     0,     0,  1269,     0,     0,   103,   104,   105,
+        0,     0,     0,   106,   107,   108,     0,     0,   109,   110,
+      111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+        0,     0,     0,   131,   132,   133,   134,   135,   136,   137,
+      138,   139,   140,   141,     0,     0,     0,   142,   143,     0,
+      144,     0,   145,   146,   147,     0,     0,     0,     0,     0,
+      148,   149,     0,     0,     0,     0,     0,     0,     0,     0,
+     1311,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+        0,     0,     0,     0,   150,  1356,     0,  1357,     0,     0,
+      151,   152,   153,     0,     0,  1196,     0,   154,   155,   156,
+      157,   158,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,  1390,  1532,   525,   159,   160,     0,     0,  1399,
+      161,     0,  1400,     0,     0,   162,  1404,   163,     0,   164,
+      165,     0,   166,   525,   167,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,  1419,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,   103,   265,     0,   400,     0,  1196,   106,   107,   108,
+        0,   644,   109,   110,   111,   112,   113,   114,   115,   116,
+      117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+      127,   128,   129,   130,   267,     0,     0,     0,     0,     0,
+     1452,     0,     0,   137,   138,   139,     0,   141,     0,     0,
+        0,     0,     0,     0,     0,     0,   145,   146,   147,     0,
+        0,     0,     0,     0,   148,     0,   268,     0,     0,   269,
+        0,     0,   270,     0,   271,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,   272,     0,     0,  1196,
+        0,     0,     0,    45,    46,    47,    48,    49,     0,     0,
+        0,    53,     0,     0,    56,  1196,     0,     0,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   653,
+      398,   399,  1514,     0,     0,     0,   400,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   526,   398,
+      399,   525,     0,     0,   151,   400,     0,     0,     0,     0,
+        0,   154,   155,   156,   157,   158,     0,     0,     0,     0,
+      776,     0,     0,     0,     0,     0,     0,     0,     0,   473,
+     1376,     0,     0,     0,   161,     0,     0,     0,     0,   475,
+        0,  1557,     0,     0,   165,     0,   234,   523,   103,   265,
+        0,     0,     0,     0,   106,   107,   108,     0,     0,   109,
+      110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+      120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+      130,   267,     0,     0,     0,     0,     0,     0,     0,     0,
+      137,   138,   139,     0,   141,     0,     0,     0,     0,     0,
+        0,     0,     0,   145,   146,   147,     0,  1196,     0,     0,
+        0,   148,  1617,   268,     0,     0,   269,     0,     0,   270,
+        0,   271,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   272,     0,     0,     0,     0,     0,     0,
+       45,    46,    47,    48,    49,     0,     0,     0,    53,     0,
+        0,    56,     0,     0,     0,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   653,   398,   399,     0,
+        0,     0,     0,   400,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,   855,     0,
+        0,   151,   400,  1196,     0,     0,     0,     0,   154,   155,
+      156,   157,   158,     0,     0,     0,     0,     0,     0,   977,
+        0,     0,     0,     0,     0,     0,   159,   418,     0,     0,
+        0,   161,     0,     0,     0,     0,   274,     0,     0,     0,
+        0,   165,     0,     0,   523,   103,   265,   105,     0,     0,
+        0,   106,   107,   108,     0,     0,   109,   110,   111,   112,
+      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+      123,   124,   125,   126,   127,   128,   129,   130,   267,     0,
+        0,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+      140,   141,     0,     0,     0,   142,   143,     0,   144,     0,
+      145,   146,   147,     0,     0,     0,     0,     0,   148,   149,
+      268,     0,     0,   269,     0,     0,   270,     0,   271,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      272,     0,     0,     0,     0,     0,     0,    45,    46,    47,
+       48,    49,     0,     0,     0,    53,     0,     0,    56,     0,
+        0,     0,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,     0,     0,     0,
+      400,     0,     0,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,  1144,   151,   152,
+      153,   400,     0,     0,     0,   154,   155,   156,   157,   158,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   159,   273,     0,     0,     0,   161,     0,
+        0,     0,     0,   274,     0,   103,   265,   266,   165,     0,
+     1403,   106,   107,   108,     0,     0,   109,   110,   111,   112,
+      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+      123,   124,   125,   126,   127,   128,   129,   130,   267,     0,
+        0,     0,     0,     0,     0,     0,     0,   137,   138,   139,
+        0,   141,     0,     0,     0,     0,     0,     0,     0,     0,
+      145,   146,   147,     0,     0,     0,     0,     0,   148,     0,
+      268,     0,     0,   269,     0,     0,   270,     0,   271,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      272,     0,     0,     0,     0,     0,     0,    45,    46,    47,
+       48,    49,     0,     0,     0,    53,     0,     0,    56,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,     0,     0,   151,     0,
+        0,     0,     0,     0,     0,   154,   155,   156,   157,   158,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   159,   273,     0,     0,     0,   161,     0,
+        0,     0,     0,   274,     0,   103,   305,   105,   165,     0,
+      275,   106,   107,   108,     0,     0,   109,   110,   111,   112,
+      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+      123,   124,   125,   126,   127,   128,   129,   130,     7,     8,
+        0,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+      140,   141,     0,     0,     0,   142,   143,     0,   144,     0,
+      145,   146,   147,     0,     0,     0,     0,     0,   148,   149,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+      742,     0,   743,     0,   613,    21,    22,   614,    24,    25,
+      615,    27,   616,    29,     0,    30,     0,     0,     0,     0,
+       35,    36,     0,    38,    39,    40,     0,     0,     0,    43,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+        0,     0,     0,     0,     0,  1391,     0,  1392,   151,   152,
+      153,     0,    64,    65,    66,   154,   155,   156,   157,   158,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   159,   160,     0,     0,     0,   161,     0,
+        0,     0,     0,   274,     0,   103,   265,  1263,   165,     0,
+     1204,   106,   107,   108,     0,     0,   109,   110,   111,   112,
+      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+      123,   124,   125,   126,   127,   128,   129,   130,   267,     0,
+        0,     0,     0,     0,     0,     0,     0,   137,   138,   139,
+        0,   141,     0,     0,     0,     0,     0,     0,     0,     0,
+      145,   146,   147,     0,     0,     0,     0,     0,   148,     0,
+      268,     0,     0,   269,     0,     0,   270,     0,   271,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      272,     0,     0,     0,     0,     0,     0,    45,    46,    47,
+       48,    49,     0,     0,     0,    53,     0,     0,    56,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1500,     0,  1501,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,   151,     0,
+        0,     0,     0,     0,     0,   154,   155,   156,   157,   158,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   159,   273,     0,     0,     0,   161,     0,
+        0,     0,     0,   274,     0,   103,   305,   105,   165,     0,
+     1264,   106,   107,   108,     0,     0,   109,   110,   111,   112,
+      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+      123,   124,   125,   126,   127,   128,   129,   130,     0,     0,
+        0,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+      140,   141,     0,     0,     0,   142,   143,     0,   144,     0,
+      145,   146,   147,     0,   103,   305,   105,     0,   148,   149,
+      106,   107,   108,     0,     0,   109,   110,   111,   112,   113,
+      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+      124,   125,   126,   127,   128,   129,   130,     0,     0,     0,
+      131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+      141,     0,     0,     0,   142,   143,     0,   144,     0,   145,
+      146,   147,     0,     0,     0,     0,     0,   148,   149,     0,
+        0,     0,     0,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,   151,   152,
+      153,   400,     0,     0,     0,   154,   155,   156,   157,   158,
+      853,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,   159,   160,     0,     0,     0,   161,     0,
+        0,     0,     0,   274,     0,     0,     0,     0,   165,     0,
+     1396,     0,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,   151,   152,   153,
+      400,     0,     0,     0,   154,   155,   156,   157,   158,   900,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   159,   160,     0,     0,     0,   161,     0,     0,
+        0,     0,   274,     0,   103,   265,     0,   165,     0,  1406,
+      106,   107,   108,     0,     0,   109,   110,   111,   112,   113,
+      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+      124,   125,   126,   127,   128,   129,   130,   267,     0,     0,
+        0,     0,     0,     0,     0,     0,   137,   138,   139,     0,
+      141,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+      146,   147,     0,     0,     0,     0,     0,   148,     0,   268,
+        0,     0,   269,     0,     0,   270,     0,   271,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,   272,
+        0,     0,     0,     0,     0,     0,    45,    46,    47,    48,
+       49,     0,     0,     0,    53,     0,     0,    56,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,     0,     0,
+        0,     0,     0,     0,     0,   948,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   151,     0,     0,
+        0,     0,     0,     0,   154,   155,   156,   157,   158,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   159,   273,     0,     0,     0,   161,     0,     0,
+        0,     0,   274,     0,   103,   265,     0,   165,     0,   275,
+      106,   107,   108,     0,     0,   109,   110,   111,   112,   113,
+      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+      124,   125,   126,   127,   128,   129,   130,   267,     0,     0,
+        0,     0,     0,     0,     0,     0,   137,   138,   139,     0,
+      141,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+      146,   147,     0,     0,     0,     0,     0,   148,     0,   268,
+        0,     0,   269,     0,     0,   270,     0,   271,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,   272,
+        0,     0,     0,     0,     0,     0,    45,    46,    47,    48,
+       49,     0,     0,     0,    53,     0,     0,    56,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,     0,     0,
+        0,     0,     0,     0,     0,   968,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   151,     0,     0,
+        0,     0,     0,     0,   154,   155,   156,   157,   158,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   159,   418,     0,     0,     0,   161,     0,     0,
+        0,     0,   274,     0,   103,   265,     0,   165,     0,   519,
+      106,   107,   108,     0,     0,   109,   110,   111,   112,   113,
+      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+      124,   125,   126,   127,   128,   129,   130,   267,     0,     0,
+        0,     0,     0,     0,     0,     0,   137,   138,   139,     0,
+      141,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+      146,   147,     0,     0,     0,     0,     0,   148,     0,   268,
+        0,     0,   269,     0,     0,   270,     0,   271,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,   272,
+        0,     0,     0,     0,     0,     0,    45,    46,    47,    48,
+       49,     0,     0,     0,    53,     0,     0,    56,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,     0,     0,
+        0,     0,     0,     0,     0,   996,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   151,     0,     0,
+        0,     0,     0,     0,   154,   155,   156,   157,   158,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   159,   418,     0,     0,     0,   161,     0,     0,
+        0,     0,   274,     0,   103,   265,     0,   165,     0,   764,
+      106,   107,   108,     0,     0,   109,   110,   111,   112,   113,
+      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+      124,   125,   126,   127,   128,   129,   130,   267,     0,     0,
+        0,     0,     0,     0,     0,     0,   137,   138,   139,     0,
+      141,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+      146,   147,     0,     0,     0,     0,     0,   148,     0,   268,
+        0,     0,   269,     0,     0,   270,     0,   271,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,   272,
+        0,     0,     0,     0,     0,     0,    45,    46,    47,    48,
+       49,     0,     0,     0,    53,     0,     0,    56,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,     0,     0,
+        0,     0,     0,     0,     0,  1089,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   151,     0,     0,
+        0,     0,     0,     0,   154,   155,   156,   157,   158,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   159,   273,     0,     0,     0,   161,     0,     0,
+        0,     0,   274,     0,   103,   265,     0,   165,     0,  1268,
+      106,   107,   108,     0,     0,   109,   110,   111,   112,   113,
+      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+      124,   125,   126,   127,   128,   129,   130,   267,     0,     0,
+        0,     0,     0,     0,     0,     0,   137,   138,   139,     0,
+      141,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+      146,   147,     0,     0,     0,     0,     0,   148,     0,   268,
+        0,     0,   269,     0,     0,   270,     0,   271,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,   272,
+        0,     0,     0,     0,     0,     0,    45,    46,    47,    48,
+       49,     0,     0,     0,    53,     0,     0,    56,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,     0,     0,
+        0,     0,     0,     0,     0,  1354,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,   151,     0,     0,
+        0,     0,     0,     0,   154,   155,   156,   157,   158,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   473,  1376,     0,     0,     0,   161,     0,     0,
+        0,     0,   475,     0,   103,   305,     0,   165,     0,   234,
+      106,   107,   108,     0,     0,   109,   110,   111,   112,   113,
+      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+      124,   125,   126,   127,   128,   129,   130,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,   137,   138,   139,     0,
+      141,     0,     0,     0,     0,     0,     0,     0,     0,   145,
+      146,   147,   103,   305,   105,     0,     0,   148,   106,   107,
+      108,     0,     0,   109,   110,   111,   112,   113,   114,   115,
+      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+      126,   127,   128,   129,   130,     0,     0,     0,   131,   132,
+      133,   134,   135,   136,   137,   138,   139,   140,   141,     0,
+        0,     0,   142,   143,     0,   144,     0,   145,   146,   147,
+        0,     0,     0,     0,     0,   148,   149,     0,     0,     0,
+        0,     0,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,   151,     0,     0,
+      400,     0,     0,     0,   154,   155,   156,   157,   158,  1373,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   473,   474,     0,     0,     0,   161,     0,     0,
+        0,     0,   475,     0,     0,     0,     0,   165,     0,   234,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,   151,   152,   153,   400,     0,
+        0,     0,   154,   155,   156,   157,   158,  1427,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      159,   160,     0,     0,     0,   161,   103,   265,     0,     0,
+      274,     0,   106,   107,   108,   165,     0,   109,   110,   111,
+      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+      122,   123,   124,   125,   126,   127,   128,   129,   130,   267,
+        0,     0,     0,     0,     0,     0,     0,     0,   137,   138,
+      139,     0,   141,     0,     0,     0,     0,     0,     0,     0,
+        0,   145,   146,   147,     0,     0,     0,     0,     0,   148,
+        0,   268,     0,     0,   269,     0,     0,   270,     0,   271,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,   272,     0,     0,     0,     0,     0,     0,    45,    46,
+       47,    48,    49,     0,     0,     0,    53,     0,     0,    56,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+        0,     0,     0,     0,     0,     0,     0,  1428,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,   151,
+        0,     0,     0,     0,     0,     0,   154,   155,   156,   157,
+      158,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,   159,   418,     0,     0,     0,   161,
+      103,   305,     0,     0,   274,     0,   106,   107,   108,   165,
+        0,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+      118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      128,   129,   130,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,   137,   138,   139,     0,   141,     0,     0,     0,
+        0,     0,     0,   103,   305,   145,   146,   147,     0,   106,
+      107,   108,     0,   148,   109,   110,   111,   112,   113,   114,
+      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+      125,   126,   127,   128,   129,   130,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,   137,   138,   139,     0,   141,
+        0,     0,     0,     0,     0,     0,     0,     0,   145,   146,
+      147,     0,     0,     0,     0,     0,   148,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,     0,   151,  1429,     0,     0,     0,     0,     0,
+      154,   155,   156,   157,   158,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,   159,   160,
+        0,     0,     0,   161,     0,     0,     0,     0,   274,     0,
+        0,   550,     0,   165,     0,     0,     0,    -4,     1,     0,
+        0,    -4,     0,     0,     0,     0,   151,     0,     0,    -4,
+       -4,     0,     0,   154,   155,   156,   157,   158,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+        0,   159,   160,     0,    -4,    -4,   161,     0,     0,     0,
+        0,   274,     0,     0,     0,     0,   165,    -4,    -4,    -4,
+        0,     0,    -4,     0,    -4,     0,     0,     0,    -4,    -4,
+        0,    -4,    -4,     0,     0,    -4,    -4,    -4,    -4,    -4,
+       -4,    -4,    -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,
+       -4,    -4,    -4,    -4,    -4,    -4,     0,     0,     0,    -4,
+       -4,    -4,     0,     0,     0,     0,     0,    -4,     6,     0,
+        0,     0,    -4,    -4,    -4,    -4,     7,     8,    -4,     0,
+       -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       -4,    -4,    -4,     0,     0,     0,    -4,    -4,    -4,    -4,
+        0,     9,    10,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,    11,    12,    13,     0,     0,    14,
+        0,    15,     0,     0,     0,    16,    17,     0,    18,    19,
+        0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
+       28,    29,     0,    30,    31,    32,    33,    34,    35,    36,
+       37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
+       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+       56,    57,    58,     0,     0,     0,    59,    60,    61,     0,
+        0,     0,     0,     0,    62,     0,     0,     0,     0,    63,
+       64,    65,    66,     0,     0,    67,     0,    68,     0,    69,
+       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+        0,     0,     0,    80,    81,    82,    83,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,     0,     0,  1430,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+        0,     0,  1431,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,     0,     0,
+     1461,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,     0,     0,  1516,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,     0,     0,  1526,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,     0,     0,  1527,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+        0,     0,  1548,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,     0,     0,
+     1551,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,     0,     0,  1554,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,     0,     0,  1581,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,     0,     0,  1585,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+        0,     0,  1620,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,     0,     0,
+     1622,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,     0,     0,  1624,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,     0,     0,  1642,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,     0,     0,  1666,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+        0,     0,  1703,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,     0,     0,
+     1704,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,     0,     0,  1705,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,     0,     0,  1706,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,     0,   697,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,     0,     0,
+        0,     0,   400,     0,     0,     0,     0,     0,     0,     0,
+     1437,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,   761,     0,     0,     0,     0,   704,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,   704,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,   705,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,   773,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+      804,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,   812,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,   813,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,   814,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,   825,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+      930,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,   931,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,   932,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,   963,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1048,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+     1087,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,  1088,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,  1143,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,  1276,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1277,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+     1278,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,  1279,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,  1314,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,  1315,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1322,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+     1462,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,  1463,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,  1464,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,  1465,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1481,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+     1482,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,  1486,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,  1566,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,  1567,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1568,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+     1569,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,  1576,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,  1579,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,  1616,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1633,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+     1634,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,  1635,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,     0,
+        0,     0,  1636,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,     0,     0,     0,  1675,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,     0,     0,     0,  1676,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,     0,     0,     0,
+     1677,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,     0,     0,     0,  1678,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,   605,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+        0,     0,   778,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,   785,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,     0,   400,     0,     0,     0,   791,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,   867,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,     0,     0,     0,
+      400,     0,     0,     0,   956,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,     0,     0,   957,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,     0,     0,
+      961,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,     0,     0,   962,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,     0,     0,
+        0,     0,   400,     0,     0,     0,   964,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,     0,     0,   998,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+        0,     0,  1043,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,     0,     0,  1273,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,     0,   400,     0,     0,     0,  1305,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,     0,
+        0,  1450,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,     0,     0,     0,
+      400,     0,   602,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,   652,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,     0,     0,
+        0,     0,   400,     0,   656,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,   657,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,     0,   400,     0,   659,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,   661,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,   662,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,   665,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+      666,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,   761,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,     0,     0,     0,
+      400,     0,   769,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,   770,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,     0,     0,
+        0,     0,   400,     0,   771,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,   777,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,     0,   400,     0,   889,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,   894,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,   899,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,   902,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+      903,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,   909,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,     0,     0,     0,
+      400,     0,   914,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,   915,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,     0,     0,
+        0,     0,   400,     0,   916,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,   947,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,     0,   400,     0,   949,   386,   387,   388,
+      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+      399,     0,     0,     0,     0,   400,     0,   950,   386,   387,
+      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      398,   399,     0,     0,     0,     0,   400,     0,   951,   386,
+      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+      397,   398,   399,     0,     0,     0,     0,   400,     0,   955,
+      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+      396,   397,   398,   399,     0,     0,     0,     0,   400,     0,
+     1174,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+      395,   396,   397,   398,   399,     0,     0,     0,     0,   400,
+        0,  1355,   386,   387,   388,   389,   390,   391,   392,   393,
+      394,   395,   396,   397,   398,   399,     0,     0,     0,     0,
+      400,     0,  1372,   386,   387,   388,   389,   390,   391,   392,
+      393,   394,   395,   396,   397,   398,   399,     0,     0,     0,
+        0,   400,     0,  1395,   386,   387,   388,   389,   390,   391,
+      392,   393,   394,   395,   396,   397,   398,   399,     0,     0,
+        0,     0,   400,     0,  1575,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,     0,
+        0,     0,     0,   400,     0,  1640,   386,   387,   388,   389,
+      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+        0,     0,     0,     0,   400
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
+ #define yypact_value_is_default(Yystate) \
+   (!!((Yystate) == (-1266)))
+ 
+ #define yytable_value_is_error(Yytable_value) \
+   YYID (0)
+ 
  static const yytype_int16 yycheck[] =
  {
++<<<<<<< HEAD
 +       3,   349,   237,     6,     4,     4,     3,   456,   457,     4,
 +     362,   903,   364,     4,   249,   899,     4,     3,   222,     4,
 +    1210,     4,     4,     4,    13,     5,     5,     5,   177,   101,
 +       6,     6,     6,     6,     6,   184,     6,     6,     4,     6,
 +       4,     6,     6,     4,     7,     4,    64,     0,     6,    67,
 +       4,     6,    70,   174,   175,     6,     4,   179,     6,   294,
 +      70,   296,    72,   184,   186,   542,   543,   544,   545,   546,
 +     547,   548,   549,   550,   551,   552,    70,   554,   555,   556,
 +     557,   558,   559,   560,   177,  1275,   179,     7,   565,   566,
 +     167,   168,   178,   202,   203,   204,   177,   183,   207,   208,
 +     209,   167,   168,     8,   167,   168,   183,   183,   185,   185,
 +      64,   167,   168,     6,    68,    67,    64,   183,    70,   185,
 +      72,   184,   117,   118,   119,   120,    80,   185,    67,   185,
 +     177,    70,   190,     4,   243,   244,   194,   167,   168,    67,
 +     115,     7,    70,   201,     8,   136,   255,   256,     6,   167,
 +     168,   167,   168,   183,   183,   185,   185,   115,   161,   177,
 +     115,   127,   128,  1353,   115,   162,   184,   183,   127,   128,
 +     173,   174,   174,   175,   178,   161,   180,  1061,   177,   179,
 +     184,   181,   184,  1373,     6,   184,   186,   173,   174,   177,
 +     185,   167,   168,   184,     6,   164,   184,   164,    70,   184,
 +      72,   184,   184,   184,   184,   184,   184,   177,   173,   174,
 +     184,   184,   447,   448,   184,   179,   177,    70,   181,    72,
 +      91,    92,    93,    94,     7,   167,   168,   127,    99,     6,
 +     582,   102,   467,   585,   154,   155,   156,   157,   174,   175,
 +     140,   141,   184,     6,   169,   170,   171,     6,   184,    45,
 +      46,   176,    48,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,   177,   167,   168,
 +     179,   176,     7,   177,   184,   179,   167,   168,   177,   177,
 +     185,   183,   186,   185,   519,   184,   184,   179,   154,   155,
 +     156,   157,   364,   184,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,   174,   175,
 +     167,   168,   176,  1503,    74,   181,   179,   375,   181,   167,
 +     168,   185,   183,   186,   185,   177,   183,   167,   168,   169,
 +     170,   171,   184,   177,   811,   183,   176,    70,   341,   342,
 +     343,   344,   345,   346,   347,   348,   349,     7,     8,   178,
 +     353,   354,   355,   356,   183,   341,   342,   343,   344,   345,
 +     346,   347,   348,   349,   660,   661,   662,   353,   354,   355,
 +     356,   154,   155,   156,   157,   174,   175,   342,   343,   344,
 +     345,   346,   347,   348,  1574,   183,   177,   185,   353,   354,
 +     355,   174,   175,   745,    70,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,   178,
 +     177,   180,   305,   176,   183,     4,     5,   167,   168,   154,
 +     155,   156,   157,     6,     7,   483,   484,   485,    64,   225,
 +     226,    67,   177,   183,    70,   670,    72,   233,   178,   174,
 +     175,   237,   179,   183,   181,   177,   504,     7,   177,   186,
 +      39,    40,    41,    42,    43,    44,   167,   168,   351,   456,
 +     457,     6,    51,    52,   357,    12,    13,   167,   168,   541,
 +     180,   184,   183,   183,    63,   533,   953,   954,   955,   956,
 +      70,   958,   959,   183,   174,   175,   963,   964,   167,   168,
 +    1382,   181,  1384,   178,  1386,   180,   167,   168,   158,   159,
 +     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
 +     170,   171,   183,   585,   167,   168,   176,    64,    65,    66,
 +      67,    68,    69,    70,    71,    72,    73,   183,    75,   185,
 +     183,     4,     5,    80,    81,    70,    83,    84,    85,   183,
 +      64,   185,    89,    67,   167,   168,    70,     7,   167,   168,
 +       6,     7,   178,  1437,   143,   144,  1440,   183,   180,  1443,
 +     183,   183,    72,   621,   183,   623,    39,    40,    41,    42,
 +      43,    44,   183,     8,   185,   122,   123,   124,    51,    52,
 +     177,   183,   178,   185,   180,   174,   175,   183,   167,   168,
 +      63,   183,   181,   185,   154,   155,   156,   157,  1490,   803,
 +      67,  1078,    67,    87,   183,    70,   178,    72,   180,   667,
 +     183,   183,   185,    97,   174,   175,   184,   969,   167,   168,
 +     178,   105,   106,   107,   627,   183,   629,   111,   112,   113,
 +     114,   184,   178,   985,   183,   167,   168,   183,   185,   711,
 +    1524,   627,   183,   629,   185,  1537,   183,  1539,   185,  1541,
 +     183,   183,   185,   167,   168,  1547,   714,    70,   454,   455,
 +     718,   719,   720,   721,   629,   183,   462,   185,   726,   183,
 +     143,   144,    67,   745,  1558,   167,   168,  1561,   750,   183,
 +    1564,   185,    67,  1567,   167,   168,  1578,   178,  1580,   180,
 +    1582,   183,   183,   586,   154,   155,   156,   157,    70,   177,
 +     183,   185,   177,   167,   168,   167,   168,  1591,   178,  1593,
 +     180,  1595,     4,   183,   174,   175,     4,     4,   776,   183,
 +     183,   183,   185,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,   177,     4,  1188,
 +    1189,   176,   183,   178,   185,  1097,   177,   750,   806,   807,
 +     808,   809,   824,     6,   177,   183,   179,   185,   181,     6,
 +       4,   184,     6,   186,   750,     6,   659,   660,   661,   662,
 +     177,   774,   976,   179,   183,   778,   185,     4,   781,   782,
 +     783,     4,   183,    64,   185,   750,    67,   790,   774,    70,
 +     177,    72,   778,   177,   177,   781,   782,   783,   856,    12,
 +      13,     7,   177,   183,   790,   185,   183,   177,   185,   774,
 +     183,     7,   185,   778,   177,   177,   781,   782,   783,   183,
 +      87,   185,   183,   177,   185,   790,   829,   177,   177,    82,
 +      97,   183,   183,   185,   185,   183,     4,   185,   105,   106,
 +     107,     6,   184,   829,   111,   112,   113,   114,   183,   921,
 +     185,    64,    65,    66,    67,    68,    69,    70,    71,    72,
 +      73,   183,    75,   185,   829,   184,   184,    80,    81,    87,
 +      83,    84,    85,   183,     6,   185,    89,   673,   183,    97,
 +     185,   183,     6,   185,   680,   184,   177,   105,   106,   107,
 +     686,   177,     6,   111,   112,   113,   114,   969,   183,   183,
 +     185,   185,   155,   156,   157,   158,   159,     4,   177,   122,
 +     123,   124,   183,   183,   185,   185,   177,   177,   185,   172,
 +     183,   179,   185,   176,   183,  1129,   185,   183,  1377,   185,
 +     184,   184,   185,   186,   187,   177,   189,   190,   191,   192,
 +     177,   194,   195,   196,   183,   183,   185,   185,   201,   183,
 +     179,   185,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,   219,   185,   177,   183,
 +     176,   185,   185,   184,   177,   228,   229,   184,   183,   183,
 +     185,   185,   184,   183,   237,   185,   184,   177,   177,   177,
 +     177,  1339,   184,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,   184,   184,   179,
 +    1068,   176,   179,   179,     5,   268,   269,   270,     5,     5,
 +     181,    87,     6,     6,   184,   130,   279,   280,   281,  1101,
 +     283,    97,     6,   286,   287,     6,     6,   290,   184,   105,
 +     106,   107,   838,   184,     6,   111,   112,   113,   114,   179,
 +     303,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +       4,   176,   315,   181,   176,     7,   319,   320,   321,   322,
 +     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
 +     333,   334,   335,   336,   337,   338,   339,   340,   186,   179,
 +      87,   887,   888,   889,   186,   184,     7,   350,   185,   352,
 +      97,     6,     6,     6,   177,     7,  1109,  1000,   105,   106,
 +     107,     7,   177,   177,   111,   112,   113,   114,   177,   185,
 +       7,   374,   375,  1109,   377,   378,   379,   380,   381,   382,
 +     383,   384,   385,   386,   387,   388,   389,   390,   391,   178,
 +    1344,   394,  1145,     6,  1109,     7,  1218,   184,     6,   184,
 +       7,     6,     6,     6,   407,     4,  1391,     4,   184,  1145,
 +     413,   184,   184,   127,   184,   418,   178,     6,     6,     6,
 +     423,   424,   183,   178,   178,   183,   429,   430,     6,     4,
 +    1145,   434,   183,   183,   183,   178,   439,   440,   441,   183,
 +     178,  1188,  1189,   178,     4,     6,   185,     6,   180,     6,
 +     130,   190,     7,     7,     7,   194,   459,   460,   461,   462,
 +     463,   464,   201,     7,   130,   468,   469,   470,   471,   472,
 +       7,     7,   130,   476,     7,     7,   479,   480,  1121,   184,
 +     483,   484,   485,     4,   181,   488,   489,   490,   491,     6,
 +      12,    13,    87,   496,   185,   185,     6,   180,     7,     7,
 +       7,   504,    97,   181,     6,  1148,  1491,   510,   511,   184,
 +     105,   106,   107,     6,  1060,     6,   111,   112,   113,   114,
 +       6,     6,  1330,     7,   184,     6,   529,   177,   179,   268,
 +     533,   270,   535,   177,   164,     7,   539,     7,     7,     7,
 +       7,  1184,    64,    65,    66,    67,    68,    69,    70,    71,
 +      72,    73,    72,    75,     7,     7,     6,   178,    80,    81,
 +       7,    83,    84,    85,   178,     7,  1374,    89,   178,   178,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,   587,  1228,  1339,  1395,   176,     7,
 +     185,     7,  1235,  1236,     6,     4,     4,   177,   184,     6,
 +     122,   123,   124,  1339,     6,   184,     7,    87,  1154,     6,
 +      70,     7,     7,     7,     6,   618,     6,    97,   621,     6,
 +     623,   624,     6,     6,     4,   105,   106,   107,   631,   632,
 +    1377,   111,   112,   113,   114,     4,   375,     4,   185,   178,
 +       6,     6,   645,     4,  1190,   183,  1192,     6,  1194,   178,
 +     178,   654,   178,     7,   181,     6,   659,   660,   661,   662,
 +     184,   177,  1208,   185,   667,  1211,  1212,   181,   407,     6,
 +      80,   674,   675,   184,     6,     4,     6,   680,   184,   184,
 +     184,     6,     6,   184,  1492,     6,  1494,     5,     7,     6,
 +     693,     7,     7,   696,     7,     7,   184,   184,     6,     6,
 +     179,     6,     6,     6,     4,   185,   184,   197,   184,   184,
 +       6,   714,     6,   126,     6,   718,   719,   720,   721,   183,
 +       6,     4,     4,   726,     4,     6,     4,     6,   218,     6,
 +     733,   221,   735,   736,     6,     6,     6,     6,     6,     6,
 +       6,  1549,     6,     5,   483,   484,   485,     6,   184,     6,
 +       6,   130,     6,     6,     6,   245,    87,     6,     6,   183,
 +     763,     6,     6,     6,     6,   504,    97,   178,   771,   772,
 +     773,     6,   511,   776,   105,   106,   107,     7,     6,     6,
 +     111,   112,   113,   114,   184,   788,     6,     5,   181,     6,
 +     793,     6,    68,   796,   533,     6,     6,     6,   184,     6,
 +    1553,     6,   184,   806,   807,   808,   809,     6,   185,   812,
 +     300,   301,   185,   184,   184,     7,   184,  1553,  1461,     6,
 +     184,     6,   312,   125,     6,   185,     6,   128,     6,     6,
 +       6,     6,  1585,     6,  1587,  1381,     6,  1383,  1553,  1385,
 +     184,     6,     6,     6,     6,   184,   184,  1393,     6,  1585,
 +    1396,  1587,  1605,   856,   185,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,  1605,
 +    1585,   185,  1587,   176,    87,   184,     6,     6,    12,    13,
 +       6,     6,   621,     6,   623,     6,     6,  1530,     6,     6,
 +    1605,     6,   631,   632,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,     6,     6,
 +     185,   184,   176,     6,   917,     6,     6,   920,     6,     6,
 +       6,   184,     6,   184,   184,     6,   184,   930,   667,   184,
 +      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
 +       6,    75,     6,   946,     6,   184,    80,    81,  1494,    83,
 +      84,    85,    12,    13,     6,    89,     6,     6,   184,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,     6,   977,   714,   184,   176,     6,   718,
 +     719,   720,   721,     6,     6,   988,   989,   726,   122,   123,
 +     124,     6,   997,  1464,  1358,     3,   999,  1000,  1005,   405,
 +    1359,     3,   433,    -1,    64,    65,    66,    67,    68,    69,
 +      70,    71,    72,    73,    -1,    75,  1125,    -1,    -1,    -1,
 +      80,    81,    -1,    83,    84,    85,    -1,    -1,    -1,    89,
 +      -1,    -1,    -1,    -1,  1037,  1038,  1039,   776,    -1,    -1,
 +      -1,    -1,    -1,    -1,  1047,    -1,  1049,    -1,    -1,    -1,
 +      -1,   185,    -1,    -1,    -1,    -1,    -1,  1060,    -1,    -1,
 +      -1,    -1,   122,   123,   124,  1068,    -1,   806,   807,   808,
 +     809,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,  1089,  1090,  1091,   176,
 +      -1,    -1,    -1,    -1,   584,    -1,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,    -1,    -1,   856,    -1,  1122,
 +      -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,    -1,    -1,
 +      -1,    12,    13,  1136,    -1,    -1,    -1,    -1,  1141,    -1,
 +      -1,    -1,    -1,    -1,    -1,  1148,    -1,    -1,    87,  1152,
 +    1153,    -1,    -1,    -1,    -1,    -1,  1159,  1160,    97,    -1,
 +      -1,  1164,    -1,    -1,    -1,   655,   105,   106,   107,  1172,
 +      -1,    -1,   111,   112,   113,   114,   666,    -1,    -1,  1182,
 +       5,  1184,    -1,    64,    65,    66,    67,    68,    69,    70,
 +      71,    72,    73,  1196,    75,    -1,    -1,    -1,    -1,    80,
 +      81,    -1,    83,    84,    85,  1208,    -1,    -1,    89,  1212,
 +      87,    -1,  1215,    -1,    39,    40,    41,    42,    43,    44,
 +      97,    -1,    -1,    -1,    -1,  1228,    51,    52,   105,   106,
 +     107,    -1,    -1,  1236,   111,   112,   113,   114,    63,    -1,
 +      -1,   122,   123,   124,    -1,    -1,   185,    -1,    -1,  1252,
 +    1253,    -1,   742,    -1,     3,     4,    -1,  1260,    -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,    -1,    -1,    -1,
 +      -1,  1294,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
 +      -1,    -1,    -1,    -1,   185,    54,    55,    56,   185,  1312,
 +      -1,  1314,    -1,    62,    -1,    -1,    87,    -1,   143,   144,
 +      -1,    -1,  1325,    -1,  1327,    -1,    97,  1330,    -1,  1068,
 +      -1,    -1,    -1,  1336,   105,   106,   107,    -1,    -1,    -1,
 +     111,   112,   113,   114,    -1,    -1,  1349,    -1,    -1,    87,
 +       6,  1354,   842,   843,    -1,   845,    -1,   847,   848,    97,
 +      -1,   851,   852,    -1,    -1,    -1,    -1,   105,   106,   107,
 +      -1,  1374,    -1,   111,   112,   113,   114,    -1,  1381,    -1,
 +    1383,    -1,  1385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,  1395,   142,    -1,    -1,  1399,    -1,    -1,    -1,
 +     149,   150,   151,   152,   153,    -1,    -1,    -1,    -1,    -1,
 +      -1,  1414,  1415,    -1,   185,    -1,  1419,    -1,   167,   168,
 +      -1,    -1,    -1,   172,    -1,    -1,  1429,    -1,   177,    -1,
 +    1433,    -1,    -1,   182,    -1,   184,    -1,    -1,    -1,    87,
 +      -1,    -1,   932,   933,   934,    -1,    -1,   185,    -1,    97,
 +      -1,    -1,   942,    -1,    -1,    -1,  1459,   105,   106,   107,
 +      -1,  1464,    -1,   111,   112,   113,   114,    -1,  1471,  1208,
 +      -1,    -1,    -1,  1212,    -1,  1478,    -1,    -1,  1481,    -1,
 +      -1,  1484,    -1,    -1,    -1,  1488,    -1,    -1,    -1,  1492,
 +      -1,  1494,    -1,    -1,    -1,    -1,    -1,    -1,  1501,    -1,
 +     990,  1504,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,  1006,    -1,    -1,    -1,
 +     176,    -1,  1012,    -1,    -1,    -1,    -1,    -1,  1018,    87,
 +    1020,  1021,    -1,  1536,    -1,  1025,    -1,   185,    -1,    97,
 +    1030,  1031,  1032,    -1,    -1,    -1,  1549,   105,   106,   107,
 +      -1,    -1,    -1,   111,   112,   113,   114,  1047,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,  1062,    -1,   176,  1314,  1066,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,
 +      -1,  1330,    -1,     9,    10,    11,    -1,  1336,    14,    15,
 +      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
 +      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
 +       8,    -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,    45,
 +      46,    47,    -1,    -1,    -1,  1374,    -1,    -1,    54,    55,
 +      56,    -1,    -1,    -1,    -1,  1135,    62,     3,     4,    -1,
 +      -1,    -1,    -1,     9,    10,    11,  1395,    -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,  1175,  1176,  1177,  1178,    45,
 +      46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,
 +      56,    -1,    -1,    -1,    -1,    -1,    62,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +    1210,    -1,   176,    -1,    -1,    -1,   142,    -1,    -1,    -1,
 +      -1,    -1,  1222,   149,   150,   151,   152,   153,    -1,  1229,
 +      -1,  1231,    -1,    -1,    -1,  1235,    -1,    -1,    -1,     6,
 +      -1,   167,   168,  1492,    -1,  1494,   172,    -1,    -1,    -1,
 +      -1,   177,    -1,    -1,  1254,    -1,   182,    -1,     6,    -1,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,  1275,   142,     6,   176,    -1,
 +      -1,    -1,    -1,   149,   150,   151,   152,   153,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +    1549,   167,   168,    -1,    -1,    -1,   172,    -1,    -1,  1309,
 +      -1,   177,    -1,    -1,   180,    -1,   182,    -1,     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,    -1,    -1,  1353,    39,    40,    41,    42,    43,    44,
 +      45,    46,    47,    -1,    -1,    -1,    51,    52,    -1,    54,
 +      55,    56,    -1,  1373,    -1,    -1,    -1,    62,    63,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +    1390,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,  1445,    -1,   176,    -1,    -1,
 +      -1,   136,    -1,    -1,    -1,    -1,    -1,   142,   143,   144,
 +      -1,    -1,    -1,    -1,   149,   150,   151,   152,   153,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   167,   168,    -1,    -1,    -1,   172,    -1,    -1,
 +      -1,    -1,   177,    -1,   179,    -1,   181,   182,    -1,   184,
 +      -1,   186,    -1,  1503,     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,    36,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
 +      -1,    -1,    -1,    12,    13,    54,    55,    56,    -1,    -1,
 +      -1,    -1,    -1,    62,    -1,    64,    -1,    -1,    67,    -1,
 +      -1,    70,    -1,    72,  1574,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,
 +      -1,    -1,    91,    92,    93,    94,    95,    -1,    -1,    -1,
 +      99,    -1,    -1,   102,    -1,    64,    65,    66,    67,    68,
 +      69,    70,    71,    72,    73,    -1,    75,    -1,    -1,    -1,
 +      -1,    80,    81,    -1,    83,    84,    85,    -1,    -1,    -1,
 +      89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,
 +     149,   150,   151,   152,   153,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,   122,   123,   124,    -1,    -1,   167,   168,
 +      -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,   177,    -1,
 +      -1,     3,     4,   182,    -1,   184,   185,     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,    36,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    45,    46,    47,   185,    -1,    -1,    -1,
 +      -1,    -1,    54,    55,    56,    -1,    -1,    12,    13,    -1,
 +      62,    -1,    64,    -1,    -1,    67,    -1,    -1,    70,    -1,
 +      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    91,
 +      92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,    -1,
 +     102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,
 +      65,    66,    67,    68,    69,    70,    71,    72,    73,    -1,
 +      75,    -1,    -1,    -1,    -1,    80,    81,    -1,    83,    84,
 +      85,    -1,     6,    -1,    89,    -1,    -1,    -1,    -1,    -1,
 +     142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   150,   151,
 +     152,   153,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,   167,   168,   122,   123,   124,
 +     172,    -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,    -1,
 +     182,    -1,    -1,   185,     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,    36,    -1,    -1,
 +      39,    40,    41,    42,    43,    44,    45,    46,    47,    -1,
 +     185,    -1,    51,    52,    -1,    54,    55,    56,    -1,    -1,
 +      -1,    -1,    -1,    62,    63,    64,    -1,    -1,    67,    -1,
 +      -1,    70,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,
 +      -1,    -1,    91,    92,    93,    94,    95,    -1,    -1,    -1,
 +      99,    -1,    -1,   102,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,    -1,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,   142,   143,   144,    -1,    -1,    -1,    -1,
 +     149,   150,   151,   152,   153,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   167,   168,
 +      -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,   177,    -1,
 +       3,     4,     5,   182,    -1,   184,     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,    36,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    45,    46,    47,    -1,    -1,    -1,    12,    13,
 +      -1,    54,    55,    56,    -1,    -1,    -1,    -1,    -1,    62,
 +      -1,    64,    -1,    -1,    67,    -1,    -1,    70,    -1,    72,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
 +      93,    94,    95,    -1,    -1,    -1,    99,    -1,    -1,   102,
 +      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
 +      -1,    75,    -1,    -1,    -1,    -1,    80,    81,    -1,    83,
 +      84,    85,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,
 +      -1,    -1,    -1,    -1,    -1,    -1,   149,   150,   151,   152,
 +     153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
 +     124,    -1,    -1,    -1,   167,   168,    -1,    -1,    -1,   172,
 +      -1,    -1,    -1,    -1,   177,    -1,     3,     4,     5,   182,
 +      -1,   184,     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,    36,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,
 +      47,   185,    -1,    -1,    12,    13,    -1,    54,    55,    56,
 +      -1,    -1,    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,
 +      67,    -1,    -1,    70,    -1,    72,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
 +      -1,    -1,    -1,    -1,    91,    92,    93,    94,    95,    -1,
 +      -1,    -1,    99,    -1,    -1,   102,    64,    65,    66,    67,
 +      68,    69,    70,    71,    72,    73,    -1,    75,    -1,    -1,
 +      -1,    -1,    80,    81,    -1,    83,    84,    85,    -1,    -1,
 +       6,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,     6,
 +      -1,    -1,   149,   150,   151,   152,   153,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
 +     167,   168,    -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,
 +     177,    -1,     3,     4,    -1,   182,    -1,   184,     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,    36,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    45,    46,    47,   185,    -1,    -1,
 +      -1,    -1,    -1,    54,    55,    56,    -1,    -1,    -1,    -1,
 +      -1,    62,    -1,    64,    -1,    -1,    67,    -1,    -1,    70,
 +      -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,
 +      91,    92,    93,    94,    95,    -1,    -1,    -1,    99,    -1,
 +      -1,   102,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,
 +     176,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,     8,    -1,    -1,    -1,   176,
 +      -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   150,
 +     151,   152,   153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   167,   168,    -1,    -1,
 +      -1,   172,    -1,    -1,    -1,    -1,   177,    -1,     3,     4,
 +      -1,   182,    -1,   184,     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,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      45,    46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
 +      55,    56,    -1,    -1,    -1,    -1,    -1,    62,    -1,    64,
 +      -1,    -1,    67,    -1,    -1,    70,    -1,    72,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    84,
 +      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    94,
 +      95,    -1,    -1,    -1,    99,    -1,    -1,   102,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,     8,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,
 +      -1,    -1,    -1,     8,   149,   150,   151,   152,   153,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   167,   168,    -1,    -1,    -1,   172,    -1,    -1,
 +      -1,    -1,   177,    -1,     3,     4,    -1,   182,    -1,   184,
 +       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,    36,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
 +      -1,    -1,    -1,    -1,    -1,    54,    55,    56,    -1,    -1,
 +      -1,    -1,    -1,    62,    -1,    64,    -1,    -1,    67,    -1,
 +      -1,    70,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,
 +      -1,    -1,    91,    92,    93,    94,    95,    -1,    -1,    -1,
 +      99,    -1,    -1,   102,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,     8,    -1,    -1,
 +      -1,   176,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,
 +     149,   150,   151,   152,   153,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   167,   168,
 +      -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,   177,    -1,
 +       3,     4,    -1,   182,    -1,   184,     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,    36,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
 +      -1,    54,    55,    56,    -1,    -1,    -1,    -1,    -1,    62,
 +      -1,    64,    -1,    -1,    67,    -1,    -1,    70,    -1,    72,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
 +      93,    94,    95,    -1,    -1,    -1,    99,    -1,    -1,   102,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,     8,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,
 +      -1,    -1,    -1,    -1,    -1,    -1,   149,   150,   151,   152,
 +     153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,   167,   168,    -1,    -1,    -1,   172,
 +      -1,    -1,    -1,    -1,   177,    -1,     3,     4,    -1,   182,
 +      -1,   184,     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,    36,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,
 +      47,    -1,    -1,    -1,    87,    -1,    -1,    54,    55,    56,
 +      -1,    -1,    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,
 +      67,    -1,    -1,    70,    -1,    72,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
 +      -1,    -1,    -1,    -1,    91,    92,    93,    94,    95,    -1,
 +      -1,    -1,    99,    -1,    -1,   102,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,   142,    -1,    -1,    -1,    -1,
 +      -1,    -1,   149,   150,   151,   152,   153,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +     167,   168,    -1,    -1,    -1,   172,    -1,    -1,    -1,    -1,
 +     177,    -1,     3,     4,     5,   182,    -1,   184,     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,    39,    40,
 +      41,    42,    43,    44,    45,    46,    47,    -1,    -1,    -1,
 +      51,    52,    -1,    54,    55,    56,    -1,     3,     4,     5,
 +      -1,    62,    63,     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,    39,    40,    41,    42,    43,    44,    45,
 +      46,    47,    -1,    -1,    -1,    51,    52,    -1,    54,    55,
 +      56,    -1,    -1,    -1,    -1,    -1,    62,    63,    -1,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,   142,   143,   144,   183,    -1,   185,    -1,   149,   150,
 +     151,   152,   153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   167,   168,    -1,    -1,
 +      -1,   172,    -1,    -1,    -1,    -1,   177,    -1,    -1,    -1,
 +      -1,   182,    -1,   184,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   142,   143,   144,    -1,
 +      -1,    -1,    -1,   149,   150,   151,   152,   153,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,   167,   168,    -1,    -1,    -1,   172,    -1,    -1,    -1,
 +      -1,   177,    -1,     3,     4,     5,   182,    -1,   184,     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,    39,
 +      40,    41,    42,    43,    44,    45,    46,    47,    -1,    -1,
 +      -1,    51,    52,    -1,    54,    55,    56,    -1,    -1,    -1,
 +      -1,    -1,    62,    63,    -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,    36,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,
 +      47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,
 +      -1,    -1,    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,
 +      67,    -1,    -1,    70,    -1,    72,    -1,    -1,    -1,    -1,
 +      -1,    -1,   142,   143,   144,    -1,    -1,    84,    -1,   149,
 +     150,   151,   152,   153,    91,    92,    93,    94,    95,    -1,
 +      -1,    -1,    99,    -1,    -1,   102,    -1,   167,   168,    -1,
 +      -1,    -1,   172,    -1,    -1,    -1,    -1,   177,    -1,    -1,
 +      -1,    -1,   182,    -1,   184,    -1,    -1,    -1,    -1,    -1,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,   142,    -1,    -1,   176,    -1,
 +      -1,    -1,   149,   150,   151,   152,   153,   185,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +     167,   168,    -1,    -1,    -1,   172,     3,     4,     5,    -1,
 +     177,    -1,     9,    10,    11,   182,    -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,    39,    40,    41,    42,    43,    44,    45,    46,
 +      47,    -1,    -1,    -1,    51,    52,    -1,    54,    55,    56,
 +      -1,    -1,    -1,    -1,    -1,    62,    63,   108,   109,   110,
 +     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
 +     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
 +     131,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,   144,   145,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +     183,    -1,   185,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,   142,   143,   144,    -1,    -1,
 +      -1,    -1,   149,   150,   151,   152,   153,    -1,    -1,    -1,
 +       0,     1,    -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,
 +     167,   168,    12,    13,    -1,   172,    -1,    -1,    -1,    -1,
 +     177,    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,
 +      50,    -1,    -1,    53,    -1,    -1,    -1,    57,    58,   260,
 +      60,    61,    -1,    -1,    64,    65,    66,    67,    68,    69,
 +      70,    71,    72,    73,    -1,    75,    76,    77,    78,    79,
 +      80,    81,    82,    83,    84,    85,    86,    -1,    88,    89,
 +      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
 +     100,   101,   102,   103,   104,    -1,    -1,    -1,   108,   109,
 +     110,    -1,    -1,    -1,    -1,    -1,   116,     4,    -1,    -1,
 +      -1,   121,   122,   123,   124,    12,    13,   127,    -1,   129,
 +      -1,   131,   132,   133,   134,   135,   136,   137,   138,   139,
 +     140,   141,    -1,    -1,    -1,   145,   146,   147,   148,    -1,
 +      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,
 +      57,    58,    -1,    60,    61,    -1,    -1,    64,    65,    66,
 +      67,    68,    69,    70,    71,    72,    73,    -1,    75,    76,
 +      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
 +      -1,    88,    89,    90,    91,    92,    93,    94,    95,    96,
 +      97,    98,    99,   100,   101,   102,   103,   104,    12,    13,
 +      -1,   108,   109,   110,    -1,    -1,    -1,    -1,    -1,   116,
 +      -1,    -1,    -1,    -1,   121,   122,   123,   124,    -1,    -1,
 +     127,    -1,   129,    -1,   131,   132,   133,   134,   135,   136,
 +     137,   138,   139,   140,   141,    -1,    -1,    -1,   145,   146,
 +     147,   148,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
 +      -1,    75,    -1,    -1,    -1,    -1,    80,    81,    -1,    83,
 +      84,    85,    -1,    -1,    -1,    89,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,
 +      -1,   183,    -1,   185,    -1,    -1,    -1,    -1,   122,   123,
 +     124,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   185,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,   185,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   185,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +     185,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   185,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,   185,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   185,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +     185,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   185,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,   185,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   185,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +     185,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   185,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,   185,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   185,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +     185,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,    -1,   185,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,    -1,    -1,   185,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   185,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 +     185,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,    -1,   184,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,
 +      -1,    -1,   184,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,   178,    -1,    -1,    -1,    -1,   183,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,   183,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +     183,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,   183,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,   183,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,   183,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +     183,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,   183,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,   183,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,   183,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +     183,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,   183,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,   183,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,   183,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +     183,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,   183,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,   183,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,    -1,    -1,    -1,   183,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,
 +     183,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,    -1,    -1,    -1,   183,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,
 +      -1,    -1,   183,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,
 +      -1,   180,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,
 +     176,    -1,    -1,    -1,   180,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,   180,   158,   159,
 +     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
 +     170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,
 +     180,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,   180,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,    -1,    -1,    -1,   180,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,   180,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,
 +      -1,    -1,   180,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,    -1,    -1,   180,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,   180,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,
 +      -1,   180,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,
 +     176,    -1,    -1,    -1,   180,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,    -1,    -1,   180,   158,   159,
 +     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
 +     170,   171,    -1,    -1,    -1,    -1,   176,    -1,    -1,    -1,
 +     180,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,    -1,    -1,   180,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,    -1,    -1,    -1,   180,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,   159,
 +     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
 +     170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,
 +     178,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,   178,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,
 +     176,    -1,   178,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,   178,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,    -1,   178,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,   178,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,    -1,   178,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,   159,
 +     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
 +     170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,
 +     178,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,   178,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,
 +     176,    -1,   178,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,   178,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,    -1,   178,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,   178,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,    -1,   178,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,   159,
 +     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
 +     170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,
 +     178,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,
 +      -1,   178,   158,   159,   160,   161,   162,   163,   164,   165,
 +     166,   167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,
 +     176,    -1,   178,   158,   159,   160,   161,   162,   163,   164,
 +     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
 +      -1,   176,    -1,   178,   158,   159,   160,   161,   162,   163,
 +     164,   165,   166,   167,   168,   169,   170,   171,    -1,    -1,
 +      -1,    -1,   176,    -1,   178,   158,   159,   160,   161,   162,
 +     163,   164,   165,   166,   167,   168,   169,   170,   171,    -1,
 +      -1,    -1,    -1,   176,    -1,   178,   158,   159,   160,   161,
 +     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
 +      -1,    -1,    -1,    -1,   176,    -1,   178,   158,   159,   160,
 +     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
 +     171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,   159,
 +     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
 +     170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,   158,
 +     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
 +     169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,   178,
 +     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
 +     168,   169,   170,   171,    -1,    -1,    -1,    -1,   176,    -1,
 +     178,   158,   159,   160,   161,   162,   163,   164,   165,   166,
 +     167,   168,   169,   170,   171,    -1,    -1,    -1,    -1,   176
- };
- 
- /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-    symbol of state STATE-NUM.  */
- static const yytype_uint16 yystos[] =
- {
-        0,     1,   188,   189,     6,     0,     4,    12,    13,    37,
-       38,    48,    49,    50,    53,    57,    58,    60,    61,    64,
-       65,    66,    67,    68,    69,    70,    71,    72,    73,    75,
-       76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-       86,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-       97,    98,    99,   100,   101,   102,   103,   104,   108,   109,
-      110,   116,   121,   122,   123,   124,   127,   129,   131,   132,
-      133,   134,   135,   136,   137,   138,   139,   140,   141,   145,
-      146,   147,   148,   190,   192,   193,   213,   227,   232,   235,
-      236,   237,   238,   239,   240,   241,   261,   262,   263,   264,
-      282,   283,     3,     4,     5,     9,    10,    11,    14,    15,
++=======
+        3,  1266,   227,     4,   946,   349,     4,   351,   467,   468,
+        4,     6,     4,     6,     3,   359,   242,     4,     4,    74,
+        5,     5,     5,     4,     6,     4,     6,     6,   254,   102,
+        4,     4,     4,   181,     5,   373,     5,   375,     5,     5,
+      188,     5,     5,     5,     0,     6,    46,    47,     6,    49,
+        7,     6,     6,     6,     6,   181,     4,   183,     6,    62,
+        4,   942,   171,   172,   190,     6,     4,     4,   183,   529,
+      171,   172,  1337,    76,     6,   190,   302,   131,   304,     3,
+      189,     6,     6,   171,   172,   183,   187,   185,   189,    68,
+      144,   145,   190,    71,   171,   172,    74,     7,    76,   187,
+      560,   561,   562,   563,   564,   565,   566,   567,   568,   569,
+      570,   188,   572,   573,   574,   575,   576,   577,   578,   181,
+        8,   183,   582,   583,   584,   171,   172,   121,   122,   123,
+      124,    68,    13,   593,     4,    72,   187,   119,   189,   131,
+      132,   187,   181,   189,   178,   179,    74,    84,    76,   134,
+      134,   134,    76,   140,   188,  1420,   181,    95,    96,    97,
+       98,   119,   165,   134,     6,   103,   119,   119,   106,     6,
+      181,  1436,   183,    71,   177,   178,    74,   166,   183,   190,
+      185,   184,   183,   181,   185,   190,   181,   190,     7,   190,
+      188,    71,   195,   188,    74,   189,   199,   177,   178,   202,
+      181,   188,   188,   206,   207,   208,   209,   188,     6,   212,
+      213,   214,   550,   168,   188,   188,   188,   188,     6,   188,
+      223,   188,   188,   226,   188,   188,   188,   188,   185,  1110,
+      230,   231,   458,   459,   188,   183,     7,   181,   238,   171,
+      172,   165,   242,   168,     7,   248,   249,   250,   158,   159,
+      160,   161,   478,   177,   178,   171,   172,   260,   261,   181,
+      184,   131,   132,   182,   602,   184,     7,   605,   178,   179,
+      273,   187,   275,   189,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,   182,     6,
+      184,   190,   180,   187,   171,   172,   195,     7,   171,   172,
+      199,   189,   375,     6,   181,   308,   309,   206,   171,   172,
+      536,   188,   181,  1578,    68,   188,   181,    71,   321,   188,
+       74,   314,    76,   188,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,   158,
+      159,   160,   161,   180,   178,   179,   349,   350,   351,   352,
+      353,   354,   355,   356,   357,   183,   359,   360,   181,   178,
+      179,   364,   365,   366,   367,   188,   185,   171,   172,   362,
+      350,   183,   352,   353,   354,   368,   356,   357,   181,   184,
+      360,   384,   187,   187,   364,   365,   366,   158,   159,   160,
+      161,   178,   179,    78,   854,   158,   159,   160,   161,  1664,
+       71,   188,   181,    74,     8,    76,    68,   178,   179,    71,
+       68,   184,    74,    71,   187,   418,    74,   158,   159,   160,
+      161,   181,   171,   172,   181,   349,   350,   351,   352,   353,
+      354,   181,   356,   357,   181,   359,   360,   178,   179,   188,
+      364,   365,   366,   367,   171,   172,    74,   785,   158,   159,
+      160,   161,    74,   446,   447,   448,   449,    91,   188,   187,
+      187,   189,     6,   178,   179,   465,   466,   101,   178,   179,
+      185,   171,   172,   473,   700,   109,   110,   111,   467,   468,
+       74,   115,   116,   117,   118,   384,   559,   187,   171,   172,
+       74,   494,   495,   496,   207,   208,   209,   171,   172,   212,
+      213,   214,   505,  1445,   187,  1447,   187,  1449,   189,   171,
+      172,   171,   172,   187,   171,   172,   519,   171,   172,   181,
+      187,    76,   189,   526,   171,   172,   188,   187,   178,   179,
+      187,    71,   605,   187,   182,   248,   249,   997,   188,   187,
+      187,   181,  1002,  1003,  1004,  1005,  1006,   260,   261,   188,
+      553,   182,  1012,  1013,     4,     5,   187,    74,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,   910,   911,   912,   913,   180,   182,   187,   184,
+      189,   505,   187,   171,   172,   189,   171,   172,   188,    39,
+       40,    41,    42,    43,    44,   494,   495,   496,    48,   187,
+       71,   604,   187,    53,    54,   182,    56,   184,   171,   172,
+      187,   171,   172,   606,   171,   172,   182,    67,   184,  1561,
+      519,   846,   188,  1504,   187,    71,  1507,   187,     4,  1510,
+      187,   182,    74,   171,   172,     4,   187,    91,   641,   187,
+      643,   189,     4,   646,   171,   172,   649,   101,   651,   187,
+      653,   654,     6,   182,   553,   109,   110,   111,   187,     4,
+      187,   115,   116,   117,   118,   181,   646,  1127,   741,     4,
+      182,   651,   184,   187,   677,   189,   188,  1619,  1138,  1621,
+     1018,  1623,    91,    68,     6,   182,    71,  1629,   181,    74,
+      187,    76,   101,   696,   697,   181,  1034,   147,   148,   182,
+      109,   110,   111,   703,   187,   181,   115,   116,   117,   118,
+      710,   183,   785,   173,   174,   175,   716,     4,   791,  1600,
+      180,   187,   646,   189,   181,   649,  1668,   651,  1670,   182,
+     1672,   184,     6,     7,   187,   189,   171,   172,   173,   174,
+      175,   744,   641,   182,   643,   180,     7,   187,   187,   189,
+      753,   181,   755,   183,   757,   185,   759,   182,   188,   184,
+      190,   764,   187,  1644,   767,   187,  1647,   189,   187,  1650,
+      189,   187,  1653,   189,    74,    74,    76,    76,   181,   782,
+      189,   784,   187,   181,   189,  1244,  1245,   187,   791,   189,
+      187,   187,   189,   189,   867,   187,     6,   189,   697,   187,
+     1025,   189,   181,   187,  1685,   189,  1687,     7,  1689,     4,
+      187,   791,   189,   816,   181,   187,  1154,   189,   821,   822,
+      823,   824,   187,   187,   189,   189,   187,   187,   189,   189,
+      833,   187,   825,   189,   181,   187,  1296,   189,     4,   181,
+        6,   821,   181,   823,   824,   744,   849,   850,   851,   852,
+      187,   181,   189,   833,   753,   187,   755,   189,   757,   187,
+      759,   189,   187,   181,   189,   764,   181,   791,   767,   872,
+      187,   187,   189,   189,   187,   187,   189,   189,   187,   187,
+      189,   189,   188,   883,   887,   888,    91,   890,   181,   892,
+      893,   964,   872,   896,   897,     6,   101,   821,   901,   823,
+      824,   187,   181,   189,   109,   110,   111,     6,     7,   833,
+      115,   116,   117,   118,   187,   181,   189,   816,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+      930,   931,   932,   187,   180,   189,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,  1018,   171,   172,   872,   180,
+      849,   850,   851,   852,   187,   187,   189,   189,   188,   188,
+     1185,     8,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,   188,   980,   981,   982,
+      180,  1440,   181,   187,   189,   189,   187,   990,   189,   187,
+      187,   189,   189,   187,   187,   189,   189,   181,     3,     4,
+      181,   187,   901,   189,     9,    10,    11,   181,   181,    14,
+       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+       35,   181,   181,   181,   181,   181,  1039,   181,     6,     6,
+       45,    46,    47,   188,    49,   188,   188,   188,   188,   181,
+        4,     5,  1055,    58,    59,    60,  1049,   181,  1061,   181,
+      181,    66,  1406,   183,  1067,   188,  1069,  1070,   183,   188,
+      188,  1074,  1075,  1076,  1077,  1078,  1079,  1080,  1081,   183,
+      183,   183,     6,  1156,   185,    39,    40,    41,    42,    43,
+       44,   188,   134,  1096,    48,   190,   190,     6,     6,    53,
+       54,     6,    56,   188,   188,     6,   183,     4,  1111,  1109,
+      180,   185,  1115,    67,  1117,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,     7,
+      183,   188,     7,   180,   189,   182,     6,     6,     6,   182,
+        7,   146,     7,     7,     6,     4,     7,   188,   153,   154,
+      155,   156,   157,     6,    50,     7,     6,     6,     6,     6,
+     1163,    50,    50,    50,   188,   131,   171,   172,   182,     6,
+        6,   176,   182,   182,  1167,   187,   181,     6,   182,   184,
+      187,   186,   182,  1163,  1177,   187,  1411,   190,  1191,   187,
+      187,   187,   195,   147,   148,   182,   199,     4,  1201,   184,
+        4,  1274,     7,   206,     6,     6,     6,     6,   134,     7,
+     1210,  1204,     7,     7,   134,     7,     7,   134,  1117,     7,
+        7,  1201,     4,   188,   178,   179,     6,   182,  1454,   182,
+      182,   185,   182,    91,   185,     7,     6,   184,     7,  1163,
+      189,   189,   188,   101,   188,   188,  1246,  1240,  1248,   188,
+     1250,   109,   110,   111,     7,  1244,  1245,   115,   116,   117,
+      118,  1264,   185,  1266,  1264,  1268,   188,  1267,  1268,     6,
+      273,     6,   275,    91,     6,     6,   183,  1201,     7,     6,
+     1283,   181,   181,   101,   188,     6,   168,  1290,     7,     7,
+     1293,   109,   110,   111,  1297,     7,  1289,   115,   116,   117,
+      118,    76,     4,     7,  1297,  1298,     7,     6,     4,     7,
+        7,     6,     6,  1316,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,     7,     7,
+      101,   189,   180,     7,  1337,     7,  1562,     6,   109,   110,
+      111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+      131,   132,   133,   188,    12,    13,     6,   181,  1371,   140,
+        7,   189,   143,  1376,     6,   188,     7,   148,   149,     7,
+        7,   384,     6,     6,     6,    74,    91,     6,     6,     4,
+        4,     4,   189,  1396,     6,     6,   101,     6,     4,     6,
+     1403,   187,   187,  1406,   109,   110,   111,   185,   182,   182,
+      115,   116,   117,   118,   182,   418,   182,  1420,     7,   181,
+       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      188,    79,     6,  1436,  1437,   185,    84,    85,     6,    87,
+       88,    89,   188,   188,  1444,    93,  1446,     6,  1448,    84,
+     1453,  1440,   188,     6,   188,  1458,  1456,     6,   188,  1459,
+        6,     6,     5,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,     4,   126,   127,
+      128,   180,  1406,     5,   189,     6,     4,     7,   188,     6,
+        6,   494,   495,   496,   265,   188,   183,  1396,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,  1512,
+        6,   282,     6,   180,     6,   188,   519,    39,    40,    41,
+       42,    43,    44,   526,   188,   188,    48,     6,   130,    12,
+       13,    53,    54,     6,    56,     6,   187,     6,  1437,  1532,
+        4,   189,     4,     6,     4,    67,   188,     6,     6,     6,
+      553,     6,     6,     4,     6,   134,     6,     6,     6,  1458,
+     1563,     5,  1565,     6,     6,  1565,     6,     6,     6,     6,
+        6,     6,     6,     6,     6,  1578,     6,   187,     6,     6,
+     1583,     6,     6,   182,     6,    68,    69,    70,    71,    72,
+       73,    74,    75,    76,    77,     7,    79,     6,   185,     6,
+      188,    84,    85,     6,    87,    88,    89,     5,   188,     6,
+       93,    72,    83,     6,   189,   188,   188,  1610,   189,   188,
+        6,   188,     7,   188,     6,   147,   148,   129,  1631,     6,
+        6,     6,   189,   132,     6,     6,  1639,     6,   641,     6,
+      643,     6,     6,   126,   127,   128,     6,   188,     6,     6,
+      653,   654,     6,     6,   188,   188,     6,   189,   188,  1639,
+       91,  1664,     6,     6,  1563,    91,  1565,     6,     6,     6,
+        6,     6,     6,     6,   189,     6,  1679,     6,  1681,   188,
+      188,   188,     6,     6,   188,     6,     6,     6,   159,   160,
+      161,   162,   163,     6,   697,     6,     6,   188,   188,  1679,
+      188,  1681,   188,   188,  1707,   176,   189,     6,     6,   180,
+        6,     6,     6,     6,     6,  1639,     6,     6,   189,   190,
+      191,   192,     6,   194,   195,   196,   197,  1707,   199,   200,
+      201,     6,  1631,  1535,   416,   206,  1046,  1425,     3,  1426,
+     1054,   744,     3,  1181,    -1,    -1,    -1,    -1,    -1,    -1,
+      753,    -1,   755,   224,   757,  1679,   759,  1681,   444,    -1,
+       -1,   764,   233,   234,   767,    -1,    -1,    -1,    -1,    -1,
+       -1,   242,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,  1707,    -1,    -1,    -1,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,   273,   274,   275,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   816,   285,   286,   287,    -1,   289,    -1,
+       -1,   292,   293,    -1,    -1,   296,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+      311,    -1,    -1,    -1,   180,    -1,   849,   850,   851,   852,
+       -1,    -1,    -1,   324,    -1,    -1,   327,   328,   329,   330,
+      331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
+      341,   342,   343,   344,   345,   346,   347,   348,    -1,    12,
+       13,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,
+      361,    -1,   363,    -1,    -1,    -1,    -1,    -1,   901,    -1,
+       -1,    -1,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   383,   384,    -1,   386,   387,   388,   389,   390,
+      391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+       -1,    -1,   403,    -1,    -1,    68,    69,    70,    71,    72,
+       73,    74,    75,    76,    77,    -1,    79,   418,    -1,    -1,
+       -1,    84,    85,   424,    87,    88,    89,    -1,   429,     6,
+       93,    -1,    -1,   434,   435,    -1,    -1,    -1,    -1,   440,
+      441,    -1,    -1,    -1,   445,   446,   447,   448,   449,   450,
+      451,   452,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   126,   127,   128,    -1,    -1,    -1,   470,
+      471,   472,   473,   474,   475,    -1,    -1,    -1,   479,   480,
+      481,   482,   483,    -1,    -1,    -1,   487,    -1,    -1,   490,
+      491,    -1,    -1,   494,   495,   496,    -1,    -1,   499,   500,
+      501,   502,    12,    13,    -1,    -1,    -1,   508,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   519,    -1,
+       -1,    -1,    -1,    -1,   525,   526,   189,   528,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,   546,   180,    -1,    -1,    -1,
+       -1,   552,   553,    -1,    -1,    -1,   557,    -1,    68,    69,
+       70,    71,    72,    73,    74,    75,    76,    77,    -1,    79,
+       -1,    -1,    -1,    -1,    84,    85,    -1,    87,    88,    89,
+       -1,    -1,    -1,    93,  1117,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,   607,    -1,    -1,    91,
+       -1,    -1,    -1,    -1,    -1,    -1,   126,   127,   128,   101,
+        6,    -1,    -1,    -1,    -1,    12,    13,   109,   110,   111,
+       -1,    91,    -1,   115,   116,   117,   118,   638,    -1,    -1,
+      641,   101,   643,   644,    91,    -1,    -1,    -1,    -1,   109,
+      110,   111,   653,   654,   101,   115,   116,   117,   118,    -1,
+       -1,    -1,   109,   110,   111,    -1,   667,    -1,   115,   116,
+      117,   118,    -1,    -1,    -1,   676,    -1,    -1,    -1,   189,
+       -1,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+       77,    -1,    79,    -1,    -1,    -1,   697,    84,    85,    -1,
+       87,    88,    89,   704,   705,    -1,    93,   189,    -1,   710,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   723,    -1,    -1,   726,    -1,    -1,    -1,   189,
+       -1,  1264,    -1,    -1,    -1,  1268,    -1,    -1,    -1,   126,
+      127,   128,   189,   744,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   753,     6,   755,    -1,   757,    -1,   759,    -1,
+       -1,    -1,    -1,   764,    -1,    -1,   767,    -1,    -1,    -1,
+       -1,    -1,   773,    -1,   775,   776,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    91,    -1,
+       -1,    -1,   189,   804,    -1,    -1,    -1,    -1,   101,    -1,
+       -1,   812,   813,   814,    -1,   816,   109,   110,   111,    -1,
+       -1,    -1,   115,   116,   117,   118,    12,    13,    -1,    -1,
+      831,   202,    -1,    -1,    -1,   836,    -1,    -1,   839,    -1,
+       -1,    -1,    -1,  1376,    -1,    -1,    -1,    91,   849,   850,
+      851,   852,   223,     6,   855,   226,    -1,   101,    -1,    -1,
+       -1,    -1,    -1,  1396,    -1,   109,   110,   111,    -1,    -1,
+     1403,   115,   116,   117,   118,    -1,    -1,    -1,    -1,   250,
+       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
+       76,    77,    -1,    79,    -1,    -1,   189,    -1,    84,    85,
+      901,    87,    88,    89,  1437,    -1,    -1,    93,    -1,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,  1458,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,   308,   309,    -1,
+      126,   127,   128,    -1,    -1,   189,    -1,    -1,    -1,    -1,
+      321,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   960,
+       -1,    -1,   963,    -1,    -1,    -1,   967,    -1,   969,   970,
+      971,    -1,    -1,    -1,    -1,    -1,   977,    -1,    -1,    -1,
+       -1,    91,    -1,    -1,   355,    -1,    -1,    -1,    -1,    -1,
+        6,   101,    -1,   994,    -1,    12,    13,    -1,    -1,   109,
+      110,   111,    -1,   189,    -1,   115,   116,   117,   118,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,  1026,    -1,   180,    -1,    -1,
+     1563,    -1,  1565,    -1,    -1,    -1,  1037,  1038,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1048,  1049,    -1,
+       -1,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+       77,    -1,    79,    -1,    12,    13,    -1,    84,    85,    -1,
+       87,    88,    89,    -1,    -1,    -1,    93,    -1,    -1,   189,
+       -1,    -1,    -1,    -1,    -1,  1086,  1087,  1088,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,  1096,    -1,  1098,  1631,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1109,   126,
+      127,   128,    -1,    -1,    -1,    -1,  1117,    -1,    -1,    -1,
+       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+       -1,    79,    -1,    -1,    -1,    -1,    84,    85,    -1,    87,
+       88,    89,  1143,  1144,  1145,    93,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    91,   180,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   189,   101,    -1,    -1,    -1,  1178,   126,   127,
+      128,   109,   110,   111,    -1,    -1,    -1,   115,   116,   117,
+      118,  1192,    -1,    -1,    -1,    -1,  1197,    -1,    -1,    -1,
+       -1,    -1,    -1,  1204,    -1,    -1,    -1,  1208,  1209,    -1,
+       -1,    -1,    -1,    -1,  1215,  1216,    -1,    -1,    -1,  1220,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1228,    -1,    -1,
+       -1,    -1,    -1,   604,    -1,    -1,    -1,  1238,    -1,  1240,
+       -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,  1252,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,   189,    -1,  1264,    -1,    -1,    -1,  1268,    -1,    -1,
+     1271,    12,    13,    -1,    -1,  1276,  1277,  1278,  1279,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1298,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,   677,    12,    13,    -1,
+       -1,    -1,    -1,  1314,  1315,    -1,    -1,    -1,    -1,    -1,
+       -1,  1322,    -1,    -1,    -1,   696,    -1,    68,    69,    70,
+       71,    72,    73,    74,    75,    76,    77,    -1,    79,    -1,
+       -1,    -1,    -1,    84,    85,    -1,    87,    88,    89,    -1,
+       -1,    -1,    93,    -1,    -1,  1356,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
+       75,    76,    77,  1374,    79,  1376,    -1,    -1,    -1,    84,
+       85,    -1,    87,    88,    89,   126,   127,   128,    93,    -1,
+     1391,    -1,  1393,    -1,    -1,  1396,    -1,    -1,    -1,    -1,
+       -1,    -1,  1403,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,   782,    -1,   784,    -1,  1416,    -1,    -1,    -1,    -1,
+     1421,   126,   127,   128,     6,    -1,    -1,    -1,    -1,    91,
+       -1,    -1,    -1,    -1,    -1,    -1,  1437,    -1,    -1,    -1,
+       -1,    -1,    -1,  1444,    -1,  1446,    -1,  1448,   189,    -1,
+       -1,   822,    -1,    -1,    -1,    -1,    -1,  1458,    -1,    -1,
+       -1,  1462,  1463,  1464,  1465,  1466,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     1481,  1482,     6,    -1,   189,  1486,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,  1496,    -1,    -1,    -1,  1500,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,   887,   888,   180,   890,
+       -1,   892,   893,    -1,    -1,   896,   897,    -1,    -1,  1530,
+       -1,    -1,    -1,    -1,  1535,    -1,    -1,    -1,    -1,    -1,
+       -1,  1542,    -1,    -1,    -1,    -1,    -1,    -1,  1549,    -1,
+       -1,  1552,    -1,    -1,  1555,     6,    -1,    -1,  1559,    -1,
+       -1,    -1,  1563,    -1,  1565,  1566,  1567,  1568,  1569,    -1,
+       -1,    -1,    -1,    -1,    -1,  1576,    -1,    -1,  1579,    -1,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   980,
+      981,   982,    -1,    -1,    -1,  1616,    -1,    -1,    -1,   990,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     1631,    -1,  1633,  1634,  1635,  1636,    -1,    -1,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,     6,    -1,    -1,  1039,    -1,
+       -1,    -1,    -1,    -1,  1675,  1676,  1677,  1678,    -1,    -1,
+       -1,    -1,    -1,    -1,  1055,     6,    -1,    -1,    -1,    -1,
+     1061,    -1,    -1,    -1,    -1,    -1,  1067,    -1,  1069,  1070,
+       -1,    -1,    -1,  1074,  1075,  1076,  1077,  1078,  1079,  1080,
+     1081,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,  1096,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     1111,    -1,    -1,    -1,  1115,    -1,    -1,     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,
-       39,    40,    41,    42,    43,    44,    45,    46,    47,    51,
-       52,    54,    55,    56,    62,    63,   136,   142,   143,   144,
-      149,   150,   151,   152,   153,   167,   168,   172,   177,   179,
-      181,   182,   184,   186,   211,   265,   266,   278,   279,   282,
-      283,    13,    70,   177,   177,     6,   184,     6,     6,     6,
-        6,     6,   179,   179,   177,   184,   177,   177,     4,   177,
-      184,   177,   177,     4,   184,   177,   177,    74,    70,    70,
-        6,   184,    64,    67,    70,    70,    70,    67,    70,    72,
-       72,    64,    67,    70,    72,    67,    70,    72,    67,    70,
-      177,    67,   127,   140,   141,   184,   167,   168,   177,   184,
-      268,   269,   268,   184,    64,    67,    70,   184,   268,     4,
-       64,    68,    80,    70,    72,    70,    67,     4,   136,   184,
-        4,     6,    64,    67,    70,    67,    70,     4,     4,     4,
-        4,     5,    36,    64,    67,    70,    72,    84,   168,   177,
-      184,   232,   241,   265,   271,   272,   273,   283,     4,   177,
-      177,   177,     4,   184,   275,     4,   177,   177,     6,     6,
-      179,     4,     4,     5,   184,     5,   184,     4,   265,     6,
-      177,   184,   177,   179,   186,     7,   154,   155,   156,   157,
-      174,   175,   209,   210,     4,   179,   181,   177,   179,   211,
-      211,   211,   211,   211,   211,   211,   211,   211,   211,   211,
-      211,   211,   211,   211,   211,   211,   211,   211,   211,   211,
-      211,   211,   211,   211,   177,   177,   177,   177,   177,   177,
-      211,   211,     7,   177,   177,   177,   177,   177,   265,   265,
-      265,   265,   180,   265,     4,   127,   128,     4,   282,   283,
-        4,   232,   233,   234,   184,   184,     6,   158,   159,   160,
-      161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-      171,   176,   184,     6,   179,   210,     6,   265,     4,   278,
-      279,   283,   278,   265,   215,   218,   265,   168,   265,   273,
-      274,   265,   265,   177,   265,   274,   265,   265,   177,   274,
-      265,   265,   271,   177,   184,   274,   272,   272,   272,   177,
-      177,   272,   272,   272,   177,   228,   229,   230,   231,   177,
-      177,   177,   271,   265,     4,   271,   275,   184,   184,   268,
-      268,   268,   265,   265,   167,   168,   184,   184,   268,   184,
-      184,   184,   167,   168,   177,   234,   268,   184,   177,   184,
-      177,   177,   177,   272,   272,   271,   177,     4,     6,   179,
+       -1,    -1,    -1,    39,    40,    41,    42,    43,    44,    45,
+       46,    47,    48,    49,    -1,    -1,    -1,    53,    54,    -1,
+       56,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
+       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     1191,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+       -1,    -1,    -1,    -1,   140,   187,    -1,   189,    -1,    -1,
+      146,   147,   148,    -1,    -1,  1266,    -1,   153,   154,   155,
+      156,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,  1283,     7,     8,   171,   172,    -1,    -1,  1290,
+      176,    -1,  1293,    -1,    -1,   181,  1297,   183,    -1,   185,
+      186,    -1,   188,     8,   190,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,  1316,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,     3,     4,    -1,   180,    -1,  1337,     9,    10,    11,
+       -1,   187,    14,    15,    16,    17,    18,    19,    20,    21,
+       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+       32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,
+     1371,    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    58,    59,    60,    -1,
+       -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    -1,    71,
+       -1,    -1,    74,    -1,    76,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,  1420,
+       -1,    -1,    -1,    95,    96,    97,    98,    99,    -1,    -1,
+       -1,   103,    -1,    -1,   106,  1436,    -1,    -1,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,  1453,    -1,    -1,    -1,   180,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,     8,    -1,    -1,   146,   180,    -1,    -1,    -1,    -1,
+       -1,   153,   154,   155,   156,   157,    -1,    -1,    -1,    -1,
+        8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   171,
+      172,    -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,   181,
+       -1,  1512,    -1,    -1,   186,    -1,   188,   189,     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,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    58,    59,    60,    -1,  1578,    -1,    -1,
+       -1,    66,  1583,    68,    -1,    -1,    71,    -1,    -1,    74,
+       -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
+       95,    96,    97,    98,    99,    -1,    -1,    -1,   103,    -1,
+       -1,   106,    -1,    -1,    -1,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,     8,    -1,
+       -1,   146,   180,  1664,    -1,    -1,    -1,    -1,   153,   154,
+      155,   156,   157,    -1,    -1,    -1,    -1,    -1,    -1,     8,
+       -1,    -1,    -1,    -1,    -1,    -1,   171,   172,    -1,    -1,
+       -1,   176,    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,
+       -1,   186,    -1,    -1,   189,     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,    36,    -1,
+       -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+       48,    49,    -1,    -1,    -1,    53,    54,    -1,    56,    -1,
+       58,    59,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
+       68,    -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,
+       98,    99,    -1,    -1,    -1,   103,    -1,    -1,   106,    -1,
+       -1,    -1,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+      180,    -1,    -1,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,     8,   146,   147,
+      148,   180,    -1,    -1,    -1,   153,   154,   155,   156,   157,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,
+       -1,    -1,    -1,   181,    -1,     3,     4,     5,   186,    -1,
+      188,     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,    36,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+       -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       58,    59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
+       68,    -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,
+       98,    99,    -1,    -1,    -1,   103,    -1,    -1,   106,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,
+       -1,    -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,
+       -1,    -1,    -1,   181,    -1,     3,     4,     5,   186,    -1,
+      188,     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,    12,    13,
+       -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+       48,    49,    -1,    -1,    -1,    53,    54,    -1,    56,    -1,
+       58,    59,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+      182,    -1,   184,    -1,    68,    69,    70,    71,    72,    73,
+       74,    75,    76,    77,    -1,    79,    -1,    -1,    -1,    -1,
+       84,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    93,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+       -1,    -1,    -1,    -1,    -1,   187,    -1,   189,   146,   147,
+      148,    -1,   126,   127,   128,   153,   154,   155,   156,   157,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,
+       -1,    -1,    -1,   181,    -1,     3,     4,     5,   186,    -1,
+      188,     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,    36,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+       -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       58,    59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,
+       68,    -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,
+       98,    99,    -1,    -1,    -1,   103,    -1,    -1,   106,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,    -1,   189,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,
+       -1,    -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,
+       -1,    -1,    -1,   181,    -1,     3,     4,     5,   186,    -1,
+      188,     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,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+       48,    49,    -1,    -1,    -1,    53,    54,    -1,    56,    -1,
+       58,    59,    60,    -1,     3,     4,     5,    -1,    66,    67,
+        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,
+       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+       49,    -1,    -1,    -1,    53,    54,    -1,    56,    -1,    58,
+       59,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
+       -1,    -1,    -1,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,   146,   147,
+      148,   180,    -1,    -1,    -1,   153,   154,   155,   156,   157,
+      189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,
+       -1,    -1,    -1,   181,    -1,    -1,    -1,    -1,   186,    -1,
+      188,    -1,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,   146,   147,   148,
+      180,    -1,    -1,    -1,   153,   154,   155,   156,   157,   189,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,    -1,
+       -1,    -1,   181,    -1,     3,     4,    -1,   186,    -1,   188,
+        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,    36,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
+       49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+       59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,
+       -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    98,
+       99,    -1,    -1,    -1,   103,    -1,    -1,   106,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,
+       -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,    -1,
+       -1,    -1,   181,    -1,     3,     4,    -1,   186,    -1,   188,
+        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,    36,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
+       49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+       59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,
+       -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    98,
+       99,    -1,    -1,    -1,   103,    -1,    -1,   106,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,
+       -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,    -1,
+       -1,    -1,   181,    -1,     3,     4,    -1,   186,    -1,   188,
+        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,    36,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
+       49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+       59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,
+       -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    98,
+       99,    -1,    -1,    -1,   103,    -1,    -1,   106,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,
+       -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,    -1,
+       -1,    -1,   181,    -1,     3,     4,    -1,   186,    -1,   188,
+        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,    36,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
+       49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+       59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,
+       -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    98,
+       99,    -1,    -1,    -1,   103,    -1,    -1,   106,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,
+       -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,    -1,
+       -1,    -1,   181,    -1,     3,     4,    -1,   186,    -1,   188,
+        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,    36,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
+       49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+       59,    60,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,
+       -1,    -1,    71,    -1,    -1,    74,    -1,    76,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    98,
+       99,    -1,    -1,    -1,   103,    -1,    -1,   106,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,    -1,    -1,
+       -1,    -1,    -1,    -1,   153,   154,   155,   156,   157,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,    -1,
+       -1,    -1,   181,    -1,     3,     4,    -1,   186,    -1,   188,
+        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,    -1,    45,    46,    47,    -1,
+       49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+       59,    60,     3,     4,     5,    -1,    -1,    66,     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,    39,    40,
+       41,    42,    43,    44,    45,    46,    47,    48,    49,    -1,
+       -1,    -1,    53,    54,    -1,    56,    -1,    58,    59,    60,
+       -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
+       -1,    -1,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,   146,    -1,    -1,
+      180,    -1,    -1,    -1,   153,   154,   155,   156,   157,   189,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   171,   172,    -1,    -1,    -1,   176,    -1,    -1,
+       -1,    -1,   181,    -1,    -1,    -1,    -1,   186,    -1,   188,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,   146,   147,   148,   180,    -1,
+       -1,    -1,   153,   154,   155,   156,   157,   189,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      171,   172,    -1,    -1,    -1,   176,     3,     4,    -1,    -1,
+      181,    -1,     9,    10,    11,   186,    -1,    14,    15,    16,
+       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,
+       47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,    66,
+       -1,    68,    -1,    -1,    71,    -1,    -1,    74,    -1,    76,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
+       97,    98,    99,    -1,    -1,    -1,   103,    -1,    -1,   106,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,   189,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   146,
+       -1,    -1,    -1,    -1,    -1,    -1,   153,   154,   155,   156,
+      157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,   171,   172,    -1,    -1,    -1,   176,
+        3,     4,    -1,    -1,   181,    -1,     9,    10,    11,   186,
+       -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,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
+       -1,    -1,    -1,     3,     4,    58,    59,    60,    -1,     9,
+       10,    11,    -1,    66,    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,    -1,    45,    46,    47,    -1,    49,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    59,
+       60,    -1,    -1,    -1,    -1,    -1,    66,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   146,   189,    -1,    -1,    -1,    -1,    -1,
+      153,   154,   155,   156,   157,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   171,   172,
+       -1,    -1,    -1,   176,    -1,    -1,    -1,    -1,   181,    -1,
+       -1,   184,    -1,   186,    -1,    -1,    -1,     0,     1,    -1,
+       -1,     4,    -1,    -1,    -1,    -1,   146,    -1,    -1,    12,
+       13,    -1,    -1,   153,   154,   155,   156,   157,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,   171,   172,    -1,    37,    38,   176,    -1,    -1,    -1,
+       -1,   181,    -1,    -1,    -1,    -1,   186,    50,    51,    52,
+       -1,    -1,    55,    -1,    57,    -1,    -1,    -1,    61,    62,
+       -1,    64,    65,    -1,    -1,    68,    69,    70,    71,    72,
+       73,    74,    75,    76,    77,    -1,    79,    80,    81,    82,
+       83,    84,    85,    86,    87,    88,    89,    90,    -1,    92,
+       93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+      103,   104,   105,   106,   107,   108,    -1,    -1,    -1,   112,
+      113,   114,    -1,    -1,    -1,    -1,    -1,   120,     4,    -1,
+       -1,    -1,   125,   126,   127,   128,    12,    13,   131,    -1,
+      133,    -1,   135,   136,   137,   138,   139,   140,   141,   142,
+      143,   144,   145,    -1,    -1,    -1,   149,   150,   151,   152,
+       -1,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    50,    51,    52,    -1,    -1,    55,
+       -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,    65,
+       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
+       76,    77,    -1,    79,    80,    81,    82,    83,    84,    85,
+       86,    87,    88,    89,    90,    -1,    92,    93,    94,    95,
+       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+      106,   107,   108,    -1,    -1,    -1,   112,   113,   114,    -1,
+       -1,    -1,    -1,    -1,   120,    -1,    -1,    -1,    -1,   125,
+      126,   127,   128,    -1,    -1,   131,    -1,   133,    -1,   135,
+      136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+       -1,    -1,    -1,   149,   150,   151,   152,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,   189,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   189,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      189,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   189,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,   189,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,   189,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   189,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      189,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   189,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,   189,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,   189,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   189,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      189,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   189,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,   189,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,   189,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,   189,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      189,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   189,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,   189,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,   188,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+       -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      188,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,   182,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,
+       -1,    -1,   187,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,   187,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,    -1,    -1,    -1,   187,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,    -1,    -1,    -1,
+      187,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,    -1,    -1,    -1,   187,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,   184,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+       -1,    -1,   184,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,   184,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,   184,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,   184,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+      180,    -1,    -1,    -1,   184,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,    -1,    -1,   184,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,
+      184,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,    -1,    -1,   184,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+       -1,    -1,   180,    -1,    -1,    -1,   184,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,   184,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+       -1,    -1,   184,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,    -1,    -1,   184,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    -1,   180,    -1,    -1,    -1,   184,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,    -1,
+       -1,   184,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+      180,    -1,   182,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,   182,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+       -1,    -1,   180,    -1,   182,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,   182,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    -1,   180,    -1,   182,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,   182,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,   182,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,   182,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+      182,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,   182,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+      180,    -1,   182,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,   182,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+       -1,    -1,   180,    -1,   182,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,   182,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    -1,   180,    -1,   182,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,   182,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,   182,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,   182,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+      182,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,   182,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+      180,    -1,   182,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,   182,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+       -1,    -1,   180,    -1,   182,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,   182,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    -1,   180,    -1,   182,   162,   163,   164,
+      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+      175,    -1,    -1,    -1,    -1,   180,    -1,   182,   162,   163,
+      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+      174,   175,    -1,    -1,    -1,    -1,   180,    -1,   182,   162,
+      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+      173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,   182,
+      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+      172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,    -1,
+      182,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+      171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,   180,
+       -1,   182,   162,   163,   164,   165,   166,   167,   168,   169,
+      170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+      180,    -1,   182,   162,   163,   164,   165,   166,   167,   168,
+      169,   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,
+       -1,   180,    -1,   182,   162,   163,   164,   165,   166,   167,
+      168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+       -1,    -1,   180,    -1,   182,   162,   163,   164,   165,   166,
+      167,   168,   169,   170,   171,   172,   173,   174,   175,    -1,
+       -1,    -1,    -1,   180,    -1,   182,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+       -1,    -1,    -1,    -1,   180
++>>>>>>> upstream/2.9.3+dfsg1
+ };
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+ static const yytype_uint16 yystos[] =
+ {
++<<<<<<< HEAD
++       0,     1,   188,   189,     6,     0,     4,    12,    13,    37,
++      38,    48,    49,    50,    53,    57,    58,    60,    61,    64,
++      65,    66,    67,    68,    69,    70,    71,    72,    73,    75,
++      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
++      86,    88,    89,    90,    91,    92,    93,    94,    95,    96,
++      97,    98,    99,   100,   101,   102,   103,   104,   108,   109,
++     110,   116,   121,   122,   123,   124,   127,   129,   131,   132,
++     133,   134,   135,   136,   137,   138,   139,   140,   141,   145,
++     146,   147,   148,   190,   192,   193,   213,   227,   232,   235,
++     236,   237,   238,   239,   240,   241,   261,   262,   263,   264,
++     282,   283,     3,     4,     5,     9,    10,    11,    14,    15,
++      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
++      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
++      39,    40,    41,    42,    43,    44,    45,    46,    47,    51,
++      52,    54,    55,    56,    62,    63,   136,   142,   143,   144,
++     149,   150,   151,   152,   153,   167,   168,   172,   177,   179,
++     181,   182,   184,   186,   211,   265,   266,   278,   279,   282,
++     283,    13,    70,   177,   177,     6,   184,     6,     6,     6,
++       6,     6,   179,   179,   177,   184,   177,   177,     4,   177,
++     184,   177,   177,     4,   184,   177,   177,    74,    70,    70,
++       6,   184,    64,    67,    70,    70,    70,    67,    70,    72,
++      72,    64,    67,    70,    72,    67,    70,    72,    67,    70,
++     177,    67,   127,   140,   141,   184,   167,   168,   177,   184,
++     268,   269,   268,   184,    64,    67,    70,   184,   268,     4,
++      64,    68,    80,    70,    72,    70,    67,     4,   136,   184,
++       4,     6,    64,    67,    70,    67,    70,     4,     4,     4,
++       4,     5,    36,    64,    67,    70,    72,    84,   168,   177,
++     184,   232,   241,   265,   271,   272,   273,   283,     4,   177,
++     177,   177,     4,   184,   275,     4,   177,   177,     6,     6,
++     179,     4,     4,     5,   184,     5,   184,     4,   265,     6,
++     177,   184,   177,   179,   186,     7,   154,   155,   156,   157,
++     174,   175,   209,   210,     4,   179,   181,   177,   179,   211,
++     211,   211,   211,   211,   211,   211,   211,   211,   211,   211,
++     211,   211,   211,   211,   211,   211,   211,   211,   211,   211,
++     211,   211,   211,   211,   177,   177,   177,   177,   177,   177,
++     211,   211,     7,   177,   177,   177,   177,   177,   265,   265,
++     265,   265,   180,   265,     4,   127,   128,     4,   282,   283,
++       4,   232,   233,   234,   184,   184,     6,   158,   159,   160,
++     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
++     171,   176,   184,     6,   179,   210,     6,   265,     4,   278,
++     279,   283,   278,   265,   215,   218,   265,   168,   265,   273,
++     274,   265,   265,   177,   265,   274,   265,   265,   177,   274,
++     265,   265,   271,   177,   184,   274,   272,   272,   272,   177,
++     177,   272,   272,   272,   177,   228,   229,   230,   231,   177,
++     177,   177,   271,   265,     4,   271,   275,   184,   184,   268,
++     268,   268,   265,   265,   167,   168,   184,   184,   268,   184,
++     184,   184,   167,   168,   177,   234,   268,   184,   177,   184,
++     177,   177,   177,   272,   272,   271,   177,     4,     6,   179,
 +     179,   234,     6,   184,   184,   184,   272,   272,   179,   179,
 +     179,   179,   181,   211,   179,     5,   184,     5,     5,     5,
 +      64,    67,    70,    72,   184,   265,   273,   265,   185,   274,
 +       8,   169,     6,     6,   265,   265,   265,   181,   265,   184,
 +     130,   265,   265,   265,     6,     6,   234,     6,   234,   179,
 +       6,   271,   271,   184,   265,   184,   279,   271,     6,   179,
 +     265,     4,   265,   265,   265,   265,   265,   265,   265,   265,
 +     265,   265,   265,   265,   265,   265,   265,   265,   265,   265,
 +     265,   265,   265,   265,   278,   281,   278,   278,   278,   278,
 +     278,   278,   278,   281,   265,   279,   265,   278,   278,   278,
 +     283,   279,   178,     7,   209,   180,     7,   209,   210,   181,
 +       7,   179,   185,    64,    67,    70,    72,   227,   265,   274,
 +     265,   265,   265,   265,   265,   265,   265,   265,   265,   265,
 +     265,   265,   265,   265,   265,   194,   265,     6,   179,   181,
 +     178,   183,   178,   183,   183,   180,   183,   214,   180,   214,
 +     178,   169,   183,   185,   178,   178,   265,   178,   185,   178,
 +     178,   265,   185,   178,   178,     7,   265,   265,   185,     6,
 +       6,     6,   265,   265,     7,     7,   259,   259,   265,   177,
 +     177,   177,   177,   265,   265,   265,     7,   184,   178,     6,
 +     184,   234,   234,   183,   183,   183,   268,   268,   233,   233,
 +     183,   265,   265,   265,   265,   245,   183,   234,   265,   265,
 +     265,   265,   265,     7,   260,     6,     7,   265,     6,   265,
 +     265,   185,   274,   274,   274,     6,     6,   265,   265,   265,
 +     265,     4,   178,   180,   184,   212,     4,   265,   184,   184,
 +     184,   184,   274,   178,   185,   265,   184,   265,   273,   178,
 +     178,   178,   127,   183,   234,   184,     8,   178,   180,   185,
 +     185,   178,   183,   185,   274,   180,   265,     6,     6,   265,
 +     180,   210,   212,   212,   212,   212,   212,   212,   212,   212,
 +     212,   212,   212,   183,   212,   212,   212,   212,   212,   212,
 +     212,   183,   183,   183,   183,   212,   183,   212,   183,   178,
 +     178,   183,   183,   183,   178,   267,   280,     6,   183,   178,
 +     183,   178,   178,   209,   271,   181,   209,   210,   279,   265,
 +       6,     4,     4,   184,   276,   180,   184,   184,   184,   184,
 +     185,   185,     8,     4,   117,   118,   119,   120,   185,   197,
 +     201,   204,   206,   207,   180,   265,     4,     6,   164,   191,
 +     274,     6,   274,   265,     6,   283,     6,   278,     7,   265,
 +     273,   130,     7,     7,   178,     7,   130,     7,     7,   178,
 +     130,     7,     7,   265,   178,   185,   184,   178,   178,   265,
 +     271,     4,   258,     6,   178,   224,   265,   279,   224,   224,
 +     224,   178,   178,   178,   271,   274,   181,   234,   185,   185,
 +     268,   265,   265,   185,   185,   265,   268,   183,   183,   183,
 +      87,    97,   105,   106,   107,   111,   112,   113,   114,   255,
 +     256,   268,   185,   242,   178,   185,   178,   178,   178,   265,
 +       6,   265,   178,   180,   180,   185,   185,   185,   180,   180,
 +     183,   180,   274,   180,   185,   274,   274,   274,   274,   185,
 +       8,   274,     7,     7,     7,   181,   265,   185,   265,   265,
 +       7,   181,   184,   271,     6,   185,   209,   210,   185,   180,
 +     181,   210,   278,   265,   265,   265,   265,   278,   274,   278,
 +     278,   278,   278,   220,   222,   265,   278,   265,     6,     4,
 +     127,   128,   265,     6,     6,     6,     7,   179,   275,   277,
 +       6,   274,   274,   274,   274,   212,   265,   198,   177,   177,
 +     184,   208,     6,   210,   180,   164,   278,   178,   178,   183,
 +       7,   268,    70,    72,   271,   271,     7,   271,    70,    72,
 +     271,   271,     7,    72,   271,   271,     6,     7,     7,   274,
 +       7,     7,    87,   257,     6,     7,   178,   178,   178,   178,
 +       7,     7,     7,     6,   185,     4,   185,   183,   183,   183,
 +     185,   185,   268,   268,   268,     4,     6,   184,     6,   177,
 +       6,   115,     6,   115,     6,   115,     6,   115,   185,   256,
 +     183,   255,     7,     6,     7,     7,     7,     6,   184,     6,
 +       6,     6,    70,   265,     6,     6,   265,   181,   185,   185,
 +     185,   185,   185,   265,   185,   271,   271,   271,     4,   183,
 +       8,     8,   178,     4,     4,   271,   185,   178,   265,     6,
 +       6,     4,     6,   212,   212,   212,   212,   212,   212,   183,
 +     178,   178,   183,   212,   221,   183,   212,   223,   178,   178,
 +       6,     7,   209,   210,   181,     7,     6,   275,   265,   183,
 +     185,   185,   185,   185,   185,   209,   177,   265,   265,   270,
 +     271,   184,   181,     6,     6,   191,     6,   265,   184,   265,
 +     279,     6,   184,   184,    80,   226,   226,   271,     6,   184,
 +     184,     6,     6,   271,   184,     6,     6,     5,   271,   185,
 +     271,   271,     4,     6,   271,     7,     7,     7,     7,   271,
 +     271,   271,     7,     6,     7,   265,   265,   265,   184,   184,
 +     183,   185,   183,   185,   183,   185,   179,   265,   271,   265,
 +       6,     6,     6,     6,   265,   268,   185,     5,   184,   271,
 +     184,   184,   184,   271,   274,   184,     6,   180,     4,   212,
 +       6,     6,   126,   265,   265,   265,     6,     6,     7,   183,
 +       6,   209,     6,   210,   278,     4,     4,   279,   265,     6,
 +       4,   276,     6,   180,   275,     6,     6,     6,     6,   271,
 +     195,   265,   183,   183,   183,   185,   196,   265,     4,   278,
 +     183,   265,   279,   265,   265,   268,     6,     6,     6,   265,
 +     265,     6,   265,     5,     6,   184,     6,   130,   225,   265,
 +       6,   271,   271,   271,   271,     6,     4,     6,     6,   265,
 +     265,   279,   185,   178,   183,   185,   233,   233,   268,     6,
 +     246,   268,     6,   247,   268,     6,   248,   265,   185,   183,
 +     178,   185,   183,     6,   168,   268,     6,   270,   268,   268,
 +       6,   185,   265,     6,   271,   183,   185,     8,   185,   178,
 +     184,   265,   279,   271,   271,   178,   184,   271,   279,   184,
 +     265,   279,     6,     6,     7,     6,   181,     6,   178,   183,
 +     265,   265,   271,   184,   183,   185,     6,   265,   216,   217,
 +     185,   185,   185,   185,   185,     5,   270,    68,     6,     6,
 +       6,     6,     6,   184,   184,     6,     6,   184,   265,   185,
 +     185,   183,   184,   183,   184,   183,   184,   180,     6,   271,
 +       7,   184,   265,   183,   185,   183,   183,     6,   185,   125,
 +     265,   265,   274,     6,     6,   185,     6,   219,   265,   281,
 +     275,   128,   199,   265,   183,   183,   270,   265,     6,   183,
 +     220,   222,     6,     6,     6,     6,     6,     6,   185,   184,
 +     270,   274,   233,   183,   185,   265,   268,   255,   265,   268,
 +     255,   265,   268,   255,     6,   183,   185,   271,   234,   185,
 +     268,     6,   274,   268,   265,   185,   185,   185,     6,   183,
 +     185,     7,   185,     6,   184,   265,   265,   185,   265,   185,
 +     185,   184,   265,   185,   185,   185,   265,   185,   183,   185,
 +     185,   183,   185,   185,   183,   185,   271,     6,    87,   185,
 +     243,   184,   183,   185,   183,     6,     6,   265,   279,   196,
 +     178,   183,     6,   184,   183,   265,   185,     6,     6,   185,
 +       6,   249,   265,     6,     6,   250,   265,     6,     6,   251,
 +     265,     6,   185,   265,   255,   234,   274,     6,   268,   274,
 +       7,   185,   202,   265,   270,   265,   183,   184,   185,   184,
 +     185,   184,   185,     6,     6,   185,   185,   244,   185,   183,
 +     185,   279,     6,   184,   178,   185,   185,   265,   255,     6,
 +     252,   255,     6,   253,   255,     6,   254,   255,     6,   274,
 +       6,   200,   278,   205,   184,     6,   185,   185,   184,   185,
 +     184,   185,   184,   185,   185,   183,   185,   184,   270,     6,
 +       6,   255,     6,   255,     6,   255,     6,   278,     6,   203,
 +     278,   185,   185,   185,   185,   183,   185,     6,     6,     6,
 +       6,   278,     6
++=======
+        0,     1,   192,   193,     6,     0,     4,    12,    13,    37,
+       38,    50,    51,    52,    55,    57,    61,    62,    64,    65,
+       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+       79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+       89,    90,    92,    93,    94,    95,    96,    97,    98,    99,
+      100,   101,   102,   103,   104,   105,   106,   107,   108,   112,
+      113,   114,   120,   125,   126,   127,   128,   131,   133,   135,
+      136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+      149,   150,   151,   152,   194,   196,   197,   217,   234,   235,
+      238,   239,   240,   241,   242,   243,   244,   265,   266,   267,
+      268,   286,   287,     3,     4,     5,     9,    10,    11,    14,
+       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+       35,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+       48,    49,    53,    54,    56,    58,    59,    60,    66,    67,
+      140,   146,   147,   148,   153,   154,   155,   156,   157,   171,
+      172,   176,   181,   183,   185,   186,   188,   190,   215,   269,
+      270,   282,   283,   286,   287,    13,    74,   181,   181,     6,
+      188,     6,     6,     6,   181,     6,     6,   183,   183,   181,
+      188,   181,   181,     4,   181,   188,   181,   181,     4,   188,
+      181,   181,    78,    74,    74,     6,   188,    68,    71,    74,
+       74,    74,    71,    74,    76,    76,    68,    71,    74,    76,
+       71,    74,    76,    71,    74,   181,    71,   131,   144,   145,
+      188,   171,   172,   181,   188,   272,   273,   272,   188,    68,
+       71,    74,   188,   272,     4,    68,    72,    84,    74,    76,
+       74,    71,     4,   140,   188,     4,     6,    68,    71,    74,
+       71,    74,     4,     4,     4,     4,     5,    36,    68,    71,
+       74,    76,    88,   172,   181,   188,   235,   244,   269,   275,
+      276,   277,   286,   287,     4,   181,   181,   181,     4,   188,
+      279,     4,   181,   181,     6,     6,   183,     4,   286,   287,
+        4,     5,   188,     5,   188,     4,   269,     6,   181,   188,
+      181,   183,   190,   215,     7,   158,   159,   160,   161,   178,
+      179,   213,   214,     4,   183,   185,   183,   215,   215,   215,
+      215,   215,   215,   215,   215,   215,   215,   215,   215,   215,
+      215,   215,   215,   215,   215,   215,   215,   215,   215,   215,
+      215,   215,   181,   181,   181,   181,   181,   181,   215,   181,
+      215,   215,   215,     7,   181,   181,   181,   181,   181,   269,
+      269,   269,   269,   184,   269,     4,   131,   132,   287,     4,
+      235,   236,   237,   188,   188,     6,   162,   163,   164,   165,
+      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+      180,   188,     6,   183,   214,     6,   269,     4,   282,   283,
+      287,   282,   269,   282,   285,   219,   222,   269,   172,   269,
+      277,   278,   269,   269,   181,   269,   278,   269,   269,   181,
+      278,   269,   269,   275,   181,   188,   278,   276,   276,   276,
+      181,   181,   276,   276,   276,   181,   181,   181,   181,   181,
+      181,   181,   181,   275,   269,     4,   275,   279,   188,   188,
+      272,   272,   272,   269,   269,   171,   172,   188,   188,   272,
+      188,   188,   188,   171,   172,   181,   237,   272,   188,   181,
+      188,   181,   181,   181,   276,   276,   275,   181,     4,     6,
+      183,   183,   237,     6,   188,   188,   188,   276,   276,   183,
+      183,   183,   183,   185,   215,   183,     5,   134,   188,     5,
+      134,     5,   134,     5,   134,    68,    71,    74,    76,   188,
+      269,   277,   269,   189,   278,     8,   173,     6,   183,   215,
+        6,   269,   269,   269,   185,   269,   188,   134,   269,   269,
+      269,     6,     6,   237,     6,   237,   183,     6,   275,   275,
+      184,   269,   188,   188,   283,   275,     6,   183,   269,     4,
+      269,   269,   269,   269,   269,   269,   269,   269,   269,   269,
+      269,   269,   269,   269,   269,   269,   269,   269,   269,   269,
+      269,   269,   285,   282,   285,   282,   282,   282,   275,   282,
+      282,   269,   285,   282,   269,   283,   269,   282,   282,   282,
+      287,   283,   182,     7,   213,   184,     7,   213,   214,   185,
+        7,   183,   189,    68,    71,    74,    76,   234,   269,   278,
+      269,   269,   269,   269,   269,   269,   269,   269,   269,   269,
+      269,   269,   269,   269,   269,   198,   269,     6,   183,   185,
+      182,   187,   182,   187,   187,   182,   187,   184,   187,   218,
+      184,   218,   182,   173,   187,   189,   182,   182,   269,   182,
+      189,   182,   182,   269,   189,   182,   182,     7,   269,   269,
+      189,     6,     6,     6,   269,   269,     7,     7,   262,   262,
+      269,   228,   269,   283,   229,   269,   283,   230,   269,   283,
+      231,   269,   283,   269,   269,   269,     7,   188,   182,     6,
+      188,   237,   237,   187,   187,   187,   272,   272,   236,   236,
+      187,   269,   269,   269,   269,   248,   187,   237,   269,   269,
+      269,   269,   269,     7,   263,     6,     7,   269,     6,   269,
+      269,   189,   278,   278,   278,     6,     6,   269,   269,   269,
+      269,     4,   182,   184,   188,   216,   287,    50,   269,    50,
+       50,    50,     5,   188,     5,   188,     5,   188,     5,   188,
+      278,   182,   189,   269,   188,   269,   277,   188,   216,   182,
+      182,   182,   131,   187,   237,   188,     8,   182,   184,   189,
+      189,   182,   187,   189,   213,   184,   269,   278,     6,     6,
+      269,   184,   214,   216,   216,   216,   216,   216,   216,   216,
+      216,   216,   216,   216,   187,   216,   216,   216,   216,   216,
+      216,   216,   187,   187,   187,   216,   187,   216,   216,   182,
+      182,   187,   187,   187,   187,   187,   182,   216,   271,   284,
+        6,   187,   182,   187,   182,   182,   213,   275,   185,   213,
+      214,   283,   269,     6,     4,     4,   188,   280,   184,   188,
+      188,   188,   188,   189,   189,     8,     4,   121,   122,   123,
+      124,   189,   201,   205,   208,   210,   211,   184,   269,     4,
+        6,   168,   195,   278,     6,   278,   269,     6,   282,     6,
+      287,     6,   282,     7,   269,   277,   134,     7,     7,   182,
+        7,   134,     7,     7,   182,   134,     7,     7,   269,   182,
+      189,   188,   182,   182,   269,   275,     4,   261,     6,   182,
+      182,   182,   182,   182,   182,   182,   182,   275,   278,   185,
+      237,   189,   189,   272,   269,   269,   189,   189,   269,   272,
+      187,   187,   187,    91,   101,   109,   110,   111,   115,   116,
+      117,   118,   258,   259,   272,   189,   245,   182,   189,   182,
+      182,   182,   269,     6,   269,   182,   184,   184,   189,   189,
+      189,   184,   184,   187,   184,   278,   184,   188,   189,   188,
+      188,   188,   278,   278,   278,   278,   189,     8,   278,   278,
+        7,     7,     7,   185,   269,   189,   269,   269,     7,   185,
+      188,   275,     6,   275,   213,   214,   189,   189,   184,   185,
+      214,   282,   269,   269,   269,   269,   278,   282,   275,   282,
+      282,   283,   224,   226,   269,   282,   269,     6,     4,   131,
+      132,   269,     6,     6,     6,     7,   183,   279,   281,     6,
+      278,   278,   278,   278,   216,   269,   202,   181,   181,   188,
+      212,     6,   214,   184,   168,   282,   182,   182,   187,     7,
+      272,    74,    76,   275,   275,     7,   275,    74,    76,   275,
+      275,     7,    76,   275,   275,     6,     7,     7,   278,     7,
+        7,    91,   260,     6,     7,   213,   213,   213,   213,     7,
+        7,     7,     6,   189,     4,   189,   187,   187,   187,   189,
+      189,   272,   272,   272,     4,     6,   188,     6,   181,     6,
+      119,     6,   119,     6,   119,     6,   119,   189,   259,   187,
+      258,     7,     6,     7,     7,     7,     6,   188,     6,     6,
+        6,    74,   269,     6,     6,   269,   185,   189,   269,   269,
+      269,   269,   189,   189,   189,   189,   269,   189,   189,   275,
+      275,   275,     4,   187,     8,     8,   182,     4,     4,   275,
+      189,     6,   269,     6,   216,     6,     4,     6,   216,   216,
+      216,   216,   216,   187,   182,   182,   182,   187,   187,   216,
+      225,   187,   216,   227,   182,   182,     6,     7,   213,   214,
+      185,     7,     6,   279,   269,   187,   189,   189,   189,   189,
+      189,   213,   181,   269,   269,   274,   275,   188,   185,     6,
+        6,   195,     6,   269,   188,   269,   283,     6,   188,   188,
+       84,   233,   233,   275,     6,   188,   188,     6,     6,   275,
+      188,     6,     6,     5,   275,   189,   275,   275,     4,     6,
+      275,   275,   275,   275,   275,   275,   275,   275,     7,     6,
+        7,   269,   269,   269,   188,   188,   187,   189,   187,   189,
+      187,   189,   183,   269,   275,   269,     6,     6,     6,     6,
+      269,   272,   189,     5,   188,   275,   188,   188,   188,   275,
+      278,   188,     6,   184,     4,   216,   187,   187,   187,   187,
+      216,     6,     6,   130,   269,   269,   269,     6,     6,     7,
+      187,     6,     6,   213,   214,   282,   283,     4,     4,   283,
+      269,     6,     4,   280,     6,   184,   279,     6,     6,     6,
+        6,   275,   199,   269,   187,   187,   187,   189,   200,   269,
+        4,   282,   187,   269,   283,   269,   269,   272,     6,     6,
+        6,   269,   269,     6,   269,     5,     6,   188,     6,   134,
+      232,   269,     6,     6,     6,     6,     6,     6,     4,     6,
+        6,   269,   269,   283,   189,   182,   187,   189,   236,   236,
+      272,     6,   249,   272,     6,   250,   272,     6,   251,   269,
+      189,   187,   182,   189,   187,     6,   172,   272,     6,   274,
+      272,   272,     6,   189,   269,     6,   269,   269,   269,   269,
+      275,   187,   189,     8,   189,   182,   188,   269,   283,   275,
+      275,   182,   216,   188,   275,   283,   188,   269,   283,     6,
+        6,     7,     6,   185,     6,   182,   187,   269,   269,   275,
+      188,   187,   189,     6,   269,   220,   221,   189,   189,   189,
+      189,   189,     5,   274,    72,     6,   188,   188,     6,     6,
+      188,   269,   189,   189,   187,   188,   187,   188,   187,   188,
+      184,     6,   275,     7,   188,   269,   187,   189,   187,   187,
+        6,   189,   187,   187,   187,   187,   129,   269,   269,   278,
+        6,     6,   189,     6,   223,   269,   285,   279,   132,   203,
+      269,   187,   187,   274,   269,     6,   187,   224,   226,     6,
+        6,     6,     6,     6,     6,   189,   188,   274,   278,   236,
+      187,   189,   269,   272,   258,   269,   272,   258,   269,   272,
+      258,     6,   187,   189,   275,   237,   189,   272,     6,   278,
+      272,   269,   269,   269,   269,   269,   189,   189,   189,     6,
+      187,   189,     7,   189,     6,   188,   269,   269,   189,   269,
+      189,   189,   188,   269,   189,   189,   189,   269,   189,   187,
+      189,   189,   187,   189,   189,   187,   189,   275,     6,    91,
+      189,   246,   188,   187,   189,   187,   187,   187,   187,   187,
+        6,     6,   269,   283,   200,   182,   187,     6,   188,   187,
+      269,   189,     6,    91,   264,   189,     6,   252,   269,     6,
+        6,   253,   269,     6,     6,   254,   269,     6,   189,   269,
+      258,   237,   278,     6,   272,   278,   269,   269,   269,   269,
+        7,   189,   206,   269,   274,   269,   187,   275,     6,   188,
+      189,   188,   189,   188,   189,     6,     6,   189,   189,   247,
+      189,   187,   189,   187,   187,   187,   187,   283,     6,   188,
+      182,   189,   189,   269,   258,     6,   255,   258,     6,   256,
+      258,     6,   257,   258,     6,   278,     6,   269,   269,   269,
+      269,   204,   282,   209,   188,     6,   189,   189,   188,   189,
+      188,   189,   188,   189,   189,   187,   187,   187,   187,   187,
+      189,   188,   274,     6,     6,   258,     6,   258,     6,   258,
+        6,   269,   269,   269,   269,   282,     6,   207,   282,   189,
+      189,   189,   189,   189,   189,   189,   189,   187,   189,     6,
+        6,     6,     6,   282,     6
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  #define yyerrok		(yyerrstatus = 0)
@@@ -4369,8 -4575,9 +7607,9 @@@ yyreduce
    switch (yyn)
      {
          case 3:
 -/* Line 1787 of yacc.c  */
 -#line 184 "Gmsh.y"
 -    { yyerrok; return 1; }
++<<<<<<< HEAD
 +#line 183 "Gmsh.y"
 +    { yyerrok; return 1; ;}
      break;
  
    case 6:
@@@ -4439,49 -4659,56 +7678,169 @@@
      break;
  
    case 19:
 -/* Line 1787 of yacc.c  */
 -#line 208 "Gmsh.y"
 -    { return 1; }
 +#line 207 "Gmsh.y"
 +    { return 1; ;}
 +    break;
 +
 +  case 20:
 +#line 208 "Gmsh.y"
 +    { return 1; ;}
 +    break;
 +
 +  case 21:
 +#line 213 "Gmsh.y"
-     {
-       (yyval.c) = (char*)"w";
-     ;}
++=======
++/* Line 1787 of yacc.c  */
++#line 184 "Gmsh.y"
++    { yyerrok; return 1; }
 +    break;
 +
-   case 22:
- #line 217 "Gmsh.y"
-     {
-       (yyval.c) = (char*)"a";
-     ;}
++  case 6:
++/* Line 1787 of yacc.c  */
++#line 195 "Gmsh.y"
++    { return 1; }
 +    break;
 +
-   case 23:
- #line 224 "Gmsh.y"
-     {
-       Msg::Direct((yyvsp[(3) - (5)].c));
-       Free((yyvsp[(3) - (5)].c));
-     ;}
++  case 7:
++/* Line 1787 of yacc.c  */
++#line 196 "Gmsh.y"
++    { return 1; }
 +    break;
 +
-   case 24:
- #line 229 "Gmsh.y"
-     {
-       Msg::Error((yyvsp[(3) - (5)].c));
-       Free((yyvsp[(3) - (5)].c));
-     ;}
++  case 8:
++/* Line 1787 of yacc.c  */
++#line 197 "Gmsh.y"
++    { return 1; }
 +    break;
 +
-   case 25:
- #line 234 "Gmsh.y"
-     {
-       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
++  case 9:
++/* Line 1787 of yacc.c  */
++#line 198 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 10:
++/* Line 1787 of yacc.c  */
++#line 199 "Gmsh.y"
++    { List_Delete((yyvsp[(1) - (1)].l)); return 1; }
++    break;
++
++  case 11:
++/* Line 1787 of yacc.c  */
++#line 200 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 12:
++/* Line 1787 of yacc.c  */
++#line 201 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 13:
++/* Line 1787 of yacc.c  */
++#line 202 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 14:
++/* Line 1787 of yacc.c  */
++#line 203 "Gmsh.y"
++    { List_Delete((yyvsp[(1) - (1)].l)); return 1; }
++    break;
++
++  case 15:
++/* Line 1787 of yacc.c  */
++#line 204 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 16:
++/* Line 1787 of yacc.c  */
++#line 205 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 17:
++/* Line 1787 of yacc.c  */
++#line 206 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 18:
++/* Line 1787 of yacc.c  */
++#line 207 "Gmsh.y"
++    { return 1; }
++    break;
++
++  case 19:
++/* Line 1787 of yacc.c  */
++#line 208 "Gmsh.y"
++    { return 1; }
+     break;
+ 
+   case 20:
+ /* Line 1787 of yacc.c  */
+ #line 209 "Gmsh.y"
+     { return 1; }
+     break;
+ 
+   case 21:
+ /* Line 1787 of yacc.c  */
+ #line 214 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.c) = (char*)"w";
+     }
+     break;
+ 
+   case 22:
++<<<<<<< HEAD
++#line 217 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 218 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.c) = (char*)"a";
+     }
+     break;
+ 
+   case 23:
++<<<<<<< HEAD
++#line 224 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 225 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       Msg::Direct((yyvsp[(3) - (5)].c));
+       Free((yyvsp[(3) - (5)].c));
+     }
+     break;
+ 
+   case 24:
++<<<<<<< HEAD
++#line 229 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 230 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       Msg::Error((yyvsp[(3) - (5)].c));
+       Free((yyvsp[(3) - (5)].c));
+     }
+     break;
+ 
+   case 25:
++<<<<<<< HEAD
++#line 234 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 235 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(6) - (7)].c));
        FILE *fp = Fopen(tmp.c_str(), (yyvsp[(5) - (7)].c));
        if(!fp){
  	yymsg(0, "Unable to open file '%s'", tmp.c_str());
@@@ -4496,7 -4723,8 +7855,12 @@@
      break;
  
    case 26:
++<<<<<<< HEAD
 +#line 248 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 249 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        char tmpstring[5000];
        int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
@@@ -4512,7 -4740,8 +7876,12 @@@
      break;
  
    case 27:
++<<<<<<< HEAD
 +#line 261 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 262 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        char tmpstring[5000];
        int i = PrintListOfDouble((yyvsp[(3) - (7)].c), (yyvsp[(5) - (7)].l), tmpstring);
@@@ -4528,7 -4757,8 +7897,12 @@@
      break;
  
    case 28:
++<<<<<<< HEAD
 +#line 274 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 275 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        char tmpstring[5000];
        int i = PrintListOfDouble((yyvsp[(3) - (9)].c), (yyvsp[(5) - (9)].l), tmpstring);
@@@ -4554,7 -4784,8 +7928,12 @@@
      break;
  
    case 29:
++<<<<<<< HEAD
 +#line 302 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 303 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(1) - (6)].c), "View") && ViewData->finalize()){
@@@ -4571,7 -4802,8 +7950,12 @@@
      break;
  
    case 30:
++<<<<<<< HEAD
 +#line 316 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 317 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@@ -4587,7 -4819,8 +7971,12 @@@
      break;
  
    case 31:
++<<<<<<< HEAD
 +#line 329 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 330 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@@ -4603,7 -4836,8 +7992,12 @@@
      break;
  
    case 32:
++<<<<<<< HEAD
 +#line 342 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 343 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(2) - (8)].c), "View")){
@@@ -4621,7 -4855,8 +8015,12 @@@
      break;
  
    case 33:
++<<<<<<< HEAD
 +#line 360 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 361 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        ViewData = new PViewDataList();
@@@ -4630,27 -4865,32 +8029,56 @@@
      break;
  
    case 39:
++<<<<<<< HEAD
 +#line 374 "Gmsh.y"
 +    { ViewCoord.push_back((yyvsp[(1) - (1)].d)); ;}
 +    break;
 +
 +  case 40:
 +#line 376 "Gmsh.y"
 +    { ViewCoord.push_back((yyvsp[(3) - (3)].d)); ;}
 +    break;
 +
 +  case 41:
 +#line 381 "Gmsh.y"
 +    { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); ;}
 +    break;
 +
 +  case 42:
 +#line 383 "Gmsh.y"
 +    { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); ;}
 +    break;
 +
 +  case 43:
 +#line 388 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 375 "Gmsh.y"
+     { ViewCoord.push_back((yyvsp[(1) - (1)].d)); }
+     break;
+ 
+   case 40:
+ /* Line 1787 of yacc.c  */
+ #line 377 "Gmsh.y"
+     { ViewCoord.push_back((yyvsp[(3) - (3)].d)); }
+     break;
+ 
+   case 41:
+ /* Line 1787 of yacc.c  */
+ #line 382 "Gmsh.y"
+     { if(ViewValueList) ViewValueList->push_back((yyvsp[(1) - (1)].d)); }
+     break;
+ 
+   case 42:
+ /* Line 1787 of yacc.c  */
+ #line 384 "Gmsh.y"
+     { if(ViewValueList) ViewValueList->push_back((yyvsp[(3) - (3)].d)); }
+     break;
+ 
+   case 43:
+ /* Line 1787 of yacc.c  */
+ #line 389 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strncmp((yyvsp[(1) - (1)].c), "SP", 2)){
@@@ -4757,7 -4997,8 +8185,12 @@@
      break;
  
    case 44:
++<<<<<<< HEAD
 +#line 492 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 493 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(ViewValueList){
@@@ -4770,7 -5011,8 +8203,12 @@@
      break;
  
    case 45:
++<<<<<<< HEAD
 +#line 502 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 503 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(ViewValueList) (*ViewNumList)++;
@@@ -4779,7 -5021,8 +8217,12 @@@
      break;
  
    case 46:
++<<<<<<< HEAD
 +#line 511 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 512 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(1) - (1)].c)[i]);
@@@ -4789,7 -5032,8 +8232,12 @@@
      break;
  
    case 47:
++<<<<<<< HEAD
 +#line 518 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 519 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T2C.push_back((yyvsp[(3) - (3)].c)[i]);
@@@ -4799,7 -5043,8 +8247,12 @@@
      break;
  
    case 48:
++<<<<<<< HEAD
 +#line 528 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 529 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        ViewData->T2D.push_back((yyvsp[(3) - (8)].d));
@@@ -4811,7 -5056,8 +8264,12 @@@
      break;
  
    case 49:
++<<<<<<< HEAD
 +#line 537 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 538 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        ViewData->NbT2++;
@@@ -4820,7 -5066,8 +8278,12 @@@
      break;
  
    case 50:
++<<<<<<< HEAD
 +#line 546 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 547 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        for(int i = 0; i < (int)strlen((yyvsp[(1) - (1)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(1) - (1)].c)[i]);
@@@ -4830,7 -5077,8 +8293,12 @@@
      break;
  
    case 51:
++<<<<<<< HEAD
 +#line 553 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 554 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        for(int i = 0; i < (int)strlen((yyvsp[(3) - (3)].c)) + 1; i++) ViewData->T3C.push_back((yyvsp[(3) - (3)].c)[i]);
@@@ -4840,7 -5088,8 +8308,12 @@@
      break;
  
    case 52:
++<<<<<<< HEAD
 +#line 563 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 564 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        ViewData->T3D.push_back((yyvsp[(3) - (10)].d)); ViewData->T3D.push_back((yyvsp[(5) - (10)].d));
@@@ -4851,7 -5100,8 +8324,12 @@@
      break;
  
    case 53:
++<<<<<<< HEAD
 +#line 571 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 572 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        ViewData->NbT3++;
@@@ -4860,7 -5110,8 +8338,12 @@@
      break;
  
    case 54:
++<<<<<<< HEAD
 +#line 581 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 582 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        int type =
@@@ -4879,7 -5130,8 +8362,12 @@@
      break;
  
    case 55:
++<<<<<<< HEAD
 +#line 600 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 601 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        int type =
@@@ -4898,7 -5150,8 +8386,12 @@@
      break;
  
    case 56:
++<<<<<<< HEAD
 +#line 619 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 620 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        ViewValueList = &ViewData->Time;
@@@ -4907,68 -5160,81 +8400,144 @@@
      break;
  
    case 57:
++<<<<<<< HEAD
 +#line 625 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 626 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-     ;}
+     }
      break;
  
    case 58:
++<<<<<<< HEAD
 +#line 632 "Gmsh.y"
 +    { (yyval.i) = 0; ;}
 +    break;
 +
 +  case 59:
 +#line 633 "Gmsh.y"
 +    { (yyval.i) = 1; ;}
 +    break;
 +
 +  case 60:
 +#line 634 "Gmsh.y"
 +    { (yyval.i) = 2; ;}
 +    break;
 +
 +  case 61:
 +#line 635 "Gmsh.y"
 +    { (yyval.i) = 3; ;}
 +    break;
 +
 +  case 62:
 +#line 636 "Gmsh.y"
 +    { (yyval.i) = 4; ;}
 +    break;
 +
 +  case 63:
 +#line 640 "Gmsh.y"
 +    { (yyval.i) = 1; ;}
 +    break;
 +
 +  case 64:
 +#line 641 "Gmsh.y"
 +    { (yyval.i) = -1; ;}
++=======
+ /* Line 1787 of yacc.c  */
+ #line 633 "Gmsh.y"
+     { (yyval.i) = 0; }
+     break;
+ 
+   case 59:
+ /* Line 1787 of yacc.c  */
+ #line 634 "Gmsh.y"
+     { (yyval.i) = 1; }
+     break;
+ 
+   case 60:
+ /* Line 1787 of yacc.c  */
+ #line 635 "Gmsh.y"
+     { (yyval.i) = 2; }
+     break;
+ 
+   case 61:
+ /* Line 1787 of yacc.c  */
+ #line 636 "Gmsh.y"
+     { (yyval.i) = 3; }
+     break;
+ 
+   case 62:
+ /* Line 1787 of yacc.c  */
+ #line 637 "Gmsh.y"
+     { (yyval.i) = 4; }
+     break;
+ 
+   case 63:
+ /* Line 1787 of yacc.c  */
+ #line 641 "Gmsh.y"
+     { (yyval.i) = 1; }
+     break;
+ 
+   case 64:
+ /* Line 1787 of yacc.c  */
+ #line 642 "Gmsh.y"
+     { (yyval.i) = -1; }
+     break;
+ 
+   case 65:
+ /* Line 1787 of yacc.c  */
+ #line 648 "Gmsh.y"
+     { (yyval.c) = (char*)"("; }
+     break;
+ 
+   case 66:
+ /* Line 1787 of yacc.c  */
+ #line 648 "Gmsh.y"
+     { (yyval.c) = (char*)"["; }
++>>>>>>> upstream/2.9.3+dfsg1
 +    break;
 +
 +  case 65:
 +#line 647 "Gmsh.y"
 +    { (yyval.c) = (char*)"("; ;}
 +    break;
 +
 +  case 66:
 +#line 647 "Gmsh.y"
 +    { (yyval.c) = (char*)"["; ;}
      break;
  
    case 67:
++<<<<<<< HEAD
 +#line 648 "Gmsh.y"
 +    { (yyval.c) = (char*)")"; ;}
 +    break;
 +
 +  case 68:
 +#line 648 "Gmsh.y"
 +    { (yyval.c) = (char*)"]"; ;}
 +    break;
 +
 +  case 71:
 +#line 657 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 649 "Gmsh.y"
+     { (yyval.c) = (char*)")"; }
+     break;
+ 
+   case 68:
+ /* Line 1787 of yacc.c  */
+ #line 649 "Gmsh.y"
+     { (yyval.c) = (char*)"]"; }
+     break;
+ 
+   case 71:
+ /* Line 1787 of yacc.c  */
+ #line 658 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c)) && (yyvsp[(2) - (4)].i) && List_Nbr((yyvsp[(3) - (4)].l)) == 1){
          yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (4)].c));
@@@ -5031,7 -5297,8 +8600,12 @@@
      break;
  
    case 72:
++<<<<<<< HEAD
 +#line 718 "Gmsh.y"
++=======
+ /* Line 1787 of yacc.c  */
+ #line 719 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
        s.list = true;
@@@ -5063,51 -5330,90 +8637,123 @@@
      break;
  
    case 73:
++<<<<<<< HEAD
 +#line 747 "Gmsh.y"
 +    {
++=======
+ /* Line 1787 of yacc.c  */
+ #line 748 "Gmsh.y"
+     {
+       gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
+       s.list = true;
+       double d;
+       switch((yyvsp[(4) - (6)].i)){
+       case 0: // affect
+         s.value.clear(); // fall-through
+       case 1: // append
+         for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
+           List_Read((yyvsp[(5) - (6)].l), i, &d);
+           s.value.push_back(d);
+         }
+         break;
+       case 2: // remove
+         for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
+           List_Read((yyvsp[(5) - (6)].l), i, &d);
+           std::vector<double>::iterator it = std::find(s.value.begin(),
+                                                        s.value.end(), d);
+           if(it != s.value.end()) s.value.erase(it);
+         }
+         break;
+       default:
+         yymsg(0, "Operators *= and /= not available for lists");
+         break;
+       }
+       Free((yyvsp[(1) - (6)].c));
+       List_Delete((yyvsp[(5) - (6)].l));
+     }
+     break;
+ 
+   case 74:
+ /* Line 1787 of yacc.c  */
+ #line 777 "Gmsh.y"
+     {
++>>>>>>> upstream/2.9.3+dfsg1
        assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
        Free((yyvsp[(1) - (7)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 74:
 +#line 752 "Gmsh.y"
++=======
+   case 75:
+ /* Line 1787 of yacc.c  */
+ #line 782 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
        Free((yyvsp[(1) - (7)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 75:
 +#line 757 "Gmsh.y"
 +    {
 +      assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
 +      Free((yyvsp[(1) - (7)].c));
 +    ;}
 +    break;
 +
 +  case 76:
 +#line 762 "Gmsh.y"
++=======
+   case 76:
+ /* Line 1787 of yacc.c  */
+ #line 787 "Gmsh.y"
+     {
+       assignVariable((yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(5) - (7)].i), (yyvsp[(6) - (7)].d));
+       Free((yyvsp[(1) - (7)].c));
+     }
+     break;
+ 
+   case 77:
+ /* Line 1787 of yacc.c  */
+ #line 792 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        assignVariables((yyvsp[(1) - (9)].c), (yyvsp[(4) - (9)].l), (yyvsp[(7) - (9)].i), (yyvsp[(8) - (9)].l));
        Free((yyvsp[(1) - (9)].c));
        List_Delete((yyvsp[(4) - (9)].l));
        List_Delete((yyvsp[(8) - (9)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 77:
 +#line 769 "Gmsh.y"
++=======
+   case 78:
+ /* Line 1787 of yacc.c  */
+ #line 799 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        assignVariables((yyvsp[(1) - (9)].c), (yyvsp[(4) - (9)].l), (yyvsp[(7) - (9)].i), (yyvsp[(8) - (9)].l));
        Free((yyvsp[(1) - (9)].c));
        List_Delete((yyvsp[(4) - (9)].l));
        List_Delete((yyvsp[(8) - (9)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 78:
 +#line 776 "Gmsh.y"
++=======
+   case 79:
+ /* Line 1787 of yacc.c  */
+ #line 806 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
  	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
@@@ -5121,54 -5427,60 +8767,93 @@@
            yymsg(0, "Variable '%s' is a list", (yyvsp[(1) - (3)].c));
        }
        Free((yyvsp[(1) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 79:
 +#line 791 "Gmsh.y"
++=======
+   case 80:
+ /* Line 1787 of yacc.c  */
+ #line 821 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i));
        Free((yyvsp[(1) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 80:
 +#line 796 "Gmsh.y"
 +    {
 +      incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i));
 +      Free((yyvsp[(1) - (6)].c));
 +    ;}
 +    break;
 +
 +  case 81:
 +#line 801 "Gmsh.y"
++=======
+   case 81:
+ /* Line 1787 of yacc.c  */
+ #line 826 "Gmsh.y"
+     {
+       incrementVariable((yyvsp[(1) - (6)].c), (yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].i));
+       Free((yyvsp[(1) - (6)].c));
+     }
+     break;
+ 
+   case 82:
+ /* Line 1787 of yacc.c  */
+ #line 831 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        gmsh_yystringsymbols[(yyvsp[(1) - (4)].c)] = std::string((yyvsp[(3) - (4)].c));
        Free((yyvsp[(1) - (4)].c));
        Free((yyvsp[(3) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 82:
 +#line 810 "Gmsh.y"
++=======
+   case 83:
+ /* Line 1787 of yacc.c  */
+ #line 840 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string tmp((yyvsp[(5) - (6)].c));
        StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), tmp);
        Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 83:
 +#line 816 "Gmsh.y"
++=======
+   case 84:
+ /* Line 1787 of yacc.c  */
+ #line 846 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string tmp((yyvsp[(8) - (9)].c));
        StringOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), tmp);
        Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c)); Free((yyvsp[(8) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 84:
 +#line 825 "Gmsh.y"
++=======
+   case 85:
+ /* Line 1787 of yacc.c  */
+ #line 855 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        double d = 0.;
        if(NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d)){
@@@ -5185,11 -5497,12 +8870,17 @@@
  	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (6)].c), 0, (yyvsp[(3) - (6)].c), d);
        }
        Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(3) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 85:
 +#line 843 "Gmsh.y"
++=======
+   case 86:
+ /* Line 1787 of yacc.c  */
+ #line 873 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        double d = 0.;
        if(NumberOption(GMSH_GET, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d)){
@@@ -5206,11 -5519,12 +8897,17 @@@
  	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (9)].c), (int)(yyvsp[(3) - (9)].d), (yyvsp[(6) - (9)].c), d);
        }
        Free((yyvsp[(1) - (9)].c)); Free((yyvsp[(6) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 86:
 +#line 861 "Gmsh.y"
++=======
+   case 87:
+ /* Line 1787 of yacc.c  */
+ #line 891 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        double d = 0.;
        if(NumberOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d)){
@@@ -5218,11 -5532,12 +8915,17 @@@
  	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (5)].c), 0, (yyvsp[(3) - (5)].c), d);
        }
        Free((yyvsp[(1) - (5)].c)); Free((yyvsp[(3) - (5)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 87:
 +#line 870 "Gmsh.y"
++=======
+   case 88:
+ /* Line 1787 of yacc.c  */
+ #line 900 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        double d = 0.;
        if(NumberOption(GMSH_GET, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d)){
@@@ -5230,27 -5545,30 +8933,45 @@@
  	NumberOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), (int)(yyvsp[(3) - (8)].d), (yyvsp[(6) - (8)].c), d);
        }
        Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(6) - (8)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 88:
 +#line 882 "Gmsh.y"
++=======
+   case 89:
+ /* Line 1787 of yacc.c  */
+ #line 912 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (8)].c), 0, (yyvsp[(5) - (8)].c), (yyvsp[(7) - (8)].u));
        Free((yyvsp[(1) - (8)].c)); Free((yyvsp[(5) - (8)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 89:
 +#line 887 "Gmsh.y"
++=======
+   case 90:
+ /* Line 1787 of yacc.c  */
+ #line 917 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        ColorOption(GMSH_SET|GMSH_GUI, (yyvsp[(1) - (11)].c), (int)(yyvsp[(3) - (11)].d), (yyvsp[(8) - (11)].c), (yyvsp[(10) - (11)].u));
        Free((yyvsp[(1) - (11)].c)); Free((yyvsp[(8) - (11)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 90:
 +#line 895 "Gmsh.y"
++=======
+   case 91:
+ /* Line 1787 of yacc.c  */
+ #line 925 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        GmshColorTable *ct = GetColorTable(0);
        if(!ct)
@@@ -5269,11 -5587,12 +8990,17 @@@
        }
        Free((yyvsp[(1) - (6)].c));
        List_Delete((yyvsp[(5) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 91:
 +#line 915 "Gmsh.y"
++=======
+   case 92:
+ /* Line 1787 of yacc.c  */
+ #line 945 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (9)].d));
        if(!ct)
@@@ -5292,11 -5611,12 +9019,17 @@@
        }
        Free((yyvsp[(1) - (9)].c));
        List_Delete((yyvsp[(8) - (9)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 92:
 +#line 938 "Gmsh.y"
++=======
+   case 93:
+ /* Line 1787 of yacc.c  */
+ #line 968 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        if(!strcmp((yyvsp[(1) - (5)].c),"Background"))
@@@ -5306,22 -5626,24 +9039,34 @@@
        else
  	yymsg(0, "Unknown command %s Field", (yyvsp[(1) - (5)].c));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 93:
 +#line 949 "Gmsh.y"
++=======
+   case 94:
+ /* Line 1787 of yacc.c  */
+ #line 979 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        if(!GModel::current()->getFields()->newField((int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c)))
  	yymsg(0, "Cannot create field %i of type '%s'", (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c));
  #endif
        Free((yyvsp[(6) - (7)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 94:
 +#line 957 "Gmsh.y"
++=======
+   case 95:
+ /* Line 1787 of yacc.c  */
+ #line 987 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
@@@ -5342,11 -5664,12 +9087,17 @@@
  	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (9)].d));
  #endif
        Free((yyvsp[(6) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 95:
 +#line 979 "Gmsh.y"
++=======
+   case 96:
+ /* Line 1787 of yacc.c  */
+ #line 1009 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (9)].d));
@@@ -5368,11 -5691,12 +9119,17 @@@
  #endif
        Free((yyvsp[(6) - (9)].c));
        Free((yyvsp[(8) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 96:
 +#line 1002 "Gmsh.y"
++=======
+   case 97:
+ /* Line 1787 of yacc.c  */
+ #line 1032 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (11)].d));
@@@ -5397,11 -5721,12 +9154,17 @@@
  #endif
        Free((yyvsp[(6) - (11)].c));
        List_Delete((yyvsp[(9) - (11)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 97:
 +#line 1028 "Gmsh.y"
++=======
+   case 98:
+ /* Line 1787 of yacc.c  */
+ #line 1058 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        Field *field = GModel::current()->getFields()->get((int)(yyvsp[(3) - (7)].d));
@@@ -5418,11 -5743,12 +9181,17 @@@
  	yymsg(0, "No field with id %i", (int)(yyvsp[(3) - (7)].d));
  #endif
        Free((yyvsp[(6) - (7)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 98:
 +#line 1049 "Gmsh.y"
++=======
+   case 99:
+ /* Line 1787 of yacc.c  */
+ #line 1079 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_PLUGINS)
        try {
@@@ -5433,11 -5759,12 +9202,17 @@@
        }
  #endif
        Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 99:
 +#line 1061 "Gmsh.y"
++=======
+   case 100:
+ /* Line 1787 of yacc.c  */
+ #line 1091 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_PLUGINS)
        try {
@@@ -5448,11 -5775,12 +9223,17 @@@
        }
  #endif
        Free((yyvsp[(3) - (9)].c)); Free((yyvsp[(6) - (9)].c)); Free((yyvsp[(8) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 103:
 +#line 1079 "Gmsh.y"
++=======
+   case 104:
+ /* Line 1787 of yacc.c  */
+ #line 1109 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(3) - (3)].c));
        std::vector<double> val(1, 0.);
@@@ -5460,11 -5788,12 +9241,17 @@@
          gmsh_yysymbols[key].value = val;
        }
        Free((yyvsp[(3) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 104:
 +#line 1088 "Gmsh.y"
++=======
+   case 105:
+ /* Line 1787 of yacc.c  */
+ #line 1118 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(3) - (5)].c));
        std::vector<double> val(1, (yyvsp[(5) - (5)].d));
@@@ -5472,16 -5801,18 +9259,28 @@@
          gmsh_yysymbols[key].value = val;
        }
        Free((yyvsp[(3) - (5)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 105:
 +#line 1097 "Gmsh.y"
 +    { floatOptions.clear(); charOptions.clear(); ;}
 +    break;
 +
 +  case 106:
 +#line 1099 "Gmsh.y"
++=======
+   case 106:
+ /* Line 1787 of yacc.c  */
+ #line 1127 "Gmsh.y"
+     { floatOptions.clear(); charOptions.clear(); }
+     break;
+ 
+   case 107:
+ /* Line 1787 of yacc.c  */
+ #line 1129 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(3) - (9)].c));
        std::vector<double> val(1, (yyvsp[(6) - (9)].d));
@@@ -5490,11 -5821,12 +9289,17 @@@
          gmsh_yysymbols[key].value = val;
        }
        Free((yyvsp[(3) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 107:
 +#line 1109 "Gmsh.y"
++=======
+   case 108:
+ /* Line 1787 of yacc.c  */
+ #line 1139 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(3) - (5)].c)), val((yyvsp[(5) - (5)].c));
        if(!gmsh_yystringsymbols.count(key)){
@@@ -5502,16 -5834,18 +9307,28 @@@
        }
        Free((yyvsp[(3) - (5)].c));
        Free((yyvsp[(5) - (5)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 108:
 +#line 1118 "Gmsh.y"
 +    { floatOptions.clear(); charOptions.clear(); ;}
 +    break;
 +
 +  case 109:
 +#line 1120 "Gmsh.y"
++=======
+   case 109:
+ /* Line 1787 of yacc.c  */
+ #line 1148 "Gmsh.y"
+     { floatOptions.clear(); charOptions.clear(); }
+     break;
+ 
+   case 110:
+ /* Line 1787 of yacc.c  */
+ #line 1150 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(3) - (9)].c)), val((yyvsp[(6) - (9)].c));
        if(!gmsh_yysymbols.count(key)){
@@@ -5520,37 -5854,41 +9337,61 @@@
        }
        Free((yyvsp[(3) - (9)].c));
        Free((yyvsp[(6) - (9)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 111:
 +#line 1134 "Gmsh.y"
++=======
+   case 112:
+ /* Line 1787 of yacc.c  */
+ #line 1164 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string name((yyvsp[(3) - (3)].c));
        Msg::UndefineOnelabParameter(name);
        Free((yyvsp[(3) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 112:
 +#line 1142 "Gmsh.y"
++=======
+   case 113:
+ /* Line 1787 of yacc.c  */
+ #line 1172 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(20,20,sizeof(doubleXstring));
        doubleXstring v = {(yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].c)};
        List_Add((yyval.l), &v);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 113:
 +#line 1148 "Gmsh.y"
++=======
+   case 114:
+ /* Line 1787 of yacc.c  */
+ #line 1178 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        doubleXstring v = {(yyvsp[(3) - (5)].d), (yyvsp[(5) - (5)].c)};
        List_Add((yyval.l), &v);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 116:
 +#line 1160 "Gmsh.y"
++=======
+   case 117:
+ /* Line 1787 of yacc.c  */
+ #line 1190 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(2) - (3)].c));
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
@@@ -5560,11 -5898,12 +9401,17 @@@
        }
        Free((yyvsp[(2) - (3)].c));
        List_Delete((yyvsp[(3) - (3)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 117:
 +#line 1171 "Gmsh.y"
++=======
+   case 118:
+ /* Line 1787 of yacc.c  */
+ #line 1201 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(2) - (5)].c));
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@@ -5577,43 -5916,47 +9424,67 @@@
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++)
          Free(((doubleXstring*)List_Pointer((yyvsp[(4) - (5)].l), i))->s);
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 118:
 +#line 1186 "Gmsh.y"
++=======
+   case 119:
+ /* Line 1787 of yacc.c  */
+ #line 1216 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(2) - (3)].c));
        std::string val((yyvsp[(3) - (3)].c));
        charOptions[key].push_back(val);
        Free((yyvsp[(2) - (3)].c));
        Free((yyvsp[(3) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 121:
 +#line 1202 "Gmsh.y"
++=======
+   case 122:
+ /* Line 1787 of yacc.c  */
+ #line 1232 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(2) - (3)].c));
        double val = (yyvsp[(3) - (3)].d);
        floatOptions[key].push_back(val);
        Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 122:
 +#line 1210 "Gmsh.y"
++=======
+   case 123:
+ /* Line 1787 of yacc.c  */
+ #line 1240 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(2) - (3)].c));
        std::string val((yyvsp[(3) - (3)].c));
        charOptions[key].push_back(val);
        Free((yyvsp[(2) - (3)].c));
        Free((yyvsp[(3) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 123:
 +#line 1219 "Gmsh.y"
++=======
+   case 124:
+ /* Line 1787 of yacc.c  */
+ #line 1249 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string key((yyvsp[(2) - (5)].c));
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@@ -5625,35 -5968,92 +9496,126 @@@
        }
        Free((yyvsp[(2) - (5)].c));
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 124:
 +#line 1237 "Gmsh.y"
++=======
+   case 125:
+ /* Line 1787 of yacc.c  */
+ #line 1267 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.i) = (int)(yyvsp[(1) - (1)].d);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 125:
 +#line 1241 "Gmsh.y"
++=======
+   case 126:
+ /* Line 1787 of yacc.c  */
+ #line 1271 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.i) = GModel::current()->setPhysicalName
-         (std::string((yyvsp[(1) - (1)].c)), curPhysDim,
-          ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
+         (std::string((yyvsp[(1) - (1)].c)), 0, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
        Free((yyvsp[(1) - (1)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 126:
 +#line 1251 "Gmsh.y"
++=======
+   case 127:
+ /* Line 1787 of yacc.c  */
+ #line 1280 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-       (yyval.l) = 0;
-     ;}
+       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
+     }
      break;
  
++<<<<<<< HEAD
 +  case 127:
 +#line 1255 "Gmsh.y"
++=======
+   case 128:
+ /* Line 1787 of yacc.c  */
+ #line 1284 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.i) = GModel::current()->setPhysicalName
+         (std::string((yyvsp[(1) - (1)].c)), 1, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
+       Free((yyvsp[(1) - (1)].c));
+     }
+     break;
+ 
++<<<<<<< HEAD
++  case 128:
++#line 1267 "Gmsh.y"
++=======
+   case 129:
+ /* Line 1787 of yacc.c  */
+ #line 1293 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
+     }
+     break;
+ 
++<<<<<<< HEAD
++  case 129:
++#line 1271 "Gmsh.y"
++=======
+   case 130:
+ /* Line 1787 of yacc.c  */
+ #line 1297 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.i) = GModel::current()->setPhysicalName
+         (std::string((yyvsp[(1) - (1)].c)), 2, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
+       Free((yyvsp[(1) - (1)].c));
+     }
+     break;
+ 
++<<<<<<< HEAD
++  case 130:
++#line 1281 "Gmsh.y"
++=======
+   case 131:
+ /* Line 1787 of yacc.c  */
+ #line 1306 "Gmsh.y"
+     {
+       (yyval.i) = (int)(yyvsp[(1) - (1)].d);
+     }
+     break;
+ 
+   case 132:
+ /* Line 1787 of yacc.c  */
+ #line 1310 "Gmsh.y"
+     {
+       (yyval.i) = GModel::current()->setPhysicalName
+         (std::string((yyvsp[(1) - (1)].c)), 3, ++GModel::current()->getGEOInternals()->MaxPhysicalNum);
+       Free((yyvsp[(1) - (1)].c));
+     }
+     break;
+ 
+   case 133:
+ /* Line 1787 of yacc.c  */
+ #line 1319 "Gmsh.y"
+     {
+       (yyval.l) = 0;
+     }
+     break;
+ 
+   case 134:
+ /* Line 1787 of yacc.c  */
+ #line 1323 "Gmsh.y"
      {
        (yyval.l) = List_Create(1, 1, sizeof(Vertex*));
        Vertex *v = FindPoint((int)(yyvsp[(4) - (5)].d));
@@@ -5662,25 -6062,28 +9624,29 @@@
        else{
  	List_Add((yyval.l), &v);
        }
-     ;}
+     }
      break;
  
-   case 128:
- #line 1267 "Gmsh.y"
+   case 135:
+ /* Line 1787 of yacc.c  */
+ #line 1335 "Gmsh.y"
      {
        for(int i = 0; i < 4; i++) (yyval.v)[i] = 0.;
-     ;}
+     }
      break;
  
-   case 129:
- #line 1271 "Gmsh.y"
+   case 136:
+ /* Line 1787 of yacc.c  */
+ #line 1339 "Gmsh.y"
      {
        for(int i = 0; i < 4; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
-     ;}
+     }
      break;
  
-   case 130:
- #line 1281 "Gmsh.y"
+   case 137:
+ /* Line 1787 of yacc.c  */
+ #line 1349 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if(FindPoint(num)){
@@@ -5702,37 -6105,48 +9668,68 @@@
        }
        (yyval.s).Type = MSH_POINT;
        (yyval.s).Num = num;
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 131:
 +#line 1304 "Gmsh.y"
 +    {
 +      curPhysDim = 0;
 +    ;}
 +    break;
 +
 +  case 132:
 +#line 1308 "Gmsh.y"
-     {
-       int num = (int)(yyvsp[(5) - (9)].i);
-       if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
++=======
+     }
+     break;
+ 
+   case 138:
+ /* Line 1787 of yacc.c  */
+ #line 1372 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       int num = (int)(yyvsp[(4) - (8)].i);
+       int op = (yyvsp[(6) - (8)].i);
+       PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_POINT);
+       if(p && op == 0){
  	yymsg(0, "Physical point %d already exists", num);
        }
-       else{
- 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
- 	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
+       else if(!p && op > 0){
+ 	yymsg(0, "Physical point %d does not exists", num);
+       }
+       else if(op == 0){
+ 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+ 	p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
  	List_Delete(temp);
  	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
        }
-       List_Delete((yyvsp[(8) - (9)].l));
+       else if(op == 1){
+         for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+           double d;
+           List_Read((yyvsp[(7) - (8)].l), i, &d);
+           int j = (int)d;
+           List_Add(p->Entities, &j);
+         }
+       }
+       else{
+ 	yymsg(0, "Unsupported operation on physical point %d", num);
+       }
+       List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_PHYSICAL_POINT;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 133:
 +#line 1324 "Gmsh.y"
++=======
+   case 139:
+ /* Line 1787 of yacc.c  */
+ #line 1404 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
  	double d;
@@@ -5750,11 -6165,12 +9748,17 @@@
        // dummy values
        (yyval.s).Type = 0;
        (yyval.s).Num = 0;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 134:
 +#line 1346 "Gmsh.y"
++=======
+   case 140:
+ /* Line 1787 of yacc.c  */
+ #line 1427 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if(FindCurve(num)){
@@@ -5771,11 -6187,12 +9775,17 @@@
        List_Delete((yyvsp[(6) - (7)].l));
        (yyval.s).Type = MSH_SEGM_LINE;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 135:
 +#line 1364 "Gmsh.y"
++=======
+   case 141:
+ /* Line 1787 of yacc.c  */
+ #line 1445 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
  	double dnum;
@@@ -5795,11 -6212,12 +9805,17 @@@
  	  }
  	}
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 136:
 +#line 1385 "Gmsh.y"
++=======
+   case 142:
+ /* Line 1787 of yacc.c  */
+ #line 1466 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if(FindCurve(num)){
@@@ -5816,11 -6234,12 +9832,17 @@@
        List_Delete((yyvsp[(6) - (7)].l));
        (yyval.s).Type = MSH_SEGM_SPLN;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 137:
 +#line 1403 "Gmsh.y"
++=======
+   case 143:
+ /* Line 1787 of yacc.c  */
+ #line 1484 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (8)].d);
        if(FindCurve(num)){
@@@ -5849,11 -6268,12 +9871,17 @@@
        List_Delete((yyvsp[(6) - (8)].l));
        (yyval.s).Type = MSH_SEGM_CIRC;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 138:
 +#line 1433 "Gmsh.y"
++=======
+   case 144:
+ /* Line 1787 of yacc.c  */
+ #line 1514 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (8)].d);
        if(FindCurve(num)){
@@@ -5882,11 -6302,12 +9910,17 @@@
        List_Delete((yyvsp[(6) - (8)].l));
        (yyval.s).Type = MSH_SEGM_ELLI;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 139:
 +#line 1463 "Gmsh.y"
++=======
+   case 145:
+ /* Line 1787 of yacc.c  */
+ #line 1544 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if(FindCurve(num)){
@@@ -5903,11 -6324,12 +9937,17 @@@
        List_Delete((yyvsp[(6) - (7)].l));
        (yyval.s).Type = MSH_SEGM_BSPLN;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 140:
 +#line 1481 "Gmsh.y"
++=======
+   case 146:
+ /* Line 1787 of yacc.c  */
+ #line 1562 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if(FindCurve(num)){
@@@ -5924,11 -6346,12 +9964,17 @@@
        List_Delete((yyvsp[(6) - (7)].l));
        (yyval.s).Type = MSH_SEGM_BEZIER;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 141:
 +#line 1500 "Gmsh.y"
++=======
+   case 147:
+ /* Line 1787 of yacc.c  */
+ #line 1581 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (11)].d);
        if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@@ -5953,11 -6376,12 +9999,17 @@@
        List_Delete((yyvsp[(8) - (11)].l));
        (yyval.s).Type = MSH_SEGM_NURBS;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 142:
 +#line 1526 "Gmsh.y"
++=======
+   case 148:
+ /* Line 1787 of yacc.c  */
+ #line 1607 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (8)].d);
        if(FindEdgeLoop(num)){
@@@ -5974,11 -6398,12 +10026,17 @@@
        Free((yyvsp[(2) - (8)].c));
        (yyval.s).Type = MSH_SEGM_LOOP;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 143:
 +#line 1544 "Gmsh.y"
++=======
+   case 149:
+ /* Line 1787 of yacc.c  */
+ #line 1625 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (8)].d);
        if(FindCurve(num)){
@@@ -5995,37 -6420,48 +10053,68 @@@
        List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_SEGM_COMPOUND;
        (yyval.s).Num = num;
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 144:
 +#line 1562 "Gmsh.y"
 +    {
 +      curPhysDim = 1;
 +    ;}
 +    break;
 +
 +  case 145:
 +#line 1566 "Gmsh.y"
-     {
-       int num = (int)(yyvsp[(5) - (9)].i);
-       if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
++=======
+     }
+     break;
+ 
+   case 150:
+ /* Line 1787 of yacc.c  */
+ #line 1643 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       int num = (int)(yyvsp[(4) - (8)].i);
+       int op = (yyvsp[(6) - (8)].i);
+       PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_LINE);
+       if(p && op == 0){
  	yymsg(0, "Physical line %d already exists", num);
        }
-       else{
- 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
- 	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
+       else if(!p && op > 0){
+ 	yymsg(0, "Physical line %d does not exists", num);
+       }
+       else if(op == 0){
+ 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+ 	p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
  	List_Delete(temp);
  	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
        }
-       List_Delete((yyvsp[(8) - (9)].l));
+       else if(op == 1){
+         for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+           double d;
+           List_Read((yyvsp[(7) - (8)].l), i, &d);
+           int j = (int)d;
+           List_Add(p->Entities, &j);
+         }
+       }
+       else{
+ 	yymsg(0, "Unsupported operation on physical line %d", num);
+       }
+       List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_PHYSICAL_LINE;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 146:
 +#line 1585 "Gmsh.y"
++=======
+   case 151:
+ /* Line 1787 of yacc.c  */
+ #line 1678 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (8)].d);
        if(FindSurface(num)){
@@@ -6042,11 -6478,12 +10131,17 @@@
        List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_SURF_PLAN;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 147:
 +#line 1603 "Gmsh.y"
++=======
+   case 152:
+ /* Line 1787 of yacc.c  */
+ #line 1696 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (9)].d), type = 0;
        if(FindSurface(num)){
@@@ -6084,39 -6521,43 +10179,63 @@@
        List_Delete((yyvsp[(7) - (9)].l));
        (yyval.s).Type = type;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 148:
 +#line 1642 "Gmsh.y"
++=======
+   case 153:
+ /* Line 1787 of yacc.c  */
+ #line 1735 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        myGmshSurface = 0;
        (yyval.s).Type = 0;
        (yyval.s).Num = 0;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 149:
 +#line 1648 "Gmsh.y"
++=======
+   case 154:
+ /* Line 1787 of yacc.c  */
+ #line 1741 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
        (yyval.s).Type = 0;
        (yyval.s).Num = 0;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 150:
 +#line 1654 "Gmsh.y"
++=======
+   case 155:
+ /* Line 1787 of yacc.c  */
+ #line 1747 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (10)].d);
        myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
        (yyval.s).Type = 0;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 151:
 +#line 1661 "Gmsh.y"
++=======
+   case 156:
+ /* Line 1787 of yacc.c  */
+ #line 1754 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@@ -6140,11 -6581,12 +10259,17 @@@
        }
        (yyval.s).Type = 0;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 152:
 +#line 1686 "Gmsh.y"
++=======
+   case 157:
+ /* Line 1787 of yacc.c  */
+ #line 1779 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@@ -6168,11 -6610,12 +10293,17 @@@
        }
        (yyval.s).Type = 0;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 153:
 +#line 1711 "Gmsh.y"
++=======
+   case 158:
+ /* Line 1787 of yacc.c  */
+ #line 1804 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (8)].d);
        if(FindSurfaceLoop(num)){
@@@ -6188,11 -6631,12 +10319,17 @@@
        Free((yyvsp[(2) - (8)].c));
        (yyval.s).Type = MSH_SURF_LOOP;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 154:
 +#line 1728 "Gmsh.y"
++=======
+   case 159:
+ /* Line 1787 of yacc.c  */
+ #line 1821 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (8)].d);
        if(FindSurface(num)){
@@@ -6210,11 -6654,12 +10347,17 @@@
        List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_SURF_COMPOUND;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 155:
 +#line 1748 "Gmsh.y"
++=======
+   case 160:
+ /* Line 1787 of yacc.c  */
+ #line 1841 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (12)].d);
        if(FindSurface(num)){
@@@ -6246,37 -6691,48 +10389,68 @@@
        Free((yyvsp[(8) - (12)].c));
        (yyval.s).Type = MSH_SURF_COMPOUND;
        (yyval.s).Num = num;
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 156:
 +#line 1781 "Gmsh.y"
 +    {
 +      curPhysDim = 2;
 +    ;}
 +    break;
 +
 +  case 157:
 +#line 1785 "Gmsh.y"
-     {
-       int num = (int)(yyvsp[(5) - (9)].i);
-       if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
++=======
+     }
+     break;
+ 
+   case 161:
+ /* Line 1787 of yacc.c  */
+ #line 1874 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       int num = (int)(yyvsp[(4) - (8)].i);
+       int op = (yyvsp[(6) - (8)].i);
+       PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE);
+       if(p && op == 0){
  	yymsg(0, "Physical surface %d already exists", num);
        }
-       else{
- 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
- 	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
+       else if(!p && op > 0){
+ 	yymsg(0, "Physical surface %d does not exists", num);
+       }
+       else if(op == 0){
+ 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+ 	p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
  	List_Delete(temp);
  	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
        }
-       List_Delete((yyvsp[(8) - (9)].l));
+       else if(op == 1){
+         for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+           double d;
+           List_Read((yyvsp[(7) - (8)].l), i, &d);
+           int j = (int)d;
+           List_Add(p->Entities, &j);
+         }
+       }
+       else{
+ 	yymsg(0, "Unsupported operation on physical surface %d", num);
+       }
+       List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_PHYSICAL_SURFACE;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 158:
 +#line 1805 "Gmsh.y"
++=======
+   case 162:
+ /* Line 1787 of yacc.c  */
+ #line 1910 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
        int num = (int)(yyvsp[(4) - (8)].d);
@@@ -6293,11 -6749,12 +10467,17 @@@
        List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_VOLUME;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 159:
 +#line 1823 "Gmsh.y"
++=======
+   case 163:
+ /* Line 1787 of yacc.c  */
+ #line 1928 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (7)].d);
        if(FindVolume(num)){
@@@ -6313,11 -6770,12 +10493,17 @@@
        List_Delete((yyvsp[(6) - (7)].l));
        (yyval.s).Type = MSH_VOLUME;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 160:
 +#line 1840 "Gmsh.y"
++=======
+   case 164:
+ /* Line 1787 of yacc.c  */
+ #line 1945 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(4) - (8)].d);
        if(FindVolume(num)){
@@@ -6332,77 -6790,93 +10518,138 @@@
        List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_VOLUME_COMPOUND;
        (yyval.s).Num = num;
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 161:
 +#line 1856 "Gmsh.y"
 +    {
 +      curPhysDim = 3;
 +    ;}
 +    break;
 +
 +  case 162:
 +#line 1860 "Gmsh.y"
-     {
-       int num = (int)(yyvsp[(5) - (9)].i);
-       if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
++=======
+     }
+     break;
+ 
+   case 165:
+ /* Line 1787 of yacc.c  */
+ #line 1961 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       int num = (int)(yyvsp[(4) - (8)].i);
+       int op = (yyvsp[(6) - (8)].i);
+       PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME);
+       if(p && op == 0){
  	yymsg(0, "Physical volume %d already exists", num);
        }
-       else{
- 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(8) - (9)].l));
- 	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
+       else if(!p && op > 0){
+ 	yymsg(0, "Physical volume %d does not exists", num);
+       }
+       else if(op == 0){
+ 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
+ 	p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
  	List_Delete(temp);
  	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
        }
-       List_Delete((yyvsp[(8) - (9)].l));
+       else if(op == 1){
+         for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+           double d;
+           List_Read((yyvsp[(7) - (8)].l), i, &d);
+           int j = (int)d;
+           List_Add(p->Entities, &j);
+         }
+       }
+       else{
+ 	yymsg(0, "Unsupported operation on physical volume %d", num);
+       }
+       List_Delete((yyvsp[(7) - (8)].l));
        (yyval.s).Type = MSH_PHYSICAL_VOLUME;
        (yyval.s).Num = num;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 163:
 +#line 1882 "Gmsh.y"
++=======
+   case 166:
+ /* Line 1787 of yacc.c  */
+ #line 1998 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 164:
 +#line 1887 "Gmsh.y"
++=======
+   case 167:
+ /* Line 1787 of yacc.c  */
+ #line 2003 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 165:
 +#line 1892 "Gmsh.y"
++=======
+   case 168:
+ /* Line 1787 of yacc.c  */
+ #line 2008 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 166:
 +#line 1897 "Gmsh.y"
++=======
+   case 169:
+ /* Line 1787 of yacc.c  */
+ #line 2013 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 167:
 +#line 1902 "Gmsh.y"
++=======
+   case 170:
+ /* Line 1787 of yacc.c  */
+ #line 2018 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 168:
 +#line 1907 "Gmsh.y"
++=======
+   case 171:
+ /* Line 1787 of yacc.c  */
+ #line 2023 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(3, 3, sizeof(Shape));
        if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@@ -6424,55 -6898,62 +10671,97 @@@
        }
        Free((yyvsp[(1) - (4)].c));
        List_Delete((yyvsp[(3) - (4)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 169:
 +#line 1930 "Gmsh.y"
++=======
+   case 172:
+ /* Line 1787 of yacc.c  */
+ #line 2046 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
        List_Delete((yyvsp[(4) - (9)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 170:
 +#line 1936 "Gmsh.y"
++=======
+   case 173:
+ /* Line 1787 of yacc.c  */
+ #line 2052 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape*));
        List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
        List_Delete((yyvsp[(7) - (9)].l));
        SplitCurve((int)(yyvsp[(4) - (9)].d), tmp, (yyval.l));
        List_Delete(tmp);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 171:
 +#line 1946 "Gmsh.y"
 +    { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
 +    break;
 +
 +  case 172:
 +#line 1947 "Gmsh.y"
 +    { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
 +    break;
 +
 +  case 173:
 +#line 1952 "Gmsh.y"
++=======
+   case 174:
+ /* Line 1787 of yacc.c  */
+ #line 2062 "Gmsh.y"
+     { (yyval.l) = (yyvsp[(1) - (1)].l); }
+     break;
+ 
+   case 175:
+ /* Line 1787 of yacc.c  */
+ #line 2063 "Gmsh.y"
+     { (yyval.l) = (yyvsp[(1) - (1)].l); }
+     break;
+ 
+   case 176:
+ /* Line 1787 of yacc.c  */
+ #line 2068 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(3, 3, sizeof(Shape));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 174:
 +#line 1956 "Gmsh.y"
++=======
+   case 177:
+ /* Line 1787 of yacc.c  */
+ #line 2072 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 175:
 +#line 1960 "Gmsh.y"
++=======
+   case 178:
+ /* Line 1787 of yacc.c  */
+ #line 2076 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
  	double d;
@@@ -6494,11 -6975,12 +10783,17 @@@
  	    yymsg(1, "Unknown point %d", TheShape.Num);
  	}
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 176:
 +#line 1983 "Gmsh.y"
++=======
+   case 179:
+ /* Line 1787 of yacc.c  */
+ #line 2099 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
  	double d;
@@@ -6520,11 -7002,12 +10815,17 @@@
  	    yymsg(1, "Unknown curve %d", TheShape.Num);
  	}
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 177:
 +#line 2006 "Gmsh.y"
++=======
+   case 180:
+ /* Line 1787 of yacc.c  */
+ #line 2122 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
  	double d;
@@@ -6546,11 -7029,12 +10847,17 @@@
  	    yymsg(1, "Unknown surface %d", TheShape.Num);
  	}
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 178:
 +#line 2029 "Gmsh.y"
++=======
+   case 181:
+ /* Line 1787 of yacc.c  */
+ #line 2145 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
  	double d;
@@@ -6572,11 -7056,12 +10879,17 @@@
  	    yymsg(1, "Unknown volume %d", TheShape.Num);
  	}
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 179:
 +#line 2057 "Gmsh.y"
++=======
+   case 182:
+ /* Line 1787 of yacc.c  */
+ #line 2173 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
@@@ -6596,11 -7081,12 +10909,17 @@@
        else
          yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 180:
 +#line 2078 "Gmsh.y"
++=======
+   case 183:
+ /* Line 1787 of yacc.c  */
+ #line 2194 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        int t = (int)(yyvsp[(4) - (10)].d);
@@@ -6625,11 -7111,12 +10944,17 @@@
          List_Delete(*(List_T**)List_Pointer((yyvsp[(8) - (10)].l), i));
        List_Delete((yyvsp[(8) - (10)].l));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 181:
 +#line 2105 "Gmsh.y"
++=======
+   case 184:
+ /* Line 1787 of yacc.c  */
+ #line 2221 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
@@@ -6648,11 -7135,12 +10973,17 @@@
        else
          yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 182:
 +#line 2126 "Gmsh.y"
++=======
+   case 185:
+ /* Line 1787 of yacc.c  */
+ #line 2242 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
@@@ -6672,11 -7160,12 +11003,17 @@@
        else
          yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (16)].d));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 183:
 +#line 2147 "Gmsh.y"
++=======
+   case 186:
+ /* Line 1787 of yacc.c  */
+ #line 2263 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
@@@ -6695,11 -7184,12 +11032,17 @@@
        else
          yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (12)].d));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 184:
 +#line 2167 "Gmsh.y"
++=======
+   case 187:
+ /* Line 1787 of yacc.c  */
+ #line 2283 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
@@@ -6810,11 -7300,12 +11153,17 @@@
          yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
        Free((yyvsp[(2) - (8)].c));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 185:
 +#line 2279 "Gmsh.y"
++=======
+   case 188:
+ /* Line 1787 of yacc.c  */
+ #line 2395 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
@@@ -6832,11 -7323,12 +11181,17 @@@
          yymsg(0, "Wrong levelset definition");
        Free((yyvsp[(2) - (8)].c)); Free((yyvsp[(7) - (8)].c));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 186:
 +#line 2298 "Gmsh.y"
++=======
+   case 189:
+ /* Line 1787 of yacc.c  */
+ #line 2414 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@@ -6873,11 -7365,12 +11228,17 @@@
          yymsg(0, "Wrong levelset definition");
        Free((yyvsp[(2) - (6)].c));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 187:
 +#line 2337 "Gmsh.y"
++=======
+   case 190:
+ /* Line 1787 of yacc.c  */
+ #line 2453 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_DINTEGRATION)
        if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@@ -6979,11 -7472,12 +11340,17 @@@
          yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (14)].d));
        Free((yyvsp[(2) - (14)].c));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 188:
 +#line 2445 "Gmsh.y"
++=======
+   case 191:
+ /* Line 1787 of yacc.c  */
+ #line 2561 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
  	Shape TheShape;
@@@ -6991,20 -7485,22 +11358,32 @@@
  	DeleteShape(TheShape.Type, TheShape.Num);
        }
        List_Delete((yyvsp[(3) - (4)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 189:
 +#line 2454 "Gmsh.y"
++=======
+   case 192:
+ /* Line 1787 of yacc.c  */
+ #line 2570 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 190:
 +#line 2460 "Gmsh.y"
++=======
+   case 193:
+ /* Line 1787 of yacc.c  */
+ #line 2576 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@@ -7018,11 -7514,12 +11397,17 @@@
  	yymsg(0, "Unknown command 'Delete %s'", (yyvsp[(2) - (6)].c));
  #endif
        Free((yyvsp[(2) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 191:
 +#line 2475 "Gmsh.y"
++=======
+   case 194:
+ /* Line 1787 of yacc.c  */
+ #line 2591 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
          ClearProject();
@@@ -7049,11 -7546,12 +11434,17 @@@
  	  yymsg(0, "Unknown object or expression to delete '%s'", (yyvsp[(2) - (3)].c));
        }
        Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 192:
 +#line 2503 "Gmsh.y"
++=======
+   case 195:
+ /* Line 1787 of yacc.c  */
+ #line 2619 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@@ -7064,11 -7562,12 +11455,17 @@@
  	yymsg(0, "Unknown command 'Delete %s %s'", (yyvsp[(2) - (4)].c), (yyvsp[(3) - (4)].c));
  #endif
        Free((yyvsp[(2) - (4)].c)); Free((yyvsp[(3) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 193:
 +#line 2520 "Gmsh.y"
++=======
+   case 196:
+ /* Line 1787 of yacc.c  */
+ #line 2636 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
  	Shape TheShape;
@@@ -7076,11 -7575,12 +11473,17 @@@
  	ColorShape(TheShape.Type, TheShape.Num, (yyvsp[(2) - (5)].u), false);
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 194:
 +#line 2529 "Gmsh.y"
++=======
+   case 197:
+ /* Line 1787 of yacc.c  */
+ #line 2645 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
  	Shape TheShape;
@@@ -7088,29 -7588,32 +11491,47 @@@
  	ColorShape(TheShape.Type, TheShape.Num, (yyvsp[(3) - (6)].u), true);
        }
        List_Delete((yyvsp[(5) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 195:
 +#line 2543 "Gmsh.y"
++=======
+   case 198:
+ /* Line 1787 of yacc.c  */
+ #line 2659 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < 4; i++)
  	VisibilityShape((yyvsp[(2) - (3)].c), i, 1, false);
        Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 196:
 +#line 2549 "Gmsh.y"
++=======
+   case 199:
+ /* Line 1787 of yacc.c  */
+ #line 2665 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < 4; i++)
  	VisibilityShape((yyvsp[(2) - (3)].c), i, 0, false);
        Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 197:
 +#line 2555 "Gmsh.y"
++=======
+   case 200:
+ /* Line 1787 of yacc.c  */
+ #line 2671 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
  	Shape TheShape;
@@@ -7118,11 -7621,12 +11539,17 @@@
  	VisibilityShape(TheShape.Type, TheShape.Num, 1, false);
        }
        List_Delete((yyvsp[(3) - (4)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 198:
 +#line 2564 "Gmsh.y"
++=======
+   case 201:
+ /* Line 1787 of yacc.c  */
+ #line 2680 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
  	Shape TheShape;
@@@ -7130,11 -7634,12 +11557,17 @@@
  	VisibilityShape(TheShape.Type, TheShape.Num, 1, true);
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 199:
 +#line 2573 "Gmsh.y"
++=======
+   case 202:
+ /* Line 1787 of yacc.c  */
+ #line 2689 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
  	Shape TheShape;
@@@ -7142,11 -7647,12 +11575,17 @@@
  	VisibilityShape(TheShape.Type, TheShape.Num, 0, false);
        }
        List_Delete((yyvsp[(3) - (4)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 200:
 +#line 2582 "Gmsh.y"
++=======
+   case 203:
+ /* Line 1787 of yacc.c  */
+ #line 2698 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
  	Shape TheShape;
@@@ -7154,11 -7660,12 +11593,17 @@@
  	VisibilityShape(TheShape.Type, TheShape.Num, 0, true);
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 201:
 +#line 2596 "Gmsh.y"
++=======
+   case 204:
+ /* Line 1787 of yacc.c  */
+ #line 2712 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
          std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@@ -7206,15 -7713,41 +11651,49 @@@
          std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
  	CreateSingleDir(tmp);
        }
++<<<<<<< HEAD
++=======
+       else if(!strcmp((yyvsp[(1) - (3)].c), "OnelabRun")){
+         Msg::RunOnelabClient((yyvsp[(2) - (3)].c));
+       }
++>>>>>>> upstream/2.9.3+dfsg1
        else{
  	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
        }
        Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 202:
 +#line 2649 "Gmsh.y"
++=======
+   case 205:
+ /* Line 1787 of yacc.c  */
+ #line 2768 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       int n = List_Nbr((yyvsp[(3) - (5)].l));
+       if(n == 1){
+         char *s; List_Read((yyvsp[(3) - (5)].l), 0, &s);
+         Msg::RunOnelabClient(s);
+         Free(s);
+       }
+       else if(n == 2){
+         char *s, *t; List_Read((yyvsp[(3) - (5)].l), 0, &s); List_Read((yyvsp[(3) - (5)].l), 1, &t);
+         Msg::RunOnelabClient(s, t);
+         Free(s); Free(t);
+       }
+       else{
+         yymsg(0, "OnelabRun takes one or two arguments");
+       }
+       List_Delete((yyvsp[(3) - (5)].l));
+     }
+     break;
+ 
+   case 206:
+ /* Line 1787 of yacc.c  */
+ #line 2786 "Gmsh.y"
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@@ -7230,11 -7763,12 +11709,17 @@@
  	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
  #endif
        Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(6) - (7)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 203:
 +#line 2666 "Gmsh.y"
++=======
+   case 207:
+ /* Line 1787 of yacc.c  */
+ #line 2803 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #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")){
@@@ -7248,11 -7782,12 +11733,17 @@@
  	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (7)].c));
  #endif
        Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(2) - (7)].c)); Free((yyvsp[(3) - (7)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 204:
 +#line 2681 "Gmsh.y"
++=======
+   case 208:
+ /* Line 1787 of yacc.c  */
+ #line 2818 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
  	SleepInSeconds((yyvsp[(2) - (3)].d));
@@@ -7270,11 -7805,12 +11761,17 @@@
        else
  	yymsg(0, "Unknown command '%s'", (yyvsp[(1) - (3)].c));
        Free((yyvsp[(1) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 205:
 +#line 2700 "Gmsh.y"
++=======
+   case 209:
+ /* Line 1787 of yacc.c  */
+ #line 2837 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_PLUGINS)
         try {
@@@ -7285,11 -7821,12 +11782,17 @@@
         }
  #endif
         Free((yyvsp[(3) - (7)].c)); Free((yyvsp[(6) - (7)].c));
-      ;}
+      }
      break;
  
++<<<<<<< HEAD
 +  case 206:
 +#line 2712 "Gmsh.y"
++=======
+   case 210:
+ /* Line 1787 of yacc.c  */
+ #line 2849 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_POST)
        if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@@ -7312,95 -7849,106 +11815,161 @@@
  	yymsg(0, "Unknown 'Combine' command");
  #endif
        Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 207:
 +#line 2736 "Gmsh.y"
++=======
+   case 211:
+ /* Line 1787 of yacc.c  */
+ #line 2873 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        Msg::Exit(0);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 208:
 +#line 2740 "Gmsh.y"
++=======
+   case 212:
+ /* Line 1787 of yacc.c  */
+ #line 2877 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
        YYABORT;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 209:
 +#line 2745 "Gmsh.y"
++=======
+   case 213:
+ /* Line 1787 of yacc.c  */
+ #line 2882 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        // 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
        // GModel directly during parsing.
        GModel::current()->importGEOInternals();
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 210:
 +#line 2752 "Gmsh.y"
++=======
+   case 214:
+ /* Line 1787 of yacc.c  */
+ #line 2889 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        CTX::instance()->forcedBBox = 0;
        GModel::current()->importGEOInternals();
        SetBoundingBox();
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 211:
 +#line 2758 "Gmsh.y"
++=======
+   case 215:
+ /* Line 1787 of yacc.c  */
+ #line 2895 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 212:
 +#line 2763 "Gmsh.y"
++=======
+   case 216:
+ /* Line 1787 of yacc.c  */
+ #line 2900 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_OPENGL)
        drawContext::global()->draw();
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 213:
 +#line 2769 "Gmsh.y"
++=======
+   case 217:
+ /* Line 1787 of yacc.c  */
+ #line 2906 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_OPENGL)
       CTX::instance()->mesh.changed = ENT_ALL;
       for(unsigned int index = 0; index < PView::list.size(); index++)
         PView::list[index]->setChanged(true);
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 214:
 +#line 2777 "Gmsh.y"
++=======
+   case 218:
+ /* Line 1787 of yacc.c  */
+ #line 2914 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        GModel::current()->createTopologyFromMesh();
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 215:
 +#line 2781 "Gmsh.y"
++=======
+   case 219:
+ /* Line 1787 of yacc.c  */
+ #line 2918 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        GModel::current()->createTopologyFromMesh(1);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 216:
 +#line 2785 "Gmsh.y"
++=======
+   case 220:
+ /* Line 1787 of yacc.c  */
+ #line 2922 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        GModel::current()->importGEOInternals();
        GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 217:
 +#line 2791 "Gmsh.y"
++=======
+   case 221:
+ /* Line 1787 of yacc.c  */
+ #line 2928 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int lock = CTX::instance()->lock;
        CTX::instance()->lock = 0;
@@@ -7453,22 -8001,24 +12022,34 @@@
          List_Delete(*(List_T**)List_Pointer((yyvsp[(9) - (16)].l), i));
        List_Delete((yyvsp[(9) - (16)].l));
        CTX::instance()->lock = lock;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 218:
 +#line 2845 "Gmsh.y"
++=======
+   case 222:
+ /* Line 1787 of yacc.c  */
+ #line 2982 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
  #if defined(HAVE_MESH)
        SetOrderN(GModel::current(), (yyvsp[(2) - (3)].d), CTX::instance()->mesh.secondOrderLinear,
                  CTX::instance()->mesh.secondOrderIncomplete,
                  CTX::instance()->mesh.meshOnlyVisible);
  #endif
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 219:
 +#line 2858 "Gmsh.y"
++=======
+   case 223:
+ /* Line 1787 of yacc.c  */
+ #line 2995 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
        LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@@ -7484,11 -8034,12 +12065,17 @@@
  	yymsg(0, "Reached maximum number of imbricated loops");
  	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 220:
 +#line 2875 "Gmsh.y"
++=======
+   case 224:
+ /* Line 1787 of yacc.c  */
+ #line 3012 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
        LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@@ -7504,11 -8055,12 +12091,17 @@@
  	yymsg(0, "Reached maximum number of imbricated loops");
  	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 221:
 +#line 2892 "Gmsh.y"
++=======
+   case 225:
+ /* Line 1787 of yacc.c  */
+ #line 3029 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
        LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@@ -7528,11 -8080,12 +12121,17 @@@
  	yymsg(0, "Reached maximum number of imbricated loops");
  	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 222:
 +#line 2913 "Gmsh.y"
++=======
+   case 226:
+ /* Line 1787 of yacc.c  */
+ #line 3050 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
        LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@@ -7552,11 -8105,12 +12151,17 @@@
  	yymsg(0, "Reached maximum number of imbricated loops");
  	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 223:
 +#line 2934 "Gmsh.y"
++=======
+   case 227:
+ /* Line 1787 of yacc.c  */
+ #line 3071 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(ImbricatedLoop <= 0){
  	yymsg(0, "Invalid For/EndFor loop");
@@@ -7590,439 -8144,485 +12195,715 @@@
  	else
  	  ImbricatedLoop--;
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 224:
 +#line 2969 "Gmsh.y"
++=======
+   case 228:
+ /* Line 1787 of yacc.c  */
+ #line 3106 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!FunctionManager::Instance()->createFunction
-          ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
+          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
  	yymsg(0, "Redefinition of function %s", (yyvsp[(2) - (2)].c));
        skip_until(NULL, "Return");
-       //FIXME: wee leak $2
-     ;}
+       Free((yyvsp[(2) - (2)].c));
+     }
      break;
  
++<<<<<<< HEAD
 +  case 225:
 +#line 2977 "Gmsh.y"
++=======
+   case 229:
+ /* Line 1787 of yacc.c  */
+ #line 3114 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!FunctionManager::Instance()->leaveFunction
           (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
  	yymsg(0, "Error while exiting function");
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 226:
 +#line 2983 "Gmsh.y"
++=======
+   case 230:
+ /* Line 1787 of yacc.c  */
+ #line 3120 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!FunctionManager::Instance()->enterFunction
-          ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
+          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
  	yymsg(0, "Unknown function %s", (yyvsp[(2) - (3)].c));
-       //FIXME: wee leak $2
-     ;}
-     break;
+       Free((yyvsp[(2) - (3)].c));
+     }
+     break;
  
++<<<<<<< HEAD
 +  case 227:
 +#line 2990 "Gmsh.y"
++=======
+   case 231:
+ /* Line 1787 of yacc.c  */
+ #line 3127 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 228:
 +#line 2994 "Gmsh.y"
++=======
+   case 232:
+ /* Line 1787 of yacc.c  */
+ #line 3131 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 229:
 +#line 3003 "Gmsh.y"
++=======
+   case 233:
+ /* Line 1787 of yacc.c  */
+ #line 3140 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l),
  		    (yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		    NULL, (yyval.l));
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 230:
 +#line 3011 "Gmsh.y"
++=======
+   case 234:
+ /* Line 1787 of yacc.c  */
+ #line 3148 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l),
  		    0., 0., 0., (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),
  		    NULL, (yyval.l));
        List_Delete((yyvsp[(10) - (11)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 231:
 +#line 3019 "Gmsh.y"
++=======
+   case 235:
+ /* Line 1787 of yacc.c  */
+ #line 3156 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
  		    (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].v)[0], (yyvsp[(7) - (13)].v)[1], (yyvsp[(7) - (13)].v)[2], (yyvsp[(9) - (13)].d),
  		    NULL, (yyval.l));
        List_Delete((yyvsp[(12) - (13)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 232:
 +#line 3027 "Gmsh.y"
++=======
+   case 236:
+ /* Line 1787 of yacc.c  */
+ #line 3164 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 233:
 +#line 3033 "Gmsh.y"
++=======
+   case 237:
+ /* Line 1787 of yacc.c  */
+ #line 3170 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
  		    (yyvsp[(2) - (7)].v)[0], (yyvsp[(2) - (7)].v)[1], (yyvsp[(2) - (7)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		    &extr, (yyval.l));
        List_Delete((yyvsp[(4) - (7)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 234:
 +#line 3041 "Gmsh.y"
++=======
+   case 238:
+ /* Line 1787 of yacc.c  */
+ #line 3178 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 235:
 +#line 3047 "Gmsh.y"
++=======
+   case 239:
+ /* Line 1787 of yacc.c  */
+ #line 3184 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
  		    0., 0., 0., (yyvsp[(3) - (13)].v)[0], (yyvsp[(3) - (13)].v)[1], (yyvsp[(3) - (13)].v)[2], (yyvsp[(5) - (13)].v)[0], (yyvsp[(5) - (13)].v)[1], (yyvsp[(5) - (13)].v)[2], (yyvsp[(7) - (13)].d),
  		    &extr, (yyval.l));
        List_Delete((yyvsp[(10) - (13)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 236:
 +#line 3055 "Gmsh.y"
++=======
+   case 240:
+ /* Line 1787 of yacc.c  */
+ #line 3192 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 237:
 +#line 3061 "Gmsh.y"
++=======
+   case 241:
+ /* Line 1787 of yacc.c  */
+ #line 3198 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
  		    (yyvsp[(3) - (15)].v)[0], (yyvsp[(3) - (15)].v)[1], (yyvsp[(3) - (15)].v)[2], (yyvsp[(5) - (15)].v)[0], (yyvsp[(5) - (15)].v)[1], (yyvsp[(5) - (15)].v)[2], (yyvsp[(7) - (15)].v)[0], (yyvsp[(7) - (15)].v)[1], (yyvsp[(7) - (15)].v)[2], (yyvsp[(9) - (15)].d),
  		    &extr, (yyval.l));
        List_Delete((yyvsp[(12) - (15)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 238:
 +#line 3069 "Gmsh.y"
++=======
+   case 242:
+ /* Line 1787 of yacc.c  */
+ #line 3206 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 239:
 +#line 3075 "Gmsh.y"
++=======
+   case 243:
+ /* Line 1787 of yacc.c  */
+ #line 3212 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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.,
  		    &extr, (yyval.l));
        List_Delete((yyvsp[(3) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 240:
 +#line 3083 "Gmsh.y"
++=======
+   case 244:
+ /* Line 1787 of yacc.c  */
+ #line 3220 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
  		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 241:
 +#line 3090 "Gmsh.y"
++=======
+   case 245:
+ /* Line 1787 of yacc.c  */
+ #line 3227 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
  		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 242:
 +#line 3097 "Gmsh.y"
++=======
+   case 246:
+ /* Line 1787 of yacc.c  */
+ #line 3234 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
  		   (yyvsp[(6) - (8)].v)[0], (yyvsp[(6) - (8)].v)[1], (yyvsp[(6) - (8)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 243:
 +#line 3104 "Gmsh.y"
++=======
+   case 247:
+ /* Line 1787 of yacc.c  */
+ #line 3241 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
  		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 244:
 +#line 3111 "Gmsh.y"
++=======
+   case 248:
+ /* Line 1787 of yacc.c  */
+ #line 3248 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
  		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 245:
 +#line 3118 "Gmsh.y"
++=======
+   case 249:
+ /* Line 1787 of yacc.c  */
+ #line 3255 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
  		   0., 0., 0., (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], (yyvsp[(8) - (12)].v)[0], (yyvsp[(8) - (12)].v)[1], (yyvsp[(8) - (12)].v)[2], (yyvsp[(10) - (12)].d),
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 246:
 +#line 3125 "Gmsh.y"
++=======
+   case 250:
+ /* Line 1787 of yacc.c  */
+ #line 3262 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
  		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 247:
 +#line 3132 "Gmsh.y"
++=======
+   case 251:
+ /* Line 1787 of yacc.c  */
+ #line 3269 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
  		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 248:
 +#line 3139 "Gmsh.y"
++=======
+   case 252:
+ /* Line 1787 of yacc.c  */
+ #line 3276 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
  		   (yyvsp[(6) - (14)].v)[0], (yyvsp[(6) - (14)].v)[1], (yyvsp[(6) - (14)].v)[2], (yyvsp[(8) - (14)].v)[0], (yyvsp[(8) - (14)].v)[1], (yyvsp[(8) - (14)].v)[2], (yyvsp[(10) - (14)].v)[0], (yyvsp[(10) - (14)].v)[1], (yyvsp[(10) - (14)].v)[2], (yyvsp[(12) - (14)].d),
  		   NULL, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 249:
 +#line 3146 "Gmsh.y"
++=======
+   case 253:
+ /* Line 1787 of yacc.c  */
+ #line 3283 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 250:
 +#line 3152 "Gmsh.y"
++=======
+   case 254:
+ /* Line 1787 of yacc.c  */
+ #line 3289 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
  		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 251:
 +#line 3159 "Gmsh.y"
++=======
+   case 255:
+ /* Line 1787 of yacc.c  */
+ #line 3296 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 252:
 +#line 3165 "Gmsh.y"
++=======
+   case 256:
+ /* Line 1787 of yacc.c  */
+ #line 3302 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
  		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 253:
 +#line 3172 "Gmsh.y"
++=======
+   case 257:
+ /* Line 1787 of yacc.c  */
+ #line 3309 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 254:
 +#line 3178 "Gmsh.y"
++=======
+   case 258:
+ /* Line 1787 of yacc.c  */
+ #line 3315 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
  		   (yyvsp[(6) - (12)].v)[0], (yyvsp[(6) - (12)].v)[1], (yyvsp[(6) - (12)].v)[2], 0., 0., 0., 0., 0., 0., 0.,
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 255:
 +#line 3185 "Gmsh.y"
++=======
+   case 259:
+ /* Line 1787 of yacc.c  */
+ #line 3322 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 256:
 +#line 3191 "Gmsh.y"
++=======
+   case 260:
+ /* Line 1787 of yacc.c  */
+ #line 3328 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
  		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 257:
 +#line 3198 "Gmsh.y"
++=======
+   case 261:
+ /* Line 1787 of yacc.c  */
+ #line 3335 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 258:
 +#line 3204 "Gmsh.y"
++=======
+   case 262:
+ /* Line 1787 of yacc.c  */
+ #line 3341 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
  		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 259:
 +#line 3211 "Gmsh.y"
++=======
+   case 263:
+ /* Line 1787 of yacc.c  */
+ #line 3348 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 260:
 +#line 3217 "Gmsh.y"
++=======
+   case 264:
+ /* Line 1787 of yacc.c  */
+ #line 3354 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
  		   0., 0., 0., (yyvsp[(6) - (16)].v)[0], (yyvsp[(6) - (16)].v)[1], (yyvsp[(6) - (16)].v)[2], (yyvsp[(8) - (16)].v)[0], (yyvsp[(8) - (16)].v)[1], (yyvsp[(8) - (16)].v)[2], (yyvsp[(10) - (16)].d),
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 261:
 +#line 3224 "Gmsh.y"
++=======
+   case 265:
+ /* Line 1787 of yacc.c  */
+ #line 3361 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 262:
 +#line 3230 "Gmsh.y"
++=======
+   case 266:
+ /* Line 1787 of yacc.c  */
+ #line 3367 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
  		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 263:
 +#line 3237 "Gmsh.y"
++=======
+   case 267:
+ /* Line 1787 of yacc.c  */
+ #line 3374 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 264:
 +#line 3243 "Gmsh.y"
++=======
+   case 268:
+ /* Line 1787 of yacc.c  */
+ #line 3380 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
  		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 265:
 +#line 3250 "Gmsh.y"
++=======
+   case 269:
+ /* Line 1787 of yacc.c  */
+ #line 3387 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
        extr.mesh.QuadToTri = NO_QUADTRI;
        extr.mesh.ScaleLast = false;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 266:
 +#line 3256 "Gmsh.y"
++=======
+   case 270:
+ /* Line 1787 of yacc.c  */
+ #line 3393 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(Shape));
        ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
  		   (yyvsp[(6) - (18)].v)[0], (yyvsp[(6) - (18)].v)[1], (yyvsp[(6) - (18)].v)[2], (yyvsp[(8) - (18)].v)[0], (yyvsp[(8) - (18)].v)[1], (yyvsp[(8) - (18)].v)[2], (yyvsp[(10) - (18)].v)[0], (yyvsp[(10) - (18)].v)[1], (yyvsp[(10) - (18)].v)[2], (yyvsp[(12) - (18)].d),
  		   &extr, (yyval.l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 267:
 +#line 3267 "Gmsh.y"
++=======
+   case 271:
+ /* Line 1787 of yacc.c  */
+ #line 3404 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 268:
 +#line 3270 "Gmsh.y"
++=======
+   case 272:
+ /* Line 1787 of yacc.c  */
+ #line 3407 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 269:
 +#line 3276 "Gmsh.y"
++=======
+   case 273:
+ /* Line 1787 of yacc.c  */
+ #line 3413 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int n = (int)fabs((yyvsp[(3) - (5)].d));
        if(n){ // we accept n==0 to easily disable layers
@@@ -8033,11 -8633,12 +12914,17 @@@
          extr.mesh.NbElmLayer.push_back((int)fabs((yyvsp[(3) - (5)].d)));
          extr.mesh.hLayer.push_back(1.);
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 270:
 +#line 3288 "Gmsh.y"
++=======
+   case 274:
+ /* Line 1787 of yacc.c  */
+ #line 3425 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ExtrudeMesh = true;
        extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@@ -8056,11 -8657,12 +12943,17 @@@
  	yymsg(0, "Wrong layer definition {%d, %d}", List_Nbr((yyvsp[(3) - (7)].l)), List_Nbr((yyvsp[(5) - (7)].l)));
        List_Delete((yyvsp[(3) - (7)].l));
        List_Delete((yyvsp[(5) - (7)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 271:
 +#line 3308 "Gmsh.y"
++=======
+   case 275:
+ /* Line 1787 of yacc.c  */
+ #line 3445 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        yymsg(0, "Explicit region numbers in layers are deprecated");
        extr.mesh.ExtrudeMesh = true;
@@@ -8082,85 -8684,96 +12975,157 @@@
        List_Delete((yyvsp[(3) - (9)].l));
        List_Delete((yyvsp[(5) - (9)].l));
        List_Delete((yyvsp[(7) - (9)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 272:
 +#line 3332 "Gmsh.y"
++=======
+   case 276:
+ /* Line 1787 of yacc.c  */
+ #line 3469 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.ScaleLast = true;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 273:
 +#line 3336 "Gmsh.y"
++=======
+   case 277:
+ /* Line 1787 of yacc.c  */
+ #line 3473 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.Recombine = true;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 274:
 +#line 3340 "Gmsh.y"
++=======
+   case 278:
+ /* Line 1787 of yacc.c  */
+ #line 3477 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 275:
 +#line 3344 "Gmsh.y"
++=======
+   case 279:
+ /* Line 1787 of yacc.c  */
+ #line 3481 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 276:
 +#line 3348 "Gmsh.y"
++=======
+   case 280:
+ /* Line 1787 of yacc.c  */
+ #line 3485 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
              "which has no requirement for the number of extrusion layers and meshes "
              "with body-centered vertices.");
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 277:
 +#line 3354 "Gmsh.y"
++=======
+     }
+     break;
+ 
+   case 281:
+ /* Line 1787 of yacc.c  */
+ #line 3491 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
              "which has no requirement for the number of extrusion layers and meshes "
              "with body-centered vertices.");
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 278:
 +#line 3360 "Gmsh.y"
++=======
+     }
+     break;
+ 
+   case 282:
+ /* Line 1787 of yacc.c  */
+ #line 3497 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 279:
 +#line 3364 "Gmsh.y"
++=======
+   case 283:
+ /* Line 1787 of yacc.c  */
+ #line 3501 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 280:
 +#line 3368 "Gmsh.y"
++=======
+   case 284:
+ /* Line 1787 of yacc.c  */
+ #line 3505 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 281:
 +#line 3372 "Gmsh.y"
++=======
+   case 285:
+ /* Line 1787 of yacc.c  */
+ #line 3509 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 282:
 +#line 3376 "Gmsh.y"
++=======
+   case 286:
+ /* Line 1787 of yacc.c  */
+ #line 3513 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int num = (int)(yyvsp[(3) - (9)].d);
        if(FindSurface(num)){
@@@ -8178,29 -8791,32 +13143,47 @@@
  	}
        }
        List_Delete((yyvsp[(6) - (9)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 283:
 +#line 3395 "Gmsh.y"
++=======
+   case 287:
+ /* Line 1787 of yacc.c  */
+ #line 3532 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
          extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
        else if(!strcmp((yyvsp[(2) - (6)].c), "View"))
          extr.mesh.ViewIndex = (yyvsp[(4) - (6)].d);
        Free((yyvsp[(2) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 284:
 +#line 3407 "Gmsh.y"
++=======
+   case 288:
+ /* Line 1787 of yacc.c  */
+ #line 3544 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.v)[0] = (yyval.v)[1] = 1.;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 285:
 +#line 3411 "Gmsh.y"
++=======
+   case 289:
+ /* Line 1787 of yacc.c  */
+ #line 3548 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
          (yyval.v)[0] = 1.;
@@@ -8212,18 -8828,20 +13195,30 @@@
        }
        (yyval.v)[1] = (yyvsp[(3) - (3)].d);
        Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 286:
 +#line 3426 "Gmsh.y"
++=======
+   case 290:
+ /* Line 1787 of yacc.c  */
+ #line 3563 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.i) = -1; // left
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 287:
 +#line 3430 "Gmsh.y"
++=======
+   case 291:
+ /* Line 1787 of yacc.c  */
+ #line 3567 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
          (yyval.i) = 1;
@@@ -8236,39 -8854,60 +13231,85 @@@
        else // "Alternate" -> "Alternate Right"
  	(yyval.i) = 2;
        Free((yyvsp[(1) - (1)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 288:
 +#line 3446 "Gmsh.y"
++=======
+   case 292:
+ /* Line 1787 of yacc.c  */
+ #line 3583 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
       (yyval.l) = List_Create(1, 1, sizeof(double));
-    ;}
+    }
      break;
  
++<<<<<<< HEAD
 +  case 289:
 +#line 3450 "Gmsh.y"
++=======
+   case 293:
+ /* Line 1787 of yacc.c  */
+ #line 3587 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
       (yyval.l) = (yyvsp[(2) - (2)].l);
-    ;}
+    }
      break;
  
++<<<<<<< HEAD
 +  case 290:
 +#line 3455 "Gmsh.y"
++=======
+   case 294:
+ /* Line 1787 of yacc.c  */
+ #line 3592 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.i) = 45;
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 291:
 +#line 3459 "Gmsh.y"
++=======
+   case 295:
+ /* Line 1787 of yacc.c  */
+ #line 3596 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.i) = (int)(yyvsp[(2) - (2)].d);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 292:
 +#line 3466 "Gmsh.y"
++=======
+   case 296:
+ /* Line 1787 of yacc.c  */
+ #line 3602 "Gmsh.y"
+     {
+       (yyval.l) = List_Create(1, 1, sizeof(double));
+     }
+     break;
+ 
+   case 297:
+ /* Line 1787 of yacc.c  */
+ #line 3606 "Gmsh.y"
+     {
+       (yyval.l) = (yyvsp[(2) - (2)].l);
+     }
+     break;
+ 
+   case 298:
+ /* Line 1787 of yacc.c  */
+ #line 3613 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int type = (int)(yyvsp[(6) - (7)].v)[0];
        double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@@ -8323,11 -8962,12 +13364,17 @@@
          }
          List_Delete((yyvsp[(3) - (7)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 293:
 +#line 3522 "Gmsh.y"
++=======
+   case 299:
+ /* Line 1787 of yacc.c  */
+ #line 3669 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int k = List_Nbr((yyvsp[(4) - (6)].l));
        if(k != 0 && k != 3 && k != 4){
@@@ -8396,19 -9036,21 +13443,31 @@@
          }
        }
        List_Delete((yyvsp[(4) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 294:
 +#line 3592 "Gmsh.y"
++=======
+   case 300:
+ /* Line 1787 of yacc.c  */
+ #line 3739 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
        List_Delete((yyvsp[(7) - (8)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 295:
 +#line 3597 "Gmsh.y"
++=======
+   case 301:
+ /* Line 1787 of yacc.c  */
+ #line 3744 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int k = List_Nbr((yyvsp[(4) - (5)].l));
        if(k != 0 && k != 6 && k != 8){
@@@ -8474,11 -9116,12 +13533,17 @@@
          }
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 296:
 +#line 3664 "Gmsh.y"
++=======
+   case 302:
+ /* Line 1787 of yacc.c  */
+ #line 3811 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(2) - (3)].l)){
    	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@@ -8513,22 -9156,24 +13578,34 @@@
          }
          List_Delete((yyvsp[(2) - (3)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 297:
 +#line 3700 "Gmsh.y"
++=======
+   case 303:
+ /* Line 1787 of yacc.c  */
+ #line 3847 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (7)].l)); i++){
  	double d;
  	List_Read((yyvsp[(4) - (7)].l), i, &d);
  	CTX::instance()->mesh.algo2d_per_face[(int)d] = (int)(yyvsp[(6) - (7)].d);
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 298:
 +#line 3708 "Gmsh.y"
++=======
+   case 304:
+ /* Line 1787 of yacc.c  */
+ #line 3855 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (5)].l)){
  	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@@ -8570,11 -9215,12 +13647,17 @@@
          }
          List_Delete((yyvsp[(3) - (5)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 299:
 +#line 3751 "Gmsh.y"
++=======
+   case 305:
+ /* Line 1787 of yacc.c  */
+ #line 3898 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (4)].l)){
  	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@@ -8612,11 -9258,12 +13695,17 @@@
          }
          List_Delete((yyvsp[(3) - (4)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 300:
 +#line 3790 "Gmsh.y"
++=======
+   case 306:
+ /* Line 1787 of yacc.c  */
+ #line 3937 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
  	double d;
@@@ -8635,11 -9282,12 +13724,17 @@@
          }
        }
        List_Delete((yyvsp[(3) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 301:
 +#line 3810 "Gmsh.y"
++=======
+   case 307:
+ /* Line 1787 of yacc.c  */
+ #line 3957 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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",
@@@ -8665,28 -9313,36 +13760,41 @@@
        }
        List_Delete((yyvsp[(3) - (6)].l));
        List_Delete((yyvsp[(5) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 302:
 +#line 3838 "Gmsh.y"
++=======
+   case 308:
+ /* Line 1787 of yacc.c  */
+ #line 3985 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
+       if (List_Nbr((yyvsp[(5) - (13)].l)) != List_Nbr((yyvsp[(10) - (13)].l))){
  	yymsg(0, "Number of master surface edges (%d) different from number of "
-               "slave (%d) edges", List_Nbr((yyvsp[(10) - (12)].l)), List_Nbr((yyvsp[(5) - (12)].l)));
+               "slave (%d) edges", List_Nbr((yyvsp[(10) - (13)].l)), List_Nbr((yyvsp[(5) - (13)].l)));
        }
        else{
-         int j_master = (int)(yyvsp[(8) - (12)].d);
-         int j_slave = (int)(yyvsp[(3) - (12)].d);
+         int j_master = (int)(yyvsp[(8) - (13)].d);
+         int j_slave = (int)(yyvsp[(3) - (13)].d);
          Surface *s_slave = FindSurface(abs(j_slave));
+ 	std::vector<double> transfo;
+ 	for(int i = 0; i < List_Nbr((yyvsp[(12) - (13)].l)); i++){
+ 	  double d;
+ 	  List_Read((yyvsp[(12) - (13)].l), i, &d);
+ 	  transfo.push_back(d);
+ 	}
          if(s_slave){
  	  GModel::current()->getGEOInternals()->periodicFaces[j_slave] = j_master;
-           for (int i = 0; i < List_Nbr((yyvsp[(5) - (12)].l)); i++){
+           for (int i = 0; i < List_Nbr((yyvsp[(5) - (13)].l)); i++){
              double dm, ds;
-             List_Read((yyvsp[(5) - (12)].l), i, &ds);
-             List_Read((yyvsp[(10) - (12)].l), i, &dm);
+             List_Read((yyvsp[(5) - (13)].l), i, &ds);
+             List_Read((yyvsp[(10) - (13)].l), i, &dm);
  	    GModel::current()->getGEOInternals()->periodicEdges[(int)ds] = (int)dm;
              s_slave->edgeCounterparts[(int)ds] = (int)dm;
+             s_slave->affineTransform = transfo;
            }
          }
          else{
@@@ -8705,13 -9362,15 +13814,20 @@@
            else yymsg(0, "Unknown surface %d", j_slave);
          }
        }
-       List_Delete((yyvsp[(5) - (12)].l));
-       List_Delete((yyvsp[(10) - (12)].l));
-     ;}
+       List_Delete((yyvsp[(5) - (13)].l));
+       List_Delete((yyvsp[(10) - (13)].l));
+       List_Delete((yyvsp[(12) - (13)].l));
+     }
      break;
  
++<<<<<<< HEAD
 +  case 303:
 +#line 3877 "Gmsh.y"
++=======
+   case 309:
+ /* Line 1787 of yacc.c  */
+ #line 4033 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
        if(s){
@@@ -8733,11 -9397,12 +13854,17 @@@
          else
            yymsg(0, "Unknown surface %d", (int)(yyvsp[(8) - (10)].d));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 304:
 +#line 3900 "Gmsh.y"
++=======
+   case 310:
+ /* Line 1787 of yacc.c  */
+ #line 4061 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
        if(s){
@@@ -8759,25 -9429,28 +13891,43 @@@
          else
            yymsg(0, "Unknown surface %d", (int)(yyvsp[(8) - (10)].d));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 305:
 +#line 3923 "Gmsh.y"
++=======
+   case 311:
+ /* Line 1787 of yacc.c  */
+ #line 4089 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        Msg::Error("Point in Volume not implemented yet");
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 306:
 +#line 3927 "Gmsh.y"
++=======
+   case 312:
+ /* Line 1787 of yacc.c  */
+ #line 4093 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        Msg::Error("Line in Volume not implemented yet");
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 307:
 +#line 3931 "Gmsh.y"
++=======
+   case 313:
+ /* Line 1787 of yacc.c  */
+ #line 4097 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
        if(v){
@@@ -8797,13 -9475,14 +13952,19 @@@
            }
          }
          else
-           yymsg(0, "Unknown region %d", (int)(yyvsp[(8) - (10)].d));
+           yymsg(0, "Unknown volume %d", (int)(yyvsp[(8) - (10)].d));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 308:
 +#line 3954 "Gmsh.y"
++=======
+   case 314:
+ /* Line 1787 of yacc.c  */
+ #line 4125 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (4)].l)){
  	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@@ -8841,11 -9520,12 +14002,17 @@@
          }
          List_Delete((yyvsp[(3) - (4)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 309:
 +#line 3993 "Gmsh.y"
++=======
+   case 315:
+ /* Line 1787 of yacc.c  */
+ #line 4164 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (4)].l)){
  	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@@ -8883,11 -9563,12 +14050,17 @@@
          }
          List_Delete((yyvsp[(3) - (4)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 310:
 +#line 4032 "Gmsh.y"
++=======
+   case 316:
+ /* Line 1787 of yacc.c  */
+ #line 4203 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (4)].l)){
          for(GModel::viter it = GModel::current()->firstVertex();
@@@ -8907,11 -9588,12 +14080,17 @@@
          }
          List_Delete((yyvsp[(3) - (4)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 311:
 +#line 4053 "Gmsh.y"
++=======
+   case 317:
+ /* Line 1787 of yacc.c  */
+ #line 4224 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (4)].l)){
          for(GModel::eiter it = GModel::current()->firstEdge();
@@@ -8931,11 -9613,12 +14110,17 @@@
          }
          List_Delete((yyvsp[(3) - (4)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 312:
 +#line 4074 "Gmsh.y"
++=======
+   case 318:
+ /* Line 1787 of yacc.c  */
+ #line 4245 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (4)].l)){
          for(GModel::fiter it = GModel::current()->firstFace();
@@@ -8955,18 -9638,20 +14140,30 @@@
          }
          List_Delete((yyvsp[(3) - (4)].l));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 313:
 +#line 4101 "Gmsh.y"
++=======
+   case 319:
+ /* Line 1787 of yacc.c  */
+ #line 4272 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        ReplaceAllDuplicates();
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 314:
 +#line 4105 "Gmsh.y"
++=======
+   case 320:
+ /* Line 1787 of yacc.c  */
+ #line 4276 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
          ReplaceAllDuplicates();
@@@ -8975,11 -9660,12 +14172,17 @@@
        else
          yymsg(0, "Unknown coherence command");
        Free((yyvsp[(2) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 315:
 +#line 4115 "Gmsh.y"
++=======
+   case 321:
+ /* Line 1787 of yacc.c  */
+ #line 4286 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
          double d;
@@@ -9008,35 -9694,40 +14211,65 @@@
          yymsg(0, "Need at least two points to merge");
        ReplaceAllDuplicates();
        List_Delete((yyvsp[(4) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 316:
 +#line 4149 "Gmsh.y"
 +    { (yyval.c) = (char*)"Homology"; ;}
 +    break;
 +
 +  case 317:
 +#line 4150 "Gmsh.y"
 +    { (yyval.c) = (char*)"Cohomology"; ;}
 +    break;
 +
 +  case 318:
 +#line 4151 "Gmsh.y"
 +    { (yyval.c) = (char*)"Betti"; ;}
 +    break;
 +
 +  case 319:
 +#line 4156 "Gmsh.y"
++=======
+   case 322:
+ /* Line 1787 of yacc.c  */
+ #line 4320 "Gmsh.y"
+     { (yyval.c) = (char*)"Homology"; }
+     break;
+ 
+   case 323:
+ /* Line 1787 of yacc.c  */
+ #line 4321 "Gmsh.y"
+     { (yyval.c) = (char*)"Cohomology"; }
+     break;
+ 
+   case 324:
+ /* Line 1787 of yacc.c  */
+ #line 4322 "Gmsh.y"
+     { (yyval.c) = (char*)"Betti"; }
+     break;
+ 
+   case 325:
+ /* Line 1787 of yacc.c  */
+ #line 4327 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::vector<int> domain, subdomain, dim;
        for(int i = 0; i < 4; i++) dim.push_back(i);
        GModel::current()->addHomologyRequest((yyvsp[(1) - (2)].c), domain, subdomain, dim);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 320:
 +#line 4162 "Gmsh.y"
++=======
+   case 326:
+ /* Line 1787 of yacc.c  */
+ #line 4333 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::vector<int> domain, subdomain, dim;
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@@ -9047,11 -9738,12 +14280,17 @@@
        for(int i = 0; i < 4; i++) dim.push_back(i);
        GModel::current()->addHomologyRequest((yyvsp[(1) - (5)].c), domain, subdomain, dim);
        List_Delete((yyvsp[(3) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 321:
 +#line 4174 "Gmsh.y"
++=======
+   case 327:
+ /* Line 1787 of yacc.c  */
+ #line 4345 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::vector<int> domain, subdomain, dim;
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@@ -9068,11 -9760,12 +14307,17 @@@
        GModel::current()->addHomologyRequest((yyvsp[(1) - (7)].c), domain, subdomain, dim);
        List_Delete((yyvsp[(3) - (7)].l));
        List_Delete((yyvsp[(5) - (7)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 322:
 +#line 4192 "Gmsh.y"
++=======
+   case 328:
+ /* Line 1787 of yacc.c  */
+ #line 4363 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::vector<int> domain, subdomain, dim;
        for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@@ -9094,290 -9787,345 +14339,624 @@@
        List_Delete((yyvsp[(6) - (10)].l));
        List_Delete((yyvsp[(8) - (10)].l));
        List_Delete((yyvsp[(3) - (10)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 323:
 +#line 4219 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
 +    break;
 +
 +  case 324:
 +#line 4220 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
 +    break;
 +
 +  case 325:
 +#line 4221 "Gmsh.y"
 +    { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
 +    break;
 +
 +  case 326:
 +#line 4222 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
 +    break;
 +
 +  case 327:
 +#line 4223 "Gmsh.y"
 +    { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
 +    break;
 +
 +  case 328:
 +#line 4224 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
 +    break;
 +
 +  case 329:
 +#line 4225 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
 +    break;
 +
 +  case 330:
 +#line 4226 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
 +    break;
 +
 +  case 331:
 +#line 4228 "Gmsh.y"
++=======
+   case 329:
+ /* Line 1787 of yacc.c  */
+ #line 4390 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (1)].d);           }
+     break;
+ 
+   case 330:
+ /* Line 1787 of yacc.c  */
+ #line 4391 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(2) - (3)].d);           }
+     break;
+ 
+   case 331:
+ /* Line 1787 of yacc.c  */
+ #line 4392 "Gmsh.y"
+     { (yyval.d) = -(yyvsp[(2) - (2)].d);          }
+     break;
+ 
+   case 332:
+ /* Line 1787 of yacc.c  */
+ #line 4393 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(2) - (2)].d);           }
+     break;
+ 
+   case 333:
+ /* Line 1787 of yacc.c  */
+ #line 4394 "Gmsh.y"
+     { (yyval.d) = !(yyvsp[(2) - (2)].d);          }
+     break;
+ 
+   case 334:
+ /* Line 1787 of yacc.c  */
+ #line 4395 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      }
+     break;
+ 
+   case 335:
+ /* Line 1787 of yacc.c  */
+ #line 4396 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      }
+     break;
+ 
+   case 336:
+ /* Line 1787 of yacc.c  */
+ #line 4397 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      }
+     break;
+ 
+   case 337:
+ /* Line 1787 of yacc.c  */
+ #line 4399 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!(yyvsp[(3) - (3)].d))
  	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
        else
  	(yyval.d) = (yyvsp[(1) - (3)].d) / (yyvsp[(3) - (3)].d);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 332:
 +#line 4234 "Gmsh.y"
 +    { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
 +    break;
 +
 +  case 333:
 +#line 4235 "Gmsh.y"
 +    { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
 +    break;
 +
 +  case 334:
 +#line 4236 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
 +    break;
 +
 +  case 335:
 +#line 4237 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
 +    break;
 +
 +  case 336:
 +#line 4238 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
 +    break;
 +
 +  case 337:
 +#line 4239 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
 +    break;
 +
 +  case 338:
 +#line 4240 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
 +    break;
 +
 +  case 339:
 +#line 4241 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
 +    break;
 +
 +  case 340:
 +#line 4242 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
 +    break;
 +
 +  case 341:
 +#line 4243 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
 +    break;
 +
 +  case 342:
 +#line 4244 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
 +    break;
 +
 +  case 343:
 +#line 4245 "Gmsh.y"
 +    { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
 +    break;
 +
 +  case 344:
 +#line 4246 "Gmsh.y"
 +    { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
 +    break;
 +
 +  case 345:
 +#line 4247 "Gmsh.y"
 +    { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
 +    break;
 +
 +  case 346:
 +#line 4248 "Gmsh.y"
 +    { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 347:
 +#line 4249 "Gmsh.y"
 +    { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
 +    break;
 +
 +  case 348:
 +#line 4250 "Gmsh.y"
 +    { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 349:
 +#line 4251 "Gmsh.y"
 +    { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
 +    break;
 +
 +  case 350:
 +#line 4252 "Gmsh.y"
 +    { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 351:
 +#line 4253 "Gmsh.y"
 +    { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
 +    break;
 +
 +  case 352:
 +#line 4254 "Gmsh.y"
 +    { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 353:
 +#line 4255 "Gmsh.y"
 +    { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
 +    break;
 +
 +  case 354:
 +#line 4256 "Gmsh.y"
 +    { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 355:
 +#line 4257 "Gmsh.y"
 +    { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 356:
 +#line 4258 "Gmsh.y"
 +    { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 357:
 +#line 4259 "Gmsh.y"
 +    { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 358:
 +#line 4260 "Gmsh.y"
 +    { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
 +    break;
 +
 +  case 359:
 +#line 4261 "Gmsh.y"
 +    { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
 +    break;
 +
 +  case 360:
 +#line 4262 "Gmsh.y"
 +    { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); ;}
 +    break;
 +
 +  case 361:
 +#line 4263 "Gmsh.y"
 +    { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
 +    break;
 +
 +  case 362:
 +#line 4264 "Gmsh.y"
 +    { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
 +    break;
 +
 +  case 363:
 +#line 4265 "Gmsh.y"
 +    { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
 +    break;
 +
 +  case 364:
 +#line 4266 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
 +    break;
 +
 +  case 365:
 +#line 4275 "Gmsh.y"
 +    { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
 +    break;
 +
 +  case 366:
 +#line 4276 "Gmsh.y"
 +    { (yyval.d) = 3.141592653589793; ;}
 +    break;
 +
 +  case 367:
 +#line 4277 "Gmsh.y"
 +    { (yyval.d) = Msg::GetCommRank(); ;}
 +    break;
 +
 +  case 368:
 +#line 4278 "Gmsh.y"
 +    { (yyval.d) = Msg::GetCommSize(); ;}
 +    break;
 +
 +  case 369:
 +#line 4279 "Gmsh.y"
 +    { (yyval.d) = GetGmshMajorVersion(); ;}
 +    break;
 +
 +  case 370:
 +#line 4280 "Gmsh.y"
 +    { (yyval.d) = GetGmshMinorVersion(); ;}
 +    break;
 +
 +  case 371:
 +#line 4281 "Gmsh.y"
 +    { (yyval.d) = GetGmshPatchVersion(); ;}
 +    break;
 +
 +  case 372:
 +#line 4282 "Gmsh.y"
 +    { (yyval.d) = Cpu(); ;}
 +    break;
 +
 +  case 373:
 +#line 4283 "Gmsh.y"
 +    { (yyval.d) = GetMemoryUsage()/1024./1024.; ;}
 +    break;
 +
 +  case 374:
 +#line 4284 "Gmsh.y"
 +    { (yyval.d) = TotalRam(); ;}
 +    break;
 +
 +  case 375:
 +#line 4289 "Gmsh.y"
 +    { floatOptions.clear(); charOptions.clear(); ;}
 +    break;
 +
 +  case 376:
 +#line 4291 "Gmsh.y"
 +    {
 +      std::vector<double> val(1, (yyvsp[(3) - (6)].d));
 +      Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
 +      (yyval.d) = val[0];
 +    ;}
 +    break;
 +
 +  case 377:
 +#line 4297 "Gmsh.y"
++=======
+   case 338:
+ /* Line 1787 of yacc.c  */
+ #line 4405 "Gmsh.y"
+     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  }
+     break;
+ 
+   case 339:
+ /* Line 1787 of yacc.c  */
+ #line 4406 "Gmsh.y"
+     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  }
+     break;
+ 
+   case 340:
+ /* Line 1787 of yacc.c  */
+ #line 4407 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      }
+     break;
+ 
+   case 341:
+ /* Line 1787 of yacc.c  */
+ #line 4408 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      }
+     break;
+ 
+   case 342:
+ /* Line 1787 of yacc.c  */
+ #line 4409 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     }
+     break;
+ 
+   case 343:
+ /* Line 1787 of yacc.c  */
+ #line 4410 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     }
+     break;
+ 
+   case 344:
+ /* Line 1787 of yacc.c  */
+ #line 4411 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     }
+     break;
+ 
+   case 345:
+ /* Line 1787 of yacc.c  */
+ #line 4412 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     }
+     break;
+ 
+   case 346:
+ /* Line 1787 of yacc.c  */
+ #line 4413 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     }
+     break;
+ 
+   case 347:
+ /* Line 1787 of yacc.c  */
+ #line 4414 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     }
+     break;
+ 
+   case 348:
+ /* Line 1787 of yacc.c  */
+ #line 4415 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); }
+     break;
+ 
+   case 349:
+ /* Line 1787 of yacc.c  */
+ #line 4416 "Gmsh.y"
+     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      }
+     break;
+ 
+   case 350:
+ /* Line 1787 of yacc.c  */
+ #line 4417 "Gmsh.y"
+     { (yyval.d) = log((yyvsp[(3) - (4)].d));      }
+     break;
+ 
+   case 351:
+ /* Line 1787 of yacc.c  */
+ #line 4418 "Gmsh.y"
+     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    }
+     break;
+ 
+   case 352:
+ /* Line 1787 of yacc.c  */
+ #line 4419 "Gmsh.y"
+     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 353:
+ /* Line 1787 of yacc.c  */
+ #line 4420 "Gmsh.y"
+     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      }
+     break;
+ 
+   case 354:
+ /* Line 1787 of yacc.c  */
+ #line 4421 "Gmsh.y"
+     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 355:
+ /* Line 1787 of yacc.c  */
+ #line 4422 "Gmsh.y"
+     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      }
+     break;
+ 
+   case 356:
+ /* Line 1787 of yacc.c  */
+ #line 4423 "Gmsh.y"
+     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 357:
+ /* Line 1787 of yacc.c  */
+ #line 4424 "Gmsh.y"
+     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      }
+     break;
+ 
+   case 358:
+ /* Line 1787 of yacc.c  */
+ #line 4425 "Gmsh.y"
+     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 359:
+ /* Line 1787 of yacc.c  */
+ #line 4426 "Gmsh.y"
+     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));}
+     break;
+ 
+   case 360:
+ /* Line 1787 of yacc.c  */
+ #line 4427 "Gmsh.y"
+     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 361:
+ /* Line 1787 of yacc.c  */
+ #line 4428 "Gmsh.y"
+     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 362:
+ /* Line 1787 of yacc.c  */
+ #line 4429 "Gmsh.y"
+     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 363:
+ /* Line 1787 of yacc.c  */
+ #line 4430 "Gmsh.y"
+     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 364:
+ /* Line 1787 of yacc.c  */
+ #line 4431 "Gmsh.y"
+     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    }
+     break;
+ 
+   case 365:
+ /* Line 1787 of yacc.c  */
+ #line 4432 "Gmsh.y"
+     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     }
+     break;
+ 
+   case 366:
+ /* Line 1787 of yacc.c  */
+ #line 4433 "Gmsh.y"
+     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); }
+     break;
+ 
+   case 367:
+ /* Line 1787 of yacc.c  */
+ #line 4434 "Gmsh.y"
+     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
+     break;
+ 
+   case 368:
+ /* Line 1787 of yacc.c  */
+ #line 4435 "Gmsh.y"
+     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
+     break;
+ 
+   case 369:
+ /* Line 1787 of yacc.c  */
+ #line 4436 "Gmsh.y"
+     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); }
+     break;
+ 
+   case 370:
+ /* Line 1787 of yacc.c  */
+ #line 4437 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; }
+     break;
+ 
+   case 371:
+ /* Line 1787 of yacc.c  */
+ #line 4446 "Gmsh.y"
+     { (yyval.d) = (yyvsp[(1) - (1)].d); }
+     break;
+ 
+   case 372:
+ /* Line 1787 of yacc.c  */
+ #line 4447 "Gmsh.y"
+     { (yyval.d) = 3.141592653589793; }
+     break;
+ 
+   case 373:
+ /* Line 1787 of yacc.c  */
+ #line 4448 "Gmsh.y"
+     { (yyval.d) = Msg::GetCommRank(); }
+     break;
+ 
+   case 374:
+ /* Line 1787 of yacc.c  */
+ #line 4449 "Gmsh.y"
+     { (yyval.d) = Msg::GetCommSize(); }
+     break;
+ 
+   case 375:
+ /* Line 1787 of yacc.c  */
+ #line 4450 "Gmsh.y"
+     { (yyval.d) = GetGmshMajorVersion(); }
+     break;
+ 
+   case 376:
+ /* Line 1787 of yacc.c  */
+ #line 4451 "Gmsh.y"
+     { (yyval.d) = GetGmshMinorVersion(); }
+     break;
+ 
+   case 377:
+ /* Line 1787 of yacc.c  */
+ #line 4452 "Gmsh.y"
+     { (yyval.d) = GetGmshPatchVersion(); }
+     break;
+ 
+   case 378:
+ /* Line 1787 of yacc.c  */
+ #line 4453 "Gmsh.y"
+     { (yyval.d) = Cpu(); }
+     break;
+ 
+   case 379:
+ /* Line 1787 of yacc.c  */
+ #line 4454 "Gmsh.y"
+     { (yyval.d) = GetMemoryUsage()/1024./1024.; }
+     break;
+ 
+   case 380:
+ /* Line 1787 of yacc.c  */
+ #line 4455 "Gmsh.y"
+     { (yyval.d) = TotalRam(); }
+     break;
+ 
+   case 381:
+ /* Line 1787 of yacc.c  */
+ #line 4460 "Gmsh.y"
+     { floatOptions.clear(); charOptions.clear(); }
+     break;
+ 
+   case 382:
+ /* Line 1787 of yacc.c  */
+ #line 4462 "Gmsh.y"
+     {
+       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
+       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
+       (yyval.d) = val[0];
+     }
+     break;
+ 
+   case 383:
+ /* Line 1787 of yacc.c  */
+ #line 4468 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
  	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@@ -9393,11 -10141,12 +14972,17 @@@
            (yyval.d) = s.value[0];
        }
        Free((yyvsp[(1) - (1)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 378:
 +#line 4314 "Gmsh.y"
++=======
+   case 384:
+ /* Line 1787 of yacc.c  */
+ #line 4485 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int index = (int)(yyvsp[(3) - (4)].d);
        if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@@ -9414,11 -10163,12 +14999,17 @@@
            (yyval.d) = s.value[index];
        }
        Free((yyvsp[(1) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 379:
 +#line 4332 "Gmsh.y"
++=======
+   case 385:
+ /* Line 1787 of yacc.c  */
+ #line 4503 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int index = (int)(yyvsp[(3) - (4)].d);
        if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@@ -9435,28 -10185,31 +15026,55 @@@
            (yyval.d) = s.value[index];
        }
        Free((yyvsp[(1) - (4)].c));
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 380:
 +#line 4350 "Gmsh.y"
 +    {
 +      (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
 +      Free((yyvsp[(3) - (4)].c));
 +    ;}
 +    break;
 +
 +  case 381:
 +#line 4355 "Gmsh.y"
++=======
+     }
+     break;
+ 
+   case 386:
+ /* Line 1787 of yacc.c  */
+ #line 4521 "Gmsh.y"
+     {
+       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
+       Free((yyvsp[(3) - (4)].c));
+     }
+     break;
+ 
+   case 387:
+ /* Line 1787 of yacc.c  */
+ #line 4526 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
        (yyval.d) = !StatFile(tmp);
        Free((yyvsp[(3) - (4)].c));
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 382:
 +#line 4361 "Gmsh.y"
++=======
+     }
+     break;
+ 
+   case 388:
+ /* Line 1787 of yacc.c  */
+ #line 4532 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
  	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@@ -9467,11 -10220,12 +15085,17 @@@
  	(yyval.d) = s.value.size();
        }
        Free((yyvsp[(2) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 383:
 +#line 4373 "Gmsh.y"
++=======
+   case 389:
+ /* Line 1787 of yacc.c  */
+ #line 4544 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
  	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@@ -9487,11 -10241,12 +15111,17 @@@
            (yyval.d) = (s.value[0] += (yyvsp[(2) - (2)].i));
        }
        Free((yyvsp[(1) - (2)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 384:
 +#line 4390 "Gmsh.y"
++=======
+   case 390:
+ /* Line 1787 of yacc.c  */
+ #line 4561 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int index = (int)(yyvsp[(3) - (5)].d);
        if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@@ -9508,11 -10263,12 +15138,17 @@@
            (yyval.d) = (s.value[index] += (yyvsp[(5) - (5)].i));
        }
        Free((yyvsp[(1) - (5)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 385:
 +#line 4408 "Gmsh.y"
++=======
+   case 391:
+ /* Line 1787 of yacc.c  */
+ #line 4579 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int index = (int)(yyvsp[(3) - (5)].d);
        if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@@ -9529,27 -10285,30 +15165,48 @@@
            (yyval.d) = (s.value[index] += (yyvsp[(5) - (5)].i));
        }
        Free((yyvsp[(1) - (5)].c));
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 386:
 +#line 4429 "Gmsh.y"
++=======
+     }
+     break;
+ 
+   case 392:
+ /* Line 1787 of yacc.c  */
+ #line 4600 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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;
  
++<<<<<<< HEAD
 +  case 387:
 +#line 4434 "Gmsh.y"
++=======
+   case 393:
+ /* Line 1787 of yacc.c  */
+ #line 4605 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        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;
  
++<<<<<<< HEAD
 +  case 388:
 +#line 4439 "Gmsh.y"
++=======
+   case 394:
+ /* Line 1787 of yacc.c  */
+ #line 4610 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        double d = 0.;
        if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@@ -9558,11 -10317,12 +15215,17 @@@
  	(yyval.d) = d;
        }
        Free((yyvsp[(1) - (4)].c)); Free((yyvsp[(3) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 389:
 +#line 4449 "Gmsh.y"
++=======
+   case 395:
+ /* Line 1787 of yacc.c  */
+ #line 4620 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        double d = 0.;
        if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@@ -9571,19 -10331,36 +15234,46 @@@
  	(yyval.d) = d;
        }
        Free((yyvsp[(1) - (7)].c)); Free((yyvsp[(6) - (7)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 390:
 +#line 4459 "Gmsh.y"
++=======
+   case 396:
+ /* Line 1787 of yacc.c  */
+ #line 4630 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
        Free((yyvsp[(3) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 391:
 +#line 4464 "Gmsh.y"
++=======
+   case 397:
+ /* Line 1787 of yacc.c  */
+ #line 4635 "Gmsh.y"
+     {
+       int matches = 0;
+       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
+         double d;
+         List_Read((yyvsp[(3) - (6)].l), i, &d);
+         matches += List_Search((yyvsp[(5) - (6)].l), &d, fcmp_double);
+       }
+       (yyval.d) = matches;
+       Free((yyvsp[(3) - (6)].l)); Free((yyvsp[(5) - (6)].l));
+     }
+     break;
+ 
+   case 398:
+ /* Line 1787 of yacc.c  */
+ #line 4646 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
        if(s.find(substr) != std::string::npos)
@@@ -9591,19 -10368,21 +15281,31 @@@
        else
          (yyval.d) = 0.;
        Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 392:
 +#line 4473 "Gmsh.y"
++=======
+   case 399:
+ /* Line 1787 of yacc.c  */
+ #line 4655 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
        Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 393:
 +#line 4478 "Gmsh.y"
++=======
+   case 400:
+ /* Line 1787 of yacc.c  */
+ #line 4660 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
        if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@@ -9626,148 -10405,167 +15328,262 @@@
        }
        List_Delete((yyvsp[(3) - (4)].l));
        (yyval.d) = (double)((align<<16)|(font<<8)|(fontsize));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 394:
 +#line 4505 "Gmsh.y"
++=======
+   case 401:
+ /* Line 1787 of yacc.c  */
+ #line 4687 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 395:
 +#line 4509 "Gmsh.y"
++=======
+   case 402:
+ /* Line 1787 of yacc.c  */
+ #line 4691 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 396:
 +#line 4513 "Gmsh.y"
++=======
+   case 403:
+ /* Line 1787 of yacc.c  */
+ #line 4695 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 397:
 +#line 4517 "Gmsh.y"
++=======
+   case 404:
+ /* Line 1787 of yacc.c  */
+ #line 4699 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 398:
 +#line 4521 "Gmsh.y"
++=======
+   case 405:
+ /* Line 1787 of yacc.c  */
+ #line 4703 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 399:
 +#line 4528 "Gmsh.y"
++=======
+   case 406:
+ /* Line 1787 of yacc.c  */
+ #line 4710 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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;
  
++<<<<<<< HEAD
 +  case 400:
 +#line 4532 "Gmsh.y"
++=======
+   case 407:
+ /* Line 1787 of yacc.c  */
+ #line 4714 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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;
  
++<<<<<<< HEAD
 +  case 401:
 +#line 4536 "Gmsh.y"
++=======
+   case 408:
+ /* Line 1787 of yacc.c  */
+ #line 4718 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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;
  
++<<<<<<< HEAD
 +  case 402:
 +#line 4540 "Gmsh.y"
++=======
+   case 409:
+ /* Line 1787 of yacc.c  */
+ #line 4722 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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;
  
++<<<<<<< HEAD
 +  case 403:
 +#line 4547 "Gmsh.y"
++=======
+   case 410:
+ /* Line 1787 of yacc.c  */
+ #line 4729 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(List_T*));
        List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 404:
 +#line 4552 "Gmsh.y"
++=======
+   case 411:
+ /* Line 1787 of yacc.c  */
+ #line 4734 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 405:
 +#line 4559 "Gmsh.y"
++=======
+   case 412:
+ /* Line 1787 of yacc.c  */
+ #line 4741 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(double));
        List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 406:
 +#line 4564 "Gmsh.y"
++=======
+   case 413:
+ /* Line 1787 of yacc.c  */
+ #line 4746 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(1) - (1)].l);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 407:
 +#line 4568 "Gmsh.y"
++=======
+   case 414:
+ /* Line 1787 of yacc.c  */
+ #line 4750 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        // creates an empty list
        (yyval.l) = List_Create(2, 1, sizeof(double));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 408:
 +#line 4573 "Gmsh.y"
++=======
+   case 415:
+ /* Line 1787 of yacc.c  */
+ #line 4755 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(2) - (3)].l);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 409:
 +#line 4577 "Gmsh.y"
++=======
+   case 416:
+ /* Line 1787 of yacc.c  */
+ #line 4759 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(3) - (4)].l);
        for(int i = 0; i < List_Nbr((yyval.l)); i++){
  	double *pd = (double*)List_Pointer((yyval.l), i);
  	(*pd) = - (*pd);
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 410:
 +#line 4585 "Gmsh.y"
++=======
+   case 417:
+ /* Line 1787 of yacc.c  */
+ #line 4767 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(4) - (5)].l);
        for(int i = 0; i < List_Nbr((yyval.l)); i++){
  	double *pd = (double*)List_Pointer((yyval.l), i);
  	(*pd) *= (yyvsp[(1) - (5)].d);
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 411:
 +#line 4596 "Gmsh.y"
++=======
+   case 418:
+ /* Line 1787 of yacc.c  */
+ #line 4778 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(1) - (1)].l);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 412:
 +#line 4600 "Gmsh.y"
++=======
+   case 419:
+ /* Line 1787 of yacc.c  */
+ #line 4782 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
          (yyval.l) = 0;
@@@ -9775,43 -10573,47 +15591,67 @@@
          yyerror("Unknown special string for list replacement");
          (yyval.l) = List_Create(2, 1, sizeof(double));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 413:
 +#line 4612 "Gmsh.y"
++=======
+   case 420:
+ /* Line 1787 of yacc.c  */
+ #line 4794 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(2) - (2)].l);
        for(int i = 0; i < List_Nbr((yyval.l)); i++){
  	double *pd = (double*)List_Pointer((yyval.l), i);
  	(*pd) = - (*pd);
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 414:
 +#line 4620 "Gmsh.y"
++=======
+   case 421:
+ /* Line 1787 of yacc.c  */
+ #line 4802 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(3) - (3)].l);
        for(int i = 0; i < List_Nbr((yyval.l)); i++){
  	double *pd = (double*)List_Pointer((yyval.l), i);
  	(*pd) *= (yyvsp[(1) - (3)].d);
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 415:
 +#line 4628 "Gmsh.y"
++=======
+   case 422:
+ /* Line 1787 of yacc.c  */
+ #line 4810 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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));
            ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.))
  	List_Add((yyval.l), &d);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 416:
 +#line 4635 "Gmsh.y"
++=======
+   case 423:
+ /* Line 1787 of yacc.c  */
+ #line 4817 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(double));
        if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@@ -9820,11 -10622,12 +15660,17 @@@
        else
  	for(double d = (yyvsp[(1) - (5)].d); ((yyvsp[(5) - (5)].d) > 0) ? (d <= (yyvsp[(3) - (5)].d)) : (d >= (yyvsp[(3) - (5)].d)); d += (yyvsp[(5) - (5)].d))
  	  List_Add((yyval.l), &d);
-    ;}
+    }
      break;
  
++<<<<<<< HEAD
 +  case 417:
 +#line 4645 "Gmsh.y"
++=======
+   case 424:
+ /* Line 1787 of yacc.c  */
+ #line 4827 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        // Returns the coordinates of a point and fills a list with it.
        // This allows to ensure e.g. that relative point positions are
@@@ -9843,39 -10655,76 +15698,101 @@@
  	List_Add((yyval.l), &v->Pos.Y);
  	List_Add((yyval.l), &v->Pos.Z);
        }
-     ;}
+     }
+     break;
+ 
+   case 425:
+ /* Line 1787 of yacc.c  */
+ #line 4856 "Gmsh.y"
+     {
+       (yyval.l) = GetAllElementaryEntityNumbers(0);
+     }
      break;
  
+   case 426:
+ /* Line 1787 of yacc.c  */
+ #line 4860 "Gmsh.y"
+     {
+       (yyval.l) = GetAllElementaryEntityNumbers(1);
+     }
+     break;
+ 
++<<<<<<< HEAD
 +  case 418:
 +#line 4665 "Gmsh.y"
++=======
+   case 427:
+ /* Line 1787 of yacc.c  */
+ #line 4864 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-       (yyval.l) = GetAllEntityNumbers(0);
-     ;}
+       (yyval.l) = GetAllElementaryEntityNumbers(2);
+     }
      break;
  
++<<<<<<< HEAD
 +  case 419:
 +#line 4669 "Gmsh.y"
++=======
+   case 428:
+ /* Line 1787 of yacc.c  */
+ #line 4868 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-       (yyval.l) = GetAllEntityNumbers(1);
-     ;}
+       (yyval.l) = GetAllElementaryEntityNumbers(3);
+     }
      break;
  
++<<<<<<< HEAD
 +  case 420:
 +#line 4673 "Gmsh.y"
++=======
+   case 429:
+ /* Line 1787 of yacc.c  */
+ #line 4872 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-       (yyval.l) = GetAllEntityNumbers(2);
-     ;}
+       (yyval.l) = GetAllPhysicalEntityNumbers(0);
+     }
      break;
  
++<<<<<<< HEAD
 +  case 421:
 +#line 4677 "Gmsh.y"
++=======
+   case 430:
+ /* Line 1787 of yacc.c  */
+ #line 4876 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.l) = GetAllPhysicalEntityNumbers(1);
+     }
+     break;
+ 
++<<<<<<< HEAD
++  case 422:
++#line 4681 "Gmsh.y"
++=======
+   case 431:
+ /* Line 1787 of yacc.c  */
+ #line 4880 "Gmsh.y"
+     {
+       (yyval.l) = GetAllPhysicalEntityNumbers(2);
+     }
+     break;
+ 
+   case 432:
+ /* Line 1787 of yacc.c  */
+ #line 4884 "Gmsh.y"
      {
-       (yyval.l) = GetAllEntityNumbers(3);
-     ;}
+       (yyval.l) = GetAllPhysicalEntityNumbers(3);
+     }
      break;
  
-   case 422:
- #line 4681 "Gmsh.y"
+   case 433:
+ /* Line 1787 of yacc.c  */
+ #line 4888 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(10, 1, sizeof(double));
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@@ -9903,11 -10752,12 +15820,17 @@@
          }
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 423:
 +#line 4710 "Gmsh.y"
++=======
+   case 434:
+ /* Line 1787 of yacc.c  */
+ #line 4917 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(10, 1, sizeof(double));
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@@ -9935,11 -10785,12 +15858,17 @@@
          }
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 424:
 +#line 4739 "Gmsh.y"
++=======
+   case 435:
+ /* Line 1787 of yacc.c  */
+ #line 4946 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(10, 1, sizeof(double));
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@@ -9967,11 -10818,12 +15896,17 @@@
          }
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 425:
 +#line 4768 "Gmsh.y"
++=======
+   case 436:
+ /* Line 1787 of yacc.c  */
+ #line 4975 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(10, 1, sizeof(double));
        for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@@ -9999,11 -10851,76 +15934,81 @@@
          }
        }
        List_Delete((yyvsp[(4) - (5)].l));
-     ;}
+     }
+     break;
+ 
+   case 437:
+ /* Line 1787 of yacc.c  */
+ #line 5005 "Gmsh.y"
+     {
+       (yyval.l) = List_Create(10, 1, sizeof(double));
+       GModel::current()->importGEOInternals();
+       SBoundingBox3d box((yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d));
+       std::vector<GEntity*> entities;
+       GModel::current()->getEntitiesInBox(entities, box, 0);
+       for(unsigned int i = 0; i < entities.size(); i++){
+         double d = entities[i]->tag();
+ 	List_Add((yyval.l), &d);
+       }
+     }
+     break;
+ 
+   case 438:
+ /* Line 1787 of yacc.c  */
+ #line 5018 "Gmsh.y"
+     {
+       (yyval.l) = List_Create(10, 1, sizeof(double));
+       GModel::current()->importGEOInternals();
+       SBoundingBox3d box((yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d));
+       std::vector<GEntity*> entities;
+       GModel::current()->getEntitiesInBox(entities, box, 1);
+       for(unsigned int i = 0; i < entities.size(); i++){
+         double d = entities[i]->tag();
+ 	List_Add((yyval.l), &d);
+       }
+     }
+     break;
+ 
+   case 439:
+ /* Line 1787 of yacc.c  */
+ #line 5031 "Gmsh.y"
+     {
+       (yyval.l) = List_Create(10, 1, sizeof(double));
+       GModel::current()->importGEOInternals();
+       SBoundingBox3d box((yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d));
+       std::vector<GEntity*> entities;
+       GModel::current()->getEntitiesInBox(entities, box, 2);
+       for(unsigned int i = 0; i < entities.size(); i++){
+         double d = entities[i]->tag();
+ 	List_Add((yyval.l), &d);
+       }
+     }
+     break;
+ 
+   case 440:
+ /* Line 1787 of yacc.c  */
+ #line 5044 "Gmsh.y"
+     {
+       (yyval.l) = List_Create(10, 1, sizeof(double));
+       GModel::current()->importGEOInternals();
+       SBoundingBox3d box((yyvsp[(5) - (16)].d), (yyvsp[(7) - (16)].d), (yyvsp[(9) - (16)].d), (yyvsp[(11) - (16)].d), (yyvsp[(13) - (16)].d), (yyvsp[(15) - (16)].d));
+       std::vector<GEntity*> entities;
+       GModel::current()->getEntitiesInBox(entities, box, 3);
+       for(unsigned int i = 0; i < entities.size(); i++){
+         double d = entities[i]->tag();
+ 	List_Add((yyval.l), &d);
+       }
+     }
      break;
  
++<<<<<<< HEAD
 +  case 426:
 +#line 4797 "Gmsh.y"
++=======
+   case 441:
+ /* Line 1787 of yacc.c  */
+ #line 5056 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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++){
@@@ -10012,11 -10929,12 +16017,17 @@@
  	List_Add((yyval.l), &d);
        }
        List_Delete((yyvsp[(1) - (1)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 427:
 +#line 4807 "Gmsh.y"
++=======
+   case 442:
+ /* Line 1787 of yacc.c  */
+ #line 5066 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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++){
@@@ -10025,11 -10943,12 +16036,16 @@@
  	List_Add((yyval.l), &d);
        }
        List_Delete((yyvsp[(1) - (1)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 428:
 +#line 4817 "Gmsh.y"
++=======
+   case 443:
+ /* Line 1787 of yacc.c  */
+ #line 5076 "Gmsh.y"
      {
        (yyval.l) = List_Create(2, 1, sizeof(double));
        if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@@ -10040,11 -10959,28 +16056,34 @@@
  	  List_Add((yyval.l), &s.value[i]);
        }
        Free((yyvsp[(1) - (3)].c));
-     ;}
+     }
+     break;
+ 
+   case 444:
+ /* Line 1787 of yacc.c  */
+ #line 5088 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.l) = List_Create(2, 1, sizeof(double));
+       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
+ 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (3)].c));
+       else{
+         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (3)].c)]);
+ 	for(unsigned int i = 0; i < s.value.size(); i++)
+ 	  List_Add((yyval.l), &s.value[i]);
+       }
+       Free((yyvsp[(1) - (3)].c));
+     }
      break;
  
++<<<<<<< HEAD
 +  case 429:
 +#line 4829 "Gmsh.y"
++=======
+   case 445:
+ /* Line 1787 of yacc.c  */
+ #line 5100 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(double));
        if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@@ -10055,11 -10991,12 +16094,16 @@@
  	  List_Add((yyval.l), &s.value[i]);
        }
        Free((yyvsp[(3) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 430:
 +#line 4841 "Gmsh.y"
++=======
+   case 446:
+ /* Line 1787 of yacc.c  */
+ #line 5112 "Gmsh.y"
      {
        (yyval.l) = List_Create(2, 1, sizeof(double));
        if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@@ -10076,33 -11013,59 +16120,80 @@@
        }
        Free((yyvsp[(1) - (6)].c));
        List_Delete((yyvsp[(4) - (6)].l));
-     ;}
+     }
+     break;
+ 
+   case 447:
+ /* Line 1787 of yacc.c  */
+ #line 5130 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       (yyval.l) = List_Create(2, 1, sizeof(double));
+       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
+ 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (6)].c));
+       else{
+         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(1) - (6)].c)]);
+ 	for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
+ 	  int index = (int)(*(double*)List_Pointer_Fast((yyvsp[(4) - (6)].l), i));
+ 	  if((int)s.value.size() < index + 1)
+ 	    yymsg(0, "Uninitialized variable '%s[%d]'", (yyvsp[(1) - (6)].c), index);
+ 	  else
+ 	    List_Add((yyval.l), &s.value[index]);
+ 	}
+       }
+       Free((yyvsp[(1) - (6)].c));
+       List_Delete((yyvsp[(4) - (6)].l));
+     }
      break;
  
++<<<<<<< HEAD
 +  case 431:
 +#line 4862 "Gmsh.y"
++=======
+   case 448:
+ /* Line 1787 of yacc.c  */
+ #line 5151 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(2, 1, sizeof(double));
        List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 432:
 +#line 4867 "Gmsh.y"
++=======
+   case 449:
+ /* Line 1787 of yacc.c  */
+ #line 5156 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(1) - (1)].l);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 433:
 +#line 4871 "Gmsh.y"
++=======
+   case 450:
+ /* Line 1787 of yacc.c  */
+ #line 5160 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 434:
 +#line 4875 "Gmsh.y"
++=======
+   case 451:
+ /* Line 1787 of yacc.c  */
+ #line 5164 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
  	double d;
@@@ -10110,52 -11073,58 +16201,88 @@@
  	List_Add((yyval.l), &d);
        }
        List_Delete((yyvsp[(3) - (3)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 435:
 +#line 4887 "Gmsh.y"
++=======
+   case 452:
+ /* Line 1787 of yacc.c  */
+ #line 5176 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (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;
  
++<<<<<<< HEAD
 +  case 436:
 +#line 4891 "Gmsh.y"
++=======
+   case 453:
+ /* Line 1787 of yacc.c  */
+ #line 5180 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 437:
 +#line 4903 "Gmsh.y"
++=======
+   case 454:
+ /* Line 1787 of yacc.c  */
+ #line 5192 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        int flag;
        (yyval.u) = GetColorForString(-1, (yyvsp[(1) - (1)].c), &flag);
        if(flag) yymsg(0, "Unknown color '%s'", (yyvsp[(1) - (1)].c));
        Free((yyvsp[(1) - (1)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 438:
 +#line 4910 "Gmsh.y"
++=======
+   case 455:
+ /* Line 1787 of yacc.c  */
+ #line 5199 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        unsigned int val = 0;
        ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
        (yyval.u) = val;
        Free((yyvsp[(1) - (5)].c)); Free((yyvsp[(5) - (5)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 439:
 +#line 4920 "Gmsh.y"
++=======
+   case 456:
+ /* Line 1787 of yacc.c  */
+ #line 5209 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = (yyvsp[(2) - (3)].l);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 440:
 +#line 4924 "Gmsh.y"
++=======
+   case 457:
+ /* Line 1787 of yacc.c  */
+ #line 5213 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
        GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@@ -10166,33 -11135,37 +16293,57 @@@
  	  List_Add((yyval.l), &ct->table[i]);
        }
        Free((yyvsp[(1) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 441:
 +#line 4939 "Gmsh.y"
++=======
+   case 458:
+ /* Line 1787 of yacc.c  */
+ #line 5228 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
        List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 442:
 +#line 4944 "Gmsh.y"
++=======
+   case 459:
+ /* Line 1787 of yacc.c  */
+ #line 5233 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 443:
 +#line 4951 "Gmsh.y"
++=======
+   case 460:
+ /* Line 1787 of yacc.c  */
+ #line 5240 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.c) = (yyvsp[(1) - (1)].c);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 444:
 +#line 4955 "Gmsh.y"
++=======
+   case 461:
+ /* Line 1787 of yacc.c  */
+ #line 5244 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
  	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@@ -10204,93 -11177,109 +16355,160 @@@
  	strcpy((yyval.c), val.c_str());
  	Free((yyvsp[(1) - (1)].c));
        }
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 445:
 +#line 4968 "Gmsh.y"
++=======
+   case 462:
+ /* Line 1787 of yacc.c  */
+ #line 5257 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string out;
        StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
        (yyval.c) = (char*)Malloc((out.size() + 1) * sizeof(char));
        strcpy((yyval.c), out.c_str());
        Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 446:
 +#line 4976 "Gmsh.y"
++=======
+   case 463:
+ /* Line 1787 of yacc.c  */
+ #line 5265 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string out;
        StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
        (yyval.c) = (char*)Malloc((out.size() + 1) * sizeof(char));
        strcpy((yyval.c), out.c_str());
        Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 447:
 +#line 4987 "Gmsh.y"
++=======
+   case 464:
+ /* Line 1787 of yacc.c  */
+ #line 5276 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.c) = (yyvsp[(1) - (1)].c);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 448:
 +#line 4991 "Gmsh.y"
++=======
+   case 465:
+ /* Line 1787 of yacc.c  */
+ #line 5280 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.c) = (char *)Malloc(32 * sizeof(char));
        time_t now;
        time(&now);
        strcpy((yyval.c), ctime(&now));
        (yyval.c)[strlen((yyval.c)) - 1] = '\0';
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 449:
 +#line 4999 "Gmsh.y"
++=======
+   case 466:
+ /* Line 1787 of yacc.c  */
+ #line 5288 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string action = Msg::GetGmshOnelabAction();
        (yyval.c) = (char *)Malloc(action.size() + 1);
        strcpy((yyval.c), action.c_str());
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 450:
 +#line 5005 "Gmsh.y"
++=======
+     }
+     break;
+ 
+   case 467:
+ /* Line 1787 of yacc.c  */
+ #line 5294 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
        if(!env) env = "";
        (yyval.c) = (char *)Malloc((sizeof(env) + 1) * sizeof(char));
        strcpy((yyval.c), env);
        Free((yyvsp[(3) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 451:
 +#line 5013 "Gmsh.y"
++=======
+   case 468:
+ /* Line 1787 of yacc.c  */
+ #line 5302 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
        (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
        strcpy((yyval.c), s.c_str());
        Free((yyvsp[(3) - (6)].c));
        Free((yyvsp[(5) - (6)].c));
++<<<<<<< HEAD
 +    ;}
 +    break;
 +
 +  case 452:
 +#line 5021 "Gmsh.y"
++=======
+     }
+     break;
+ 
+   case 469:
+ /* Line 1787 of yacc.c  */
+ #line 5310 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
-       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
-       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
-       strcat((yyval.c), (yyvsp[(5) - (6)].c));
-       Free((yyvsp[(3) - (6)].c));
-       Free((yyvsp[(5) - (6)].c));
-     ;}
+       int size = 1;
+       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
+         size += strlen(*(char**)List_Pointer((yyvsp[(3) - (4)].l), i)) + 1;
+       (yyval.c) = (char*)Malloc(size * sizeof(char));
+       (yyval.c)[0] = '\0';
+       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
+         char *s;
+         List_Read((yyvsp[(3) - (4)].l), i, &s);
+         strcat((yyval.c), s);
+         Free(s);
+       }
+       List_Delete((yyvsp[(3) - (4)].l));
+     }
      break;
  
++<<<<<<< HEAD
 +  case 453:
 +#line 5029 "Gmsh.y"
++=======
+   case 470:
+ /* Line 1787 of yacc.c  */
+ #line 5325 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
        int i;
@@@ -10303,11 -11292,12 +16521,17 @@@
        }
        if(i <= 0) strcpy((yyval.c), (yyvsp[(3) - (4)].c));
        Free((yyvsp[(3) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 454:
 +#line 5043 "Gmsh.y"
++=======
+   case 471:
+ /* Line 1787 of yacc.c  */
+ #line 5339 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
        int i;
@@@ -10320,11 -11310,12 +16544,17 @@@
        else
  	strcpy((yyval.c), &(yyvsp[(3) - (4)].c)[i+1]);
        Free((yyvsp[(3) - (4)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 455:
 +#line 5057 "Gmsh.y"
++=======
+   case 472:
+ /* Line 1787 of yacc.c  */
+ #line 5353 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        std::string input = (yyvsp[(3) - (8)].c);
        std::string substr_old = (yyvsp[(5) - (8)].c);
@@@ -10335,13 -11326,14 +16565,18 @@@
        Free((yyvsp[(3) - (8)].c));
        Free((yyvsp[(5) - (8)].c));
        Free((yyvsp[(7) - (8)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 456:
 +#line 5069 "Gmsh.y"
++=======
+   case 473:
+ /* Line 1787 of yacc.c  */
+ #line 5365 "Gmsh.y"
      {
-       int size = 0;
+       int size = 1;
        for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
          size += strlen(*(char**)List_Pointer((yyvsp[(3) - (4)].l), i)) + 1;
        (yyval.c) = (char*)Malloc(size * sizeof(char));
@@@ -10354,18 -11346,35 +16589,50 @@@
          if(i != List_Nbr((yyvsp[(3) - (4)].l)) - 1) strcat((yyval.c), "\n");
        }
        List_Delete((yyvsp[(3) - (4)].l));
+     }
+     break;
+ 
+   case 474:
+ /* Line 1787 of yacc.c  */
+ #line 5381 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
+     {
+       if((yyvsp[(3) - (8)].d)){
+         (yyval.c) = (yyvsp[(5) - (8)].c);
+         Free((yyvsp[(7) - (8)].c));
+       }
++<<<<<<< HEAD
++      List_Delete((yyvsp[(3) - (4)].l));
 +    ;}
 +    break;
 +
 +  case 457:
 +#line 5085 "Gmsh.y"
++=======
+       else{
+         (yyval.c) = (yyvsp[(7) - (8)].c);
+         Free((yyvsp[(5) - (8)].c));
+       }
+     }
+     break;
+ 
+   case 475:
+ /* Line 1787 of yacc.c  */
+ #line 5392 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.c) = (yyvsp[(3) - (4)].c);
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 458:
 +#line 5089 "Gmsh.y"
++=======
+   case 476:
+ /* Line 1787 of yacc.c  */
+ #line 5396 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        char tmpstring[5000];
        int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@@ -10383,75 -11392,105 +16650,157 @@@
  	Free((yyvsp[(3) - (6)].c));
        }
        List_Delete((yyvsp[(5) - (6)].l));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 459:
 +#line 5108 "Gmsh.y"
 +    { floatOptions.clear(); charOptions.clear(); ;}
 +    break;
 +
 +  case 460:
 +#line 5110 "Gmsh.y"
 +    {
 +      std::string val((yyvsp[(3) - (6)].c));
 +      Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
 +      (yyval.c) = (char*)Malloc((val.size() + 1) * sizeof(char));
 +      strcpy((yyval.c), val.c_str());
 +      Free((yyvsp[(3) - (6)].c));
 +    ;}
 +    break;
 +
 +  case 461:
 +#line 5121 "Gmsh.y"
++=======
+   case 477:
+ /* Line 1787 of yacc.c  */
+ #line 5415 "Gmsh.y"
+     {
+       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
+       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
+       strcpy((yyval.c), tmp.c_str());
+       Free((yyvsp[(3) - (4)].c));
+     }
+     break;
+ 
+   case 478:
+ /* Line 1787 of yacc.c  */
+ #line 5422 "Gmsh.y"
+     { floatOptions.clear(); charOptions.clear(); }
+     break;
+ 
+   case 479:
+ /* Line 1787 of yacc.c  */
+ #line 5424 "Gmsh.y"
+     {
+       std::string val((yyvsp[(3) - (6)].c));
+       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
+       (yyval.c) = (char*)Malloc((val.size() + 1) * sizeof(char));
+       strcpy((yyval.c), val.c_str());
+       Free((yyvsp[(3) - (6)].c));
+     }
+     break;
+ 
+   case 480:
+ /* Line 1787 of yacc.c  */
+ #line 5435 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        (yyval.l) = List_Create(20,20,sizeof(char*));
        List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 462:
 +#line 5126 "Gmsh.y"
 +    { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); ;}
 +    break;
 +
 +  case 463:
 +#line 5132 "Gmsh.y"
++=======
+   case 481:
+ /* Line 1787 of yacc.c  */
+ #line 5440 "Gmsh.y"
+     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); }
+     break;
+ 
+   case 482:
+ /* Line 1787 of yacc.c  */
+ #line 5446 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        char tmpstr[256];
        sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
        (yyval.c) = (char *)Malloc((strlen((yyvsp[(1) - (5)].c))+strlen(tmpstr)+1)*sizeof(char));
        strcpy((yyval.c), (yyvsp[(1) - (5)].c)); strcat((yyval.c), tmpstr);
        Free((yyvsp[(1) - (5)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 464:
 +#line 5141 "Gmsh.y"
++=======
+   case 483:
+ /* Line 1787 of yacc.c  */
+ #line 5455 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
      {
        char tmpstr[256];
        sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
        (yyval.c) = (char *)Malloc((strlen((yyvsp[(1) - (5)].c))+strlen(tmpstr)+1)*sizeof(char)) ;
        strcpy((yyval.c), (yyvsp[(1) - (5)].c)) ; strcat((yyval.c), tmpstr) ;
        Free((yyvsp[(1) - (5)].c));
-     ;}
+     }
      break;
  
++<<<<<<< HEAD
 +  case 465:
 +#line 5154 "Gmsh.y"
 +    { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
 +    break;
 +
 +  case 466:
 +#line 5157 "Gmsh.y"
 +    { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
 +    break;
 +
 +
 +/* Line 1267 of yacc.c.  */
 +#line 10453 "Gmsh.tab.cpp"
++=======
+   case 484:
+ /* Line 1787 of yacc.c  */
+ #line 5468 "Gmsh.y"
+     { (yyval.c) = (yyvsp[(1) - (1)].c); }
+     break;
+ 
+   case 485:
+ /* Line 1787 of yacc.c  */
+ #line 5471 "Gmsh.y"
+     { (yyval.c) = (yyvsp[(1) - (1)].c); }
+     break;
+ 
+ 
+ /* Line 1787 of yacc.c  */
+ #line 11481 "Gmsh.tab.cpp"
++>>>>>>> upstream/2.9.3+dfsg1
        default: break;
      }
+   /* User semantic actions sometimes alter yychar, and that requires
+      that yytoken be updated with the new translation.  We take the
+      approach of translating immediately before every use of yytoken.
+      One alternative is translating here after every semantic action,
+      but that translation would be missed if the semantic action invokes
+      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+      incorrect destructor might then be invoked immediately.  In the
+      case of YYERROR or YYBACKUP, subsequent parser actions might lead
+      to an incorrect destructor call or verbose syntax error message
+      before the lookahead is translated.  */
    YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
  
    YYPOPSTACK (yylen);
@@@ -10663,7 -11708,8 +17018,12 @@@ yyreturn
  }
  
  
++<<<<<<< HEAD
 +#line 5161 "Gmsh.y"
++=======
+ /* Line 2050 of yacc.c  */
+ #line 5475 "Gmsh.y"
++>>>>>>> upstream/2.9.3+dfsg1
  
  
  void assignVariable(const std::string &name, int index, int assignType,
@@@ -10821,6 -11867,7 +17181,10 @@@ void PrintParserSymbols(bool help, std:
        it != gmsh_yysymbols.end(); it++){
      gmsh_yysymbol s(it->second);
      std::ostringstream sstream;
++<<<<<<< HEAD
++=======
+     sstream.precision(12);
++>>>>>>> upstream/2.9.3+dfsg1
      sstream << it->first;
      if(s.list){
        sstream << "[] = {";
diff --cc Parser/Gmsh.tab.hpp
index 4d0de63,d8a8e21..1c7ba9d
--- a/Parser/Gmsh.tab.hpp
+++ b/Parser/Gmsh.tab.hpp
@@@ -81,303 -88,142 +88,440 @@@ extern int gmsh_yydebug
       tStrPrefix = 297,
       tStrRelative = 298,
       tStrReplace = 299,
++<<<<<<< HEAD
 +     tStrFind = 300,
 +     tStrCmp = 301,
 +     tTextAttributes = 302,
 +     tBoundingBox = 303,
 +     tDraw = 304,
 +     tSetChanged = 305,
 +     tToday = 306,
 +     tOnelabAction = 307,
 +     tSyncModel = 308,
 +     tCpu = 309,
 +     tMemory = 310,
 +     tTotalMemory = 311,
 +     tCreateTopology = 312,
 +     tCreateTopologyNoHoles = 313,
 +     tDistanceFunction = 314,
 +     tDefineConstant = 315,
 +     tUndefineConstant = 316,
 +     tDefineNumber = 317,
 +     tDefineString = 318,
 +     tPoint = 319,
 +     tCircle = 320,
 +     tEllipse = 321,
 +     tLine = 322,
 +     tSphere = 323,
 +     tPolarSphere = 324,
 +     tSurface = 325,
 +     tSpline = 326,
 +     tVolume = 327,
 +     tCharacteristic = 328,
 +     tLength = 329,
 +     tParametric = 330,
 +     tElliptic = 331,
 +     tRefineMesh = 332,
 +     tAdaptMesh = 333,
 +     tRelocateMesh = 334,
 +     tPlane = 335,
 +     tRuled = 336,
 +     tTransfinite = 337,
 +     tComplex = 338,
 +     tPhysical = 339,
 +     tCompound = 340,
 +     tPeriodic = 341,
 +     tUsing = 342,
 +     tPlugin = 343,
 +     tDegenerated = 344,
 +     tRecursive = 345,
 +     tRotate = 346,
 +     tTranslate = 347,
 +     tSymmetry = 348,
 +     tDilate = 349,
 +     tExtrude = 350,
 +     tLevelset = 351,
 +     tRecombine = 352,
 +     tSmoother = 353,
 +     tSplit = 354,
 +     tDelete = 355,
 +     tCoherence = 356,
 +     tIntersect = 357,
 +     tMeshAlgorithm = 358,
 +     tReverse = 359,
 +     tLayers = 360,
 +     tScaleLast = 361,
 +     tHole = 362,
 +     tAlias = 363,
 +     tAliasWithOptions = 364,
 +     tCopyOptions = 365,
 +     tQuadTriAddVerts = 366,
 +     tQuadTriNoNewVerts = 367,
 +     tQuadTriSngl = 368,
 +     tQuadTriDbl = 369,
 +     tRecombLaterals = 370,
 +     tTransfQuadTri = 371,
 +     tText2D = 372,
 +     tText3D = 373,
 +     tInterpolationScheme = 374,
 +     tTime = 375,
 +     tCombine = 376,
 +     tBSpline = 377,
 +     tBezier = 378,
 +     tNurbs = 379,
 +     tNurbsOrder = 380,
 +     tNurbsKnots = 381,
 +     tColor = 382,
 +     tColorTable = 383,
 +     tFor = 384,
 +     tIn = 385,
 +     tEndFor = 386,
 +     tIf = 387,
 +     tEndIf = 388,
 +     tExit = 389,
 +     tAbort = 390,
 +     tField = 391,
 +     tReturn = 392,
 +     tCall = 393,
 +     tFunction = 394,
 +     tShow = 395,
 +     tHide = 396,
 +     tGetValue = 397,
 +     tGetEnv = 398,
 +     tGetString = 399,
 +     tHomology = 400,
 +     tCohomology = 401,
 +     tBetti = 402,
 +     tSetOrder = 403,
 +     tExists = 404,
 +     tFileExists = 405,
 +     tGMSH_MAJOR_VERSION = 406,
 +     tGMSH_MINOR_VERSION = 407,
 +     tGMSH_PATCH_VERSION = 408,
 +     tAFFECTDIVIDE = 409,
 +     tAFFECTTIMES = 410,
 +     tAFFECTMINUS = 411,
 +     tAFFECTPLUS = 412,
 +     tOR = 413,
 +     tAND = 414,
 +     tNOTEQUAL = 415,
 +     tEQUAL = 416,
 +     tGREATEROREQUAL = 417,
 +     tLESSOREQUAL = 418,
 +     UNARYPREC = 419,
 +     tMINUSMINUS = 420,
 +     tPLUSPLUS = 421
 +   };
 +#endif
 +/* Tokens.  */
 +#define tDOUBLE 258
 +#define tSTRING 259
 +#define tBIGSTR 260
 +#define tEND 261
 +#define tAFFECT 262
 +#define tDOTS 263
 +#define tPi 264
 +#define tMPI_Rank 265
 +#define tMPI_Size 266
 +#define tEuclidian 267
 +#define tCoordinates 268
 +#define tExp 269
 +#define tLog 270
 +#define tLog10 271
 +#define tSqrt 272
 +#define tSin 273
 +#define tAsin 274
 +#define tCos 275
 +#define tAcos 276
 +#define tTan 277
 +#define tRand 278
 +#define tAtan 279
 +#define tAtan2 280
 +#define tSinh 281
 +#define tCosh 282
 +#define tTanh 283
 +#define tFabs 284
 +#define tFloor 285
 +#define tCeil 286
 +#define tRound 287
 +#define tFmod 288
 +#define tModulo 289
 +#define tHypot 290
 +#define tList 291
 +#define tPrintf 292
 +#define tError 293
 +#define tStr 294
 +#define tSprintf 295
 +#define tStrCat 296
 +#define tStrPrefix 297
 +#define tStrRelative 298
 +#define tStrReplace 299
 +#define tStrFind 300
 +#define tStrCmp 301
 +#define tTextAttributes 302
 +#define tBoundingBox 303
 +#define tDraw 304
 +#define tSetChanged 305
 +#define tToday 306
 +#define tOnelabAction 307
 +#define tSyncModel 308
 +#define tCpu 309
 +#define tMemory 310
 +#define tTotalMemory 311
 +#define tCreateTopology 312
 +#define tCreateTopologyNoHoles 313
 +#define tDistanceFunction 314
 +#define tDefineConstant 315
 +#define tUndefineConstant 316
 +#define tDefineNumber 317
 +#define tDefineString 318
 +#define tPoint 319
 +#define tCircle 320
 +#define tEllipse 321
 +#define tLine 322
 +#define tSphere 323
 +#define tPolarSphere 324
 +#define tSurface 325
 +#define tSpline 326
 +#define tVolume 327
 +#define tCharacteristic 328
 +#define tLength 329
 +#define tParametric 330
 +#define tElliptic 331
 +#define tRefineMesh 332
 +#define tAdaptMesh 333
 +#define tRelocateMesh 334
 +#define tPlane 335
 +#define tRuled 336
 +#define tTransfinite 337
 +#define tComplex 338
 +#define tPhysical 339
 +#define tCompound 340
 +#define tPeriodic 341
 +#define tUsing 342
 +#define tPlugin 343
 +#define tDegenerated 344
 +#define tRecursive 345
 +#define tRotate 346
 +#define tTranslate 347
 +#define tSymmetry 348
 +#define tDilate 349
 +#define tExtrude 350
 +#define tLevelset 351
 +#define tRecombine 352
 +#define tSmoother 353
 +#define tSplit 354
 +#define tDelete 355
 +#define tCoherence 356
 +#define tIntersect 357
 +#define tMeshAlgorithm 358
 +#define tReverse 359
 +#define tLayers 360
 +#define tScaleLast 361
 +#define tHole 362
 +#define tAlias 363
 +#define tAliasWithOptions 364
 +#define tCopyOptions 365
 +#define tQuadTriAddVerts 366
 +#define tQuadTriNoNewVerts 367
 +#define tQuadTriSngl 368
 +#define tQuadTriDbl 369
 +#define tRecombLaterals 370
 +#define tTransfQuadTri 371
 +#define tText2D 372
 +#define tText3D 373
 +#define tInterpolationScheme 374
 +#define tTime 375
 +#define tCombine 376
 +#define tBSpline 377
 +#define tBezier 378
 +#define tNurbs 379
 +#define tNurbsOrder 380
 +#define tNurbsKnots 381
 +#define tColor 382
 +#define tColorTable 383
 +#define tFor 384
 +#define tIn 385
 +#define tEndFor 386
 +#define tIf 387
 +#define tEndIf 388
 +#define tExit 389
 +#define tAbort 390
 +#define tField 391
 +#define tReturn 392
 +#define tCall 393
 +#define tFunction 394
 +#define tShow 395
 +#define tHide 396
 +#define tGetValue 397
 +#define tGetEnv 398
 +#define tGetString 399
 +#define tHomology 400
 +#define tCohomology 401
 +#define tBetti 402
 +#define tSetOrder 403
 +#define tExists 404
 +#define tFileExists 405
 +#define tGMSH_MAJOR_VERSION 406
 +#define tGMSH_MINOR_VERSION 407
 +#define tGMSH_PATCH_VERSION 408
 +#define tAFFECTDIVIDE 409
 +#define tAFFECTTIMES 410
 +#define tAFFECTMINUS 411
 +#define tAFFECTPLUS 412
 +#define tOR 413
 +#define tAND 414
 +#define tNOTEQUAL 415
 +#define tEQUAL 416
 +#define tGREATEROREQUAL 417
 +#define tLESSOREQUAL 418
 +#define UNARYPREC 419
 +#define tMINUSMINUS 420
 +#define tPLUSPLUS 421
 +
 +
++=======
+      tFind = 300,
+      tStrFind = 301,
+      tStrCmp = 302,
+      tStrChoice = 303,
+      tTextAttributes = 304,
+      tBoundingBox = 305,
+      tDraw = 306,
+      tSetChanged = 307,
+      tToday = 308,
+      tFixRelativePath = 309,
+      tSyncModel = 310,
+      tOnelabAction = 311,
+      tOnelabRun = 312,
+      tCpu = 313,
+      tMemory = 314,
+      tTotalMemory = 315,
+      tCreateTopology = 316,
+      tCreateTopologyNoHoles = 317,
+      tDistanceFunction = 318,
+      tDefineConstant = 319,
+      tUndefineConstant = 320,
+      tDefineNumber = 321,
+      tDefineString = 322,
+      tPoint = 323,
+      tCircle = 324,
+      tEllipse = 325,
+      tLine = 326,
+      tSphere = 327,
+      tPolarSphere = 328,
+      tSurface = 329,
+      tSpline = 330,
+      tVolume = 331,
+      tCharacteristic = 332,
+      tLength = 333,
+      tParametric = 334,
+      tElliptic = 335,
+      tRefineMesh = 336,
+      tAdaptMesh = 337,
+      tRelocateMesh = 338,
+      tPlane = 339,
+      tRuled = 340,
+      tTransfinite = 341,
+      tComplex = 342,
+      tPhysical = 343,
+      tCompound = 344,
+      tPeriodic = 345,
+      tUsing = 346,
+      tPlugin = 347,
+      tDegenerated = 348,
+      tRecursive = 349,
+      tRotate = 350,
+      tTranslate = 351,
+      tSymmetry = 352,
+      tDilate = 353,
+      tExtrude = 354,
+      tLevelset = 355,
+      tRecombine = 356,
+      tSmoother = 357,
+      tSplit = 358,
+      tDelete = 359,
+      tCoherence = 360,
+      tIntersect = 361,
+      tMeshAlgorithm = 362,
+      tReverse = 363,
+      tLayers = 364,
+      tScaleLast = 365,
+      tHole = 366,
+      tAlias = 367,
+      tAliasWithOptions = 368,
+      tCopyOptions = 369,
+      tQuadTriAddVerts = 370,
+      tQuadTriNoNewVerts = 371,
+      tQuadTriSngl = 372,
+      tQuadTriDbl = 373,
+      tRecombLaterals = 374,
+      tTransfQuadTri = 375,
+      tText2D = 376,
+      tText3D = 377,
+      tInterpolationScheme = 378,
+      tTime = 379,
+      tCombine = 380,
+      tBSpline = 381,
+      tBezier = 382,
+      tNurbs = 383,
+      tNurbsOrder = 384,
+      tNurbsKnots = 385,
+      tColor = 386,
+      tColorTable = 387,
+      tFor = 388,
+      tIn = 389,
+      tEndFor = 390,
+      tIf = 391,
+      tEndIf = 392,
+      tExit = 393,
+      tAbort = 394,
+      tField = 395,
+      tReturn = 396,
+      tCall = 397,
+      tFunction = 398,
+      tShow = 399,
+      tHide = 400,
+      tGetValue = 401,
+      tGetEnv = 402,
+      tGetString = 403,
+      tHomology = 404,
+      tCohomology = 405,
+      tBetti = 406,
+      tSetOrder = 407,
+      tExists = 408,
+      tFileExists = 409,
+      tGMSH_MAJOR_VERSION = 410,
+      tGMSH_MINOR_VERSION = 411,
+      tGMSH_PATCH_VERSION = 412,
+      tAFFECTDIVIDE = 413,
+      tAFFECTTIMES = 414,
+      tAFFECTMINUS = 415,
+      tAFFECTPLUS = 416,
+      tOR = 417,
+      tAND = 418,
+      tNOTEQUAL = 419,
+      tEQUAL = 420,
+      tGREATEROREQUAL = 421,
+      tLESSOREQUAL = 422,
+      UNARYPREC = 423,
+      tMINUSMINUS = 424,
+      tPLUSPLUS = 425
+    };
+ #endif
++>>>>>>> upstream/2.9.3+dfsg1
  
  
  #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
  typedef union YYSTYPE
++<<<<<<< HEAD
 +#line 100 "Gmsh.y"
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  {
+ /* Line 2053 of yacc.c  */
+ #line 99 "Gmsh.y"
+ 
    char *c;
    int i;
    unsigned int u;
@@@ -385,13 -231,14 +529,21 @@@
    double v[5];
    Shape s;
    List_T *l;
++<<<<<<< HEAD
 +}
 +/* Line 1529 of yacc.c.  */
 +#line 391 "Gmsh.tab.hpp"
 +	YYSTYPE;
++=======
+ 
+ 
+ /* Line 2053 of yacc.c  */
+ #line 238 "Gmsh.tab.hpp"
+ } YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
++>>>>>>> upstream/2.9.3+dfsg1
  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
  # define YYSTYPE_IS_DECLARED 1
- # define YYSTYPE_IS_TRIVIAL 1
  #endif
  
  extern YYSTYPE gmsh_yylval;
diff --cc Parser/Gmsh.y
index e557d10,4d23c71..f361bb2
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@@ -115,9 -114,10 +114,14 @@@ struct doubleXstring
  %token tAtan tAtan2 tSinh tCosh tTanh tFabs tFloor tCeil tRound
  %token tFmod tModulo tHypot tList
  %token tPrintf tError tStr tSprintf tStrCat tStrPrefix tStrRelative tStrReplace
- %token tStrFind tStrCmp
+ %token tFind tStrFind tStrCmp tStrChoice
  %token tTextAttributes
++<<<<<<< HEAD
 +%token tBoundingBox tDraw tSetChanged tToday tOnelabAction tSyncModel
++=======
+ %token tBoundingBox tDraw tSetChanged tToday tFixRelativePath tSyncModel
+ %token tOnelabAction tOnelabRun
++>>>>>>> upstream/2.9.3+dfsg1
  %token tCpu tMemory tTotalMemory
  %token tCreateTopology tCreateTopologyNoHoles
  %token tDistanceFunction tDefineConstant tUndefineConstant
@@@ -641,7 -642,7 +646,11 @@@ NumericIncrement 
    | tMINUSMINUS    { $$ = -1; }
  ;
  
++<<<<<<< HEAD
 +// these are for either compatibility with getdp syntax (square brackets instead
++=======
+ // these are for compatibility with the syntax in GetDP (square brackets instead
++>>>>>>> upstream/2.9.3+dfsg1
  // of parentheses)
  
  LP : '(' { $$ = (char*)"("; } | '[' { $$ = (char*)"["; } ;
@@@ -743,6 -744,35 +752,41 @@@ Affectation 
        Free($1);
        List_Delete($5);
      }
++<<<<<<< HEAD
++  | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND
++    {
++      assignVariable($1, (int)$3, $5, $6);
++=======
+   | StringIndex '[' ']' NumericAffectation ListOfDouble tEND
+     {
+       gmsh_yysymbol &s(gmsh_yysymbols[$1]);
+       s.list = true;
+       double d;
+       switch($4){
+       case 0: // affect
+         s.value.clear(); // fall-through
+       case 1: // append
+         for(int i = 0; i < List_Nbr($5); i++){
+           List_Read($5, i, &d);
+           s.value.push_back(d);
+         }
+         break;
+       case 2: // remove
+         for(int i = 0; i < List_Nbr($5); i++){
+           List_Read($5, i, &d);
+           std::vector<double>::iterator it = std::find(s.value.begin(),
+                                                        s.value.end(), d);
+           if(it != s.value.end()) s.value.erase(it);
+         }
+         break;
+       default:
+         yymsg(0, "Operators *= and /= not available for lists");
+         break;
+       }
++>>>>>>> upstream/2.9.3+dfsg1
+       Free($1);
+       List_Delete($5);
+     }
    | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND
      {
        assignVariable($1, (int)$3, $5, $6);
@@@ -765,7 -795,7 +809,11 @@@
        List_Delete($4);
        List_Delete($8);
      }
++<<<<<<< HEAD
 +  | StringIndex '(' '{' RecursiveListOfDouble '}' ')' NumericAffectation ListOfDouble tEND
++=======
+   | StringIndex LP '{' RecursiveListOfDouble '}' RP NumericAffectation ListOfDouble tEND
++>>>>>>> upstream/2.9.3+dfsg1
      {
        assignVariables($1, $4, $7, $8);
        Free($1);
@@@ -2640,6 -2756,9 +2774,12 @@@ Command 
          std::string tmp = FixRelativePath(gmsh_yyname, $2);
  	CreateSingleDir(tmp);
        }
++<<<<<<< HEAD
++=======
+       else if(!strcmp($1, "OnelabRun")){
+         Msg::RunOnelabClient($2);
+       }
++>>>>>>> upstream/2.9.3+dfsg1
        else{
  	yymsg(0, "Unknown command '%s'", $1);
        }
@@@ -4814,6 -5073,18 +5094,21 @@@ FExpr_Multi 
        List_Delete($1);
      }
    | tSTRING LP RP
++<<<<<<< HEAD
++=======
+     {
+       $$ = List_Create(2, 1, sizeof(double));
+       if(!gmsh_yysymbols.count($1))
+ 	yymsg(0, "Unknown variable '%s'", $1);
+       else{
+         gmsh_yysymbol &s(gmsh_yysymbols[$1]);
+ 	for(unsigned int i = 0; i < s.value.size(); i++)
+ 	  List_Add($$, &s.value[i]);
+       }
+       Free($1);
+     }
+   | StringIndex LP RP
++>>>>>>> upstream/2.9.3+dfsg1
      {
        $$ = List_Create(2, 1, sizeof(double));
        if(!gmsh_yysymbols.count($1))
@@@ -4838,6 -5109,24 +5133,27 @@@
        Free($3);
      }
    | tSTRING LP '{' RecursiveListOfDouble '}' RP
++<<<<<<< HEAD
++=======
+     {
+       $$ = List_Create(2, 1, sizeof(double));
+       if(!gmsh_yysymbols.count($1))
+ 	yymsg(0, "Unknown variable '%s'", $1);
+       else{
+         gmsh_yysymbol &s(gmsh_yysymbols[$1]);
+ 	for(int i = 0; i < List_Nbr($4); i++){
+ 	  int index = (int)(*(double*)List_Pointer_Fast($4, i));
+ 	  if((int)s.value.size() < index + 1)
+ 	    yymsg(0, "Uninitialized variable '%s[%d]'", $1, index);
+ 	  else
+ 	    List_Add($$, &s.value[index]);
+ 	}
+       }
+       Free($1);
+       List_Delete($4);
+     }
+   | StringIndex LP '{' RecursiveListOfDouble '}' RP
++>>>>>>> upstream/2.9.3+dfsg1
      {
        $$ = List_Create(2, 1, sizeof(double));
        if(!gmsh_yysymbols.count($1))
@@@ -5017,13 -5306,20 +5333,30 @@@ StringExpr 
        Free($3);
        Free($5);
      }
++<<<<<<< HEAD
 +  | tStrCat LP StringExprVar ',' StringExprVar RP
 +    {
 +      $$ = (char *)Malloc((strlen($3) + strlen($5) + 1) * sizeof(char));
 +      strcpy($$, $3);
 +      strcat($$, $5);
 +      Free($3);
 +      Free($5);
++=======
+   | tStrCat LP RecursiveListOfStringExprVar RP
+     {
+       int size = 1;
+       for(int i = 0; i < List_Nbr($3); i++)
+         size += strlen(*(char**)List_Pointer($3, i)) + 1;
+       $$ = (char*)Malloc(size * sizeof(char));
+       $$[0] = '\0';
+       for(int i = 0; i < List_Nbr($3); i++){
+         char *s;
+         List_Read($3, i, &s);
+         strcat($$, s);
+         Free(s);
+       }
+       List_Delete($3);
++>>>>>>> upstream/2.9.3+dfsg1
      }
    | tStrPrefix '(' StringExprVar ')'
      {
@@@ -5081,10 -5377,21 +5414,28 @@@
        }
        List_Delete($3);
      }
++<<<<<<< HEAD
++  | tSprintf LP StringExprVar RP
++    {
++      $$ = $3;
++    }
++=======
+   | tStrChoice LP FExpr ',' StringExpr ',' StringExpr RP
+     {
+       if($3){
+         $$ = $5;
+         Free($7);
+       }
+       else{
+         $$ = $7;
+         Free($5);
+       }
+     }
    | tSprintf LP StringExprVar RP
      {
        $$ = $3;
      }
++>>>>>>> upstream/2.9.3+dfsg1
    | tSprintf LP StringExprVar ',' RecursiveListOfDouble RP
      {
        char tmpstring[5000];
@@@ -5104,10 -5411,17 +5455,24 @@@
        }
        List_Delete($5);
      }
++<<<<<<< HEAD
++  | tDefineString LP StringExpr
++    { floatOptions.clear(); charOptions.clear(); }
++    CharParameterOptions RP
++    {
++=======
+   | tFixRelativePath LP StringExprVar RP
+     {
+       std::string tmp = FixRelativePath(gmsh_yyname, $3);
+       $$ = (char*)Malloc((tmp.size() + 1) * sizeof(char));
+       strcpy($$, tmp.c_str());
+       Free($3);
+     }
    | tDefineString LP StringExpr
      { floatOptions.clear(); charOptions.clear(); }
      CharParameterOptions RP
      {
++>>>>>>> upstream/2.9.3+dfsg1
        std::string val($3);
        Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
        $$ = (char*)Malloc((val.size() + 1) * sizeof(char));
@@@ -5315,6 -5629,7 +5680,10 @@@ void PrintParserSymbols(bool help, std:
        it != gmsh_yysymbols.end(); it++){
      gmsh_yysymbol s(it->second);
      std::ostringstream sstream;
++<<<<<<< HEAD
++=======
+     sstream.precision(12);
++>>>>>>> upstream/2.9.3+dfsg1
      sstream << it->first;
      if(s.list){
        sstream << "[] = {";
diff --cc Parser/Gmsh.yy.cpp
index 4bd14b2,20a6257..5b86f58
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@@ -380,8 -380,8 +380,13 @@@ static void yy_fatal_error (yyconst cha
  	*yy_cp = '\0'; \
  	(yy_c_buf_p) = yy_cp;
  
++<<<<<<< HEAD
 +#define YY_NUM_RULES 187
 +#define YY_END_OF_BUFFER 188
++=======
+ #define YY_NUM_RULES 191
+ #define YY_END_OF_BUFFER 192
++>>>>>>> upstream/2.9.3+dfsg1
  /* This struct is not used in this scanner,
     but its presence is necessary. */
  struct yy_trans_info
@@@ -389,108 -389,111 +394,216 @@@
  	flex_int32_t yy_verify;
  	flex_int32_t yy_nxt;
  	};
++<<<<<<< HEAD
 +static yyconst flex_int16_t yy_accept[909] =
 +    {   0,
 +        0,    0,  188,  186,    1,    1,  186,    5,  186,    6,
 +      186,  186,  186,  186,  186,  181,   21,    2,  186,   16,
 +      186,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  186,   28,   24,   19,   25,   17,
 +       26,   18,    0,  183,    3,    4,   20,  182,  181,    0,
 +       29,   27,   30,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +
 +      185,  103,  102,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  124,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  167,  168,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,   23,   22,    0,
 +      182,    0,    0,  184,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,   54,   65,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,   74,  185,
 +      185,  185,  185,  185,  185,   90,  185,  185,  185,  185,
 +
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  110,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      150,  185,  185,  185,  185,  185,  156,  185,  185,  185,
 +      185,  175,  185,  185,  185,  185,  185,  185,  185,  185,
 +        0,  183,    0,    0,  182,  185,   32,  185,  185,  185,
 +      185,  185,   37,   39,  185,  185,  185,  185,   62,  185,
 +       47,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +       53,  185,  185,  185,  185,  185,   72,  185,  185,  185,
 +
 +      185,  185,  185,   83,  185,   85,  185,  185,  185,   89,
 +      185,  185,  185,  185,  185,   98,   99,  185,  185,  185,
 +      185,  185,  185,  185,  185,  108,  109,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  141,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  164,  151,  185,
 +      185,  185,  185,  149,  185,  185,  185,  185,  185,  185,
 +      185,  170,  174,  185,  185,  185,  185,  185,  185,  185,
 +       10,   15,    9,    8,  185,   12,   14,    0,  182,   31,
 +      185,   35,  185,  185,  185,   41,  185,   43,  185,  185,
 +
 +      185,  185,  185,  185,  185,   57,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,   80,   82,
 +      185,  185,  185,   86,  185,   88,  185,  185,  185,  185,
 +      185,  185,  101,  185,  185,  106,  185,  185,  185,  111,
 +      185,  185,  185,  185,  185,  119,  185,  121,  185,  185,
 +      185,  125,  185,  126,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  139,  140,  185,  185,  185,  185,
 +      185,  185,  154,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  176,  185,  185,  185,  179,  185,   11,
 +      185,   13,  185,  185,   34,   38,   40,  185,   44,  185,
 +
 +      185,  185,   48,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,   69,   71,  185,  185,   79,  185,
 +       84,  185,  185,  185,  185,  185,   92,  185,  185,  185,
 +      185,  185,  112,  107,  185,  185,  185,  118,  185,  115,
 +      185,  185,  185,  185,  130,  185,  129,  185,  185,  185,
 +      185,  185,  144,  185,  138,  185,  185,  185,  185,  152,
 +      153,  185,  158,  163,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  180,    7,  185,  185,
 +       42,   45,  185,  185,  185,  185,  185,  185,   52,   56,
 +      185,  185,  185,  185,  185,  185,  185,  185,   76,  185,
 +
 +      185,  185,   77,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  145,  185,
 +      185,  185,  185,  157,  162,  185,  185,  185,  155,  185,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,   59,  185,  185,  185,  185,
 +      185,  185,  185,   75,   78,  185,  185,   91,  185,  185,
 +      185,  185,   94,  100,  185,  185,  113,  116,  117,  185,
 +      185,  185,  122,  123,  185,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,  185,  185,  148,  147,  185,  185,
 +
 +      185,  165,  185,  185,  185,  185,  185,  185,  185,   33,
 +      185,  185,  185,  185,   50,  185,  185,  185,  185,  185,
 +      185,  185,  185,  185,   81,  185,  185,  185,  185,   93,
 +      185,  104,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  135,  137,  185,  185,  185,  185,  160,  185,  185,
 +      166,  185,  185,  185,  185,  173,  185,  185,  185,   61,
 +      185,   51,   58,  185,  185,  185,  185,  185,  185,  185,
 +       87,  185,  185,  185,  185,  185,  185,  127,  185,  185,
 +      133,  185,  185,  185,  142,  185,  185,   73,  185,  159,
 +      185,  185,  185,  185,  185,  185,   46,  185,   60,   49,
 +
 +      185,  185,  185,  185,   70,  185,  185,  185,  185,  185,
 +      185,  128,  185,  185,  134,  185,  185,  185,  161,  185,
 +      177,  185,  171,  185,  185,  185,  185,  185,   67,   68,
 +      185,  185,  185,  185,  185,  120,  185,  185,  185,  143,
 +      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 +      185,  185,  114,  185,  185,  185,  185,  185,  172,  185,
 +      185,   55,   63,   66,  185,  185,  185,  185,  185,  185,
 +      136,  146,  169,  185,  185,  185,  185,  185,  185,  185,
 +      131,  185,  185,   36,  185,  185,  185,  185,  185,  185,
 +      178,  185,  185,  185,  185,  185,  132,  185,   95,   96,
 +
 +       97,  185,  185,  185,  185,  105,   64,    0
++=======
+ static yyconst flex_int16_t yy_accept[932] =
+     {   0,
+         0,    0,  192,  190,    1,    1,  190,    5,  190,    6,
+       190,  190,  190,  190,  190,  185,   21,    2,  190,   16,
+       190,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  190,   28,   24,   19,   25,   17,
+        26,   18,    0,  187,    3,    4,   20,  186,  185,    0,
+        29,   27,   30,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+ 
+       189,  105,  104,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  127,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  171,  172,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,   23,   22,    0,
+       186,    0,    0,  188,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,   54,   65,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,   74,  189,
+       189,  189,  189,  189,  189,  189,  189,   92,  189,  189,
+ 
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  112,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  153,  189,  189,  189,  189,  189,  159,  189,
+       189,  189,  189,  179,  189,  189,  189,  189,  189,  189,
+       189,  189,    0,  187,    0,    0,  186,  189,   32,  189,
+       189,  189,  189,  189,   37,   39,  189,  189,  189,  189,
+        62,  189,   47,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,   53,  189,  189,  189,  189,  189,   72,  189,
+ 
+       189,  189,  189,  189,  189,   83,  189,   85,  189,  189,
+        87,  189,  189,   91,  189,  189,  189,  189,  189,  100,
+       101,  189,  189,  189,  189,  189,  189,  189,  189,  110,
+       111,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  144,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  168,  154,  189,  189,  189,  189,  152,  189,  189,
+       189,  189,  189,  189,  189,  174,  178,  189,  189,  189,
+       189,  189,  189,  189,   10,   15,    9,    8,  189,   12,
+        14,    0,  186,   31,  189,   35,  189,  189,  189,   41,
+ 
+       189,   43,  189,  189,  189,  189,  189,  189,  189,   57,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,   80,   82,  189,  189,  189,   86,  189,  189,
+        90,  189,  189,  189,  189,  189,  189,  103,  189,  189,
+       108,  189,  189,  189,  113,  189,  189,  189,  189,  189,
+       121,  189,  124,  189,  189,  189,  128,  189,  129,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  142,
+       143,  189,  189,  189,  189,  189,  189,  157,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  180,
+       189,  189,  189,  183,  189,   11,  189,   13,  189,  189,
+ 
+        34,   38,   40,  189,   44,  189,  189,  189,   48,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+        69,   71,  189,  189,   79,  189,   84,  189,  189,  189,
+       189,  189,  189,   94,  189,  189,  189,  189,  189,  114,
+       109,  189,  189,  189,  120,  189,  117,  189,  189,  189,
+       189,  133,  189,  132,  189,  189,  189,  189,  189,  147,
+       189,  141,  189,  189,  189,  189,  155,  156,  189,  161,
+       189,  166,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  184,    7,  189,  189,   42,   45,
+       189,  189,  189,  189,  189,  189,   52,   56,  189,  189,
+ 
+       189,  189,  189,  189,  189,  189,   76,  189,  189,  189,
+        77,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,  148,  189,
+       189,  189,  189,  160,  189,  165,  189,  189,  189,  158,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  189,  189,  189,   59,  189,  189,  189,
+       189,  189,  189,  189,   75,   78,  189,  189,  189,   93,
+       189,  189,  189,  189,   96,  102,  189,  189,  115,  118,
+       119,  189,  189,  189,  189,  125,  126,  189,  189,  189,
+ 
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  151,
+       150,  189,  189,  189,  189,  169,  189,  189,  189,  189,
+       189,  189,  189,   33,  189,  189,  189,  189,   50,  189,
+       189,  189,  189,  189,  189,  189,  189,  189,   81,  189,
+       189,  189,  189,  189,   95,  189,  106,  189,  189,  123,
+       189,  189,  189,  189,  189,  189,  189,  138,  140,  189,
+       189,  189,  189,  167,  163,  189,  189,  170,  189,  189,
+       189,  189,  177,  189,  189,  189,   61,  189,   51,   58,
+       189,  189,  189,  189,  189,  189,  189,   88,  189,  189,
+       189,  189,  189,  189,  189,  130,  189,  189,  136,  189,
+ 
+       189,  189,  145,  189,  189,   73,  189,  162,  189,  189,
+       189,  189,  189,  189,   46,  189,   60,   49,  189,  189,
+       189,  189,   70,  189,  189,  189,  189,  189,  189,  189,
+       131,  189,  189,  137,  189,  189,  189,  164,  189,  181,
+       189,  175,  189,  189,  189,  189,  189,   67,   68,  189,
+       189,  189,  189,  189,  189,  122,  189,  189,  189,  146,
+       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+       189,  189,  189,  116,  189,  189,  189,  189,  189,  176,
+       189,  189,   55,   63,   66,  189,  189,  189,  189,  189,
+       189,  189,  139,  149,  173,  189,  189,  189,   89,  189,
+ 
+       189,  189,  189,  134,  189,  189,   36,  189,  189,  189,
+       189,  189,  189,  182,  189,  189,  189,  189,  189,  135,
+       189,   97,   98,   99,  189,  189,  189,  189,  107,   64,
+         0
++>>>>>>> upstream/2.9.3+dfsg1
      } ;
  
  static yyconst flex_int32_t yy_ec[256] =
@@@ -537,215 -540,221 +650,433 @@@ static yyconst flex_int32_t yy_meta[74
          2,    2,    1
      } ;
  
++<<<<<<< HEAD
 +static yyconst flex_int16_t yy_base[910] =
 +    {   0,
 +        0,    0, 1041, 1042, 1042, 1042, 1019, 1042, 1033, 1042,
 +     1017,   65,   66,   64,   76,   78, 1042, 1042, 1016, 1015,
 +     1014,   49,   49,   56,   67,   68,   81,   50,   80,   97,
 +        0,  974,   97,  108,  966,   61,  107,  965,  118,  125,
 +      158,   62,  970,  978,  956, 1042, 1042, 1042, 1042, 1042,
 +     1042, 1042, 1017,  184, 1042, 1042, 1042,  199,  214,  229,
 +     1042, 1042, 1042,    0,  966,  965,  977,  968,  973,  966,
 +      973,  958,   37,  952,   58,  962,  969,  952,  194,  948,
 +      962,  149,  955,  964,  953,  959,  945,  958,  116,  958,
 +      109,  945,  944,  940,  943,  961,  935,  949,   24,  937,
 +
 +      956,    0,  931,  935,  924,   84,  130,  940,  962,  158,
 +      941,  927,  938,  938,  924,  923,  915,    0,  116,   98,
 +      929,  936,  923,  182,  127,  924,  933,  914,  918,  918,
 +      916,  199,  912,  911,  910,  145,    0,    0,  938,  912,
 +      901,  158,  922,  918,  912,  909,  897, 1042, 1042,  255,
 +      260,  269,  275,  280,  901,  899,  901,  914,  273,  901,
 +      900,  901,  892,  901,  896,  897,  895,  895,  888,  901,
 +       82,  889,  159,  885,  877,  892,    0,  898,  889,  892,
 +      891,  894,  872,  884,  206,  878,  880,  195,    0,  873,
 +      871,  877,  882,  872,  881,    0,  881,  900,  272,  877,
 +
 +      876,  866,  865,  898,  872,  857,  870,  867,  868,  867,
 +      852,  903,  869,  854,  859,  846,  863,  853,  858,  861,
 +      852,  842,  846,  851,  844,  855,  842,  850,  849,  239,
 +      843,  837,  830,  844,  847,  834,  841,  834,  280,  822,
 +      835,  828,  836,  831,  830,  819,  282,  831,  824,  832,
 +      854,  825,  813,  830,  829,  816,  823,  814,  806,  268,
 +      324,  329,  338,  343,  348,  806,    0,  805,  805,  808,
 +      812,  819,    0,  851,  809,  808,  811,  811,    0,  794,
 +        0,  812,  801,  794,  798,  792,  799,  243,  803,  816,
 +        0,  786,  791,  790,  783,  782,    0,  785,  785,  792,
 +
 +      780,  787,  776,    0,  774,    0,  789,  812,  774,    0,
 +      771,  789,  775,  768,  785,    0,    0,  774,  765,  790,
 +      765,  763,  763,  760,  767,    0,    0,  811,  240,  759,
 +      799,  763,  755,  771,  754,  758,  755,  759,  762,  757,
 +      746,  747,  744,  261,    0,  750,  744,  747,  756,  741,
 +      740,  737,  751,  750,  748,  744,  734,    0,    0,  731,
 +      732,  242,  735,    0,  199,  738,  729,  740,  743,  738,
 +      754,    0,    0,  765,  716,  728,  720,  731,  729,  723,
 +        0,    0,  723,    0,  728,  721,    0,  353,  358,    0,
 +      743,  732,  711,  715,  714,    0,  713,    0,  708,  715,
 +
 +      712,  719,  716,  715,  705,  723,  704,  711,  695,  705,
 +      698,  707,  706,  705,  704,  703,  258,  690,    0,    0,
 +      702,  687,  700,    0,  680,    0,  693,  290,  680,  683,
 +      688,  684,    0,  706,  678,    0,  677,  686,  675,    0,
 +      691,  682,  666,  678,  674,    0,  685,    0,  681,  681,
 +      681,    0,  670,    0,  688,  675,  663,  677,  660,  672,
 +      675,  662,  656,  668,    0,    0,  685,  670,  666,  661,
 +      663,  662,    0,  647,  646,  649,  650,  657,  273,  658,
 +      641,  645,  639,    0,  669,  209,  647,    0,  650,    0,
 +      647,    0,  648,  643,    0,    0,  683,  645,    0,  636,
 +
 +      637,  628,    0,  633,  634,  643,  638,  619,  628,  627,
 +      620,  643,  351,  620,    0,    0,  325,  627,    0,  626,
 +        0,  629,  624,  618,  288,  655,    0,  621,  609,  621,
 +      637,  621,    0,    0,  620,  611,  598,    0,  615,    0,
 +      645,  601,  610,  617,    0,  602,    0,  607,  344,  606,
 +      626,  594,    0,  607,    0,  610,  597,  604,  603,    0,
 +        0,  601,    0,    0,  602,  599,  603,  592,  597,  584,
 +      596,  580,  593,  340,  596,  583,    0,    0,  577,  575,
 +        0,    0,  586,  599,  586,  587,  575,  586,    0,    0,
 +      583,  585,  576,  570,  569,  562,  562,  579,    0,  561,
 +
 +      575,  576,    0,  558,  562,  589,  584,  577,  558,  565,
 +      545,  581,  564,  547,  555,  559,  549,  559,  544,  557,
 +      548,  550,  357,  556,  543,  534,  549,  548,    0,  534,
 +      544,  533,  532,    0,    0,  539,  528,  545,    0,  521,
 +      539,  526,  530,  521,  527,  520,  533,  529,  528,  558,
 +      520,  516,  527,  524,  519,    0,  510,  514,  512,  513,
 +      513,  507,  504,    0,    0,  509,  502,    0,  530,  529,
 +      540,  510,    0,    0,  540,  496,    0,    0,    0,  497,
 +      494,  503,    0,    0,  506,  506,  507,  494,  494,  487,
 +      500,  499,  485,  514,  482,  495,    0,    0,  476,  489,
 +
 +      494,    0,  485,   40,   45,   99,  120,  134,  193,    0,
 +      183,  172,  250,  273,    0,  263,  297,  298,  322,  323,
 +      320,  337,  332,  337,    0,  325,  351,  354,  365,    0,
 +      355,    0,  343,  345,  354,  342,  356,  351,  374,  357,
 +      360,    0,    0,  358,  362,  381,  365,    0,  350,  367,
 +        0,  371,  357,  372,  358,    0,  364,  364,  357,    0,
 +      363,    0,    0,  364,  365,  373,  366,  381,  375,  385,
 +        0,  390,  391,  392,  409,  375,  381,    0,  391,  400,
 +        0,  393,  388,  383,    0,  383,  401,    0,  398,    0,
 +      384,  381,  411,  402,  395,  390,    0,  391,    0,    0,
 +
 +      397,  411,  396,  407,    0,  418,  419,  420,  428,  411,
 +      407,    0,  417,  401,    0,  423,  417,  402,    0,  408,
 +        0,  411,    0,  411,  422,  423,  426,  421,    0,    0,
 +      455,  456,  457,  449,  427,    0,  423,  444,  431,    0,
 +      438,  439,  436,  427,  433,  445,  425,  431,  458,  459,
 +      460,  454,    0,  436,  451,  439,  441,  441,    0,  459,
 +      448,    0,  473,    0,  469,  470,  472,  473,  450,  452,
 +        0,    0,    0,  457,  453,  458,  489,  490,  491,  498,
 +        0,  458,  459,    0,  496,  490,  491,  492,  500,  466,
 +        0,  471,  497,  498,  499,  509,    0,  479,    0,    0,
 +
 +        0,  503,  487,  513,  476,    0,    0, 1042,  540
 +    } ;
 +
 +static yyconst flex_int16_t yy_def[910] =
 +    {   0,
 +      908,    1,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  908,  908,  908,
 +      908,  908,  908,  908,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      908,  908,  908,  908,  908,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  908,  908,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
 +
 +      909,  909,  909,  909,  909,  909,  909,    0,  908
 +    } ;
 +
 +static yyconst flex_int16_t yy_nxt[1116] =
++=======
+ static yyconst flex_int16_t yy_base[933] =
+     {   0,
+         0,    0, 1064, 1065, 1065, 1065, 1042, 1065, 1056, 1065,
+      1040,   65,   66,   64,   76,   78, 1065, 1065, 1039, 1038,
+      1037,   49,   49,   56,   67,   68,   81,   50,   80,   97,
+         0,  997,   97,  108,  989,   61,  107,  988,  118,  125,
+       158,   62,  993, 1001,  979, 1065, 1065, 1065, 1065, 1065,
+      1065, 1065, 1040,  184, 1065, 1065, 1065,  199,  214,  229,
+      1065, 1065, 1065,    0,  989,  988, 1000,  991,  996,  989,
+       996,  981,   37,  975,   58,  985,  992,  975,  194,  971,
+       985,  149,  978,  987,  976,  982,  968,  981,  116,  981,
+       202,  968,  967,  963,  966,  984,  958,  972,   24,  960,
+ 
+       979,    0,  954,  958,  947,   84,   96,  963,  985,  158,
+       964,  950,  961,  961,  947,  946,  938,    0,  116,  137,
+       952,  959,  946,  182,  138,  947,  956,  937,  941,  941,
+       939,  203,  935,  934,  933,  149,    0,    0,  961,  935,
+       924,  167,  945,  941,  935,  932,  920, 1065, 1065,  260,
+       265,  274,  280,  285,  924,  922,  924,  937,  222,  924,
+       923,  924,  915,  924,  919,  920,  918,  918,  911,  924,
+        82,  912,  105,  908,  900,  915,    0,  921,  912,  915,
+       914,  917,  895,  907,  193,  901,  903,  220,    0,  896,
+       894,  900,  905,  905,  915,  893,  902,    0,  902,  921,
+ 
+       193,  898,  897,  887,  886,  919,  893,  878,  891,  888,
+       889,  888,  873,  924,  890,  875,  880,  867,  884,  874,
+       879,  882,  873,  863,  867,  872,  865,  876,  863,  871,
+       870,  204,  864,  858,  851,  865,  868,  855,  862,  855,
+       278,  843,  856,  849,  857,  852,  851,  840,  280,  852,
+       845,  853,  875,  846,  834,  851,  850,  837,  844,  835,
+       827,  261,  317,  322,  331,  336,  341,  827,    0,  826,
+       826,  829,  833,  840,    0,  872,  830,  829,  832,  832,
+         0,  815,    0,  833,  822,  815,  819,  813,  820,  246,
+       824,  837,    0,  807,  812,  811,  804,  803,    0,  806,
+ 
+       806,  813,  801,  808,  797,    0,  795,    0,  810,  833,
+         0,  807,  794,    0,  791,  809,  795,  788,  805,    0,
+         0,  794,  785,  810,  785,  783,  783,  780,  787,    0,
+         0,  831,  269,  779,  819,  783,  775,  791,  774,  778,
+       775,  779,  782,  777,  766,  767,  764,  300,    0,  770,
+       764,  767,  776,  761,  760,  757,  771,  770,  768,  764,
+       754,    0,    0,  751,  752,  246,  755,    0,  312,  758,
+       749,  760,  763,  758,  774,    0,    0,  785,  736,  748,
+       740,  751,  749,  743,    0,    0,  743,    0,  748,  741,
+         0,  348,  359,    0,  763,  752,  731,  735,  734,    0,
+ 
+       733,    0,  728,  735,  732,  739,  736,  735,  725,  743,
+       724,  731,  715,  725,  718,  727,  726,  725,  724,  723,
+       256,  710,    0,    0,  722,  707,  720,    0,  700,  711,
+         0,  712,  278,  699,  702,  707,  703,    0,  725,  697,
+         0,  696,  705,  694,    0,  710,  701,  685,  697,  693,
+         0,  704,    0,  700,  700,  700,    0,  689,    0,  707,
+       694,  682,  696,  679,  691,  694,  681,  675,  687,    0,
+         0,  704,  689,  685,  680,  682,  681,    0,  666,  665,
+       669,  667,  668,  675,  128,  676,  659,  663,  657,    0,
+       687,  324,  665,    0,  668,    0,  665,    0,  666,  661,
+ 
+         0,    0,  701,  663,    0,  654,  655,  646,    0,  651,
+       652,  661,  656,  637,  646,  645,  638,  661,  343,  638,
+         0,    0,  272,  645,    0,  644,    0,  647,  642,  649,
+       635,  347,  672,    0,  638,  626,  638,  654,  638,    0,
+         0,  637,  628,  615,    0,  632,    0,  346,  619,  628,
+       635,    0,  620,    0,  625,  325,  624,  644,  612,    0,
+       625,    0,  628,  615,  622,  621,    0,    0,  619,    0,
+       615,    0,  619,  616,  620,  609,  614,  601,  613,  597,
+       610,  341,  613,  600,    0,    0,  594,  592,    0,    0,
+       603,  616,  603,  604,  592,  603,    0,    0,  600,  602,
+ 
+       593,  587,  586,  579,  579,  596,    0,  578,  592,  593,
+         0,  575,  573,  578,  605,  600,  593,  574,  581,  561,
+       597,  580,  563,  571,  575,  565,  575,  557,  559,  572,
+       563,  565,  362,  571,  558,  549,  564,  563,    0,  549,
+       559,  548,  547,    0,  560,    0,  553,  542,  559,    0,
+       535,  553,  540,  544,  535,  541,  534,  547,  543,  542,
+       572,  534,  530,  541,  538,  533,    0,  524,  528,  526,
+       527,  527,  521,  518,    0,    0,  523,  516,  525,    0,
+       543,  542,  553,  523,    0,    0,  553,  509,    0,    0,
+         0,  510,  507,  512,  515,    0,    0,  518,  518,  519,
+ 
+       506,  506,   30,   54,   95,  111,  159,  191,  216,    0,
+         0,  275,  273,  331,  339,    0,  332,  335,  331,  345,
+       338,  343,  371,    0,  362,  339,  342,  346,    0,  334,
+       354,  355,  348,  348,  346,  363,  358,  363,    0,  351,
+       349,  378,  379,  390,    0,  379,    0,  367,  368,    0,
+       375,  362,  377,  371,  394,  377,  380,    0,    0,  378,
+       382,  401,  385,    0,    0,  369,  386,    0,  390,  376,
+       390,  376,    0,  382,  382,  375,    0,  381,    0,    0,
+       382,  383,  391,  384,  399,  392,  402,    0,  403,  409,
+       410,  411,  428,  394,  400,    0,  410,  419,    0,  412,
+ 
+       407,  402,    0,  402,  420,    0,  417,    0,  403,  400,
+       430,  421,  414,  409,    0,  410,    0,    0,  416,  430,
+       415,  426,    0,  443,  438,  439,  440,  448,  431,  428,
+         0,  437,  421,    0,  443,  437,  422,    0,  428,    0,
+       431,    0,  432,  442,  443,  446,  441,    0,    0,  454,
+       476,  477,  478,  470,  448,    0,  444,  465,  452,    0,
+       459,  460,  457,  448,  454,  466,  446,  452,  453,  480,
+       481,  482,  476,    0,  458,  473,  461,  463,  463,    0,
+       481,  470,    0,  495,    0,  477,  493,  494,  495,  496,
+       473,  475,    0,    0,    0,  480,  476,  481,    0,  512,
+ 
+       513,  514,  521,    0,  481,  482,    0,  519,  513,  514,
+       515,  523,  489,    0,  494,  520,  521,  522,  532,    0,
+       502,    0,    0,    0,  526,  510,  536,  499,    0,    0,
+      1065,  563
+     } ;
+ 
+ static yyconst flex_int16_t yy_def[933] =
+     {   0,
+       931,    1,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  931,  931,  931,
+       931,  931,  931,  931,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  931,  931,  931,  931,  931,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  931,  931,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+ 
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+       932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
+         0,  931
+     } ;
+ 
+ static yyconst flex_int16_t yy_nxt[1139] =
++>>>>>>> upstream/2.9.3+dfsg1
      {   0,
          4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
         14,   15,   16,   16,   16,   16,   16,   17,   18,   19,
@@@ -755,124 -764,126 +1086,247 @@@
         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,
++<<<<<<< HEAD
 +       54,  201,  202,   55,   96,   50,   52,   56,   58,   72,
 +       59,   59,   59,   59,   59,  752,   57,   65,   66,   67,
 +
 +       73,   97,  163,   75,   60,  753,   68,   76,  164,   74,
 +       77,   78,   69,   70,   71,  166,   79,   80,   82,   81,
 +      113,  144,   83,  167,  114,   85,  145,   86,   90,   60,
 +       84,   87,  101,  284,   88,   98,   91,   89,   92,   93,
 +       99,   94,  285,  208,  105,  109,  754,   95,  106,  102,
 +      100,  209,  107,  225,  115,  226,  103,  108,  116,  110,
 +      192,  117,  118,  223,  119,  123,  193,  120,  111,  124,
 +      121,  188,  137,  138,  127,  755,  128,  189,  125,  129,
 +      130,  190,  224,  131,  126,  756,  132,  133,  139,  210,
 +      134,  135,  235,  236,  211,  136,   54,   54,   54,   54,
 +
 +       54,  179,  180,  249,  250,  140,  181,  287,  254,  141,
 +      150,  151,  151,  151,  151,  151,  214,  757,  142,  758,
 +      288,  143,  215,  255,   58,  152,   59,   59,   59,   59,
 +       59,  230,  759,  299,  231,  150,  300,  153,  153,  232,
 +       60,  154,  154,  154,  154,  154,  475,  233,  171,  234,
 +      152,  172,  173,  243,  174,  175,  244,  476,  176,  303,
 +      304,  574,  245,  261,  261,   60,  575,  262,  262,  262,
 +      262,  262,  151,  151,  151,  151,  151,  264,  264,  441,
 +      442,  265,  265,  265,  265,  265,  263,  154,  154,  154,
 +      154,  154,  154,  154,  154,  154,  154,  270,  313,  346,
 +
 +      408,  472,  457,  409,  356,  347,  365,  473,  760,  366,
 +      606,  263,  314,  271,  272,  315,  357,  381,  607,  367,
 +      382,  368,  517,  518,  525,  383,  457,  526,  761,  384,
 +      567,  385,  386,  762,  568,  387,  262,  262,  262,  262,
 +      262,  262,  262,  262,  262,  262,  388,  388,  763,  764,
 +      389,  389,  389,  389,  389,  265,  265,  265,  265,  265,
 +      265,  265,  265,  265,  265,  389,  389,  389,  389,  389,
 +      389,  389,  389,  389,  389,  595,  599,  624,  644,  686,
 +      600,  765,  687,  766,  767,  768,  596,  769,  770,  771,
 +      772,  597,  688,  773,  774,  645,  775,  689,  776,  625,
 +
 +      777,  624,  644,  778,  686,  779,  780,  687,  781,  782,
 +      783,  784,  785,  786,  787,  788,  688,  789,  790,  791,
 +      792,  689,  793,  794,  795,  796,  797,  798,  799,  800,
 +      801,  802,  803,  782,  804,  805,  806,  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,  836,  813,  837,  838,
 +      839,  840,  841,  842,  843,  844,  822,  845,  846,  847,
 +      848,  849,  850,  851,  852,  853,  854,  855,  856,  857,
 +      858,  859,  860,  861,  862,  863,  864,  865,  866,  867,
 +
 +      868,  869,  870,  871,  872,  873,  874,  875,  876,  877,
 +      878,  855,  879,  880,  881,  882,  883,  884,  885,  886,
 +      887,  888,  889,  890,  891,  892,  893,  894,  895,  896,
 +      897,  898,  899,  900,  901,  902,  903,  904,  905,  906,
 +      907,   64,  751,  750,  749,  748,  747,  746,  745,  744,
 +      743,  742,  741,  740,  739,  738,  737,  736,  735,  734,
 +      733,  732,  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,  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,  643,  642,  641,  640,  639,  638,
 +      637,  636,  635,  634,  633,  632,  631,  630,  629,  628,
 +      627,  626,  623,  622,  621,  620,  619,  618,  617,  616,
 +      615,  614,  613,  612,  611,  610,  609,  608,  605,  604,
 +      603,  602,  601,  598,  594,  593,  592,  591,  590,  589,
 +      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
 +
 +      578,  577,  576,  573,  572,  571,  570,  569,  566,  565,
 +      564,  563,  562,  561,  560,  559,  558,  557,  556,  555,
 +      554,  553,  552,  551,  550,  549,  548,  547,  546,  545,
 +      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
 +      534,  533,  532,  531,  530,  529,  528,  527,  524,  523,
 +      522,  521,  520,  519,  516,  515,  514,  513,  512,  511,
 +      510,  509,  508,  507,  506,  505,  504,  503,  502,  501,
 +      500,  499,  498,  497,  496,  495,  494,  493,  492,  491,
 +      490,  489,  488,  487,  486,  485,  484,  483,  482,  481,
 +      480,  479,  478,  477,  474,  471,  470,  469,  468,  467,
 +
 +      466,  465,  464,  463,  462,  461,  460,  459,  458,  456,
 +      455,  454,  453,  452,  451,  450,  449,  448,  447,  446,
 +      445,  444,  443,  440,  439,  438,  437,  436,  435,  434,
 +      433,  432,  431,  430,  429,  428,  427,  426,  425,  424,
 +      423,  422,  421,  420,  419,  418,  417,  416,  415,  414,
 +      413,  412,  411,  410,  407,  406,  405,  404,  403,  402,
 +      401,  400,  399,  398,  397,  396,  395,  394,  393,  392,
 +      391,  390,  380,  379,  378,  377,  376,  375,  374,  373,
 +      372,  371,  370,  369,  364,  363,  362,  361,  360,  359,
 +      358,  355,  354,  353,  352,  351,  350,  349,  348,  345,
 +
 +      344,  343,  342,  341,  340,  339,  338,  337,  336,  335,
 +      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
 +      324,  323,  322,  321,  320,  319,  318,  317,  316,  312,
 +      311,  310,  309,  308,  307,  306,  305,  302,  301,  298,
 +      297,  296,  295,  294,  293,  292,  291,  290,  289,  286,
 +      283,  282,  281,  280,  279,  278,  277,  276,  275,  274,
 +      273,  269,  268,  267,  266,  260,  259,  258,  257,  256,
 +      253,  252,  251,  248,  247,  246,  242,  241,  240,  239,
 +      238,  237,  229,  228,  227,  222,  221,  220,  219,  218,
 +      217,  216,  213,  212,  207,  206,  205,  204,  203,  200,
 +
 +      199,  198,  197,  196,  195,  194,  191,  187,  186,  185,
 +      184,  183,  182,  178,  177,  170,  169,  168,  165,  162,
 +      161,  160,  159,  158,  157,  156,  155,  149,  148,  147,
 +      146,  122,  112,  104,   63,   62,   61,   48,   47,   46,
 +      908,    3,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908
 +    } ;
 +
 +static yyconst flex_int16_t yy_chk[1116] =
++=======
+        54,  203,  204,   55,   96,   50,   52,   56,   58,   72,
+        59,   59,   59,   59,   59,  757,   57,   65,   66,   67,
+ 
+        73,   97,  163,   75,   60,  758,   68,   76,  164,   74,
+        77,   78,   69,   70,   71,  166,   79,   80,   82,   81,
+       113,  144,   83,  167,  114,   85,  145,   86,   90,   60,
+        84,   87,  101,  286,   88,   98,   91,   89,   92,   93,
+        99,   94,  287,  210,  105,  109,  759,   95,  106,  102,
+       100,  211,  107,  289,  115,  212,  103,  108,  116,  110,
+       213,  117,  118,  225,  119,  123,  290,  120,  111,  124,
+       121,  188,  137,  138,  127,  760,  128,  189,  125,  129,
+       130,  190,  226,  131,  126,  575,  132,  133,  139,  576,
+       134,  135,  227,  761,  228,  136,   54,   54,   54,   54,
+ 
+        54,  179,  180,  237,  238,  140,  181,  251,  252,  141,
+       150,  151,  151,  151,  151,  151,  216,  256,  142,  317,
+       301,  143,  217,  302,   58,  152,   59,   59,   59,   59,
+        59,  232,  257,  318,  233,  150,  319,  153,  153,  234,
+        60,  154,  154,  154,  154,  154,  272,  235,  171,  236,
+       152,  172,  173,  192,  174,  175,  762,  245,  176,  193,
+       246,  194,  273,  274,  350,   60,  247,  763,  263,  263,
+       351,  195,  264,  264,  264,  264,  264,  151,  151,  151,
+       151,  151,  266,  266,  305,  306,  267,  267,  267,  267,
+       267,  265,  154,  154,  154,  154,  154,  154,  154,  154,
+ 
+       154,  154,  360,  412,  369,  477,  413,  370,  446,  447,
+       385,  478,  532,  386,  361,  533,  265,  371,  387,  372,
+       523,  524,  388,  607,  389,  390,  764,  608,  391,  264,
+       264,  264,  264,  264,  264,  264,  264,  264,  264,  392,
+       392,  462,  765,  393,  393,  393,  393,  393,  267,  267,
+       267,  267,  267,  267,  267,  267,  267,  267,  634,  480,
+       393,  393,  393,  393,  393,  462,  481,  603,  627,  615,
+       482,  393,  393,  393,  393,  393,  582,  616,  604,  655,
+       635,  583,  634,  605,  699,  628,  766,  700,  767,  768,
+       769,  770,  771,  772,  773,  774,  656,  701,  775,  776,
+ 
+       777,  778,  702,  655,  779,  780,  781,  782,  783,  699,
+       784,  785,  700,  786,  787,  788,  789,  790,  791,  792,
+       793,  701,  794,  795,  796,  797,  702,  798,  799,  800,
+       801,  802,  803,  804,  805,  806,  807,  808,  809,  810,
+       811,  812,  813,  814,  815,  816,  817,  818,  819,  820,
+       821,  822,  823,  800,  824,  825,  826,  827,  828,  829,
+       830,  831,  832,  833,  834,  835,  836,  837,  838,  839,
+       840,  841,  842,  843,  844,  845,  846,  847,  848,  849,
+       850,  851,  852,  853,  854,  855,  832,  856,  857,  858,
+       859,  860,  861,  862,  863,  841,  864,  865,  866,  867,
+ 
+       868,  869,  870,  871,  872,  873,  874,  875,  876,  877,
+       878,  879,  880,  881,  882,  883,  884,  885,  886,  887,
+       888,  889,  890,  891,  892,  893,  894,  895,  896,  897,
+       898,  899,  876,  900,  901,  902,  903,  904,  905,  906,
+       907,  908,  909,  910,  911,  912,  913,  914,  915,  916,
+       917,  918,  919,  920,  921,  922,  923,  924,  925,  926,
+       927,  928,  929,  930,   64,  756,  755,  754,  753,  752,
+       751,  750,  749,  748,  747,  746,  745,  744,  743,  742,
+       741,  740,  739,  738,  737,  736,  735,  734,  733,  732,
+       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,  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,  654,  653,  652,  651,  650,  649,  648,  647,  646,
+       645,  644,  643,  642,  641,  640,  639,  638,  637,  636,
+       633,  632,  631,  630,  629,  626,  625,  624,  623,  622,
+       621,  620,  619,  618,  617,  614,  613,  612,  611,  610,
+ 
+       609,  606,  602,  601,  600,  599,  598,  597,  596,  595,
+       594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
+       584,  581,  580,  579,  578,  577,  574,  573,  572,  571,
+       570,  569,  568,  567,  566,  565,  564,  563,  562,  561,
+       560,  559,  558,  557,  556,  555,  554,  553,  552,  551,
+       550,  549,  548,  547,  546,  545,  544,  543,  542,  541,
+       540,  539,  538,  537,  536,  535,  534,  531,  530,  529,
+       528,  527,  526,  525,  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,
+ 
+       496,  495,  494,  493,  492,  491,  490,  489,  488,  487,
+       486,  485,  484,  483,  479,  476,  475,  474,  473,  472,
+       471,  470,  469,  468,  467,  466,  465,  464,  463,  461,
+       460,  459,  458,  457,  456,  455,  454,  453,  452,  451,
+       450,  449,  448,  445,  444,  443,  442,  441,  440,  439,
+       438,  437,  436,  435,  434,  433,  432,  431,  430,  429,
+       428,  427,  426,  425,  424,  423,  422,  421,  420,  419,
+       418,  417,  416,  415,  414,  411,  410,  409,  408,  407,
+       406,  405,  404,  403,  402,  401,  400,  399,  398,  397,
+       396,  395,  394,  384,  383,  382,  381,  380,  379,  378,
+ 
+       377,  376,  375,  374,  373,  368,  367,  366,  365,  364,
+       363,  362,  359,  358,  357,  356,  355,  354,  353,  352,
+       349,  348,  347,  346,  345,  344,  343,  342,  341,  340,
+       339,  338,  337,  336,  335,  334,  333,  332,  331,  330,
+       329,  328,  327,  326,  325,  324,  323,  322,  321,  320,
+       316,  315,  314,  313,  312,  311,  310,  309,  308,  307,
+       304,  303,  300,  299,  298,  297,  296,  295,  294,  293,
+       292,  291,  288,  285,  284,  283,  282,  281,  280,  279,
+       278,  277,  276,  275,  271,  270,  269,  268,  262,  261,
+       260,  259,  258,  255,  254,  253,  250,  249,  248,  244,
+ 
+       243,  242,  241,  240,  239,  231,  230,  229,  224,  223,
+       222,  221,  220,  219,  218,  215,  214,  209,  208,  207,
+       206,  205,  202,  201,  200,  199,  198,  197,  196,  191,
+       187,  186,  185,  184,  183,  182,  178,  177,  170,  169,
+       168,  165,  162,  161,  160,  159,  158,  157,  156,  155,
+       149,  148,  147,  146,  122,  112,  104,   63,   62,   61,
+        48,   47,   46,  931,    3,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+ 
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931
+     } ;
+ 
+ static yyconst flex_int16_t yy_chk[1139] =
++>>>>>>> upstream/2.9.3+dfsg1
      {   0,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@@ -883,120 -894,122 +1337,239 @@@
          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,
++<<<<<<< HEAD
 +       16,   16,   16,   16,   16,  704,   15,   22,   22,   22,
 +
 +       23,   28,   73,   24,   16,  705,   22,   24,   73,   23,
 +       24,   24,   22,   22,   22,   75,   24,   24,   25,   24,
 +       36,   42,   25,   75,   36,   26,   42,   26,   27,   16,
 +       25,   26,   30,  171,   26,   29,   27,   26,   27,   27,
 +       29,   27,  171,  106,   33,   34,  706,   27,   33,   30,
 +       29,  106,   33,  120,   37,  120,   30,   33,   37,   34,
 +       91,   37,   37,  119,   37,   39,   91,   37,   34,   39,
 +       37,   89,   41,   41,   40,  707,   40,   89,   39,   40,
 +       40,   89,  119,   40,   39,  708,   40,   40,   41,  107,
 +       40,   40,  125,  125,  107,   40,   54,   54,   54,   54,
 +
 +       54,   82,   82,  136,  136,   41,   82,  173,  142,   41,
 +       54,   58,   58,   58,   58,   58,  110,  709,   41,  711,
 +      173,   41,  110,  142,   59,   58,   59,   59,   59,   59,
 +       59,  124,  712,  185,  124,   54,  185,   60,   60,  124,
 +       59,   60,   60,   60,   60,   60,  365,  124,   79,  124,
 +       58,   79,   79,  132,   79,   79,  132,  365,   79,  188,
 +      188,  486,  132,  150,  150,   59,  486,  150,  150,  150,
 +      150,  150,  151,  151,  151,  151,  151,  152,  152,  329,
 +      329,  152,  152,  152,  152,  152,  151,  153,  153,  153,
 +      153,  153,  154,  154,  154,  154,  154,  159,  199,  230,
 +
 +      288,  362,  344,  288,  239,  230,  247,  362,  713,  247,
 +      525,  151,  199,  159,  159,  199,  239,  260,  525,  247,
 +      260,  247,  417,  417,  428,  260,  344,  428,  714,  260,
 +      479,  260,  260,  716,  479,  260,  261,  261,  261,  261,
 +      261,  262,  262,  262,  262,  262,  263,  263,  717,  718,
 +      263,  263,  263,  263,  263,  264,  264,  264,  264,  264,
 +      265,  265,  265,  265,  265,  388,  388,  388,  388,  388,
 +      389,  389,  389,  389,  389,  513,  517,  549,  574,  623,
 +      517,  719,  623,  720,  721,  722,  513,  723,  724,  726,
 +      727,  513,  623,  728,  729,  574,  731,  623,  733,  549,
 +
 +      734,  549,  574,  735,  623,  736,  737,  623,  738,  739,
 +      740,  741,  744,  745,  746,  747,  623,  749,  750,  752,
 +      753,  623,  754,  755,  757,  758,  759,  761,  764,  765,
 +      766,  767,  768,  739,  769,  770,  772,  773,  774,  775,
 +      776,  777,  779,  780,  782,  783,  784,  786,  787,  789,
 +      791,  792,  793,  794,  795,  796,  798,  801,  802,  803,
 +      804,  806,  807,  808,  809,  810,  811,  780,  813,  814,
 +      816,  817,  818,  820,  822,  824,  793,  825,  826,  827,
 +      828,  831,  832,  833,  834,  835,  837,  838,  839,  841,
 +      842,  843,  844,  845,  846,  847,  848,  849,  850,  851,
 +
 +      852,  854,  855,  856,  857,  858,  860,  861,  863,  865,
 +      866,  838,  867,  868,  869,  870,  874,  875,  876,  877,
 +      878,  879,  880,  882,  883,  885,  886,  887,  888,  889,
 +      890,  892,  893,  894,  895,  896,  898,  902,  903,  904,
 +      905,  909,  703,  701,  700,  699,  696,  695,  694,  693,
 +      692,  691,  690,  689,  688,  687,  686,  685,  682,  681,
 +      680,  676,  675,  672,  671,  670,  669,  667,  666,  663,
 +      662,  661,  660,  659,  658,  657,  655,  654,  653,  652,
 +      651,  650,  649,  648,  647,  646,  645,  644,  643,  642,
 +      641,  640,  638,  637,  636,  633,  632,  631,  630,  628,
 +
 +      627,  626,  625,  624,  622,  621,  620,  619,  618,  617,
 +      616,  615,  614,  613,  612,  611,  610,  609,  608,  607,
 +      606,  605,  604,  602,  601,  600,  598,  597,  596,  595,
 +      594,  593,  592,  591,  588,  587,  586,  585,  584,  583,
 +      580,  579,  576,  575,  573,  572,  571,  570,  569,  568,
 +      567,  566,  565,  562,  559,  558,  557,  556,  554,  552,
 +      551,  550,  548,  546,  544,  543,  542,  541,  539,  537,
 +      536,  535,  532,  531,  530,  529,  528,  526,  524,  523,
 +      522,  520,  518,  514,  512,  511,  510,  509,  508,  507,
 +      506,  505,  504,  502,  501,  500,  498,  497,  494,  493,
 +
 +      491,  489,  487,  485,  483,  482,  481,  480,  478,  477,
 +      476,  475,  474,  472,  471,  470,  469,  468,  467,  464,
 +      463,  462,  461,  460,  459,  458,  457,  456,  455,  453,
 +      451,  450,  449,  447,  445,  444,  443,  442,  441,  439,
 +      438,  437,  435,  434,  432,  431,  430,  429,  427,  425,
 +      423,  422,  421,  418,  416,  415,  414,  413,  412,  411,
 +      410,  409,  408,  407,  406,  405,  404,  403,  402,  401,
 +      400,  399,  397,  395,  394,  393,  392,  391,  386,  385,
 +      383,  380,  379,  378,  377,  376,  375,  374,  371,  370,
 +      369,  368,  367,  366,  363,  361,  360,  357,  356,  355,
 +
 +      354,  353,  352,  351,  350,  349,  348,  347,  346,  343,
 +      342,  341,  340,  339,  338,  337,  336,  335,  334,  333,
 +      332,  331,  330,  328,  325,  324,  323,  322,  321,  320,
 +      319,  318,  315,  314,  313,  312,  311,  309,  308,  307,
 +      305,  303,  302,  301,  300,  299,  298,  296,  295,  294,
 +      293,  292,  290,  289,  287,  286,  285,  284,  283,  282,
 +      280,  278,  277,  276,  275,  274,  272,  271,  270,  269,
 +      268,  266,  259,  258,  257,  256,  255,  254,  253,  252,
 +      251,  250,  249,  248,  246,  245,  244,  243,  242,  241,
 +      240,  238,  237,  236,  235,  234,  233,  232,  231,  229,
 +
 +      228,  227,  226,  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,  198,
 +      197,  195,  194,  193,  192,  191,  190,  187,  186,  184,
 +      183,  182,  181,  180,  179,  178,  176,  175,  174,  172,
 +      170,  169,  168,  167,  166,  165,  164,  163,  162,  161,
 +      160,  158,  157,  156,  155,  147,  146,  145,  144,  143,
 +      141,  140,  139,  135,  134,  133,  131,  130,  129,  128,
 +      127,  126,  123,  122,  121,  117,  116,  115,  114,  113,
 +      112,  111,  109,  108,  105,  104,  103,  101,  100,   98,
 +
 +       97,   96,   95,   94,   93,   92,   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,   35,   32,   21,   20,   19,   11,    9,    7,
 +        3,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +
 +      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
 +      908,  908,  908,  908,  908
++=======
+        16,   16,   16,   16,   16,  703,   15,   22,   22,   22,
+ 
+        23,   28,   73,   24,   16,  704,   22,   24,   73,   23,
+        24,   24,   22,   22,   22,   75,   24,   24,   25,   24,
+        36,   42,   25,   75,   36,   26,   42,   26,   27,   16,
+        25,   26,   30,  171,   26,   29,   27,   26,   27,   27,
+        29,   27,  171,  106,   33,   34,  705,   27,   33,   30,
+        29,  106,   33,  173,   37,  107,   30,   33,   37,   34,
+       107,   37,   37,  119,   37,   39,  173,   37,   34,   39,
+        37,   89,   41,   41,   40,  706,   40,   89,   39,   40,
+        40,   89,  119,   40,   39,  485,   40,   40,   41,  485,
+        40,   40,  120,  707,  120,   40,   54,   54,   54,   54,
+ 
+        54,   82,   82,  125,  125,   41,   82,  136,  136,   41,
+        54,   58,   58,   58,   58,   58,  110,  142,   41,  201,
+       185,   41,  110,  185,   59,   58,   59,   59,   59,   59,
+        59,  124,  142,  201,  124,   54,  201,   60,   60,  124,
+        59,   60,   60,   60,   60,   60,  159,  124,   79,  124,
+        58,   79,   79,   91,   79,   79,  708,  132,   79,   91,
+       132,   91,  159,  159,  232,   59,  132,  709,  150,  150,
+       232,   91,  150,  150,  150,  150,  150,  151,  151,  151,
+       151,  151,  152,  152,  188,  188,  152,  152,  152,  152,
+       152,  151,  153,  153,  153,  153,  153,  154,  154,  154,
+ 
+       154,  154,  241,  290,  249,  366,  290,  249,  333,  333,
+       262,  366,  433,  262,  241,  433,  151,  249,  262,  249,
+       421,  421,  262,  523,  262,  262,  712,  523,  262,  263,
+       263,  263,  263,  263,  264,  264,  264,  264,  264,  265,
+       265,  348,  713,  265,  265,  265,  265,  265,  266,  266,
+       266,  266,  266,  267,  267,  267,  267,  267,  556,  369,
+       392,  392,  392,  392,  392,  348,  369,  519,  548,  532,
+       369,  393,  393,  393,  393,  393,  492,  532,  519,  582,
+       556,  492,  556,  519,  633,  548,  714,  633,  715,  717,
+       718,  719,  720,  721,  722,  723,  582,  633,  725,  726,
+ 
+       727,  728,  633,  582,  730,  731,  732,  733,  734,  633,
+       735,  736,  633,  737,  738,  740,  741,  742,  743,  744,
+       746,  633,  748,  749,  751,  752,  633,  753,  754,  755,
+       756,  757,  760,  761,  762,  763,  766,  767,  769,  770,
+       771,  772,  774,  775,  776,  778,  781,  782,  783,  784,
+       785,  786,  787,  755,  789,  790,  791,  792,  793,  794,
+       795,  797,  798,  800,  801,  802,  804,  805,  807,  809,
+       810,  811,  812,  813,  814,  816,  819,  820,  821,  822,
+       824,  825,  826,  827,  828,  829,  798,  830,  832,  833,
+       835,  836,  837,  839,  841,  811,  843,  844,  845,  846,
+ 
+       847,  850,  851,  852,  853,  854,  855,  857,  858,  859,
+       861,  862,  863,  864,  865,  866,  867,  868,  869,  870,
+       871,  872,  873,  875,  876,  877,  878,  879,  881,  882,
+       884,  886,  858,  887,  888,  889,  890,  891,  892,  896,
+       897,  898,  900,  901,  902,  903,  905,  906,  908,  909,
+       910,  911,  912,  913,  915,  916,  917,  918,  919,  921,
+       925,  926,  927,  928,  932,  702,  701,  700,  699,  698,
+       695,  694,  693,  692,  688,  687,  684,  683,  682,  681,
+       679,  678,  677,  674,  673,  672,  671,  670,  669,  668,
+       666,  665,  664,  663,  662,  661,  660,  659,  658,  657,
+ 
+       656,  655,  654,  653,  652,  651,  649,  648,  647,  645,
+       643,  642,  641,  640,  638,  637,  636,  635,  634,  632,
+       631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
+       621,  620,  619,  618,  617,  616,  615,  614,  613,  612,
+       610,  609,  608,  606,  605,  604,  603,  602,  601,  600,
+       599,  596,  595,  594,  593,  592,  591,  588,  587,  584,
+       583,  581,  580,  579,  578,  577,  576,  575,  574,  573,
+       571,  569,  566,  565,  564,  563,  561,  559,  558,  557,
+       555,  553,  551,  550,  549,  546,  544,  543,  542,  539,
+       538,  537,  536,  535,  533,  531,  530,  529,  528,  526,
+ 
+       524,  520,  518,  517,  516,  515,  514,  513,  512,  511,
+       510,  508,  507,  506,  504,  503,  500,  499,  497,  495,
+       493,  491,  489,  488,  487,  486,  484,  483,  482,  481,
+       480,  479,  477,  476,  475,  474,  473,  472,  469,  468,
+       467,  466,  465,  464,  463,  462,  461,  460,  458,  456,
+       455,  454,  452,  450,  449,  448,  447,  446,  444,  443,
+       442,  440,  439,  437,  436,  435,  434,  432,  430,  429,
+       427,  426,  425,  422,  420,  419,  418,  417,  416,  415,
+       414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
+       404,  403,  401,  399,  398,  397,  396,  395,  390,  389,
+ 
+       387,  384,  383,  382,  381,  380,  379,  378,  375,  374,
+       373,  372,  371,  370,  367,  365,  364,  361,  360,  359,
+       358,  357,  356,  355,  354,  353,  352,  351,  350,  347,
+       346,  345,  344,  343,  342,  341,  340,  339,  338,  337,
+       336,  335,  334,  332,  329,  328,  327,  326,  325,  324,
+       323,  322,  319,  318,  317,  316,  315,  313,  312,  310,
+       309,  307,  305,  304,  303,  302,  301,  300,  298,  297,
+       296,  295,  294,  292,  291,  289,  288,  287,  286,  285,
+       284,  282,  280,  279,  278,  277,  276,  274,  273,  272,
+       271,  270,  268,  261,  260,  259,  258,  257,  256,  255,
+ 
+       254,  253,  252,  251,  250,  248,  247,  246,  245,  244,
+       243,  242,  240,  239,  238,  237,  236,  235,  234,  233,
+       231,  230,  229,  228,  227,  226,  225,  224,  223,  222,
+       221,  220,  219,  218,  217,  216,  215,  214,  213,  212,
+       211,  210,  209,  208,  207,  206,  205,  204,  203,  202,
+       200,  199,  197,  196,  195,  194,  193,  192,  191,  190,
+       187,  186,  184,  183,  182,  181,  180,  179,  178,  176,
+       175,  174,  172,  170,  169,  168,  167,  166,  165,  164,
+       163,  162,  161,  160,  158,  157,  156,  155,  147,  146,
+       145,  144,  143,  141,  140,  139,  135,  134,  133,  131,
+ 
+       130,  129,  128,  127,  126,  123,  122,  121,  117,  116,
+       115,  114,  113,  112,  111,  109,  108,  105,  104,  103,
+       101,  100,   98,   97,   96,   95,   94,   93,   92,   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,   35,   32,   21,   20,   19,
+        11,    9,    7,    3,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+ 
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+       931,  931,  931,  931,  931,  931,  931,  931
++>>>>>>> upstream/2.9.3+dfsg1
      } ;
  
  static yy_state_type yy_last_accepting_state;
@@@ -1076,7 -1089,7 +1649,11 @@@ void   skipline(void)
  #define YY_NO_UNISTD_H
  #endif
  
++<<<<<<< HEAD
 +#line 1080 "Gmsh.yy.cpp"
++=======
+ #line 1093 "Gmsh.yy.cpp"
++>>>>>>> upstream/2.9.3+dfsg1
  
  #define INITIAL 0
  
@@@ -1261,7 -1274,7 +1838,11 @@@ YY_DEC
  #line 72 "Gmsh.l"
  
  
++<<<<<<< HEAD
 +#line 1265 "Gmsh.yy.cpp"
++=======
+ #line 1278 "Gmsh.yy.cpp"
++>>>>>>> upstream/2.9.3+dfsg1
  
  	if ( !(yy_init) )
  		{
@@@ -1314,13 -1327,13 +1895,21 @@@ yy_match
  			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  				{
  				yy_current_state = (int) yy_def[yy_current_state];
++<<<<<<< HEAD
 +				if ( yy_current_state >= 909 )
++=======
+ 				if ( yy_current_state >= 932 )
++>>>>>>> upstream/2.9.3+dfsg1
  					yy_c = yy_meta[(unsigned int) yy_c];
  				}
  			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
  			++yy_cp;
  			}
++<<<<<<< HEAD
 +		while ( yy_base[yy_current_state] != 1042 );
++=======
+ 		while ( yy_base[yy_current_state] != 1065 );
++>>>>>>> upstream/2.9.3+dfsg1
  
  yy_find_action:
  		yy_act = yy_accept[yy_current_state];
@@@ -1778,500 -1791,520 +2367,1005 @@@ return tField
  case 87:
  YY_RULE_SETUP
  #line 166 "Gmsh.l"
++<<<<<<< HEAD
 +return tFileExists;
++=======
+ return tFind;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 88:
  YY_RULE_SETUP
  #line 167 "Gmsh.l"
++<<<<<<< HEAD
 +return tFloor;
++=======
+ return tFileExists;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 89:
  YY_RULE_SETUP
  #line 168 "Gmsh.l"
++<<<<<<< HEAD
 +return tFmod;
++=======
+ return tFixRelativePath;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 90:
  YY_RULE_SETUP
  #line 169 "Gmsh.l"
++<<<<<<< HEAD
 +return tFor;
++=======
+ return tFloor;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 91:
  YY_RULE_SETUP
  #line 170 "Gmsh.l"
++<<<<<<< HEAD
 +return tFunction;
 +	YY_BREAK
 +case 92:
 +YY_RULE_SETUP
 +#line 172 "Gmsh.l"
 +return tGetEnv;
 +	YY_BREAK
 +case 93:
 +YY_RULE_SETUP
 +#line 173 "Gmsh.l"
 +return tGetString;
++=======
+ return tFmod;
+ 	YY_BREAK
+ case 92:
+ YY_RULE_SETUP
+ #line 171 "Gmsh.l"
+ return tFor;
+ 	YY_BREAK
+ case 93:
+ YY_RULE_SETUP
+ #line 172 "Gmsh.l"
+ return tFunction;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 94:
  YY_RULE_SETUP
  #line 174 "Gmsh.l"
++<<<<<<< HEAD
 +return tGetValue;
++=======
+ return tGetEnv;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 95:
  YY_RULE_SETUP
  #line 175 "Gmsh.l"
++<<<<<<< HEAD
 +return tGMSH_MAJOR_VERSION;
++=======
+ return tGetString;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 96:
  YY_RULE_SETUP
  #line 176 "Gmsh.l"
++<<<<<<< HEAD
 +return tGMSH_MINOR_VERSION;
++=======
+ return tGetValue;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 97:
  YY_RULE_SETUP
  #line 177 "Gmsh.l"
++<<<<<<< HEAD
 +return tGMSH_PATCH_VERSION;
 +	YY_BREAK
 +case 98:
 +YY_RULE_SETUP
 +#line 179 "Gmsh.l"
 +return tHide;
 +	YY_BREAK
 +case 99:
 +YY_RULE_SETUP
 +#line 180 "Gmsh.l"
 +return tHole;
++=======
+ return tGMSH_MAJOR_VERSION;
+ 	YY_BREAK
+ case 98:
+ YY_RULE_SETUP
+ #line 178 "Gmsh.l"
+ return tGMSH_MINOR_VERSION;
+ 	YY_BREAK
+ case 99:
+ YY_RULE_SETUP
+ #line 179 "Gmsh.l"
+ return tGMSH_PATCH_VERSION;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 100:
  YY_RULE_SETUP
  #line 181 "Gmsh.l"
++<<<<<<< HEAD
 +return tHomology;
++=======
+ return tHide;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 101:
  YY_RULE_SETUP
  #line 182 "Gmsh.l"
++<<<<<<< HEAD
 +return tHypot;
 +	YY_BREAK
 +case 102:
 +YY_RULE_SETUP
 +#line 184 "Gmsh.l"
 +return tIn;
 +	YY_BREAK
 +case 103:
 +YY_RULE_SETUP
 +#line 185 "Gmsh.l"
 +return tIf;
++=======
+ return tHole;
+ 	YY_BREAK
+ case 102:
+ YY_RULE_SETUP
+ #line 183 "Gmsh.l"
+ return tHomology;
+ 	YY_BREAK
+ case 103:
+ YY_RULE_SETUP
+ #line 184 "Gmsh.l"
+ return tHypot;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 104:
  YY_RULE_SETUP
  #line 186 "Gmsh.l"
++<<<<<<< HEAD
 +return tIntersect;
++=======
+ return tIn;
++>>>>>>> upstream/2.9.3+dfsg1
  	YY_BREAK
  case 105:
  YY_RULE_SETUP
  #line 187 "Gmsh.l"
++<<<<<<< HEAD
 +return tInterpolationScheme;
 +	YY_BREAK
 +case 106:
 +YY_RULE_SETUP
 +#line 189 "Gmsh.l"
 +return tNurbsKnots;
 +	YY_BREAK
 +case 107:
 +YY_RULE_SETUP
 +#line 191 "Gmsh.l"
 +return tLength;
++=======
+ return tIf;
+ 	YY_BREAK
+ case 106:
+ YY_RULE_SETUP
+ #line 188 "Gmsh.l"
+ return tIntersect;
+ 	YY_BREAK
+ case 107:
+ YY_RULE_SETUP
+ #line 189 "Gmsh.l"
+ return tInterpolationScheme;
  	YY_BREAK
  case 108:
  YY_RULE_SETUP
+ #line 191 "Gmsh.l"
+ return tNurbsKnots;
+ 	YY_BREAK
+ case 109:
+ YY_RULE_SETUP
+ #line 193 "Gmsh.l"
+ return tLength;
+ 	YY_BREAK
+ case 110:
+ YY_RULE_SETUP
+ #line 194 "Gmsh.l"
+ return tLine;
+ 	YY_BREAK
+ case 111:
+ YY_RULE_SETUP
+ #line 195 "Gmsh.l"
+ return tList;
+ 	YY_BREAK
+ case 112:
+ YY_RULE_SETUP
+ #line 196 "Gmsh.l"
+ return tLog;
+ 	YY_BREAK
+ case 113:
+ YY_RULE_SETUP
+ #line 197 "Gmsh.l"
+ return tLog10;
++>>>>>>> upstream/2.9.3+dfsg1
++	YY_BREAK
++case 114:
++YY_RULE_SETUP
++<<<<<<< HEAD
 +#line 192 "Gmsh.l"
 +return tLine;
 +	YY_BREAK
 +case 109:
 +YY_RULE_SETUP
 +#line 193 "Gmsh.l"
 +return tList;
 +	YY_BREAK
 +case 110:
 +YY_RULE_SETUP
 +#line 194 "Gmsh.l"
 +return tLog;
 +	YY_BREAK
 +case 111:
 +YY_RULE_SETUP
 +#line 195 "Gmsh.l"
 +return tLog10;
 +	YY_BREAK
 +case 112:
 +YY_RULE_SETUP
 +#line 196 "Gmsh.l"
 +return tLayers;
 +	YY_BREAK
 +case 113:
 +YY_RULE_SETUP
 +#line 197 "Gmsh.l"
 +return tLevelset;
  	YY_BREAK
  case 114:
  YY_RULE_SETUP
 +#line 199 "Gmsh.l"
 +return tMeshAlgorithm;
 +	YY_BREAK
 +case 115:
 +YY_RULE_SETUP
 +#line 200 "Gmsh.l"
 +return tModulo;
 +	YY_BREAK
 +case 116:
 +YY_RULE_SETUP
 +#line 201 "Gmsh.l"
 +return tMPI_Rank;
 +	YY_BREAK
 +case 117:
 +YY_RULE_SETUP
 +#line 202 "Gmsh.l"
 +return tMPI_Size;
 +	YY_BREAK
 +case 118:
 +YY_RULE_SETUP
 +#line 203 "Gmsh.l"
 +return tMemory;
 +	YY_BREAK
 +case 119:
 +YY_RULE_SETUP
 +#line 205 "Gmsh.l"
 +return tNurbs;
 +	YY_BREAK
 +case 120:
 +YY_RULE_SETUP
 +#line 207 "Gmsh.l"
 +return tOnelabAction;
 +	YY_BREAK
 +case 121:
 +YY_RULE_SETUP
 +#line 208 "Gmsh.l"
 +return tNurbsOrder;
 +	YY_BREAK
 +case 122:
 +YY_RULE_SETUP
 +#line 210 "Gmsh.l"
 +return tPeriodic;
 +	YY_BREAK
 +case 123:
 +YY_RULE_SETUP
 +#line 211 "Gmsh.l"
 +return tPhysical;
 +	YY_BREAK
 +case 124:
 +YY_RULE_SETUP
 +#line 212 "Gmsh.l"
 +return tPi;
 +	YY_BREAK
 +case 125:
 +YY_RULE_SETUP
 +#line 213 "Gmsh.l"
 +return tPlane;
 +	YY_BREAK
 +case 126:
 +YY_RULE_SETUP
 +#line 214 "Gmsh.l"
 +return tPoint;
 +	YY_BREAK
 +case 127:
 +YY_RULE_SETUP
 +#line 215 "Gmsh.l"
 +return tParametric;
 +	YY_BREAK
 +case 128:
 +YY_RULE_SETUP
 +#line 216 "Gmsh.l"
 +return tPolarSphere;
 +	YY_BREAK
 +case 129:
 +YY_RULE_SETUP
 +#line 217 "Gmsh.l"
 +return tPrintf;
 +	YY_BREAK
 +case 130:
 +YY_RULE_SETUP
 +#line 218 "Gmsh.l"
 +return tPlugin;
 +	YY_BREAK
 +case 131:
 +YY_RULE_SETUP
 +#line 220 "Gmsh.l"
 +return tQuadTriAddVerts;
 +	YY_BREAK
 +case 132:
 +YY_RULE_SETUP
 +#line 221 "Gmsh.l"
 +return tQuadTriNoNewVerts;
 +	YY_BREAK
 +case 133:
 +YY_RULE_SETUP
 +#line 223 "Gmsh.l"
 +return tQuadTriDbl;
 +	YY_BREAK
 +case 134:
 +YY_RULE_SETUP
 +#line 224 "Gmsh.l"
 +return tQuadTriSngl;
 +	YY_BREAK
 +case 135:
 +YY_RULE_SETUP
 +#line 226 "Gmsh.l"
 +return tRecombine;
 +	YY_BREAK
 +case 136:
 +YY_RULE_SETUP
 +#line 227 "Gmsh.l"
 +return tRecombLaterals;
 +	YY_BREAK
 +case 137:
 +YY_RULE_SETUP
 +#line 228 "Gmsh.l"
 +return tRecursive;
 +	YY_BREAK
 +case 138:
 +YY_RULE_SETUP
 +#line 229 "Gmsh.l"
 +return tRotate;
 +	YY_BREAK
 +case 139:
 +YY_RULE_SETUP
 +#line 230 "Gmsh.l"
 +return tRound;
 +	YY_BREAK
 +case 140:
 +YY_RULE_SETUP
 +#line 231 "Gmsh.l"
 +return tRuled;
 +	YY_BREAK
 +case 141:
 +YY_RULE_SETUP
 +#line 232 "Gmsh.l"
 +return tRand;
 +	YY_BREAK
 +case 142:
 +YY_RULE_SETUP
 +#line 233 "Gmsh.l"
 +return tRefineMesh;
 +	YY_BREAK
 +case 143:
 +YY_RULE_SETUP
 +#line 234 "Gmsh.l"
 +return tRelocateMesh;
 +	YY_BREAK
 +case 144:
 +YY_RULE_SETUP
 +#line 235 "Gmsh.l"
 +return tReturn;
 +	YY_BREAK
 +case 145:
 +YY_RULE_SETUP
 +#line 236 "Gmsh.l"
 +return tReverse;
 +	YY_BREAK
 +case 146:
 +YY_RULE_SETUP
 +#line 238 "Gmsh.l"
 +return tScaleLast;
 +	YY_BREAK
 +case 147:
 +YY_RULE_SETUP
 +#line 239 "Gmsh.l"
 +return tSmoother;
 +	YY_BREAK
 +case 148:
 +YY_RULE_SETUP
 +#line 240 "Gmsh.l"
 +return tSetOrder;
 +	YY_BREAK
 +case 149:
 +YY_RULE_SETUP
 +#line 241 "Gmsh.l"
 +return tSqrt;
 +	YY_BREAK
 +case 150:
 +YY_RULE_SETUP
 +#line 242 "Gmsh.l"
 +return tSin;
 +	YY_BREAK
 +case 151:
 +YY_RULE_SETUP
 +#line 243 "Gmsh.l"
 +return tSinh;
 +	YY_BREAK
 +case 152:
 +YY_RULE_SETUP
 +#line 244 "Gmsh.l"
 +return tSphere;
 +	YY_BREAK
 +case 153:
 +YY_RULE_SETUP
 +#line 245 "Gmsh.l"
 +return tSpline;
 +	YY_BREAK
 +case 154:
 +YY_RULE_SETUP
 +#line 246 "Gmsh.l"
 +return tSplit;
 +	YY_BREAK
 +case 155:
 +YY_RULE_SETUP
 +#line 247 "Gmsh.l"
 +return tSurface;
 +	YY_BREAK
 +case 156:
 +YY_RULE_SETUP
 +#line 248 "Gmsh.l"
 +return tStr;
 +	YY_BREAK
 +case 157:
 +YY_RULE_SETUP
 +#line 249 "Gmsh.l"
 +return tSprintf;
 +	YY_BREAK
 +case 158:
 +YY_RULE_SETUP
 +#line 250 "Gmsh.l"
 +return tStrCat;
 +	YY_BREAK
 +case 159:
 +YY_RULE_SETUP
 +#line 251 "Gmsh.l"
 +return tStrReplace;
 +	YY_BREAK
 +case 160:
 +YY_RULE_SETUP
 +#line 252 "Gmsh.l"
 +return tStrPrefix;
 +	YY_BREAK
 +case 161:
 +YY_RULE_SETUP
 +#line 253 "Gmsh.l"
 +return tStrRelative;
 +	YY_BREAK
 +case 162:
 +YY_RULE_SETUP
 +#line 254 "Gmsh.l"
 +return tStrFind;
 +	YY_BREAK
 +case 163:
 +YY_RULE_SETUP
 +#line 255 "Gmsh.l"
 +return tStrCmp;
 +	YY_BREAK
 +case 164:
 +YY_RULE_SETUP
 +#line 256 "Gmsh.l"
 +return tShow;
 +	YY_BREAK
 +case 165:
 +YY_RULE_SETUP
 +#line 257 "Gmsh.l"
 +return tSymmetry;
 +	YY_BREAK
 +case 166:
 +YY_RULE_SETUP
 +#line 258 "Gmsh.l"
 +return tSyncModel;
 +	YY_BREAK
 +case 167:
 +YY_RULE_SETUP
 +#line 260 "Gmsh.l"
 +return tText2D;
 +	YY_BREAK
 +case 168:
 +YY_RULE_SETUP
 +#line 261 "Gmsh.l"
 +return tText3D;
 +	YY_BREAK
 +case 169:
 +YY_RULE_SETUP
 +#line 262 "Gmsh.l"
 +return tTextAttributes;
 +	YY_BREAK
 +case 170:
 +YY_RULE_SETUP
 +#line 263 "Gmsh.l"
 +return tTime;
 +	YY_BREAK
 +case 171:
 +YY_RULE_SETUP
 +#line 264 "Gmsh.l"
 +return tTransfinite;
 +	YY_BREAK
 +case 172:
 +YY_RULE_SETUP
 +#line 265 "Gmsh.l"
 +return tTransfQuadTri;
 +	YY_BREAK
 +case 173:
 +YY_RULE_SETUP
 +#line 266 "Gmsh.l"
 +return tTranslate;
 +	YY_BREAK
 +case 174:
 +YY_RULE_SETUP
 +#line 267 "Gmsh.l"
 +return tTanh;
 +	YY_BREAK
 +case 175:
 +YY_RULE_SETUP
 +#line 268 "Gmsh.l"
 +return tTan;
 +	YY_BREAK
 +case 176:
 +YY_RULE_SETUP
 +#line 269 "Gmsh.l"
 +return tToday;
 +	YY_BREAK
 +case 177:
 +YY_RULE_SETUP
 +#line 270 "Gmsh.l"
 +return tTotalMemory;
 +	YY_BREAK
 +case 178:
 +YY_RULE_SETUP
 +#line 272 "Gmsh.l"
 +return tUndefineConstant;
 +	YY_BREAK
 +case 179:
 +YY_RULE_SETUP
 +#line 273 "Gmsh.l"
 +return tUsing;
 +	YY_BREAK
 +case 180:
 +YY_RULE_SETUP
 +#line 275 "Gmsh.l"
 +return tVolume;
 +	YY_BREAK
 +case 181:
 +#line 278 "Gmsh.l"
 +case 182:
 +#line 279 "Gmsh.l"
 +case 183:
 +#line 280 "Gmsh.l"
 +case 184:
 +YY_RULE_SETUP
 +#line 280 "Gmsh.l"
 +{ gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; }
 +	YY_BREAK
 +case 185:
 +YY_RULE_SETUP
 +#line 282 "Gmsh.l"
 +{ gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; }
 +	YY_BREAK
 +case 186:
 +YY_RULE_SETUP
 +#line 284 "Gmsh.l"
 +return gmsh_yytext[0];
 +	YY_BREAK
 +case 187:
 +YY_RULE_SETUP
 +#line 286 "Gmsh.l"
 +ECHO;
 +	YY_BREAK
 +#line 2275 "Gmsh.yy.cpp"
++=======
+ #line 198 "Gmsh.l"
+ return tLayers;
+ 	YY_BREAK
+ case 115:
+ YY_RULE_SETUP
+ #line 199 "Gmsh.l"
+ return tLevelset;
+ 	YY_BREAK
+ case 116:
+ YY_RULE_SETUP
+ #line 201 "Gmsh.l"
+ return tMeshAlgorithm;
+ 	YY_BREAK
+ case 117:
+ YY_RULE_SETUP
+ #line 202 "Gmsh.l"
+ return tModulo;
+ 	YY_BREAK
+ case 118:
+ YY_RULE_SETUP
+ #line 203 "Gmsh.l"
+ return tMPI_Rank;
+ 	YY_BREAK
+ case 119:
+ YY_RULE_SETUP
+ #line 204 "Gmsh.l"
+ return tMPI_Size;
+ 	YY_BREAK
+ case 120:
+ YY_RULE_SETUP
+ #line 205 "Gmsh.l"
+ return tMemory;
+ 	YY_BREAK
+ case 121:
+ YY_RULE_SETUP
+ #line 207 "Gmsh.l"
+ return tNurbs;
+ 	YY_BREAK
+ case 122:
+ YY_RULE_SETUP
+ #line 209 "Gmsh.l"
+ return tOnelabAction;
+ 	YY_BREAK
+ case 123:
+ YY_RULE_SETUP
+ #line 210 "Gmsh.l"
+ return tOnelabRun;
+ 	YY_BREAK
+ case 124:
+ YY_RULE_SETUP
+ #line 211 "Gmsh.l"
+ return tNurbsOrder;
+ 	YY_BREAK
+ case 125:
+ YY_RULE_SETUP
+ #line 213 "Gmsh.l"
+ return tPeriodic;
+ 	YY_BREAK
+ case 126:
+ YY_RULE_SETUP
+ #line 214 "Gmsh.l"
+ return tPhysical;
+ 	YY_BREAK
+ case 127:
+ YY_RULE_SETUP
+ #line 215 "Gmsh.l"
+ return tPi;
+ 	YY_BREAK
+ case 128:
+ YY_RULE_SETUP
+ #line 216 "Gmsh.l"
+ return tPlane;
+ 	YY_BREAK
+ case 129:
+ YY_RULE_SETUP
+ #line 217 "Gmsh.l"
+ return tPoint;
+ 	YY_BREAK
+ case 130:
+ YY_RULE_SETUP
+ #line 218 "Gmsh.l"
+ return tParametric;
+ 	YY_BREAK
+ case 131:
+ YY_RULE_SETUP
+ #line 219 "Gmsh.l"
+ return tPolarSphere;
+ 	YY_BREAK
+ case 132:
+ YY_RULE_SETUP
+ #line 220 "Gmsh.l"
+ return tPrintf;
+ 	YY_BREAK
+ case 133:
+ YY_RULE_SETUP
+ #line 221 "Gmsh.l"
+ return tPlugin;
+ 	YY_BREAK
+ case 134:
+ YY_RULE_SETUP
+ #line 223 "Gmsh.l"
+ return tQuadTriAddVerts;
+ 	YY_BREAK
+ case 135:
+ YY_RULE_SETUP
+ #line 224 "Gmsh.l"
+ return tQuadTriNoNewVerts;
+ 	YY_BREAK
+ case 136:
+ YY_RULE_SETUP
+ #line 226 "Gmsh.l"
+ return tQuadTriDbl;
+ 	YY_BREAK
+ case 137:
+ YY_RULE_SETUP
+ #line 227 "Gmsh.l"
+ return tQuadTriSngl;
+ 	YY_BREAK
+ case 138:
+ YY_RULE_SETUP
+ #line 229 "Gmsh.l"
+ return tRecombine;
+ 	YY_BREAK
+ case 139:
+ YY_RULE_SETUP
+ #line 230 "Gmsh.l"
+ return tRecombLaterals;
+ 	YY_BREAK
+ case 140:
+ YY_RULE_SETUP
+ #line 231 "Gmsh.l"
+ return tRecursive;
+ 	YY_BREAK
+ case 141:
+ YY_RULE_SETUP
+ #line 232 "Gmsh.l"
+ return tRotate;
+ 	YY_BREAK
+ case 142:
+ YY_RULE_SETUP
+ #line 233 "Gmsh.l"
+ return tRound;
+ 	YY_BREAK
+ case 143:
+ YY_RULE_SETUP
+ #line 234 "Gmsh.l"
+ return tRuled;
+ 	YY_BREAK
+ case 144:
+ YY_RULE_SETUP
+ #line 235 "Gmsh.l"
+ return tRand;
+ 	YY_BREAK
+ case 145:
+ YY_RULE_SETUP
+ #line 236 "Gmsh.l"
+ return tRefineMesh;
+ 	YY_BREAK
+ case 146:
+ YY_RULE_SETUP
+ #line 237 "Gmsh.l"
+ return tRelocateMesh;
+ 	YY_BREAK
+ case 147:
+ YY_RULE_SETUP
+ #line 238 "Gmsh.l"
+ return tReturn;
+ 	YY_BREAK
+ case 148:
+ YY_RULE_SETUP
+ #line 239 "Gmsh.l"
+ return tReverse;
+ 	YY_BREAK
+ case 149:
+ YY_RULE_SETUP
+ #line 241 "Gmsh.l"
+ return tScaleLast;
+ 	YY_BREAK
+ case 150:
+ YY_RULE_SETUP
+ #line 242 "Gmsh.l"
+ return tSmoother;
+ 	YY_BREAK
+ case 151:
+ YY_RULE_SETUP
+ #line 243 "Gmsh.l"
+ return tSetOrder;
+ 	YY_BREAK
+ case 152:
+ YY_RULE_SETUP
+ #line 244 "Gmsh.l"
+ return tSqrt;
+ 	YY_BREAK
+ case 153:
+ YY_RULE_SETUP
+ #line 245 "Gmsh.l"
+ return tSin;
+ 	YY_BREAK
+ case 154:
+ YY_RULE_SETUP
+ #line 246 "Gmsh.l"
+ return tSinh;
+ 	YY_BREAK
+ case 155:
+ YY_RULE_SETUP
+ #line 247 "Gmsh.l"
+ return tSphere;
+ 	YY_BREAK
+ case 156:
+ YY_RULE_SETUP
+ #line 248 "Gmsh.l"
+ return tSpline;
+ 	YY_BREAK
+ case 157:
+ YY_RULE_SETUP
+ #line 249 "Gmsh.l"
+ return tSplit;
+ 	YY_BREAK
+ case 158:
+ YY_RULE_SETUP
+ #line 250 "Gmsh.l"
+ return tSurface;
+ 	YY_BREAK
+ case 159:
+ YY_RULE_SETUP
+ #line 251 "Gmsh.l"
+ return tStr;
+ 	YY_BREAK
+ case 160:
+ YY_RULE_SETUP
+ #line 252 "Gmsh.l"
+ return tSprintf;
+ 	YY_BREAK
+ case 161:
+ YY_RULE_SETUP
+ #line 253 "Gmsh.l"
+ return tStrCat;
+ 	YY_BREAK
+ case 162:
+ YY_RULE_SETUP
+ #line 254 "Gmsh.l"
+ return tStrReplace;
+ 	YY_BREAK
+ case 163:
+ YY_RULE_SETUP
+ #line 255 "Gmsh.l"
+ return tStrPrefix;
+ 	YY_BREAK
+ case 164:
+ YY_RULE_SETUP
+ #line 256 "Gmsh.l"
+ return tStrRelative;
+ 	YY_BREAK
+ case 165:
+ YY_RULE_SETUP
+ #line 257 "Gmsh.l"
+ return tStrFind;
+ 	YY_BREAK
+ case 166:
+ YY_RULE_SETUP
+ #line 258 "Gmsh.l"
+ return tStrCmp;
+ 	YY_BREAK
+ case 167:
+ YY_RULE_SETUP
+ #line 259 "Gmsh.l"
+ return tStrChoice;
+ 	YY_BREAK
+ case 168:
+ YY_RULE_SETUP
+ #line 260 "Gmsh.l"
+ return tShow;
+ 	YY_BREAK
+ case 169:
+ YY_RULE_SETUP
+ #line 261 "Gmsh.l"
+ return tSymmetry;
+ 	YY_BREAK
+ case 170:
+ YY_RULE_SETUP
+ #line 262 "Gmsh.l"
+ return tSyncModel;
+ 	YY_BREAK
+ case 171:
+ YY_RULE_SETUP
+ #line 264 "Gmsh.l"
+ return tText2D;
+ 	YY_BREAK
+ case 172:
+ YY_RULE_SETUP
+ #line 265 "Gmsh.l"
+ return tText3D;
+ 	YY_BREAK
+ case 173:
+ YY_RULE_SETUP
+ #line 266 "Gmsh.l"
+ return tTextAttributes;
+ 	YY_BREAK
+ case 174:
+ YY_RULE_SETUP
+ #line 267 "Gmsh.l"
+ return tTime;
+ 	YY_BREAK
+ case 175:
+ YY_RULE_SETUP
+ #line 268 "Gmsh.l"
+ return tTransfinite;
+ 	YY_BREAK
+ case 176:
+ YY_RULE_SETUP
+ #line 269 "Gmsh.l"
+ return tTransfQuadTri;
+ 	YY_BREAK
+ case 177:
+ YY_RULE_SETUP
+ #line 270 "Gmsh.l"
+ return tTranslate;
+ 	YY_BREAK
+ case 178:
+ YY_RULE_SETUP
+ #line 271 "Gmsh.l"
+ return tTanh;
+ 	YY_BREAK
+ case 179:
+ YY_RULE_SETUP
+ #line 272 "Gmsh.l"
+ return tTan;
+ 	YY_BREAK
+ case 180:
+ YY_RULE_SETUP
+ #line 273 "Gmsh.l"
+ return tToday;
+ 	YY_BREAK
+ case 181:
+ YY_RULE_SETUP
+ #line 274 "Gmsh.l"
+ return tTotalMemory;
+ 	YY_BREAK
+ case 182:
+ YY_RULE_SETUP
+ #line 276 "Gmsh.l"
+ return tUndefineConstant;
+ 	YY_BREAK
+ case 183:
+ YY_RULE_SETUP
+ #line 277 "Gmsh.l"
+ return tUsing;
+ 	YY_BREAK
+ case 184:
+ YY_RULE_SETUP
+ #line 279 "Gmsh.l"
+ return tVolume;
+ 	YY_BREAK
+ case 185:
+ #line 282 "Gmsh.l"
+ case 186:
+ #line 283 "Gmsh.l"
+ case 187:
+ #line 284 "Gmsh.l"
+ case 188:
+ YY_RULE_SETUP
+ #line 284 "Gmsh.l"
+ { gmsh_yylval.d = atof((char *)gmsh_yytext); return tDOUBLE; }
+ 	YY_BREAK
+ case 189:
+ YY_RULE_SETUP
+ #line 286 "Gmsh.l"
+ { gmsh_yylval.c = strsave((char*)gmsh_yytext); return tSTRING; }
+ 	YY_BREAK
+ case 190:
+ YY_RULE_SETUP
+ #line 288 "Gmsh.l"
+ return gmsh_yytext[0];
+ 	YY_BREAK
+ case 191:
+ YY_RULE_SETUP
+ #line 290 "Gmsh.l"
+ ECHO;
+ 	YY_BREAK
+ #line 2308 "Gmsh.yy.cpp"
++>>>>>>> upstream/2.9.3+dfsg1
  case YY_STATE_EOF(INITIAL):
  	yyterminate();
  
@@@ -2563,7 -2596,7 +3657,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];
++<<<<<<< HEAD
 +			if ( yy_current_state >= 909 )
++=======
+ 			if ( yy_current_state >= 932 )
++>>>>>>> upstream/2.9.3+dfsg1
  				yy_c = yy_meta[(unsigned int) yy_c];
  			}
  		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@@ -2591,13 -2624,13 +3689,21 @@@
  	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
  		{
  		yy_current_state = (int) yy_def[yy_current_state];
++<<<<<<< HEAD
 +		if ( yy_current_state >= 909 )
 +			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 == 908);
++=======
+ 		if ( yy_current_state >= 932 )
+ 			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 == 931);
++>>>>>>> upstream/2.9.3+dfsg1
  
- 	return yy_is_jam ? 0 : yy_current_state;
+ 		return yy_is_jam ? 0 : yy_current_state;
  }
  
      static void yyunput (int c, register char * yy_bp )
@@@ -3268,7 -3298,7 +4371,11 @@@ void gmsh_yyfree (void * ptr 
  
  #define YYTABLES_NAME "yytables"
  
++<<<<<<< HEAD
 +#line 286 "Gmsh.l"
++=======
+ #line 290 "Gmsh.l"
++>>>>>>> upstream/2.9.3+dfsg1
  
  
  
diff --cc Plugin/AnalyseCurvedMesh.cpp
index 657ccbc,c6862a2..8ee5bfd
--- a/Plugin/AnalyseCurvedMesh.cpp
+++ b/Plugin/AnalyseCurvedMesh.cpp
@@@ -4,20 -4,8 +4,25 @@@
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
  
  #include "AnalyseCurvedMesh.h"
++<<<<<<< HEAD
 +#include "GModel.h"
 +#include "OS.h"
 +#include "Context.h"
 +
 +#include <cmath>
 +#include <queue>
 +#include <sstream>
 +
 +//#include "Gmsh.h"
 +//#include "GmshMessage.h"
 +//#include "polynomialBasis.h"
 +//#include <fstream>
 +//#include "PView.h"
 +
++=======
+ #include "OS.h"
+ #include "Context.h"
++>>>>>>> upstream/2.9.3+dfsg1
  #if defined(HAVE_OPENGL)
  #include "drawContext.h"
  #endif
@@@ -41,12 -32,12 +49,21 @@@ private
    fullVector<double> _jacBez;
    double _minL, _maxL, _minB, _maxB; //Extremum of Jac at corners and of bezier values
    int _depthSub;
++<<<<<<< HEAD
 +  const JacobianBasis *_jfs;
 +
 +public:
 +  BezierJacobian(fullVector<double> &, const JacobianBasis *, int depth);
 +  void subDivisions(fullVector<double> &vect) const
 +    {_jfs->subdivideBezierCoeff(_jacBez, vect);}
++=======
+   const bezierBasis *_bfs;
+ 
+ public:
+   BezierJacobian(fullVector<double>&, const bezierBasis*, int depth);
+   void subDivisions(fullVector<double> &vect) const
+     {_bfs->subDivisor.mult(_jacBez, vect);}
++>>>>>>> upstream/2.9.3+dfsg1
  
    bool boundsOk(double tol, double minL, double maxL) {
      return (minL <= 0 || _minB > 0) &&
@@@ -64,9 -55,9 +81,15 @@@
  } // namespace
  
  StringXNumber CurvedMeshOptions_Number[] = {
++<<<<<<< HEAD
 +  {GMSH_FULLRC, "Show: (0) Jacobian, (1) Metric", NULL, 1},
 +  {GMSH_FULLRC, "Number of PView", NULL, 2},
 +  {GMSH_FULLRC, "Hidding threshold", NULL, .1},
++=======
+   {GMSH_FULLRC, "Show: 0:J, 1:R, 2:J&&R", NULL, 1},
+   {GMSH_FULLRC, "Draw PView", NULL, 1},
+   {GMSH_FULLRC, "Hidding threshold", NULL, 10},
++>>>>>>> upstream/2.9.3+dfsg1
    {GMSH_FULLRC, "Dimension of elements", NULL, -1},
    {GMSH_FULLRC, "Recompute bounds", NULL, 0},
    {GMSH_FULLRC, "Tolerance", NULL, 1e-3}
@@@ -89,30 -80,36 +112,61 @@@ StringXNumber *GMSH_AnalyseCurvedMeshPl
  std::string GMSH_AnalyseCurvedMeshPlugin::getHelp() const
  {
    return "Plugin(AnalyseCurvedMesh) analyse all elements of a given dimension. "
++<<<<<<< HEAD
 +    "It computes, min(J) where J is the scaled Jacobian determinant. Eventually, "
 +    "it computes min(R) where R is the ratio between the smaller and the greater "
 +    "of the eigenvalues of the metric. It creates one or more PView and hides "
 +    "elements for which min({J, R}) < 'Hidding threshold'.\n"
 +    "\n"
 +    "Parameters:\n"
 +    "\n"
 +    "- Show [...] = {0, 1}: If 0, computes Jacobian and shows min(J). If 1, computes "
 +    "Jacobian and metric and shows min(R).\n"
 +    "\n"
 +    "- Number of PView = {0, 1, 2}: If 1, create one PView with all elements. If 2, create "
 +    "two PView, one with straight-sided elements and one with curved elements.\n"
++=======
+     "It computes, min(J) where J is the scaled Jacobian determinant and, if "
+     "asked, min(R) where R is the ratio between the smaller and the greater "
+     "of the eigenvalues of the metric. It creates a PView and hides "
+     "elements for which min({J, R}) < 'Hidding threshold'.\n"
+     "\n"
+     "J is faster to compute but gives informations only on validity while R "
+     "gives also informations on quality.\n"
+     "\n"
+     "Parameters:\n"
+     "\n"
+     "- Show [...] = {0, 1, 2}: If 0, computes Jacobian and shows min(J). If 1, "
+     "computes Jacobian and metric and shows min(R). If 2, behaves like it is 1 "
+     "but draw the two min(J) and min(R) PView\n"
+     "\n"
+     "- Draw PView = {0, 1}: Creates a PView of min({J, R}) if it does not "
+     "exist already. If 'Recompute' = 1, a new PView is redrawed.\n"
++>>>>>>> upstream/2.9.3+dfsg1
      "\n"
      "- Hidding threshold = [0,1]: Hides all element for which min(R) or min(J) "
      "is strictly greater than the threshold. If = 1, no effect, if = 0 hide "
      "all elements except invalid.\n"
      "\n"
++<<<<<<< HEAD
 +    "- Dimension = {-1, 1, 2, 3}: If = -1, analyse element of the greater dimension.\n"
 +    "\n"
 +    "- Recompute = {0,1}: If the mesh has changed, set to 1 to recompute the bounds.\n"
 +    "\n"
 +    "- Tolerance = ]0, 1[: Tolerance on the computation of min(R) or min(J). "
 +    "It should be at most 0.01 but it can be set to 1 to just check the validity of "
 +    "the mesh.";
++=======
+     "- Dimension = {-1, 1, 2, 3, 4}: If = -1, analyse element of the greater "
+     "dimension. If = 4, analyse 2D and 3D elements\n"
+     "\n"
+     "- Recompute = {0,1}: If the mesh has changed, set to 1 to recompute the "
+     "bounds.\n"
+     "\n"
+     "- Tolerance = ]0, 1[: Tolerance on the computation of min({R, J}). "
+     "It should be at most 0.01 but it can be set to 1 or greater to just check "
+     "the validity of the mesh.";
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  // Execution
@@@ -120,128 -117,108 +174,233 @@@ PView *GMSH_AnalyseCurvedMeshPlugin::ex
  {
    _m = GModel::current();
    _computeMetric = static_cast<int>(CurvedMeshOptions_Number[0].def);
++<<<<<<< HEAD
 +  _numPView      = static_cast<int>(CurvedMeshOptions_Number[1].def);
 +  _threshold     = static_cast<double>(CurvedMeshOptions_Number[2].def);
 +  _dim           = static_cast<int>(CurvedMeshOptions_Number[3].def);
 +  _recompute     = static_cast<bool>(CurvedMeshOptions_Number[4].def);
 +  _tol           = static_cast<double>(CurvedMeshOptions_Number[5].def);
 +
 +  if (_dim < 0 || _dim > 3) _dim = _m->getDim();
 +
 +  if (_recompute) {
 +    _data.clear();
 +    _computedJ3D = false;
 +    _computedJ2D = false;
 +    _computedJ1D = false;
 +    _computedR3D = false;
 +    _computedR2D = false;
 +    _msgHide = true;
 +    _1PViewJ = false;
 +    _2PViewJ = false;
 +    _1PViewR = false;
 +    _2PViewR = false;
 +  }
 +
 +  if ((_dim == 1 && !_computedJ1D) ||
 +      (_dim == 2 && !_computedJ2D) ||
 +      (_dim == 3 && !_computedJ3D)   ) {
 +    double time = Cpu();
 +    Msg::StatusBar(true, "Computing Jacobian for %dD elements...", _dim);
 +    _computeMinMaxJandValidity();
 +    Msg::StatusBar(true, "... Done computing Jacobian (%g seconds)", Cpu()-time);
 +    _printStatJacobian();
 +  }
 +
 +  if (_computeMetric &&
 +      ((_dim == 2 && !_computedR2D) ||
 +       (_dim == 3 && !_computedR3D)   )) {
 +    double time = Cpu();
 +    Msg::StatusBar(true, "Computing metric for %dD elements...", _dim);
 +    _computeMinR();
 +    Msg::StatusBar(true, "... Done computing metric (%g seconds)", Cpu()-time);
 +    _printStatMetric();
 +  }
 +
 +  if (_computeMetric &&
 +      (_dim == 1 ||
 +       (_dim == 2 && !_computedR2D) ||
 +       (_dim == 3 && !_computedR3D))) {
 +    return 0;
 +  }
 +
 +  // Create PView
 +
 +  std::map<int, std::vector<double> > *dataPV1 = NULL;
 +  std::map<int, std::vector<double> > *dataPV2 = NULL;
 +  std::stringstream name1, name2;
 +  if (_numPView == 1 &&
 +      ((_computeMetric && !_1PViewR) || (!_computeMetric && !_1PViewJ))) {
 +    dataPV1 = new std::map<int, std::vector<double> >();
 +    if (_computeMetric) {
 +      name1 << "min R";
 +      _1PViewR = true;
 +    }
 +    else {
 +      name1 << "min J";
 +      _1PViewJ = true;
 +    }
 +    for (unsigned int i = 0; i < _data.size(); ++i) {
 +      MElement *const el = _data[i].element();
 +      if (el->getDim() == _dim) {
 +        double val = _computeMetric ? _data[i].minR() : _data[i].minJ();
 +        (*dataPV1)[el->getNum()].push_back(val);
 +      }
 +    }
 +  }
 +  else if (_numPView == 2 &&
 +      ((_computeMetric && !_2PViewR) || (!_computeMetric && !_2PViewJ))) {
 +    dataPV1 = new std::map<int, std::vector<double> >();
 +    dataPV2 = new std::map<int, std::vector<double> >();
 +    if (_computeMetric) {
 +      name1 << "min R straight";
 +      name2 << "min R curved";
 +      _2PViewR = true;
 +    }
 +    else {
 +      name1 << "min J straight";
 +      name2 << "min J curved";
 +      _2PViewJ = true;
 +    }
 +    for (unsigned int i = 0; i < _data.size(); ++i) {
 +      MElement *const el = _data[i].element();
 +      if (el->getDim() == _dim) {
 +        double val = _computeMetric ? _data[i].minR() : _data[i].minJ();
 +        if (_data[i].maxJ() - _data[i].minJ() < _tol * 1e-2)
 +          (*dataPV1)[el->getNum()].push_back(val);
 +        else
 +          (*dataPV2)[el->getNum()].push_back(val);
 +      }
 +    }
 +  }
 +
 +  if (dataPV1) new PView(name1.str().c_str(), "ElementData", _m, *dataPV1);
 +  if (dataPV2) new PView(name2.str().c_str(), "ElementData", _m, *dataPV2);
 +
 +  //
 +
 +#if defined(HAVE_OPENGL)
 +  if (_hideWithThreshold() && _msgHide) {
 +    _msgHide = false;
 +    Msg::Info("Note: Some elements have been hidden (param 'Hidding Threshold').");
 +    Msg::Info("      (To revert visibility : Tools > Visibility > Interactive > Show All)");
 +  }
 +  CTX::instance()->mesh.changed = (ENT_ALL);
 +  drawContext::global()->draw();
 +#endif
 +
 +  return 0;
 +}
 +
 +void GMSH_AnalyseCurvedMeshPlugin::_computeMinMaxJandValidity()
 +{
 +  switch (_dim) {
 +    case 3 :
 +      if (_computedJ3D) break;
++=======
+   bool drawPView = static_cast<int>(CurvedMeshOptions_Number[1].def);
+   _threshold     = static_cast<double>(CurvedMeshOptions_Number[2].def);
+   int askedDim   = static_cast<int>(CurvedMeshOptions_Number[3].def);
+   bool recompute = static_cast<bool>(CurvedMeshOptions_Number[4].def);
+   _tol           = static_cast<double>(CurvedMeshOptions_Number[5].def);
+ 
+   if (askedDim < 0 || askedDim > 4) askedDim = _m->getDim();
+ 
+   if (recompute) {
+     _data.clear();
+     if (askedDim < 4) {
+       _computedR[askedDim-1] = false;
+       _computedJ[askedDim-1] = false;
+       _PViewJ[askedDim-1] = false;
+       _PViewR[askedDim-1] = false;
+     }
+     else {
+       _computedR[1] = _computedR[2] = false;
+       _computedJ[1] = _computedJ[2] = false;
+       _PViewJ[1] = _PViewJ[2] = false;
+       _PViewR[1] = _PViewR[2] = false;
+     }
+     _msgHide = true;
+   }
+ 
+   // Compute J and/or R
+   for (int dim = 1; dim <= 3 && dim <= _m->getDim(); ++dim) {
+     if ((askedDim == 4 && dim > 1) || dim == askedDim) {
+       if (!_computedJ[dim-1]) {
+         double time = Cpu();
+         Msg::StatusBar(true, "Computing Jacobian for %dD elements...", dim);
+         _computeMinMaxJandValidity(dim);
+         Msg::StatusBar(true, "... Done computing Jacobian (%g seconds)", Cpu()-time);
+         _printStatJacobian();
+       }
+       if (_computeMetric && !_computedR[dim-1]) {
+         double time = Cpu();
+         Msg::StatusBar(true, "Computing metric for %dD elements...", dim);
+         _computeMinR(dim);
+         Msg::StatusBar(true, "... Done computing metric (%g seconds)", Cpu()-time);
+         _printStatMetric();
+       }
+     }
+   }
+ 
+   // Create PView
+   if (drawPView)
+   for (int dim = 1; dim <= 3; ++dim) {
+     if ((askedDim == 4 && dim > 1) || dim == askedDim) {
+       if (!_PViewJ[dim-1] && _computeMetric != 1) {
+         _PViewJ[dim-1] = true;
+         std::map<int, std::vector<double> > dataPV;
+         for (unsigned int i = 0; i < _data.size(); ++i) {
+           MElement *const el = _data[i].element();
+           if (el->getDim() == dim) {
+             dataPV[el->getNum()].push_back(_data[i].minJ());
+           }
+         }
+         if (dataPV.size()) {
+           std::stringstream name;
+           name << "min J " << dim << "D";
+           new PView(name.str().c_str(), "ElementData", _m, dataPV);
+         }
+       }
+       if (!_PViewR[dim-1] && _computeMetric) {
+         _PViewR[dim-1] = true;
+         std::map<int, std::vector<double> > dataPV;
+         for (unsigned int i = 0; i < _data.size(); ++i) {
+           MElement *const el = _data[i].element();
+           if (el->getDim() == dim)
+             dataPV[el->getNum()].push_back(_data[i].minR());
+         }
+         if (dataPV.size()) {
+           std::stringstream name;
+           name << "min R " << dim << "D";
+           new PView(name.str().c_str(), "ElementData", _m, dataPV);
+         }
+       }
+     }
+   }
+ 
+   // Hide elements
+ #if defined(HAVE_OPENGL)
+   if (_hideWithThreshold(askedDim) && _msgHide) {
+     _msgHide = false;
+     Msg::Info("Note: Some elements have been hidden (param 'Hidding Threshold').");
+     Msg::Info("      (To revert: set 'Hidding Threshold' to 1 and rerun");
+     Msg::Info("                  or, Tools > Visibility > Interactive > Show All)");
+   }
+   CTX::instance()->mesh.changed = (ENT_ALL);
+   drawContext::global()->draw();
+ #endif
+ 
+   return 0;
+ }
+ 
+ void GMSH_AnalyseCurvedMeshPlugin::_computeMinMaxJandValidity(int dim)
+ {
+   if (_computedJ[dim-1]) return;
+ 
+   switch (dim) {
+     case 3 :
++>>>>>>> upstream/2.9.3+dfsg1
        for (GModel::riter it = _m->firstRegion(); it != _m->lastRegion(); it++) {
          GRegion *r = *it;
          unsigned int numType[5] = {0, 0, 0, 0, 0};
@@@ -256,7 -232,6 +415,10 @@@
        break;
  
      case 2 :
++<<<<<<< HEAD
 +      if (_computedJ2D) break;
++=======
++>>>>>>> upstream/2.9.3+dfsg1
        for (GModel::fiter it = _m->firstFace(); it != _m->lastFace(); it++) {
          GFace *f = *it;
          unsigned int numType[3] = {0, 0, 0};
@@@ -271,7 -245,6 +433,10 @@@
        break;
  
      case 1 :
++<<<<<<< HEAD
 +      if (_computedJ1D) break;
++=======
++>>>>>>> upstream/2.9.3+dfsg1
        for (GModel::eiter it = _m->firstEdge(); it != _m->lastEdge(); it++) {
          GEdge *e = *it;
          unsigned int numElement = e->getNumMeshElements();
@@@ -282,9 -254,11 +447,17 @@@
        break;
  
      default :
++<<<<<<< HEAD
 +      Msg::Error("I can not analyse any element.");
 +      return;
 +  }
++=======
+       Msg::Fatal("This should not happen.");
+       return;
+   }
+ 
+   _computedJ[dim-1] = true;
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  void GMSH_AnalyseCurvedMeshPlugin::_computeMinMaxJandValidity(MElement *const*el, int numEl)
@@@ -297,12 -271,15 +470,22 @@@
      Msg::Error("Jacobian function space not implemented for type of element %d", el[0]->getNum());
      return;
    }
+   const bezierBasis *bfs = jfs->getBezier();
+ 
++<<<<<<< HEAD
++=======
+   _data.reserve(_data.size() + numEl);
  
++>>>>>>> upstream/2.9.3+dfsg1
    const int numSamplingPt = jfs->getNumJacNodes();
    const int numMapNodes = jfs->getNumMapNodes();
    fullVector<double> jacobian(numSamplingPt);
    fullVector<double> jacBez(numSamplingPt);
++<<<<<<< HEAD
 +  fullVector<double> subJacBez(jfs->getNumSubNodes());
++=======
+   fullVector<double> subJacBez(bfs->getNumSubNodes());
++>>>>>>> upstream/2.9.3+dfsg1
  
    for (int k = 0; k < numEl; ++k) {
      fullMatrix<double> nodesXYZ(numMapNodes,3);
@@@ -310,53 -287,65 +493,113 @@@
      jfs->getScaledJacobian(nodesXYZ,jacobian);
      jfs->lag2Bez(jacobian, jacBez);
  
++<<<<<<< HEAD
 +    BezierJacobian *bj = new BezierJacobian(jacBez, jfs, 0);
 +    std::vector<BezierJacobian*> heap;
 +    heap.push_back(bj);
 +
 +    double minL = bj->minL(), maxL = bj->maxL();
 +    int currentDepth = 0;
 +
 +    while (!heap[0]->boundsOk(_tol, minL, maxL)) {
 +      bj = heap[0];
 +      pop_heap(heap.begin(), heap.end(), lessMinVal());
 +      heap.pop_back();
 +
 +      bj->subDivisions(subJacBez);
 +      currentDepth = bj->depth() + 1;
 +      if (currentDepth > 20) Msg::Error("depth is too damn high !");
 +
 +      for (int i = 0; i < jfs->getNumDivisions(); i++) {
 +        jacBez.setAsProxy(subJacBez, i * numSamplingPt, numSamplingPt);
 +        bj = new BezierJacobian(jacBez, jfs, currentDepth);
 +        minL = std::min(minL, bj->minL());
 +        maxL = std::max(maxL, bj->maxL());
 +
 +        heap.push_back(bj);
 +        push_heap(heap.begin(), heap.end(), lessMinVal());
 +      }
 +    }
 +
 +    make_heap(heap.begin(), heap.end(), lessMax());
 +
 +    while (!heap[0]->boundsOk(_tol, minL, maxL)) {
 +      bj = heap[0];
 +      pop_heap(heap.begin(), heap.end(), lessMax());
 +      heap.pop_back();
 +
 +      bj->subDivisions(subJacBez);
 +      currentDepth = bj->depth() + 1;
 +      if (currentDepth > 20) Msg::Error("depth is too damn high !");
 +
 +      for (int i = 0; i < jfs->getNumDivisions(); i++) {
 +        jacBez.setAsProxy(subJacBez, i * numSamplingPt, numSamplingPt);
 +        bj = new BezierJacobian(jacBez, jfs, currentDepth);
 +        minL = std::min(minL, bj->minL());
 +        maxL = std::max(maxL, bj->maxL());
 +
 +        heap.push_back(bj);
++=======
+     BezierJacobian *bj = new BezierJacobian(jacBez, bfs, 0);
+     std::vector<BezierJacobian*> heap;
+     heap.push_back(bj);
+ 
+     double minL = bj->minL(), maxL = bj->maxL();
+     int currentDepth = 0;
+ 
+     while (!heap[0]->boundsOk(_tol, minL, maxL)) {
+       bj = heap[0];
+       pop_heap(heap.begin(), heap.end(), lessMinVal());
+       heap.pop_back();
+ 
+       bj->subDivisions(subJacBez);
+       currentDepth = bj->depth() + 1;
+       if (currentDepth > 20) {
+         static int a = 0;
+         if (++a == 1)
+           Msg::Error("depth is too damn high ! elem type %d",
+                      el[k]->getTypeForMSH());
+       }
+ 
+       for (int i = 0; i < bfs->getNumDivision(); i++) {
+         jacBez.setAsProxy(subJacBez, i * numSamplingPt, numSamplingPt);
+         BezierJacobian *newbj = new BezierJacobian(jacBez, bfs, currentDepth);
+         minL = std::min(minL, newbj->minL());
+         maxL = std::max(maxL, newbj->maxL());
+ 
+         heap.push_back(newbj);
+         push_heap(heap.begin(), heap.end(), lessMinVal());
+       }
+       delete bj;
+     }
+ 
+     make_heap(heap.begin(), heap.end(), lessMax());
+ 
+     while (!heap[0]->boundsOk(_tol, minL, maxL)) {
+       bj = heap[0];
+       pop_heap(heap.begin(), heap.end(), lessMax());
+       heap.pop_back();
+ 
+       bj->subDivisions(subJacBez);
+       currentDepth = bj->depth() + 1;
+       if (currentDepth > 20) {
+         static int a = 0;
+         if (++a == 1)
+           Msg::Error("depth is too damn high ! elem type %d",
+                      el[k]->getTypeForMSH());
+       }
+ 
+       for (int i = 0; i < bfs->getNumDivision(); i++) {
+         jacBez.setAsProxy(subJacBez, i * numSamplingPt, numSamplingPt);
+         BezierJacobian *newbj = new BezierJacobian(jacBez, bfs, currentDepth);
+         minL = std::min(minL, newbj->minL());
+         maxL = std::max(maxL, newbj->maxL());
+ 
+         heap.push_back(newbj);
++>>>>>>> upstream/2.9.3+dfsg1
          push_heap(heap.begin(), heap.end(), lessMax());
        }
+       delete bj;
      }
  
      double minB = minL;
@@@ -364,52 -353,15 +607,63 @@@
      for (unsigned int i = 0; i < heap.size(); ++i) {
        minB = std::min(minB, heap[i]->minB());
        maxB = std::max(maxB, heap[i]->maxB());
++<<<<<<< HEAD
 +    }
 +
 +    // TODO REMOVE #include "BasisFactory.h"
 +
 +    /*if (el[k]->getNum() == 26776) {
 +      Msg::Info("%g %g %g %g", minB, minL, maxL, maxB);
 +
 +      / *const nodalBasis* nb = BasisFactory::getNodalBasis(el[k]->getTypeForMSH());
 +      int tag1 = ElementType::getTag(el[k]->getType(), 1);
 +      const nodalBasis* nb1 = BasisFactory::getNodalBasis(tag1);
 +
 +      //double *f;
 +      //f = new double[nb1->points.size1()];
 +      fullMatrix<double> f;
 +      nb1->f(nb->points, f);
 +      Msg::Info("SIZES [%d %d] (%d, %d)", f.size1(), f.size2(), nb->points.size1(), nb1->points.size1());
 +
 +      for (int i = 0; i < nb->points.size1(); ++i) {
 +        double X[3] = {0, 0, 0};
 +        for (int j = 0; j < f.size2(); ++j) {
 +          X[0] += el[k]->getVertex(j)->x() * f(i, j);
 +          X[1] += el[k]->getVertex(j)->y() * f(i, j);
 +          X[2] += el[k]->getVertex(j)->z() * f(i, j);
 +        }
 +        if (std::abs(X[0] - el[k]->getVertex(i)->x()) < 1e-12 &&
 +            std::abs(X[1] - el[k]->getVertex(i)->y()) < 1e-12 &&
 +            std::abs(X[2] - el[k]->getVertex(i)->z()) < 1e-12);
 +        else {
 +          Msg::Info("aaarg %d/%d : [%g %g %g] ([%g %g %g])", i+1, nb->points.size1(),
 +              el[k]->getVertex(i)->x(), el[k]->getVertex(i)->y(), el[k]->getVertex(i)->z(),
 +              X[0], X[1], X[2]);
 +        }
 +      }* /
 +    }*/
 +
++=======
+       delete heap[i];
+     }
++>>>>>>> upstream/2.9.3+dfsg1
      _data.push_back(CurvedMeshPluginData(el[k], minB, maxB));
    }
  }
  
++<<<<<<< HEAD
 +void GMSH_AnalyseCurvedMeshPlugin::_computeMinR()
 +{
 +  if (_dim == 1 ||
 +      (_dim == 2 && _computedR2D) ||
 +      (_dim == 3 && _computedR3D)) {
 +    return;
 +  }
++=======
+ void GMSH_AnalyseCurvedMeshPlugin::_computeMinR(int dim)
+ {
+   if (_computedR[dim-1]) return;
++>>>>>>> upstream/2.9.3+dfsg1
  
    MetricBasis::setTol(_tol);
  
@@@ -418,37 -370,40 +672,68 @@@
  
    for (unsigned int i = 0; i < _data.size(); ++i) {
      MElement *const el = _data[i].element();
++<<<<<<< HEAD
 +    if (el->getDim() == _dim) {
 +      if (_data[i].minJ() <= 0)
 +        _data[i].setMinR(0);
 +      else if (_data[i].maxJ() - _data[i].minJ() < _tol * 1e-2)
 +        _data[i].setMinR(MetricBasis::sampleR(el, 0));
++=======
+     if (el->getDim() == dim) {
+       if (_data[i].minJ() <= 0)
+         _data[i].setMinR(0);
+       else if (_data[i].maxJ() - _data[i].minJ() < _tol * 1e-2)
+         _data[i].setMinR(MetricBasis::minSampledR(el, 0));
++>>>>>>> upstream/2.9.3+dfsg1
        else
          _data[i].setMinR(MetricBasis::boundMinR(el));
      }
      if (i >= nextCheck) {
        nextCheck += _data.size() / 100;
++<<<<<<< HEAD
 +      if (Cpu() - time > 10. && i*100/_data.size() > percentage + 4) {
 +        percentage = i*100/_data.size();
 +        time = Cpu();
 +        Msg::StatusBar(true, "%d%% (remaining time ~%g secondes)",
 +            percentage, (Cpu()-initial) / (i+1) * (_data.size() - i-1));
++=======
+       double curTime = Cpu();
+       unsigned int curPercentage = i*100/_data.size();
+       if ((curTime - time > 10. && curPercentage > percentage + 4) ||
+           (curTime - time > 15. && curPercentage < 5)) {
+         percentage = curPercentage;
+         time = curTime;
+         Msg::StatusBar(true, "%d%% (remaining time ~%g secondes)",
+             percentage, (time-initial) / (i+1) * (_data.size() - i-1));
++>>>>>>> upstream/2.9.3+dfsg1
        }
      }
    }
  
++<<<<<<< HEAD
 +  if (_dim == 2) _computedR2D = true;
 +  if (_dim == 3) _computedR3D = true;
 +}
 +
 +bool GMSH_AnalyseCurvedMeshPlugin::_hideWithThreshold()
++=======
+   _computedR[dim-1] = true;
+ }
+ 
+ bool GMSH_AnalyseCurvedMeshPlugin::_hideWithThreshold(int askedDim)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    if (_threshold >= 1.) return false;
  
    bool ans = false;
    for (unsigned int i = 0; i < _data.size(); ++i) {
      MElement *const el = _data[i].element();
++<<<<<<< HEAD
 +    if (el->getDim() == _dim) {
++=======
+     const int dim = el->getDim();
+     if ((askedDim == 4 && dim > 1) || dim == askedDim) {
++>>>>>>> upstream/2.9.3+dfsg1
        if (( _computeMetric && _data[i].minR() > _threshold) ||
            (!_computeMetric && _data[i].minJ() > _threshold)   ) {
          el->setVisibility(0);
@@@ -465,7 -420,7 +750,11 @@@
  void GMSH_AnalyseCurvedMeshPlugin::_printStatMetric()
  {
    if (_data.empty()) {
++<<<<<<< HEAD
 +    Msg::Info("No stat to print...");
++=======
+     Msg::Info("No stat to print.");
++>>>>>>> upstream/2.9.3+dfsg1
      return;
    }
    double infminR, supminR, avgminR;
@@@ -485,7 -440,7 +774,11 @@@
  void GMSH_AnalyseCurvedMeshPlugin::_printStatJacobian()
  {
    if (_data.empty()) {
++<<<<<<< HEAD
 +    Msg::Info("No stat to print...");
++=======
+     Msg::Info("No stat to print.");
++>>>>>>> upstream/2.9.3+dfsg1
      return;
    }
    double infminJ, supminJ, avgminJ;
@@@ -517,7 -472,7 +810,11 @@@
  }
  
  BezierJacobian::BezierJacobian(fullVector<double> &v,
++<<<<<<< HEAD
 +    const JacobianBasis *jfs, int depth)
++=======
+     const bezierBasis *bfs, int depth)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    _jacBez = v;
    _depthSub = depth;
@@@ -525,7 -480,7 +822,11 @@@
  
    _minL = _maxL = v(0);
    int i = 1;
++<<<<<<< HEAD
 +  for (; i < jfs->getNumLagCoeff(); i++) {
++=======
+   for (; i < bfs->getNumLagCoeff(); i++) {
++>>>>>>> upstream/2.9.3+dfsg1
      if (_minL > v(i)) _minL = v(i);
      if (_maxL < v(i)) _maxL = v(i);
    }
diff --cc Plugin/AnalyseCurvedMesh.h
index 0fe626a,f458285..56a3efb
--- a/Plugin/AnalyseCurvedMesh.h
+++ b/Plugin/AnalyseCurvedMesh.h
@@@ -7,11 -7,8 +7,15 @@@
  #define _ANALYSECURVEDMESH_H_
  
  #include "Plugin.h"
++<<<<<<< HEAD
 +#include "JacobianBasis.h"
 +#include "MetricBasis.h"
 +#include "MElement.h"
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  #include <vector>
+ class MElement;
  
  extern "C"
  {
@@@ -41,30 -38,28 +45,52 @@@ public
  class GMSH_AnalyseCurvedMeshPlugin : public GMSH_PostPlugin
  {
  private :
++<<<<<<< HEAD
 +  int _dim;
 +  GModel *_m;
 +  double _threshold, _tol;
 +  int _numPView, _computeMetric;
 +  bool _recompute;
 +  bool _computedR3D, _computedR2D;
 +  bool _computedJ3D, _computedJ2D, _computedJ1D;
 +  bool _1PViewJ, _2PViewJ, _1PViewR, _2PViewR;
++=======
+   GModel *_m;
+   double _threshold, _tol;
+   int _computeMetric;
+ 
+   // for 1d, 2d, 3d
+   bool _computedR[3], _computedJ[3], _PViewJ[3], _PViewR[3];
++>>>>>>> upstream/2.9.3+dfsg1
    bool _msgHide;
  
    std::vector<CurvedMeshPluginData> _data;
  
  public :
    GMSH_AnalyseCurvedMeshPlugin() {
++<<<<<<< HEAD
 +    _computedR3D = false;
 +    _computedR2D = false;
 +    _computedJ3D = false;
 +    _computedJ2D = false;
 +    _computedJ1D = false;
 +    _msgHide = true;
 +    _1PViewJ = false;
 +    _2PViewJ = false;
 +    _1PViewR = false;
 +    _2PViewR = false;
++=======
+     _m = NULL;
+     _threshold = _tol = -1;
+     _computeMetric = -1;
+     for (int i = 0; i < 3; ++i) {
+       _computedR[i] = false;
+       _computedJ[i] = false;
+       _PViewJ[i] = false;
+       _PViewR[i] = false;
+     }
+     _msgHide = true;
++>>>>>>> upstream/2.9.3+dfsg1
    }
    std::string getName() const { return "AnalyseCurvedMesh"; }
    std::string getShortHelp() const {
@@@ -75,12 -70,29 +101,38 @@@
    int getNbOptions() const;
    StringXNumber *getOption(int);
    PView *execute(PView *);
++<<<<<<< HEAD
 +
 +private :
 +  void _computeMinMaxJandValidity();
 +  void _computeMinMaxJandValidity(MElement *const *, int numEl);
 +  void _computeMinR();
 +  bool _hideWithThreshold();
++=======
+   void setTol(double tol) {_tol = tol;}
+   void computeMinJ(MElement *const *el, int numEl, double *minJ, bool *straight) {
+     std::vector<CurvedMeshPluginData> save(_data);
+     _data.clear();
+     _computeMinMaxJandValidity(el, numEl);
+     if (minJ) {
+       for (unsigned int i = 0; i < _data.size(); ++i) {
+         minJ[i] = _data[i].minJ();
+       }
+     }
+     if (straight) {
+       for (unsigned int i = 0; i < _data.size(); ++i) {
+         straight[i] = _data[i].maxJ() - _data[i].minJ() < _tol * 1e-1;
+       }
+     }
+     _data = save;
+   }
+ 
+ private :
+   void _computeMinMaxJandValidity(int dim);
+   void _computeMinMaxJandValidity(MElement *const *, int numEl);
+   void _computeMinR(int dim);
+   bool _hideWithThreshold(int askedDim);
++>>>>>>> upstream/2.9.3+dfsg1
    void _printStatMetric();
    void _printStatJacobian();
  };
diff --cc Plugin/MinMax.cpp
index 3b0c060,4517989..84b9d38
--- a/Plugin/MinMax.cpp
+++ b/Plugin/MinMax.cpp
@@@ -44,6 -47,7 +47,10 @@@ PView *GMSH_MinMaxPlugin::execute(PVie
    int iView = (int)MinMaxOptions_Number[0].def;
    int overTime = (int)MinMaxOptions_Number[1].def;
    int argument = (int)MinMaxOptions_Number[2].def;
++<<<<<<< HEAD
++=======
+   bool visible = (bool)MinMaxOptions_Number[3].def;
++>>>>>>> upstream/2.9.3+dfsg1
  
    PView *v1 = getView(iView, v);
    if(!v1) return v;
@@@ -64,11 -68,10 +71,18 @@@
      dataMax->NbSP = 1;
    }
  
++<<<<<<< HEAD
 +  double min=VAL_INF, max=-VAL_INF, timeMin=0, timeMax=0;
 +
 +  for(int step = 0; step < data1->getNumTimeSteps(); step++){
 +    if(data1->hasTimeStep(step)){
 +
++=======
+   double min = VAL_INF, max = -VAL_INF, timeMin = 0, timeMax = 0;
+ 
+   for(int step = 0; step < data1->getNumTimeSteps(); step++){
+     if(data1->hasTimeStep(step)){
++>>>>>>> upstream/2.9.3+dfsg1
        double minView = VAL_INF, maxView = -VAL_INF;
        double xmin = 0., ymin = 0., zmin = 0., xmax = 0., ymax = 0., zmax = 0.;
        for(int ent = 0; ent < data1->getNumEntities(step); ent++){
diff --cc Plugin/PluginManager.cpp
index bf4593b,b9e2508..f19d1c7
--- a/Plugin/PluginManager.cpp
+++ b/Plugin/PluginManager.cpp
@@@ -183,13 -185,11 +185,13 @@@ void PluginManager::registerDefaultPlug
                        ("Skin", GMSH_RegisterSkinPlugin()));
      allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
                        ("MathEval", GMSH_RegisterMathEvalPlugin()));
- # if 1 // experimental (Amaury)
      allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
                        ("AnalyseCurvedMesh", GMSH_RegisterAnalyseCurvedMeshPlugin()));
- #endif
+     allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
+                       ("CurvedBndDist", GMSH_RegisterCurvedBndDistPlugin()));
      allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
 +                      ("CurvedBndDist", GMSH_RegisterCurvedBndDistPlugin()));
 +    allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
                        ("ModifyComponent", GMSH_RegisterModifyComponentPlugin()));
      allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
                        ("ExtractElements", GMSH_RegisterExtractElementsPlugin()));
diff --cc Plugin/Scal2Tens.cpp
index 408559a,28b6037..6a099ab
--- a/Plugin/Scal2Tens.cpp
+++ b/Plugin/Scal2Tens.cpp
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Plugin/Scal2Tens.h
index 41c9454,2950e55..ab11861
--- a/Plugin/Scal2Tens.h
+++ b/Plugin/Scal2Tens.h
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
 +// Gmsh - Copyright (C) 1997-2014 C. Geuzaine, J.-F. Remacle
++=======
+ // Gmsh - Copyright (C) 1997-2015 C. Geuzaine, J.-F. Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  //
  // See the LICENSE.txt file for license information. Please report all
  // bugs and problems to the public mailing list <gmsh at geuz.org>.
diff --cc Plugin/Triangulate.cpp
index be24d3f,8d62fb5..cbe454d
--- a/Plugin/Triangulate.cpp
+++ b/Plugin/Triangulate.cpp
@@@ -123,111 -126,117 +126,187 @@@ PView *GMSH_TriangulatePlugin::execute(
    }
    delete s;
  
++<<<<<<< HEAD
 +#if 0 // old code
++=======
+   PView *v2;
+   PViewDataList *data2;
++>>>>>>> upstream/2.9.3+dfsg1
  
-   // build a point record structure for the divide and conquer algorithm
-   DocRecord doc(points.size());
-   for(unsigned int i = 0; i < points.size(); i++){
-     double XX = CTX::instance()->mesh.randFactor * lc * (double)rand() / (double)RAND_MAX;
-     double YY = CTX::instance()->mesh.randFactor * lc * (double)rand() / (double)RAND_MAX;
-     doc.points[i].where.h = points[i]->x() + XX;
-     doc.points[i].where.v = points[i]->y() + YY;
-     doc.points[i].adjacent = NULL;
-     doc.points[i].data = (void*)points[i];
-   }
+   if(algo == 0) {// using old code
  
++<<<<<<< HEAD
 +  // triangulate
 +  try{
 +    doc.MakeMeshWithPoints();
 +  }
 +  catch(const char *err){
 +    Msg::Error("%s", err);
 +  }
 +
 +  // create output (using unperturbed data)
 +  PView *v2 = new PView();
 +  PViewDataList *data2 = getDataList(v2);
 +  for(int i = 0; i < doc.numTriangles; i++){
 +    int a = doc.triangles[i].a;
 +    int b = doc.triangles[i].b;
 +    int c = doc.triangles[i].c;
 +    int n = doc.numPoints;
 +    if(a < 0 || a >= n || b < 0 || b >= n || c < 0 || c >= n){
 +      Msg::Warning("Skipping bad triangle %d", i);
 +      continue;
++=======
+     // build a point record structure for the divide and conquer algorithm
+     DocRecord doc(points.size());
+     for(unsigned int i = 0; i < points.size(); i++){
+       double XX = CTX::instance()->mesh.randFactor * lc * (double)rand() / (double)RAND_MAX;
+       double YY = CTX::instance()->mesh.randFactor * lc * (double)rand() / (double)RAND_MAX;
+       doc.points[i].where.h = points[i]->x() + XX;
+       doc.points[i].where.v = points[i]->y() + YY;
+       doc.points[i].adjacent = NULL;
+       doc.points[i].data = (void*)points[i];
++>>>>>>> upstream/2.9.3+dfsg1
      }
-     PointData *p[3];
-     p[0] = (PointData*)doc.points[doc.triangles[i].a].data;
-     p[1] = (PointData*)doc.points[doc.triangles[i].b].data;
-     p[2] = (PointData*)doc.points[doc.triangles[i].c].data;
-     int numComp = 0;
-     std::vector<double> *vec = 0;
-     if((int)p[0]->v.size() == 3 + 9 * numSteps &&
-        (int)p[1]->v.size() == 3 + 9 * numSteps &&
-        (int)p[2]->v.size() == 3 + 9 * numSteps){
-       numComp = 9; data2->NbTT++; vec = &data2->TT;
+ 
+     // triangulate
+     try{
+       doc.MakeMeshWithPoints();
      }
-     else if((int)p[0]->v.size() == 3 + 3 * numSteps &&
-             (int)p[1]->v.size() == 3 + 3 * numSteps &&
-             (int)p[2]->v.size() == 3 + 3 * numSteps){
-       numComp = 3; data2->NbVT++; vec = &data2->VT;
+     catch(const char *err){
+       Msg::Error("%s", err);
      }
-     else{
-       numComp = 1; data2->NbST++; vec = &data2->ST;
+ 
+     // create output (using unperturbed data)
+     v2 = new PView();
+     data2 = getDataList(v2);
+     for(int i = 0; i < doc.numTriangles; i++){
+       int a = doc.triangles[i].a;
+       int b = doc.triangles[i].b;
+       int c = doc.triangles[i].c;
+       int n = doc.numPoints;
+       if(a < 0 || a >= n || b < 0 || b >= n || c < 0 || c >= n){
+         Msg::Warning("Skipping bad triangle %d", i);
+         continue;
+       }
+       PointData *p[3];
+       p[0] = (PointData*)doc.points[doc.triangles[i].a].data;
+       p[1] = (PointData*)doc.points[doc.triangles[i].b].data;
+       p[2] = (PointData*)doc.points[doc.triangles[i].c].data;
+       int numComp = 0;
+       std::vector<double> *vec = 0;
+       if((int)p[0]->v.size() == 3 + 9 * numSteps &&
+          (int)p[1]->v.size() == 3 + 9 * numSteps &&
+          (int)p[2]->v.size() == 3 + 9 * numSteps){
+         numComp = 9; data2->NbTT++; vec = &data2->TT;
+       }
+       else if((int)p[0]->v.size() == 3 + 3 * numSteps &&
+               (int)p[1]->v.size() == 3 + 3 * numSteps &&
+               (int)p[2]->v.size() == 3 + 3 * numSteps){
+         numComp = 3; data2->NbVT++; vec = &data2->VT;
+       }
+       else{
+         numComp = 1; data2->NbST++; vec = &data2->ST;
+       }
+       for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[0]);
+       for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[1]);
+       for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[2]);
+       for(int step = 0; step < numSteps; step++)
+         for(int nod = 0; nod < 3; nod++)
+           for(int comp = 0; comp < numComp; comp++)
+             vec->push_back(p[nod]->v[3 + numComp * step + comp]);
      }
-     for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[0]);
-     for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[1]);
-     for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[2]);
-     for(int step = 0; step < numSteps; step++)
-       for(int nod = 0; nod < 3; nod++)
-         for(int comp = 0; comp < numComp; comp++)
-           vec->push_back(p[nod]->v[3 + numComp * step + comp]);
+ 
+   }
+   else{ // new code
+ 
+     Msg::Info("Using new triangulation code");
+     std::vector<MTriangle*> tris;
+     for(unsigned int i = 0; i < points.size(); i++) {
+       double XX = 1.e-12 * lc * (double)rand() / (double)RAND_MAX;
+       double YY = 1.e-12 * lc * (double)rand() / (double)RAND_MAX;
+       points[i]->x() += XX;
+       points[i]->y() += YY;
+     }
+     delaunayMeshIn2D(points, tris);
+ 
+     v2 = new PView();
+     data2 = getDataList(v2);
+     for(unsigned int i = 0; i < tris.size(); i++){
+       PointData *p[3];
+       p[0] = (PointData*)tris[i]->getVertex(0);
+       p[1] = (PointData*)tris[i]->getVertex(1);
+       p[2] = (PointData*)tris[i]->getVertex(2);
+       int numComp = 0;
+       std::vector<double> *vec = 0;
+       if((int)p[0]->v.size() == 3 + 9 * numSteps &&
+          (int)p[1]->v.size() == 3 + 9 * numSteps &&
+          (int)p[2]->v.size() == 3 + 9 * numSteps){
+         numComp = 9; data2->NbTT++; vec = &data2->TT;
+       }
+       else if((int)p[0]->v.size() == 3 + 3 * numSteps &&
+               (int)p[1]->v.size() == 3 + 3 * numSteps &&
+               (int)p[2]->v.size() == 3 + 3 * numSteps){
+         numComp = 3; data2->NbVT++; vec = &data2->VT;
+       }
+       else{
+         numComp = 1; data2->NbST++; vec = &data2->ST;
+       }
+       for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[0]);
+       for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[1]);
+       for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[2]);
+       for(int step = 0; step < numSteps; step++)
+         for(int nod = 0; nod < 3; nod++)
+           for(int comp = 0; comp < numComp; comp++)
+             vec->push_back(p[nod]->v[3 + numComp * step + comp]);
+       delete tris[i];
+     }
+ 
    }
  
 +#else // new code
 +  Msg::Info("Using new triangulation code");
 +  std::vector<MTriangle*> tris;
 +  for(unsigned int i = 0; i < points.size(); i++) {
 +    double XX = 1.e-12 * lc * (double)rand() / (double)RAND_MAX;
 +    double YY = 1.e-12 * lc * (double)rand() / (double)RAND_MAX;
 +    points[i]->x() += XX;
 +    points[i]->y() += YY;
 +  }
 +  delaunayMeshIn2D(points, tris);
 +
 +  PView *v2 = new PView();
 +  PViewDataList *data2 = getDataList(v2);
 +  for(unsigned int i = 0; i < tris.size(); i++){
 +    PointData *p[3];
 +    p[0] = (PointData*)tris[i]->getVertex(0);
 +    p[1] = (PointData*)tris[i]->getVertex(1);
 +    p[2] = (PointData*)tris[i]->getVertex(2);
 +    int numComp = 0;
 +    std::vector<double> *vec = 0;
 +    if((int)p[0]->v.size() == 3 + 9 * numSteps &&
 +       (int)p[1]->v.size() == 3 + 9 * numSteps &&
 +       (int)p[2]->v.size() == 3 + 9 * numSteps){
 +      numComp = 9; data2->NbTT++; vec = &data2->TT;
 +    }
 +    else if((int)p[0]->v.size() == 3 + 3 * numSteps &&
 +            (int)p[1]->v.size() == 3 + 3 * numSteps &&
 +            (int)p[2]->v.size() == 3 + 3 * numSteps){
 +      numComp = 3; data2->NbVT++; vec = &data2->VT;
 +    }
 +    else{
 +      numComp = 1; data2->NbST++; vec = &data2->ST;
 +    }
 +    for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[0]);
 +    for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[1]);
 +    for(int nod = 0; nod < 3; nod++) vec->push_back(p[nod]->v[2]);
 +    for(int step = 0; step < numSteps; step++)
 +      for(int nod = 0; nod < 3; nod++)
 +        for(int comp = 0; comp < numComp; comp++)
 +          vec->push_back(p[nod]->v[3 + numComp * step + comp]);
 +    delete tris[i];
 +  }
 +#endif
 +
    for(unsigned int i = 0; i < points.size(); i++)
      delete points[i];
  
diff --cc Post/PViewData.cpp
index 768d88f,c6820fe..cee124f
--- a/Post/PViewData.cpp
+++ b/Post/PViewData.cpp
@@@ -189,54 -189,54 +189,102 @@@ bool PViewData::combineSpace(nameData &
  
  bool PViewData::searchScalar(double x, double y, double z, double *values,
                               int step, double *size, int qn,
++<<<<<<< HEAD
 +                             double *qx, double *qy, double *qz)
 +{
 +  if(!_octree) _octree = new OctreePost(this);
 +  return _octree->searchScalar(x, y, z, values, step, size,
 +                               qn, qx, qy, qz);
++=======
+                              double *qx, double *qy, double *qz, bool grad)
+ {
+   if(!_octree) _octree = new OctreePost(this);
+   return _octree->searchScalar(x, y, z, values, step, size,
+                                qn, qx, qy, qz, grad);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  bool PViewData::searchScalarWithTol(double x, double y, double z, double *values,
                                      int step, double *size, double tol, int qn,
++<<<<<<< HEAD
 +                                    double *qx, double *qy, double *qz)
 +{
 +  if(!_octree) _octree = new OctreePost(this);
 +  return _octree->searchScalarWithTol(x, y, z, values, step, size, tol,
 +                                      qn, qx, qy, qz);
++=======
+                                     double *qx, double *qy, double *qz, bool grad)
+ {
+   if(!_octree) _octree = new OctreePost(this);
+   return _octree->searchScalarWithTol(x, y, z, values, step, size, tol,
+                                       qn, qx, qy, qz, grad);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  bool PViewData::searchVector(double x, double y, double z, double *values,
                               int step, double *size, int qn,
++<<<<<<< HEAD
 +                             double *qx, double *qy, double *qz)
 +{
 +  if(!_octree) _octree = new OctreePost(this);
 +  return _octree->searchVector(x, y, z, values, step, size,
 +                               qn, qx, qy, qz);
++=======
+                              double *qx, double *qy, double *qz, bool grad)
+ {
+   if(!_octree) _octree = new OctreePost(this);
+   return _octree->searchVector(x, y, z, values, step, size,
+                                qn, qx, qy, qz, grad);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  bool PViewData::searchVectorWithTol(double x, double y, double z, double *values,
                                      int step, double *size, double tol, int qn,
++<<<<<<< HEAD
 +                                    double *qx, double *qy, double *qz)
 +{
 +  if(!_octree) _octree = new OctreePost(this);
 +  return _octree->searchVectorWithTol(x, y, z, values, step, size, tol,
 +                                      qn, qx, qy, qz);
++=======
+                                     double *qx, double *qy, double *qz, bool grad)
+ {
+   if(!_octree) _octree = new OctreePost(this);
+   return _octree->searchVectorWithTol(x, y, z, values, step, size, tol,
+                                       qn, qx, qy, qz, grad);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  bool PViewData::searchTensor(double x, double y, double z, double *values,
                               int step, double *size, int qn,
++<<<<<<< HEAD
 +                             double *qx, double *qy, double *qz)
 +{
 +  if(!_octree) _octree = new OctreePost(this);
 +  return _octree->searchTensor(x, y, z, values, step, size,
 +                               qn, qx, qy, qz);
++=======
+                              double *qx, double *qy, double *qz, bool grad)
+ {
+   if(!_octree) _octree = new OctreePost(this);
+   return _octree->searchTensor(x, y, z, values, step, size,
+                                qn, qx, qy, qz, grad);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  bool PViewData::searchTensorWithTol(double x, double y, double z, double *values,
                                      int step, double *size, double tol, int qn,
++<<<<<<< HEAD
 +                                    double *qx, double *qy, double *qz)
 +{
 +  if(!_octree) _octree = new OctreePost(this);
 +  return _octree->searchTensorWithTol(x, y, z, values, step, size, tol,
 +                                      qn, qx, qy, qz);
++=======
+                                     double *qx, double *qy, double *qz, bool grad)
+ {
+   if(!_octree) _octree = new OctreePost(this);
+   return _octree->searchTensorWithTol(x, y, z, values, step, size, tol,
+                                       qn, qx, qy, qz, grad);
++>>>>>>> upstream/2.9.3+dfsg1
  }
diff --cc Post/PViewData.h
index c4e8d1c,3bcef8c..1d4767a
--- a/Post/PViewData.h
+++ b/Post/PViewData.h
@@@ -254,22 -254,22 +254,41 @@@ class PViewData 
    // to a different value than -1.
    bool searchScalar(double x, double y, double z, double *values,
                      int step=-1, double *size=0, int qn=0,
++<<<<<<< HEAD
 +                    double *qx=0, double *qy=0, double *qz=0);
 +  bool searchScalarWithTol(double x, double y, double z, double *values,
 +                           int step=-1, double *size=0, double tol=1.e-2, int qn=0,
 +                           double *qx=0, double *qy=0, double *qz=0);
 +  bool searchVector(double x, double y, double z, double *values,
 +                    int step=-1, double *size=0, int qn=0,
 +                    double *qx=0, double *qy=0, double *qz=0);
 +  bool searchVectorWithTol(double x, double y, double z, double *values,
 +                           int step=-1, double *size=0, double tol=1.e-2, int qn=0,
 +                           double *qx=0, double *qy=0, double *qz=0);
 +  bool searchTensor(double x, double y, double z, double *values,
 +                    int step=-1, double *size=0, int qn=0,
 +                    double *qx=0, double *qy=0, double *qz=0);
 +  bool searchTensorWithTol(double x, double y, double z, double *values,
 +                           int step=-1, double *size=0, double tol=1.e-2, int qn=0,
 +                           double *qx=0, double *qy=0, double *qz=0);
++=======
+                     double *qx=0, double *qy=0, double *qz=0, bool grad=false);
+   bool searchScalarWithTol(double x, double y, double z, double *values,
+                            int step=-1, double *size=0, double tol=1.e-2, int qn=0,
+                            double *qx=0, double *qy=0, double *qz=0, bool grad=false);
+   bool searchVector(double x, double y, double z, double *values,
+                     int step=-1, double *size=0, int qn=0,
+                     double *qx=0, double *qy=0, double *qz=0, bool grad=false);
+   bool searchVectorWithTol(double x, double y, double z, double *values,
+                            int step=-1, double *size=0, double tol=1.e-2, int qn=0,
+                            double *qx=0, double *qy=0, double *qz=0, bool grad=false);
+   bool searchTensor(double x, double y, double z, double *values,
+                     int step=-1, double *size=0, int qn=0,
+                     double *qx=0, double *qy=0, double *qz=0, bool grad=false);
+   bool searchTensorWithTol(double x, double y, double z, double *values,
+                            int step=-1, double *size=0, double tol=1.e-2, int qn=0,
+                            double *qx=0, double *qy=0, double *qz=0, bool grad=false);
++>>>>>>> upstream/2.9.3+dfsg1
  
    // I/O routines
    virtual bool writeSTL(const std::string &fileName);
diff --cc Post/adaptiveData.cpp
index 2d91ede,d1b5156..7b93c01
--- a/Post/adaptiveData.cpp
+++ b/Post/adaptiveData.cpp
@@@ -1134,6 -1385,11 +1385,14 @@@ void adaptiveElements<T>::addInView(dou
      outNb = (numComp == 1) ? &out->NbSI : &out->NbVI;
      outList = (numComp == 1) ? &out->SI : &out->VI;
      break;
++<<<<<<< HEAD
++=======
+   case 8:
+     numEle = in->getNumPyramids();
+     outNb = (numComp == 1) ? &out->NbSY : &out->NbVY;
+     outList = (numComp == 1) ? &out->SY : &out->VY;
+     break;
++>>>>>>> upstream/2.9.3+dfsg1
    case 12:
      numEle = in->getNumHexahedra();
      outNb = (numComp == 1) ? &out->NbSH : &out->NbVH;
@@@ -1194,7 -1450,7 +1453,11 @@@
  adaptiveData::adaptiveData(PViewData *data)
    : _step(-1), _level(-1), _tol(-1.), _inData(data),
      _points(0), _lines(0), _triangles(0), _quadrangles(0),
++<<<<<<< HEAD
 +    _tetrahedra(0), _hexahedra(0), _prisms(0)
++=======
+     _tetrahedra(0), _hexahedra(0), _prisms(0),_pyramids(0)
++>>>>>>> upstream/2.9.3+dfsg1
  {
    _outData = new PViewDataList(true);
    _outData->setName(data->getName() + "_adapted");
diff --cc Solver/eigenSolver.cpp
index 17ee431,55ebb64..a2b3271
--- a/Solver/eigenSolver.cpp
+++ b/Solver/eigenSolver.cpp
@@@ -74,10 -74,10 +74,14 @@@ bool eigenSolver::solve(int numEigenVal
      _try(EPSSetType(eps, EPSPOWER));
    else
      Msg::Fatal("eigenSolver: method '%s' not available", method.c_str());
++<<<<<<< HEAD
 +  
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    // override these options at runtime, petsc-style
    _try(EPSSetFromOptions(eps));
 -
 +  
    // force options specified directly as arguments
    if (numEigenValues)
      _try(EPSSetDimensions(eps, numEigenValues, PETSC_DECIDE, PETSC_DECIDE));
@@@ -186,27 -186,28 +190,48 @@@
      Msg::Warning("SLEPc failed");
      return false;
    }
 +  
 +}
  
 +void eigenSolver::normalize_mode(double scale) {
 +  Msg::Info("Normalize all eigenvectors");
 +  for (unsigned int i=0; i<_eigenVectors.size(); i++) {
 +    double norm = 0.;
 +    for (unsigned int j=0; j<_eigenVectors[i].size(); j++) {
 +      std::complex<double> val = _eigenVectors[i][j];
 +      double normval = std::abs(val);
 +      if (normval>norm)
 +        norm = normval;
 +    }
 +    if (norm==0) {
 +      Msg::Error("zero eigenvector");
 +      return;
 +    }
 +    for (unsigned int j=0; j<_eigenVectors[i].size(); j++) {
 +      _eigenVectors[i][j] *= (scale/norm);
 +    }
 +  }
  }
  
+ void eigenSolver::normalize_mode(std::vector<int> modeView, double scale) {
+   Msg::Info("Normalize all eigenvectors");
+   for (unsigned int imode=0; imode<modeView.size(); imode++) {
+     int i = modeView[imode];
+     double norm = 0.;
+     for (unsigned int j=0; j<_eigenVectors[i].size(); j++) {
+       std::complex<double> val = _eigenVectors[i][j];
+       double normval = std::abs(val);
+       if (normval>norm)
+         norm = normval;
+     }
+     if (norm==0) {
+       Msg::Error("zero eigenvector");
+       return;
+     }
+     for (unsigned int j=0; j<_eigenVectors[i].size(); j++) {
+       _eigenVectors[i][j] *= (scale/norm);
+     }
+   }
+ }
+ 
  #endif
diff --cc Solver/eigenSolver.h
index 0a7a94e,0b6191a..7ef0d13
--- a/Solver/eigenSolver.h
+++ b/Solver/eigenSolver.h
@@@ -30,10 -30,10 +30,17 @@@ class eigenSolver 
                bool hermitian=true);
    bool solve(int numEigenValues=0, std::string which="", std::string method="krylovschur",
               double tolVal=1.e-7, int iterMax=20);
++<<<<<<< HEAD
 +  
 +  int getNumEigenValues() {return _eigenValues.size();}
 +  int getNumberEigenvectors() {return _eigenVectors.size();}
 +  
++=======
+ 
+   int getNumEigenValues() {return _eigenValues.size();}
+   int getNumberEigenvectors() {return _eigenVectors.size();}
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    std::complex<double> getEigenValue(int num) {
      return _eigenValues[num];
    }
@@@ -43,9 -43,9 +50,15 @@@
    std::vector<std::complex<double> > &getEigenVector(int num) {
      return _eigenVectors[num];
    }
++<<<<<<< HEAD
 +  
 +  void normalize_mode(double scale=1.);
 +  
++=======
+ 
+   void normalize_mode(std::vector<int> modeView, double scale=1.);
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    void clear() {
      _eigenValues.clear();
      _eigenVectors.clear();
@@@ -73,7 -73,7 +86,11 @@@ class eigenSolver 
    std::complex<double> getEigenValue(int num) {return 0.;}
    std::complex<double> getEigenVectorComp(int num, int com) {return 0.;}
    std::vector<std::complex<double> > &getEigenVector(int num) {return _dummy;}
++<<<<<<< HEAD
 +  void normalize_mode(double scale=1.) {}
++=======
+   void normalize_mode(std::vector<int> modeView, double scale=1.) {}
++>>>>>>> upstream/2.9.3+dfsg1
    void clear() {}
  };
  
diff --cc Solver/elasticitySolver.cpp
index 58d1aa0,5e5534c..a14ef56
--- a/Solver/elasticitySolver.cpp
+++ b/Solver/elasticitySolver.cpp
@@@ -61,8 -61,8 +61,13 @@@ void elasticitySolver::setMesh(const st
    _dim = pModel->getNumRegions() ? 3 : 2;
  
    if (LagSpace) delete LagSpace;
++<<<<<<< HEAD
 +  if (_dim==3) LagSpace=new VectorLagrangeFunctionSpace(_tag);
 +  if (_dim==2) LagSpace=new VectorLagrangeFunctionSpace
++=======
+   if (_dim==3) LagSpace = new VectorLagrangeFunctionSpace(_tag);
+   if (_dim==2) LagSpace = new VectorLagrangeFunctionSpace
++>>>>>>> upstream/2.9.3+dfsg1
                   (_tag,VectorLagrangeFunctionSpace::VECTOR_X,
                    VectorLagrangeFunctionSpace::VECTOR_Y);
  
@@@ -124,7 -121,7 +126,11 @@@ void elasticitySolver::solve(
      SolverField<SVector3> Field(pAssembler, LagSpace);
      IsotropicElasticTerm Eterm(Field,elasticFields[i]._E,elasticFields[i]._nu);
      BilinearTermToScalarTerm Elastic_Energy_Term(Eterm);
++<<<<<<< HEAD
 +    Assemble(Elastic_Energy_Term,elasticFields[i].g->begin(),elasticFields[i].g->end(),
++=======
+     Assemble(Elastic_Energy_Term, elasticFields[i].g->begin(), elasticFields[i].g->end(),
++>>>>>>> upstream/2.9.3+dfsg1
               Integ_Bulk,energ);
    }
    printf("elastic energy=%f\n",energ);
@@@ -401,15 -431,13 +440,22 @@@ void elasticitySolver::assemble(linearS
    // numbered afterwards
  
    // Dirichlet conditions
-   for (unsigned int i = 0; i < allDirichlet.size(); i++)
-   {
+   for (unsigned int i = 0; i < allDirichlet.size(); i++){
      FilterDofComponent filter(allDirichlet[i]._comp);
++<<<<<<< HEAD
 +    FixNodalDofs(*LagSpace,allDirichlet[i].g->begin(),allDirichlet[i].g->end(),
 +                 *pAssembler,*allDirichlet[i]._f,filter);
 +  }
 +  // LagrangeMultipliers
 +  for (unsigned int i = 0; i < LagrangeMultiplierFields.size(); ++i)
 +  {
++=======
+     FixNodalDofs(*LagSpace, allDirichlet[i].g->begin(), allDirichlet[i].g->end(),
+                  *pAssembler, *allDirichlet[i]._f, filter);
+   }
+   // LagrangeMultipliers
+   for (unsigned int i = 0; i < LagrangeMultiplierFields.size(); ++i){
++>>>>>>> upstream/2.9.3+dfsg1
      NumberDofs(*LagrangeMultiplierSpace, LagrangeMultiplierFields[i].g->begin(),
                 LagrangeMultiplierFields[i].g->end(), *pAssembler);
    }
@@@ -430,19 -456,17 +474,31 @@@
    // Neumann conditions
    GaussQuadrature Integ_Boundary(GaussQuadrature::Val);
  
++<<<<<<< HEAD
 +  for (unsigned int i = 0; i < allNeumann.size(); i++)
 +  {
 +    LoadTerm<SVector3> Lterm(*LagSpace,*allNeumann[i]._f);
 +    Assemble(Lterm,*LagSpace,allNeumann[i].g->begin(),allNeumann[i].g->end(),
++=======
+   for (unsigned int i = 0; i < allNeumann.size(); i++){
+     LoadTerm<SVector3> Lterm(*LagSpace, allNeumann[i]._f);
+     Assemble(Lterm, *LagSpace, allNeumann[i].g->begin(), allNeumann[i].g->end(),
++>>>>>>> upstream/2.9.3+dfsg1
               Integ_Boundary,*pAssembler);
    }
    // Assemble cross term, laplace term and rhs term for LM
    GaussQuadrature Integ_LagrangeMult(GaussQuadrature::ValVal);
    GaussQuadrature Integ_Laplace(GaussQuadrature::GradGrad);
++<<<<<<< HEAD
 +  for (unsigned int i = 0; i < LagrangeMultiplierFields.size(); i++)
 +  {
 +    LagrangeMultiplierTerm LagTerm(*LagSpace, *LagrangeMultiplierSpace,
 +                                   LagrangeMultiplierFields[i]._d);
++=======
+   for (unsigned int i = 0; i < LagrangeMultiplierFields.size(); i++){
+     LagrangeMultiplierTerm<SVector3> LagTerm(*LagSpace, *LagrangeMultiplierSpace,
+                                              LagrangeMultiplierFields[i]._d);
++>>>>>>> upstream/2.9.3+dfsg1
      Assemble(LagTerm, *LagSpace, *LagrangeMultiplierSpace,
               LagrangeMultiplierFields[i].g->begin(),
               LagrangeMultiplierFields[i].g->end(), Integ_LagrangeMult, *pAssembler);
@@@ -458,11 -482,10 +514,15 @@@
    }
    // Assemble elastic term for
    GaussQuadrature Integ_Bulk(GaussQuadrature::GradGrad);
-   for (unsigned int i = 0; i < elasticFields.size(); i++)
-   {
+   for (unsigned int i = 0; i < elasticFields.size(); i++){
      IsotropicElasticTerm Eterm(*LagSpace,elasticFields[i]._E,elasticFields[i]._nu);
++<<<<<<< HEAD
 +    Assemble(Eterm,*LagSpace,elasticFields[i].g->begin(),elasticFields[i].g->end(),
 +             Integ_Bulk,*pAssembler);
++=======
+     Assemble(Eterm, *LagSpace, elasticFields[i].g->begin(), elasticFields[i].g->end(),
+              Integ_Bulk, *pAssembler);
++>>>>>>> upstream/2.9.3+dfsg1
    }
  
    /*for (int i=0;i<pAssembler->sizeOfR();i++){
@@@ -559,7 -617,7 +654,11 @@@ PView* elasticitySolver::buildDisplacem
      if(elasticFields[i]._E == 0.) continue;
      for (groupOfElements::elementContainer::const_iterator it = elasticFields[i].g->begin();
           it != elasticFields[i].g->end(); ++it){
++<<<<<<< HEAD
 +      MElement *e=*it;
++=======
+       MElement *e = *it;
++>>>>>>> upstream/2.9.3+dfsg1
        if(e->getParent()) {
          for (int j = 0; j < e->getNumVertices(); ++j) {
            if(vCut.find(e->getVertex(j)) == vCut.end())
@@@ -604,12 -665,10 +706,19 @@@ PView* elasticitySolver::buildStressesV
      double E = elasticFields[i]._E;
      double nu = elasticFields[i]._nu;
      SolverField<SVector3> Field(pAssembler, LagSpace);
++<<<<<<< HEAD
 +    IsotropicElasticTerm Eterm(Field,elasticFields[i]._E,elasticFields[i]._nu);
 +    BilinearTermToScalarTerm Elastic_Energy_Term(Eterm);
 +    for (groupOfElements::elementContainer::const_iterator it = elasticFields[i].g->begin();
 +         it != elasticFields[i].g->end(); ++it)
 +    {
 +      MElement *e=*it;
++=======
+     for (groupOfElements::elementContainer::const_iterator it = elasticFields[i].g->begin();
+          it != elasticFields[i].g->end(); ++it){
+       MElement *e = *it;
+       double vol = e->getVolume() * e->getVolumeSign();
++>>>>>>> upstream/2.9.3+dfsg1
        int nbVertex = e->getNumVertices();
        std::vector<SVector3> val(nbVertex);
  
@@@ -650,15 -709,79 +759,86 @@@
        double syz = A * eps[5];
  
        std::vector<double> vec(9);
++<<<<<<< HEAD
 +      vec[0]=sxx; vec[1]=sxy; vec[2]=sxz; vec[3]=sxy; vec[4]=syy;
 +      vec[5]=syz; vec[6]=sxz; vec[7]=syz; vec[8]=szz;
 +
 +      data[e->getNum()]=vec;
++=======
+       vec[0] = sxx; vec[1] = sxy; vec[2] = sxz;
+       vec[3] = sxy; vec[4] = syy; vec[5] = syz;
+       vec[6] = sxz; vec[7] = syz; vec[8] = szz;
+ 
+       data[e->getNum()] = vec;
+ 
+       for(int k = 0; k < 6; k++)
+         str[k] += eps[k] * vol;
+       sti[0] += sxx * vol;
+       sti[1] += syy * vol;
+       sti[2] += szz * vol;
+       sti[3] += sxy * vol;
+       sti[4] += sxz * vol;
+       sti[5] += syz * vol;
+       volTot += vol;
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
+   for(int i = 0; i < 6; i++){
+     str[i] = str[i] / volTot;
+     sti[i] = sti[i] / volTot;
+   }
+   printf("effective stiffn = ");for(int i = 0; i < 6; i++) printf("%g ",sti[i]);printf("\n");
+   printf("effective strain = ");for(int i = 0; i < 6; i++) printf("%g ",str[i]);printf("\n");
+ 
    PView *pv = new PView (postFileName, "ElementData", pModel, data, 0.0);
    return pv;
+ }
  
+ PView* elasticitySolver::buildStrainView (const std::string postFileName)
+ {
+   std::cout <<  "build strain view"<< std::endl;
+   std::map<int, std::vector<double> > data;
+   for (unsigned int i = 0; i < elasticFields.size(); ++i){
+     SolverField<SVector3> Field(pAssembler, LagSpace);
+     for (groupOfElements::elementContainer::const_iterator it = elasticFields[i].g->begin();
+          it != elasticFields[i].g->end(); ++it){
+       MElement *e = *it;
+       int nbVertex = e->getNumVertices();
+       std::vector<SVector3> val(nbVertex);
+ 
+       double valx[256];
+       double valy[256];
+       double valz[256];
+       for (int k = 0; k < nbVertex; k++){
+ 	MVertex *v = e->getVertex(k);
+ 	MPoint p(v);
+ 	Field.f(&p, 0, 0, 0, val[k]);
+ 	valx[k] = val[k](0);
+ 	valy[k] = val[k](1);
+ 	valz[k] = val[k](2);
+       }
+ 
+       double gradux[3];
+       double graduy[3];
+       double graduz[3];
+       double u = 0.33, v = 0.33, w = 0.0;
+       e->interpolateGrad(valx, u, v, w, gradux);
+       e->interpolateGrad(valy, u, v, w, graduy);
+       e->interpolateGrad(valz, u, v, w, graduz);
+ 
+       std::vector<double> vec(9);
+       vec[0] = gradux[0];
+       vec[4] = graduy[1];
+       vec[8] = graduy[2];
+       vec[1] = vec[3] = 0.5 * (gradux[0] + graduy[1]);
+       vec[2] = vec[6] = 0.5 * (gradux[0] + graduz[2]);
+       vec[5] = vec[7] = 0.5 * (gradux[1] + graduz[2]);
+ 
+       data[e->getNum()] = vec;
+     }
+   }
+   PView *pv = new PView(postFileName, "ElementData", pModel, data, 0.0);
+   return pv;
  }
  
  PView* elasticitySolver::buildLagrangeMultiplierView (const std::string postFileName)
@@@ -666,12 -789,10 +846,19 @@@
    std::cout <<  "build Lagrange Multiplier View"<< std::endl;
    if(!LagrangeMultiplierSpace) return new PView();
    std::set<MVertex*> v;
++<<<<<<< HEAD
 +  for (unsigned int i = 0; i < LagrangeMultiplierFields.size(); ++i)
 +  {
 +    for(groupOfElements::elementContainer::const_iterator it =
 +          LagrangeMultiplierFields[i].g->begin();
 +        it != LagrangeMultiplierFields[i].g->end(); ++it)
 +    {
++=======
+   for (unsigned int i = 0; i < LagrangeMultiplierFields.size(); ++i){
+     for(groupOfElements::elementContainer::const_iterator it =
+           LagrangeMultiplierFields[i].g->begin();
+         it != LagrangeMultiplierFields[i].g->end(); ++it){
++>>>>>>> upstream/2.9.3+dfsg1
        MElement *e = *it;
        for (int j = 0; j < e->getNumVertices(); ++j) v.insert(e->getVertex(j));
      }
@@@ -705,8 -824,7 +890,12 @@@ PView *elasticitySolver::buildElasticEn
      BilinearTermToScalarTerm Elastic_Energy_Term(Eterm);
      ScalarTermConstant<double> One(1.0);
      for (groupOfElements::elementContainer::const_iterator it =
++<<<<<<< HEAD
 +           elasticFields[i].g->begin(); it != elasticFields[i].g->end(); ++it)
 +    {
++=======
+            elasticFields[i].g->begin(); it != elasticFields[i].g->end(); ++it){
++>>>>>>> upstream/2.9.3+dfsg1
        MElement *e = *it;
        double energ;
        double vol;
@@@ -728,22 -886,20 +957,26 @@@ PView *elasticitySolver::buildVonMisesV
    std::cout <<  "build elastic view"<< std::endl;
    std::map<int, std::vector<double> > data;
    GaussQuadrature Integ_Bulk(GaussQuadrature::GradGrad);
-   for (unsigned int i = 0; i < elasticFields.size(); ++i)
-   {
+   for (unsigned int i = 0; i < elasticFields.size(); ++i){
      SolverField<SVector3> Field(pAssembler, LagSpace);
-     IsotropicElasticTerm Eterm(Field,elasticFields[i]._E,elasticFields[i]._nu);
+     IsotropicElasticTerm Eterm(Field, elasticFields[i]._E, elasticFields[i]._nu);
      BilinearTermToScalarTerm Elastic_Energy_Term(Eterm);
      for (groupOfElements::elementContainer::const_iterator it = elasticFields[i].g->begin();
++<<<<<<< HEAD
 +         it != elasticFields[i].g->end(); ++it)
 +    {
 +      MElement *e=*it;
++=======
+          it != elasticFields[i].g->end(); ++it){
+       MElement *e = *it;
++>>>>>>> upstream/2.9.3+dfsg1
        double energ;
        IntPt *GP;
-       int npts=Integ_Bulk.getIntPoints(e,&GP);
-       Elastic_Energy_Term.get(e,npts,GP,energ);
+       int npts = Integ_Bulk.getIntPoints(e, &GP);
+       Elastic_Energy_Term.get(e, npts, GP, energ);
        std::vector<double> vec;
        vec.push_back(energ);
-       data[(*it)->getNum()]=vec;
+       data[(*it)->getNum()] = vec;
      }
    }
    PView *pv = new PView (postFileName, "ElementData", pModel, data, 0.0);
@@@ -782,5 -943,10 +1020,13 @@@ PView* elasticitySolver::buildStressesV
    Msg::Error("Post-pro module not available");
    return 0;
  }
++<<<<<<< HEAD
++=======
+ PView *elasticitySolver::buildVolumeView(const std::string postFileName)
+ {
+   Msg::Error("Post-pro module not available");
+   return 0;
+ }
++>>>>>>> upstream/2.9.3+dfsg1
  
  #endif
diff --cc Solver/linearSystemPETSc.h
index ef62343,7db6f53..a4d8bf6
--- a/Solver/linearSystemPETSc.h
+++ b/Solver/linearSystemPETSc.h
@@@ -102,7 -114,7 +114,11 @@@ class linearSystemPETSc : public linear
    void zeroSolution();
    void printMatlab(const char *filename) const;
    virtual int systemSolve();
++<<<<<<< HEAD
 +  Mat &getMatrix(){ return _a; }
++=======
+   Mat getMatrix(){ return _a; }
++>>>>>>> upstream/2.9.3+dfsg1
    //std::vector<scalar> getData();
    //std::vector<int> getRowPointers();
    //std::vector<int> getColumnsIndices();
diff --cc contrib/HighOrderMeshOptimizer/CMakeLists.txt
index f7311c8,1ebfb5c..3139fc1
--- a/contrib/HighOrderMeshOptimizer/CMakeLists.txt
+++ b/contrib/HighOrderMeshOptimizer/CMakeLists.txt
@@@ -8,6 -8,7 +8,10 @@@ set(SR
    OptHOM.cpp 
    OptHomRun.cpp 
    OptHomIntegralBoundaryDist.cpp
++<<<<<<< HEAD
++=======
+   OptHomCADDist.cpp
++>>>>>>> upstream/2.9.3+dfsg1
    ParamCoord.cpp 
    SuperEl.cpp 
    OptHomElastic.cpp
diff --cc contrib/HighOrderMeshOptimizer/OptHOM.cpp
index fd0e6d1,3200e1b..8f7338f
--- a/contrib/HighOrderMeshOptimizer/OptHOM.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHOM.cpp
@@@ -106,22 -113,16 +113,35 @@@ bool OptHOM::addJacObjGrad(double &Obj
    return true;
  }
  
++<<<<<<< HEAD
 +bool OptHOM::addBndObjGrad(double factor, double &Obj, alglib::real_1d_array &gradObj)
 +{
 +  maxDistCAD = 0.0;
 +
 +  std::vector<double> gradF;
 +  double DISTANCE = 0.0;
 +  for (int iEl = 0; iEl < mesh.nEl(); iEl++) {
 +    double f;
 +    if (mesh.bndDistAndGradients(iEl, f, gradF, geomTol)) {
 +      maxDistCAD = std::max(maxDistCAD,f);
 +      DISTANCE += f;
 +      Obj += f * factor;
 +      for (size_t i = 0; i < mesh.nPCEl(iEl); ++i){
 +        gradObj[mesh.indPCEl(iEl, i)] += gradF[i] * factor;
 +	//	printf("gradf[%d] = %12.5E\n",i,gradF[i]*factor);
 +      }
++=======
+ 
+ bool OptHOM::addApproximationErrorObjGrad(double factor, double &Obj, alglib::real_1d_array &gradObj, simpleFunction<double>& fct)
+ {
+   std::vector<double> gradF;
+   for (int iEl = 0; iEl < mesh.nEl(); iEl++) {
+     double f;
+     mesh.approximationErrorAndGradients(iEl, f, gradF, 1.e-6, fct);
+     Obj += f * factor;
+     for (size_t i = 0; i < mesh.nPCEl(iEl); ++i){
+       gradObj[mesh.indPCEl(iEl, i)] += gradF[i] * factor;
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
    //  printf("DIST = %12.5E\n",DISTANCE);
@@@ -129,6 -130,233 +149,236 @@@
  
  }
  
++<<<<<<< HEAD
++=======
+ static void computeGradSFAtNodes (MElement *e, std::vector<std::vector<SVector3> > &gsf)
+ {
+   const nodalBasis &elbasis = *e->getFunctionSpace();
+   double s[256][3];
+   for (int j=0;j<e->getNumVertices();j++){
+     std::vector<SVector3> g(e->getNumVertices());
+     double u_mesh = elbasis.points(j,0);
+     double v_mesh = elbasis.points(j,1);
+     e->getGradShapeFunctions ( u_mesh , v_mesh , 0,  s);
+     for (int k=0;k<e->getNumVertices();k++)
+       g[k] = SVector3(s[k][0],s[k][1],s[k][2]);
+     gsf.push_back(g);
+   }
+ }
+ 
+ 
+ bool OptHOM::addBndObjGrad(double factor, double &Obj, alglib::real_1d_array &gradObj)
+ {
+   // set the mesh to its present position
+   std::vector<SPoint3> xyz,uvw;
+   mesh.getGEntityPositions(xyz,uvw);
+   mesh.updateGEntityPositions();
+ 
+   //could be better (e.g. store the model in the Mesh:: datastrucure)
+ 
+   GModel *gm = GModel::current();
+ 
+   // for all model edges, compute the error between the geometry and the mesh
+ 
+   maxDistCAD = 0.0;
+   double distCAD = 0.0;
+ 
+   for (GModel::eiter it = gm->firstEdge(); it != gm->lastEdge(); ++it){
+     // do not do straight lines
+     if ((*it)->geomType() == GEntity::Line)continue;
+     // look at all mesh lines
+ 
+     std::vector<bool> doWeCompute((*it)->lines.size());
+     for (unsigned int i=0;i<(*it)->lines.size(); i++){
+       doWeCompute[i] = false;
+       for (unsigned int j=0;j<(*it)->lines[i]->getNumVertices(); j++){
+         int index = mesh.getFreeVertexStartIndex((*it)->lines[i]->getVertex(j));
+         if (index >=0){
+           doWeCompute[i] = true;
+           continue;
+         }
+       }
+     }
+ 
+     std::vector<double> dist((*it)->lines.size());
+     for (unsigned int i=0;i<(*it)->lines.size(); i++){
+       if (doWeCompute[i]){
+         // compute the distance from the geometry to the mesh
+         dist[i] = MLineGEdgeDistance ( (*it)->lines[i] , *it );
+         maxDistCAD = std::max(maxDistCAD,dist[i]);
+         distCAD += dist [i] * factor;
+       }
+     }
+     // be clever to compute the derivative : iterate on all
+     // Distance = \sum_{lines} Distance (line, GEdge)
+     // For a high order vertex, we compute the derivative only by
+     // recomputing the distance to one only line
+     const double eps = 1.e-6;
+     for (unsigned int i=0;i<(*it)->lines.size(); i++){
+       if (doWeCompute[i]){
+         for (int j=2 ; j<(*it)->lines[i]->getNumVertices()  ; j++){
+           MVertex *v = (*it)->lines[i]->getVertex(j);
+           int index = mesh.getFreeVertexStartIndex(v);
+           //	printf("%d %d (%d %d)\n",v->getNum(),index,v->onWhat()->tag(),v->onWhat()->dim());
+           if (index >= 0){
+             double t;
+             v->getParameter(0,t);
+             SPoint3 pp (v->x(),v->y(),v->z());
+             GPoint gp = (*it)->point(t+eps);
+             v->setParameter(0,t+eps);
+             v->setXYZ(gp.x(),gp.y(),gp.z());
+             double dist2 = MLineGEdgeDistance ( (*it)->lines[i] , *it );
+             double deriv = (dist2 - dist[i])/eps;
+             v->setXYZ(pp.x(),pp.y(),pp.z());
+             v->setParameter(0,t);
+             //	  printf("%g %g %g\n",dist[i],dist2, MLineGEdgeDistance ( (*it)->lines[i] , *it ));
+             // get the index of the vertex
+             gradObj[index] += deriv * factor;
+           }
+         }
+       }
+       //    printf("done\n");
+       // For a low order vertex classified on the GEdge, we recompute
+     // two distances for the two MLines connected to the vertex
+       for (unsigned int i=0;i<(*it)->lines.size()-1; i++){
+         MVertex *v =  (*it)->lines[i]->getVertex(1);
+         int index = mesh.getFreeVertexStartIndex(v);
+         if (index >= 0){
+           double t;
+           v->getParameter(0,t);
+           SPoint3 pp (v->x(),v->y(),v->z());
+           GPoint gp = (*it)->point(t+eps);
+           v->setParameter(0,t+eps);
+           v->setXYZ(gp.x(),gp.y(),gp.z());
+           MLine *l1 = (*it)->lines[i];
+           MLine *l2 = (*it)->lines[i+1];
+           //	printf("%d %d -- %d %d\n",l1->getVertex(0)->getNum(),l1->getVertex(1)->getNum(),l2->getVertex(0)->getNum(),l2->getVertex(1)->getNum());
+           double deriv =
+             (MLineGEdgeDistance ( l1 , *it ) - dist[i])  /eps +
+             (MLineGEdgeDistance ( l2 , *it ) - dist[i+1])/eps;
+           v->setXYZ(pp.x(),pp.y(),pp.z());
+           v->setParameter(0,t);
+           gradObj[index] += deriv * factor;
+         }
+       }
+     }
+   }
+   //  printf("computing distance : 1D part %12.5E\n",distCAD);
+ 
+   // now the 3D part !
+ 
+   std::vector<std::vector<SVector3> > gsfT;
+   computeGradSFAtNodes ( (*gm->firstFace())->triangles[0],gsfT);
+ 
+   std::map<MVertex*,SVector3> normalsToCAD;
+ 
+ 
+   for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); ++it){
+     // do not do plane surfaces
+     if ((*it)->geomType() == GEntity::Plane)continue;
+     std::map<MTriangle*,double> dist;
+ 
+     std::vector<bool> doWeCompute((*it)->triangles.size());
+     for (unsigned int i=0;i<(*it)->triangles.size(); i++){
+       doWeCompute[i] = false;
+       for (unsigned int j=0;j<(*it)->triangles[i]->getNumVertices(); j++){
+         int index = mesh.getFreeVertexStartIndex((*it)->triangles[i]->getVertex(j));
+         if (index >=0){
+           doWeCompute[i] = true;
+         }
+       }
+       if (doWeCompute[i]){
+         for (unsigned int j=0;j<(*it)->triangles[i]->getNumVertices(); j++){
+           MVertex *v = (*it)->triangles[i]->getVertex(j);
+           if (normalsToCAD.find(v) == normalsToCAD.end()){
+             SPoint2 p_cad;
+             reparamMeshVertexOnFace(v, *it, p_cad);
+             SVector3 tg_cad = (*it)->normal(p_cad);
+             tg_cad.normalize();
+             normalsToCAD[v] = tg_cad;
+           }
+         }
+       }
+     }
+ 
+     for (unsigned int i=0;i<(*it)->triangles.size(); i++){
+       // compute the distance from the geometry to the mesh
+       if(doWeCompute[i]){
+         const double d = MFaceGFaceDistanceOld((*it)->triangles[i], *it, &gsfT, &normalsToCAD);
+         dist[(*it)->triangles[i]] = d;
+         maxDistCAD = std::max(maxDistCAD,d);
+         distCAD += d * factor;
+       }
+     }
+ 
+     // be clever again to compute the derivatives
+     const double eps = 1.e-6;
+     for (unsigned int i=0;i<(*it)->triangles.size(); i++){
+       if(doWeCompute[i]){
+         for (unsigned int j=0;j<(*it)->triangles[i]->getNumVertices(); j++){
+           //    for (; itm !=v2t.end(); ++itm){
+           MVertex   *v = (*it)->triangles[i]->getVertex(j);
+           if(v->onWhat()->dim() == 1){
+             int index = mesh.getFreeVertexStartIndex(v);
+             if (index >= 0){
+               MTriangle *t = (*it)->triangles[i];
+               GEdge *ge = v->onWhat()->cast2Edge();
+               double t_;
+               v->getParameter(0,t_);
+               SPoint3 pp (v->x(),v->y(),v->z());
+               GPoint gp = ge->point(t_+eps);
+               v->setParameter(0,t_+eps);
+               v->setXYZ(gp.x(),gp.y(),gp.z());
+               const double distT = dist[t];
+               double deriv =  (MFaceGFaceDistanceOld(t, *it, &gsfT, &normalsToCAD) - distT) /eps;
+               v->setXYZ(pp.x(),pp.y(),pp.z());
+               v->setParameter(0,t_);
+               gradObj[index] += deriv * factor;
+             }
+           }
+ 
+           if(v->onWhat() == *it){
+             int index = mesh.getFreeVertexStartIndex(v);
+             if (index >= 0){
+               MTriangle *t = (*it)->triangles[i];
+               double uu,vv;
+               v->getParameter(0,uu);
+               v->getParameter(1,vv);
+               SPoint3 pp (v->x(),v->y(),v->z());
+ 
+               const double distT = dist[t];
+ 
+               GPoint gp = (*it)->point(uu+eps,vv);
+               v->setParameter(0,uu+eps);
+               v->setXYZ(gp.x(),gp.y(),gp.z());
+               double deriv = (MFaceGFaceDistanceOld(t, *it, &gsfT, &normalsToCAD) - distT) /eps;
+               v->setXYZ(pp.x(),pp.y(),pp.z());
+               v->setParameter(0,uu);
+               gradObj[index] += deriv * factor;
+ 
+               gp = (*it)->point(uu,vv+eps);
+               v->setParameter(1,vv+eps);
+               v->setXYZ(gp.x(),gp.y(),gp.z());
+               deriv = (MFaceGFaceDistanceOld(t, *it, &gsfT, &normalsToCAD) - distT) /eps;
+               v->setXYZ(pp.x(),pp.y(),pp.z());
+               v->setParameter(1,vv);
+               gradObj[index+1] += deriv * factor;
+             }
+           }
+         }
+       }
+     }
+   }
+   mesh.updateGEntityPositions(xyz,uvw);
+   Obj +=distCAD;
+   //  printf("computing distance : 2D part %12.5E\n",distCAD);
+   //  printf("%22.15E\n",distCAD);
+   return true;
+ }
+ 
+ 
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  bool OptHOM::addMetricMinObjGrad(double &Obj, alglib::real_1d_array &gradObj)
  {
  
@@@ -156,7 -384,7 +406,11 @@@
  
  // Contribution of the vertex distance to the objective function value and
  // gradients
++<<<<<<< HEAD
 +bool OptHOM::addDistObjGrad(double Fact, double Fact2, double &Obj,
++=======
+ bool OptHOM::addDistObjGrad(double Fact, double &Obj,
++>>>>>>> upstream/2.9.3+dfsg1
                              alglib::real_1d_array &gradObj)
  {
    maxDist = 0;
@@@ -194,7 -443,9 +469,13 @@@ void OptHOM::evalObjGrad(const alglib::
      addMetricMinObjGrad(Obj, gradObj);
    if(_optimizeCAD)
      addBndObjGrad(lambda3, Obj, gradObj);
++<<<<<<< HEAD
 +  //  printf("maxDistCAD = %12.5E distMax = %12.5E Obj %12.5E\n",maxDistCAD,distance_max,Obj);
++=======
+ 
+   //  printf("Obj = %12.5E\n",Obj);
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    if ((minJac > barrier_min) && (maxJac < barrier_max || !_optimizeBarrierMax) && (maxDistCAD < distance_max|| !_optimizeCAD) ) {
      Msg::Info("Reached %s (%g %g) requirements, setting null gradient",
                _optimizeMetricMin ? "svd" : "jacobian", minJac, maxJac);
@@@ -269,30 -521,10 +551,30 @@@ void OptHOM::calcScale(alglib::real_1d_
      for (int iPC = 0; iPC < mesh.nPCFV(iFV); iPC++)
        scale[mesh.indPCFV(iFV,iPC)] = scaleFV[iPC];
    }
 +
 +//  std::vector<double> inSize(mesh.nEl());
 +//  mesh.elInSize(inSize);
 +//  for (int iEl = 0; iEl < mesh.nEl(); iEl++) {
 +////    std::cout << "DBGTT: inSize[" << iEl << "] = " << inSize[iEl] << std::endl;
 +//    for (int iPCEl = 0; iPCEl < mesh.nPCEl(iEl); iPCEl++)
 +//      scale[mesh.indPCEl(iEl,iPCEl)] *= inSize[iEl];
 +//  }
 +
 +//  for (int iEl = 0; iEl < mesh.nEl(); iEl++) {
 +//    std::vector<double> sJ(mesh.nBezEl(iEl)), gSJ(mesh.nBezEl(iEl)*mesh.nPCEl(iEl));
 +//    mesh.scaledJacAndGradients(iEl,sJ,gSJ);
 +//    for (int iPC = 0; iPC < mesh.nPCEl(iEl); iPC++) {
 +//      double grad = 0.;
 +//      for (int l = 0; l < mesh.nBezEl(iEl); l++) grad = std::max(grad,fabs(gSJ[mesh.indGSJ(iEl,l,iPC)]));
 +//      scale[mesh.indPCEl(iEl,iPC)] *= mesh.nBezEl(iEl)/grad;
 +////      std::cout << "DBGTT: scale[" << mesh.indPCEl(iEl,iPC) << "] = " << scale[mesh.indPCEl(iEl,iPC)] << std::endl;
 +//    }
 +//  }
 +
  }
  
- void OptHOM::OptimPass(alglib::real_1d_array &x,
-                        const alglib::real_1d_array &initGradObj, int itMax)
+ 
+ void OptHOM::OptimPass(alglib::real_1d_array &x, int itMax)
  {
  
    static const double EPSG = 0.;
@@@ -359,7 -591,8 +641,12 @@@
    }
  }
  
++<<<<<<< HEAD
 +int OptHOM::optimize(double weightFixed, double weightFree, double weightCAD, double b_min,
++=======
+ 
+ int OptHOM::optimize(double weight, double weightCAD, double b_min,
++>>>>>>> upstream/2.9.3+dfsg1
                       double b_max, bool optimizeMetricMin, int pInt,
                       int itMax, int optPassMax, int optCAD, double distanceMax, double tolerance)
  {
@@@ -373,8 -606,7 +660,12 @@@
    _optimizeMetricMin = optimizeMetricMin;
    _optimizeCAD = optCAD;
    // Set weights & length scale for non-dimensionalization
++<<<<<<< HEAD
 +  lambda = weightFixed;
 +  lambda2 = weightFree;
++=======
+   lambda = weight;
++>>>>>>> upstream/2.9.3+dfsg1
    lambda3 = weightCAD;
    geomTol = tolerance;
    std::vector<double> dSq(mesh.nEl());
@@@ -415,12 -647,15 +706,22 @@@
  
    int ITER = 0;
    bool minJacOK = true;
++<<<<<<< HEAD
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    while (minJac < barrier_min || (maxDistCAD > distance_max && _optimizeCAD)) {
      const double startMinJac = minJac;
-     OptimPass(x, gradObj, itMax);
+     NEVAL = 0;
+     OptimPass(x, itMax);
+     printf("######  NEVAL = %d\n",NEVAL);
      recalcJacDist();
      jacBar = (minJac > 0.) ? 0.9*minJac : 1.1*minJac;
++<<<<<<< HEAD
 +    if (_optimizeCAD)   jacBar = std::min(jacBar,barrier_min); 
++=======
+     if (_optimizeCAD)   jacBar = std::min(jacBar,barrier_min);
++>>>>>>> upstream/2.9.3+dfsg1
      if (ITER ++ > optPassMax) {
        minJacOK = (minJac > barrier_min && (maxDistCAD < distance_max || !_optimizeCAD));
        break;
diff --cc contrib/HighOrderMeshOptimizer/OptHOM.h
index 7ca9db1,7e1c614..f551093
--- a/contrib/HighOrderMeshOptimizer/OptHOM.h
+++ b/contrib/HighOrderMeshOptimizer/OptHOM.h
@@@ -50,8 -51,9 +51,14 @@@ public
    // are in the range; returns 0 if the mesh is valid (all jacobians positive,
    // JMIN > 0) but JMIN < barrier_min || JMAX > barrier_max; returns -1 if the
    // mesh is invalid : some jacobians cannot be made positive
++<<<<<<< HEAD
 +  int optimize(double lambda, double lambda2, double lambda3, double barrier_min, double barrier_max,
 +               bool optimizeMetricMin, int pInt, int itMax, int optPassMax, int optimizeCAD, double optCADDistMax, double tolerance);
++=======
+   int optimize(double lambda, double lambda3, double barrier_min, double barrier_max,
+                bool optimizeMetricMin, int pInt, int itMax, int optPassMax,
+                int optimizeCAD, double optCADDistMax, double tolerance);
++>>>>>>> upstream/2.9.3+dfsg1
    void recalcJacDist();
    inline void getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD);
    void updateMesh(const alglib::real_1d_array &x);
@@@ -60,9 -62,8 +67,14 @@@
    void printProgress(const alglib::real_1d_array &x, double Obj);
  
    double barrier_min, barrier_max, distance_max, geomTol;
++<<<<<<< HEAD
 +
 + private:
 +  double lambda, lambda2, lambda3, jacBar, invLengthScaleSq;
++=======
+  private:
+   double lambda, lambda3, jacBar, invLengthScaleSq;
++>>>>>>> upstream/2.9.3+dfsg1
    int iter, progressInterv; // Current iteration, interval of iterations for reporting
    bool _optimizeMetricMin;
    double initObj, initMaxDist, initAvgDist; // Values for reporting
@@@ -71,14 -72,13 +83,18 @@@
                              // true : fixed barrier min + moving barrier max
    bool _optimizeCAD; // false : do not minimize the distance between mesh and CAD
                       // true : minimize the distance between mesh and CAD
++<<<<<<< HEAD
 +  bool addJacObjGrad(double &Obj, alglib::real_1d_array &gradObj);
 +  bool addBndObjGrad(double Fact, double &Obj, alglib::real_1d_array &gradObj);
++=======
+   bool addApproximationErrorObjGrad(double Fact, double &Obj, alglib::real_1d_array &gradObj, simpleFunction<double>& fct);
+   bool addJacObjGrad(double &Obj, alglib::real_1d_array &gradObj);
+   bool addBndObjGrad (double Fact, double &Obj, alglib::real_1d_array &gradObj);
++>>>>>>> upstream/2.9.3+dfsg1
    bool addMetricMinObjGrad(double &Obj, alglib::real_1d_array &gradObj);
-   bool addDistObjGrad(double Fact, double Fact2, double &Obj,
-                       alglib::real_1d_array &gradObj);
+   bool addDistObjGrad(double Fact, double &Obj, alglib::real_1d_array &gradObj);
    void calcScale(alglib::real_1d_array &scale);
-   void OptimPass(alglib::real_1d_array &x, const alglib::real_1d_array &initGradObj,
-                  int itMax);
+   void OptimPass(alglib::real_1d_array &x, int itMax);
  };
  
  void OptHOM::getJacDist(double &minJ, double &maxJ, double &maxD, double &avgD)
diff --cc contrib/HighOrderMeshOptimizer/OptHomFastCurving.cpp
index 15474d5,2a56ba6..eac0806
--- a/contrib/HighOrderMeshOptimizer/OptHomFastCurving.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomFastCurving.cpp
@@@ -563,9 -563,10 +563,16 @@@ void HighOrderMeshFastCurving(GModel *g
    }
    else {                                                                                        // No BL field
      for (int iEnt = 0; iEnt < allEntities.size(); ++iEnt) {
++<<<<<<< HEAD
 +      GEntity* &entity = allEntities[iEnt];
 +      if (entity->dim() == p.dim-1 && (!p.onlyVisible || entity->getVisibility()))              // Consider boundary entities
 +        entities.insert(std::pair<GEntity*,GEntity*>(0, entity));
++=======
+       GEntity *dummy = 0;
+       GEntity* &entity = allEntities[iEnt];
+       if (entity->dim() == p.dim-1 && (!p.onlyVisible || entity->getVisibility()))              // Consider boundary entities
+         entities.insert(std::pair<GEntity*,GEntity*>(dummy, entity));
++>>>>>>> upstream/2.9.3+dfsg1
      }
    }
  
diff --cc contrib/HighOrderMeshOptimizer/OptHomIntegralBoundaryDist.cpp
index a19f492,3f3f27f..f26b709
--- a/contrib/HighOrderMeshOptimizer/OptHomIntegralBoundaryDist.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomIntegralBoundaryDist.cpp
@@@ -9,11 -9,13 +9,21 @@@
  
  parametricLineNodalBasis::parametricLineNodalBasis(const nodalBasis &basis,
                                                     const std::vector<SPoint3> &xyz):
++<<<<<<< HEAD
 +  _basis(basis), _xyz(xyz) {};
 +
 +SPoint3 parametricLineNodalBasis::operator()(double xi) const
 +{
 +  std::vector<double> psi(_xyz.size());
++=======
+   _basis(basis), _xyz(xyz) , psi(_xyz.size())
+ {
+ }
+ 
+ 
+ SPoint3 parametricLineNodalBasis::operator()(double xi) const
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    SPoint3 p(0, 0, 0);
    _basis.f(-1 + 2 * xi, 0, 0, &psi[0]);
    for (size_t j = 0; j < psi.size(); ++j) {
@@@ -245,7 -247,7 +255,11 @@@ double computeBndDistG_(GEdge *edge, st
  		       const nodalBasis &basis, const std::vector<SPoint3> &xyz,
  		       const unsigned int NN) // the mesh edge
  {
++<<<<<<< HEAD
 +  const unsigned int N = 256;
++=======
+   const unsigned int N = 200;
++>>>>>>> upstream/2.9.3+dfsg1
    std::vector<int> o;
    o.push_back(0);
    for (unsigned int i=2; i < p.size();i++)o.push_back(i);
@@@ -298,15 -300,15 +312,27 @@@ double computeBndDistG(GEdge *edge, std
  		       const nodalBasis &basis, const std::vector<SPoint3> &xyz,
  		       double tolerance) // the mesh edge
  {
++<<<<<<< HEAD
 +  int N = 4;
 +  double d = computeBndDistG_(edge, p, basis, xyz, N);
 +
 +  //    printf("GO !!\n");
 +  while (1){
 +    N *= 2;
 +    double dp = computeBndDistG_(edge, p, basis, xyz, N);
 +    //        printf("%12.5E %12.5E %12.5E %12.5E\n",d,dp,fabs(d - dp),tolerance);
 +    if (fabs(d - dp) < tolerance) // Richardson with assumed linear convergence ...
++=======
+   int N = 5;
+   double d = computeBndDistG_(edge, p, basis, xyz, N);
+ 
+   //  printf("GO !!\n");
+   while (1){
+     N *= 2;
+     double dp = computeBndDistG_(edge, p, basis, xyz, N);
+     //    printf("N %d %12.5E %12.5E %12.5E %12.5E\n",N,d,dp,fabs(d - dp),tolerance);
+     if (fabs(d - dp) < tolerance*(d+dp)) // Richardson with assumed linear convergence ...
++>>>>>>> upstream/2.9.3+dfsg1
        return dp;
      d = dp;
    }
@@@ -362,7 -364,7 +388,11 @@@ double computeDeviationOfTangents(GEdg
    //  parametricLineGEdge l1 = parametricLineGEdge(edge,p[0],p[p.size()-1]);
    parametricLineNodalBasis l2 = parametricLineNodalBasis(basis, xyz);
    double  deviation = 0;
++<<<<<<< HEAD
 +  double ddeviation = 0;
++=======
+   //  double ddeviation = 0;
++>>>>>>> upstream/2.9.3+dfsg1
    std::vector<int> o;
    o.push_back(0);
    for (unsigned int i=2; i < p.size();i++)o.push_back(i);
@@@ -373,27 -375,27 +403,45 @@@
    for (unsigned int i=0; i<p.size();i++){
      const double u = basis.points(o[i],0);
      SVector3 xp = edge->firstDer (p[o[i]]);
++<<<<<<< HEAD
 +    SVector3 xpp = edge->secondDer (p[o[i]]);
 +    const double nxp = xp.norm();
 +    const double onxp = 1./nxp;
 +    SVector3 c = (onxp*onxp*onxp)*(xpp*nxp-xp*dot(xp,xpp)*onxp);
 +
 +    SVector3 t_mesh_edge  = l2.derivative(0.5*(1+u));
 +    SVector3 c2  = l2.curvature(0.5*(1+u));
++=======
+     //    SVector3 xpp = edge->secondDer (p[o[i]]);
+     //    const double nxp = xp.norm();
+     //    const double onxp = 1./nxp;
+     //    SVector3 c = (onxp*onxp*onxp)*(xpp*nxp-xp*dot(xp,xpp)*onxp);
+ 
+     SVector3 t_mesh_edge  = l2.derivative(0.5*(1+u));
+     //    SVector3 c2  = l2.curvature(0.5*(1+u));
++>>>>>>> upstream/2.9.3+dfsg1
      //    GPoint p0 = edge->point(p[o[i]]);
      //    SPoint3 p1 = l2 (0.5*(1+u));
      //    printf("%g = %g %g vs %g %g\n",u,p0.x(),p0.y(),p1.x(),p1.y());
      xp.normalize();
      t_mesh_edge.normalize();
      SVector3 diff1 = (dot(xp, t_mesh_edge) > 0) ? xp -  t_mesh_edge : xp +  t_mesh_edge;
++<<<<<<< HEAD
 +    SVector3 diff2 = (dot(c, c2) > 0) ? c -  c2 : c +  c2;
++=======
+     //    SVector3 diff2 = (dot(c, c2) > 0) ? c -  c2 : c +  c2;
++>>>>>>> upstream/2.9.3+dfsg1
      //printf("%g %g %g vs %g %g %g diff %g %g %g\n",c.x(),c.y(),c.z(),c2.x(),c2.y(),c2.z(),diff2.x(),diff2.y(),diff2.z());
      //    printf("%g %g %g vs %g %g %g val %g\n",t_model_edge.x(),t_model_edge.y(),t_model_edge.z(),
      //	   t_mesh_edge.x(),t_mesh_edge.y(),t_mesh_edge.z(),c.norm());
      //     deviation = std::max(diff1.norm(),deviation);
      //    ddeviation = std::max(diff2.norm(),ddeviation);
       deviation += diff1.norm();
++<<<<<<< HEAD
 +    ddeviation += diff2.norm();
++=======
+      //    ddeviation += diff2.norm();
++>>>>>>> upstream/2.9.3+dfsg1
    }
    const double h =  dx.norm();
    //  printf ("%g %g\n",deviation * h,ddeviation * h * h * 0.5);
diff --cc contrib/HighOrderMeshOptimizer/OptHomIntegralBoundaryDist.h
index 3a9e5db,a904663..007d6d8
--- a/contrib/HighOrderMeshOptimizer/OptHomIntegralBoundaryDist.h
+++ b/contrib/HighOrderMeshOptimizer/OptHomIntegralBoundaryDist.h
@@@ -34,6 -34,7 +34,10 @@@ class parametricLineNodalBasis : publi
  {
    const nodalBasis &_basis;
    const std::vector<SPoint3> &_xyz;
++<<<<<<< HEAD
++=======
+   mutable std::vector<double> psi;
++>>>>>>> upstream/2.9.3+dfsg1
   public :
    parametricLineNodalBasis(const nodalBasis &basis, const std::vector<SPoint3> &xyz);
    virtual SPoint3 operator()(double xi) const;
diff --cc contrib/HighOrderMeshOptimizer/OptHomMesh.cpp
index 5c7614c,dbea55e..dbbdf35
--- a/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp
@@@ -230,12 -242,41 +242,45 @@@ void Mesh::elInSize(std::vector<double
      s[iEl] = fabs(_el[iEl]->getInnerRadius());
  }
  
++<<<<<<< HEAD
 +void Mesh::updateGEntityPositions()
++=======
+ void Mesh::getGEntityPositions(std::vector<SPoint3> &xyz,
+ 			       std::vector<SPoint3> &uvw) 
++>>>>>>> upstream/2.9.3+dfsg1
  {
+   xyz.resize(nVert());
+   uvw.resize(nFV());
    for (int iV = 0; iV < nVert(); iV++)
-     _vert[iV]->setXYZ(_xyz[iV].x(),_xyz[iV].y(),_xyz[iV].z());
+     xyz[iV] = SPoint3(_vert[iV]->x(),_vert[iV]->y(),_vert[iV]->z());
+   for (int iFV = 0; iFV < nFV(); iFV++){
+     MVertex *v = _freeVert[iFV];
+     if (v->onWhat()->dim() == 1){
+       double t;
+       v->getParameter(0,t);
+       uvw[iFV] = SPoint3(t,0,0);
+     }
+     if (v->onWhat()->dim() == 2){
+       double uu,vv;
+       v->getParameter(0,uu);
+       v->getParameter(1,vv);
+       uvw[iFV] = SPoint3(uu,vv,0);
+     }
+   }
+ }
+ 
+ void Mesh::updateGEntityPositions(const std::vector<SPoint3> &xyz,
+ 				  const std::vector<SPoint3> &uvw)
+ {
+   for (int iV = 0; iV < nVert(); iV++)
+     _vert[iV]->setXYZ(xyz[iV].x(),xyz[iV].y(),xyz[iV].z());
    for (int iFV = 0; iFV < nFV(); iFV++)
-     _paramFV[iFV]->exportParamCoord(_uvw[iFV]);
+       _paramFV[iFV]->exportParamCoord(uvw[iFV]);
+ }
+ 
+ void Mesh::updateGEntityPositions()
+ {
+   updateGEntityPositions(_xyz,_uvw);
  }
  
  void Mesh::metricMinAndGradients(int iEl, std::vector<double> &lambda,
@@@ -294,6 -335,70 +339,73 @@@
    }
  }
  
++<<<<<<< HEAD
++=======
+ void Mesh::approximationErrorAndGradients(int iEl, double &f, std::vector<double> &gradF, double eps,
+ 					  simpleFunction<double> &fct)
+ {
+   std::vector<SPoint3> _xyz_temp;
+   for (int iV = 0; iV < nVert(); iV++){
+     _xyz_temp.push_back(SPoint3( _vert[iV]->x(), _vert[iV]->y(), _vert[iV]->z()));
+     _vert[iV]->setXYZ(_xyz[iV].x(),_xyz[iV].y(),_xyz[iV].z());
+   }
+ 
+   MElement *element = _el[iEl];
+ 
+   f = approximationError (fct, element);
+   // FIME
+   //  if (iEl < 1)printf("approx error elem %d = %g\n",iEl,f);
+   int currentId = 0;
+   // compute the size of the gradient
+   // depends on how many dofs exist per vertex (0,1,2 or 3)
+   for (size_t i = 0; i < element->getNumVertices(); ++i) {
+     if (_el2FV[iEl][i] >= 0) {// some free coordinates
+       currentId += _nPCFV[_el2FV[iEl][i]];
+     }
+   }
+   gradF.clear();
+   gradF.resize(currentId, 0.);
+   currentId = 0;
+   for (size_t i = 0; i < element->getNumVertices(); ++i) {
+     if (_el2FV[iEl][i] >= 0) {// some free coordinates
+       MVertex *v =  element->getVertex(i);
+       // vertex classified on a model edge
+       if (_nPCFV[_el2FV[iEl][i]] == 1){
+ 	double t = _uvw[_el2FV[iEl][i]].x();
+ 	GEdge *ge = (GEdge*)v->onWhat();
+ 	SPoint3 p (v->x(),v->y(),v->z());
+ 	GPoint d = ge->point(t+eps);
+ 	v->setXYZ(d.x(),d.y(),d.z());
+ 	double f_d = approximationError (fct, element);
+ 	gradF[currentId++] = (f_d-f)/eps;
+ 	if (iEl < 1)printf("df = %g\n",(f_d-f)/eps);
+ 	v->setXYZ(p.x(),p.y(),p.z());
+       }
+       else if (_nPCFV[_el2FV[iEl][i]] == 2){
+ 	double uu = _uvw[_el2FV[iEl][i]].x();
+ 	double vv = _uvw[_el2FV[iEl][i]].y();
+ 	GFace *gf = (GFace*)v->onWhat();
+ 	SPoint3 p (v->x(),v->y(),v->z());
+ 	GPoint  d = gf->point(uu+eps,vv);
+ 	v->setXYZ(d.x(),d.y(),d.z());
+ 	double f_u = approximationError (fct, element);
+ 	gradF[currentId++] = (f_u-f)/eps;
+ 	d = gf->point(uu,vv+eps);
+ 	v->setXYZ(d.x(),d.y(),d.z());
+ 	double f_v = approximationError (fct, element);
+ 	gradF[currentId++] = (f_v-f)/eps;
+ 	v->setXYZ(p.x(),p.y(),p.z());
+ 	//	if (iEl < 1)printf("df = %g %g\n",(f_u-f)/eps,(f_v-f)/eps);
+       }
+     }
+   }
+   for (int iV = 0; iV < nVert(); iV++)
+     _vert[iV]->setXYZ(_xyz_temp[iV].x(),_xyz_temp[iV].y(),_xyz_temp[iV].z());
+ 
+ }
+ 
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  bool Mesh::bndDistAndGradients(int iEl, double &f , std::vector<double> &gradF, double eps)
  {
    MElement *element = _el[iEl];
@@@ -303,9 -408,11 +415,17 @@@
      return false;
  
    int currentId = 0;
++<<<<<<< HEAD
++  std::vector<int> vertex2param(element->getNumVertices());
++  for (size_t i = 0; i < element->getNumVertices(); ++i) {
++    if (_el2FV[iEl][i] >= 0) {
++=======
+   bool touches_boundary = false;
    std::vector<int> vertex2param(element->getNumVertices());
    for (size_t i = 0; i < element->getNumVertices(); ++i) {
      if (_el2FV[iEl][i] >= 0) {
+       if ( _nPCFV[_el2FV[iEl][i]] == 1) touches_boundary = true;
++>>>>>>> upstream/2.9.3+dfsg1
        vertex2param[i] = currentId;
        currentId += _nPCFV[_el2FV[iEl][i]];
      }
@@@ -315,6 -422,7 +435,10 @@@
    gradF.clear();
    gradF.resize(currentId, 0.);
  
++<<<<<<< HEAD
++=======
+   if (!touches_boundary){/*printf("ele %d\n",iEl);*/return true;}
++>>>>>>> upstream/2.9.3+dfsg1
    const nodalBasis &elbasis = *element->getFunctionSpace();
    bool edgeFound = false;
    for (int iEdge = 0; iEdge < element->getNumEdges(); ++iEdge) {
diff --cc contrib/HighOrderMeshOptimizer/OptHomRun.cpp
index f99522a,51a0548..82e13fa
--- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
@@@ -47,6 -48,16 +48,19 @@@
  
  #if defined(HAVE_BFGS)
  
++<<<<<<< HEAD
++=======
+ typedef std::vector<MElement*> elVec;
+ typedef elVec::const_iterator elVecConstIter;
+ typedef std::set<MElement*> elSet;
+ typedef elSet::iterator elSetIter;
+ typedef std::set<MVertex*> vertSet;
+ 
+ typedef std::map<MVertex*, elVec> vertElVecMap;
+ typedef std::map<MElement*, elSet> elElSetMap;
+ typedef std::pair<elSet, vertSet> elSetVertSetPair;
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  double distMaxStraight(MElement *el)
  {
    const polynomialBasis *lagrange = (polynomialBasis*)el->getFunctionSpace();
@@@ -158,72 -167,150 +170,210 @@@ static vertSet getAllBndVertices(elSet 
    return bnd;
  }
  
++<<<<<<< HEAD
 +// Approximate test of intersection element with circle/sphere by sampling
 +static bool testElInDist(const SPoint3 p, double limDist, MElement *el)
 +{
 +  const double sampleLen = 0.5*limDist;                                   // Distance between sample points
 +
 +  if (el->getDim() == 2) {                                                // 2D?
 +    for (int iEd = 0; iEd < el->getNumEdges(); iEd++) {                   // Loop over edges of element
 +      MEdge ed = el->getEdge(iEd);
 +      const int nPts = int(ed.length()/sampleLen)+2;                      // Nb of sample points based on edge length
 +      for (int iPt = 0; iPt < nPts; iPt++) {                              // Loop over sample points
 +        const SPoint3 pt = ed.interpolate(iPt/float(nPts-1));
 +        if (p.distance(pt) < limDist) return true;
 +      }
 +    }
 +  }
 +  else {                                                                  // 3D
 +    for (int iFace = 0; iFace < el->getNumFaces(); iFace++) {             // Loop over faces of element
 +      MFace face = el->getFace(iFace);
 +      double lMax = 0.;                                                   // Max. edge length in face
 +      const int nVert = face.getNumVertices();
 +      for (int iEd = 0; iEd < nVert; iEd++)
 +        lMax = std::max(lMax, face.getEdge(iEd).length());
 +      const int nPts = int(lMax/sampleLen)+2;                             // Nb of sample points based on max. edge length in face
 +      for (int iPt0 = 0; iPt0 < nPts; iPt0++) {
 +        const double u = iPt0/float(nPts-1);
 +        for (int iPt1 = 0; iPt1 < nPts; iPt1++) {                         // Loop over sample points
 +          const double vMax = (nVert == 3) ? 1.-u : 1.;
 +          const SPoint3 pt = face.interpolate(u, vMax*iPt1/float(nPts-1));
 +          if (p.distance(pt) < limDist) return true;
 +        }
 +      }
 +    }
 +  }
 +
 +  return false;
 +}
 +
 +static std::set<MElement*> getSurroundingBlob
 +   (MElement *el, int depth,
 +    const std::map<MVertex*, std::vector<MElement*> > &vertex2elements,
 +    const double distFactor, int forceDepth, bool optPrimSurfMesh)
++=======
+ 
+ // Test intersection between sphere and segment
+ static bool testSegSphereIntersect(SPoint3 A, SPoint3 B, const SPoint3& P, const double rr)
+ {
+   // Test if separating plane between sphere and segment vertices
+   // For each vertex, separation if vertex is outside sphere and P on opposite side
+   // to other seg. vertex w.r.t plane of normal (vertex-P) through vertex
+   const SVector3 PA(P, A), PB(P, B);
+   const double aa = dot(PA, PA), ab = dot(PA, PB);
+   if ((aa > rr) & (ab > aa)) return false;
+   const double  bb = dot(PB, PB);
+   if ((bb > rr) & (ab > bb)) return false;
+ 
+   // Test if separating plane between sphere and line
+   // For A, separation if projection Q of P on (AB) lies outside the sphere
+   const SVector3 AB(A, B);
+   const double d = ab - aa, e = dot(AB, AB);
+   const  SVector3 PQ = PA * e - d * AB;
+   if (dot(PQ, PQ) > rr * e * e) return false;
+ 
+   // Return true (intersection) if no separation at all
+   return true;
+ }
+ 
+ 
+ // Test intersection between sphere and triangle
+ // Inspired by Christer Ericson, http://realtimecollisiondetection.net/blog/?p=103
+ static bool testTriSphereIntersect(SPoint3 A, SPoint3 B, SPoint3 C,
+                                    const SPoint3& P, const double rr)
+ {
+   // Test if separating plane between sphere and triangle plane
+   const SVector3 PA(P, A), AB(A, B), AC(A, C);
+   const SVector3 V = crossprod(AB, AC);                                   // Normal to triangle plane
+   const double d = dot(PA, V);                                            // Dist. from P to triangle plane times norm of V
+   const double e = dot(V, V);                                             // Norm of V
+   if (d * d > rr * e) return false;                                       // Test if separating plane between sphere and triangle plane
+ 
+   // Test if separating plane between sphere and triangle vertices
+   const SVector3 PB(P, B), PC(P, B);
+   const double aa = dot(PA, PA), ab = dot(PA, PB), ac = dot(PA, PC);
+   const double bb = dot(PB, PB), bc = dot(PB, PC), cc = dot(PC, PC);
+   if ((aa > rr) & (ab > aa) & (ac > aa)) return false;                    // For each triangle vertex, separation if vertex is outside sphere
+   if ((bb > rr) & (ab > bb) & (bc > bb)) return false;                    // and P on opposite side to other two triangle vertices w.r.t
+   if ((cc > rr) & (ac > cc) & (bc > cc)) return false;                    // plane of normal (vertex-P) through vertex
+ 
+   // Test if separating plane between sphere and triangle edges
+   const SVector3 BC(B, C);
+   const double d1 = ab - aa, d2 = bc - bb, d3 = ac - cc;
+   const double e1 = dot(AB, AB), e2 = dot(BC, BC), e3 = dot(AC, AC);
+   const SVector3 PQ1 = PA * e1 - d1 * AB;                                 // Q1 projection of P on line (AB)
+   const SVector3 PQ2 = PB * e2 - d2 * BC;                                 // Q2 projection of P on line (BC)
+   const SVector3 PQ3 = PC * e3 + d3 * AC;                                 // Q3 projection of P on line (AC)
+   const SVector3 PQC = PC * e1 - PQ1;
+   const SVector3 PQA = PA * e2 - PQ2;
+   const SVector3 PQB = PB * e3 - PQ3;
+   if ((dot(PQ1, PQ1) > rr * e1 * e1) & (dot(PQ1, PQC) > 0)) return false; // For A, separation if Q lies outside the sphere and if P and C
+   if ((dot(PQ2, PQ2) > rr * e2 * e2) & (dot(PQ2, PQA) > 0)) return false; // are on opposite sides of plane through AB with normal PQ
+   if ((dot(PQ3, PQ3) > rr * e3 * e3) & (dot(PQ3, PQB) > 0)) return false; // Same for other two vertices
+ 
+   // Return true (intersection) if no separation at all
+   return true;
+ }
+ 
+ // Approximate test of intersection element with circle/sphere by sampling
+ static bool testElInDist(const SPoint3 p, double limDist, MElement *el)
++>>>>>>> upstream/2.9.3+dfsg1
  {
+   const double limDistSq = limDist*limDist;
  
+   if (el->getDim() == 2) {                                                // 2D?
+     for (int iEd = 0; iEd < el->getNumEdges(); iEd++) {                   // Loop over edges of element
+       std::vector<MVertex*> edgeVert;
+       el->getEdgeVertices(iEd, edgeVert);
+       const SPoint3 A = edgeVert[0]->point();
+       const SPoint3 B = edgeVert[1]->point();
+       if (testSegSphereIntersect(A, B, p, limDistSq)) return true;
+     }
+   }
+   else {                                                                  // 3D
+     for (int iFace = 0; iFace < el->getNumFaces(); iFace++) {             // Loop over faces of element
+       std::vector<MVertex*> faceVert;
+       el->getFaceVertices(iFace, faceVert);
+       const SPoint3 A = faceVert[0]->point();
+       const SPoint3 B = faceVert[1]->point();
+       const SPoint3 C = faceVert[2]->point();
+       if (faceVert.size() == 3)
+         if (testTriSphereIntersect(A, B, C, p, limDistSq)) return true;
+       else {
+         const SPoint3 D = faceVert[3]->point();
+         if (testTriSphereIntersect(A, B, C, p, limDistSq) ||
+             testTriSphereIntersect(A, C, D, p, limDistSq)) return true;
+       }
+     }
+   }
+ 
+   return false;
+ }
+ 
++<<<<<<< HEAD
++=======
+ // Get neighbours of element (computes and store them only if needed)
+ static void getElementNeighbours(MElement *el, const vertElVecMap &v2e,
+                                  elElSetMap &e2e, elSet &neighbours)
+ {
+   elElSetMap::iterator it = e2e.find(el);
+   if (it == e2e.end()) {                                                          // If not in e2e, compute and store
+     neighbours.clear();
+     for (int i = 0; i < el->getNumPrimaryVertices(); ++i) {
+       const elVec &adjEl = v2e.find(el->getVertex(i))->second;
+       for(elVecConstIter itA = adjEl.begin(); itA != adjEl.end(); itA++)
+         if (*itA != el) neighbours.insert(*itA);
+     }
+     e2e.insert(std::pair<MElement*, elSet>(el, neighbours));
+   }
+   else neighbours = it->second;
+ }
+ 
+ static elSet getSurroundingBlob(MElement *el, int maxLayers,
+                                 const vertElVecMap &vertex2elements,
+                                 elElSetMap &element2elements, const double distFactor,
+                                 int minLayers, bool optPrimSurfMesh)
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    const SPoint3 p = el->barycenter(true);
    const double dist = el->maxDistToStraight();
    const double limDist = ((optPrimSurfMesh && (dist < 1.e-10)) ?
                            el->getOuterRadius() : dist) * distFactor;
  
-   std::set<MElement*> blob;
-   std::list<MElement*> currentLayer, lastLayer;
+   elSet blob, currentLayer, lastLayer, outOfDist;
  
    blob.insert(el);
-   lastLayer.push_back(el);
-   for (int d = 0; d < depth; ++d) {
+   lastLayer.insert(el);
+   for (int d = 0; d < maxLayers; ++d) {
      currentLayer.clear();
++<<<<<<< HEAD
 +    for (std::list<MElement*>::iterator it = lastLayer.begin();
 +         it != lastLayer.end(); ++it) {
 +      for (int i = 0; i < (*it)->getNumPrimaryVertices(); ++i) {
 +        const std::vector<MElement*> &neighbours = vertex2elements.find
 +          ((*it)->getVertex(i))->second;
 +        for (std::vector<MElement*>::const_iterator itN = neighbours.begin();
 +             itN != neighbours.end(); ++itN){
 +          if ((d < forceDepth) || testElInDist(p, limDist, *itN)){
 +            // Assume that if an el is too far, its neighbours are too far as well
 +            if (blob.insert(*itN).second) currentLayer.push_back(*itN);
++=======
+     for (elSetIter it = lastLayer.begin(); it != lastLayer.end(); ++it) {             // Loop over elements in last layer
+       elSet neighbours;
+       getElementNeighbours(*it, vertex2elements, element2elements, neighbours);
+       for (elSetIter itN = neighbours.begin(); itN != neighbours.end(); ++itN) {      // Loop over neighbours
+         if (lastLayer.find(*itN) == lastLayer.end()) {                                // If neighbour already in last layer, skip
+           bool isInserted = false;
+           if (d < minLayers) isInserted = blob.insert(*itN).second;                   // Below minLayers: insert neighbour in blob
+           else if (outOfDist.find(*itN) == outOfDist.end()) {                         // Above minLayers: check distance criterion
+             if (testElInDist(p, limDist, *itN))
+               isInserted = blob.insert(*itN).second;
+             else
+               outOfDist.insert(*itN);
++>>>>>>> upstream/2.9.3+dfsg1
            }
+           if (isInserted) currentLayer.insert(*itN);                                  // If inserted in blob, insert in current layer
          }
        }
      }
@@@ -273,14 -359,15 +422,22 @@@ static std::vector<elSetVertSetPair> ge
  
    Msg::Info("Starting blob generation from %i bad elements...", badElements.size());
  
+   elElSetMap element2elements;                                                            // Element to element connectivity, built progressively
+ 
    // Contruct primary blobs
    Msg::Info("Constructing %i primary blobs", badElements.size());
-   std::vector<std::set<MElement*> > primBlobs;
+   std::vector<elSet> primBlobs;
    primBlobs.reserve(badElements.size());
++<<<<<<< HEAD
 +  for (std::set<MElement*>::const_iterator it = badElements.begin(); it != badElements.end(); ++it) {
 +    //const int minLayers = ((*it)->getDim() == 3) ? 1 : 0;
 +    const int minLayers = 3;
 +    primBlobs.push_back(getSurroundingBlob(*it, depth, vertex2elements,
++=======
+   for (elSet::const_iterator it = badElements.begin(); it != badElements.end(); ++it) {
+     const int minLayers = ((*it)->getDim() == 3) ? 1 : 0;
+     primBlobs.push_back(getSurroundingBlob(*it, depth, vertex2elements, element2elements,
++>>>>>>> upstream/2.9.3+dfsg1
                                  distFactor, minLayers, optPrimSurfMesh));
    }
  
@@@ -366,12 -452,14 +522,23 @@@ static void optimizeConnectedBlobs(cons
      if (temp.mesh.nPC() == 0)
        Msg::Info("Blob %i has no degree of freedom, skipping", i+1);
      else
++<<<<<<< HEAD
 +      success = temp.optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN,
 +                              p.BARRIER_MAX, false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax, p.discrTolerance);
 +    if (success >= 0 && p.BARRIER_MIN_METRIC > 0) {
 +      Msg::Info("Jacobian optimization succeed, starting svd optimization");
 +      success = temp.optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN_METRIC, p.BARRIER_MAX,
 +                              true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance);
++=======
+       success = temp.optimize(p.weight, p.optCADWeight, p.BARRIER_MIN, p.BARRIER_MAX,
+                               false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,
+                               p.discrTolerance);
+     if (success >= 0 && p.BARRIER_MIN_METRIC > 0) {
+       Msg::Info("Jacobian optimization succeed, starting svd optimization");
+       success = temp.optimize(p.weight, p.optCADWeight, p.BARRIER_MIN_METRIC, p.BARRIER_MAX,
+                               true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,
+                               p.discrTolerance);
++>>>>>>> upstream/2.9.3+dfsg1
      }
      double minJac, maxJac, distMaxBND, distAvgBND;
      temp.recalcJacDist();
@@@ -408,107 -496,6 +575,110 @@@ static MElement *getWorstElement(elSet 
    return worstEl;
  }
  
++<<<<<<< HEAD
 +static std::set<MVertex *> getPrimBndVertices
 +  (std::set<MElement*> &elements,
 +   const std::map<MVertex*, std::vector<MElement*> > &vertex2elements)
 +{
 +  std::set<MVertex*> bnd;
 +  for (std::set<MElement*>::iterator itE = elements.begin(); itE != elements.end(); ++itE) {
 +    for (int i = 0; i < (*itE)->getNumPrimaryVertices(); ++i) {
 +      const std::vector<MElement*> &neighbours = vertex2elements.find
 +        ((*itE)->getVertex(i))->second;
 +      for (size_t k = 0; k < neighbours.size(); ++k) {
 +        if (elements.find(neighbours[k]) == elements.end()) {
 +            bnd.insert((*itE)->getVertex(i));
 +        }
 +      }
 +    }
 +  }
 +  return bnd;
 +}
 +
 +static std::set<MElement*> getSurroundingBlob3D
 +  (MElement *el, int depth,
 +   const std::map<MVertex*, std::vector<MElement*> > &vertex2elements,
 +   const double distFactor)
 +{
 +  const double limDist = el->maxDistToStraight() * distFactor;
 +
 +  std::set<MElement*> blob;
 +  std::list<MElement*> currentLayer, lastLayer;
 +
 +  std::list<SPoint3> seedPts;
 +
 +  blob.insert(el);
 +  lastLayer.push_back(el);
 +  for (int d = 0; d < depth; ++d) {
 +    currentLayer.clear();
 +    for (std::list<MElement*>::iterator it = lastLayer.begin();
 +         it != lastLayer.end(); ++it) {
 +      for (int i = 0; i < (*it)->getNumPrimaryVertices(); ++i) {
 +        const std::vector<MElement*> &neighbours = vertex2elements.find
 +          ((*it)->getVertex(i))->second;
 +        for (std::vector<MElement*>::const_iterator itN = neighbours.begin();
 +             itN != neighbours.end(); ++itN) {
 +          // Check distance from all seed points
 +          SPoint3 pt = (*itN)->barycenter();
 +          bool nearSeed = false;
 +          for (std::list<SPoint3>::const_iterator itS = seedPts.begin();
 +               itS != seedPts.end(); ++itS)
 +            if (itS->distance(pt) < limDist) {
 +              nearSeed = true;
 +              break;
 +            }
 +          if ((d == 0) || nearSeed){
 +            // Assume that if an el is too far, its neighbours are too far as well
 +            if (blob.insert(*itN).second) currentLayer.push_back(*itN);
 +          }
 +        }
 +      }
 +    }
 +    if (d == 0) // Elts of 1st layer are seed points
 +      for (std::list<MElement*>::iterator itL = currentLayer.begin();
 +           itL != currentLayer.end(); ++itL)
 +        seedPts.push_back((*itL)->barycenter_infty());
 +    lastLayer = currentLayer;
 +  }
 +
 +  return blob;
 +
 +}
 +
 +static std::set<MElement*> addBlobLayer
 +  (std::set<MElement*> &blob,
 +   const std::map<MVertex*, std::vector<MElement*> > &vertex2elements)
 +{
 +  std::set<MElement*> layer;
 +  const std::set<MElement*> initBlob = blob;
 +
 +  for (std::set<MElement*>::const_iterator it = initBlob.begin();
 +       it != initBlob.end(); ++it)
 +    for (int i = 0; i < (*it)->getNumPrimaryVertices(); ++i) {
 +      const std::vector<MElement*> &neighbours = vertex2elements.find
 +        ((*it)->getVertex(i))->second;
 +      for (std::vector<MElement*>::const_iterator itN = neighbours.begin();
 +           itN != neighbours.end(); ++itN)
 +        if (blob.insert(*itN).second) layer.insert(*itN);
 +    }
 +  return layer;
 +}
 +
 +static bool detectNewBrokenElement(std::set<MElement*> &layer,
 +                                   std::set<MElement*> &badasses,
 +                                   OptHomParameters &p)
 +{
 +  for (std::set<MElement*>::iterator it=layer.begin(); it!=layer.end(); it++)
 +    if (badasses.find(*it) == badasses.end()) {
 +      double jmin, jmax, val;
 +      (*it)->scaledJacRange(jmin,jmax);
 +      if ((jmin < p.BARRIER_MIN) || (jmax > p.BARRIER_MAX)) return true;
 +    }
 +  return false;
 +}
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  static void optimizeOneByOne
    (const std::map<MVertex*, std::vector<MElement *> > &vertex2elements,
     const std::map<MElement*,GEntity*> &element2entity,
@@@ -608,12 -540,14 +723,23 @@@
        std::ostringstream ossI1;
        ossI1 << "initial_blob-" << iBadEl << ".msh";
        opt->mesh.writeMSH(ossI1.str().c_str());
++<<<<<<< HEAD
 +      success = opt->optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN,
 +                              p.BARRIER_MAX, false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance);
 +      if (success >= 0 && p.BARRIER_MIN_METRIC > 0) {
 +        Msg::Info("Jacobian optimization succeed, starting svd optimization");
 +        success = opt->optimize(p.weightFixed, p.weightFree, p.optCADWeight, p.BARRIER_MIN_METRIC,
 +                                p.BARRIER_MAX, true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,p.discrTolerance);
++=======
+       success = opt->optimize(p.weight, p.optCADWeight, p.BARRIER_MIN, p.BARRIER_MAX,
+                               false, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,
+                               p.discrTolerance);
+       if (success >= 0 && p.BARRIER_MIN_METRIC > 0) {
+         Msg::Info("Jacobian optimization succeed, starting svd optimization");
+         success = opt->optimize(p.weight, p.optCADWeight, p.BARRIER_MIN_METRIC, p.BARRIER_MAX,
+                                 true, samples, p.itMax, p.optPassMax, p.optCAD, p.optCADDistMax,
+                                 p.discrTolerance);
++>>>>>>> upstream/2.9.3+dfsg1
        }
  
        // Measure min and max Jac., update mesh
@@@ -653,6 -586,13 +778,16 @@@
  #endif
  
  #include "OptHomIntegralBoundaryDist.h"
++<<<<<<< HEAD
++=======
+ 
+ //double ComputeDistanceToGeometry (GModel* gm)
+ //{
+ //  return distanceToGeometry(gm);
+ //}
+ 
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  double ComputeDistanceToGeometry (GEntity *ge , int distanceDefinition, double tolerance)
  {
    double maxd = 0.0;
@@@ -670,7 -610,8 +805,12 @@@
        }
      }
    }
++<<<<<<< HEAD
 +  if (distanceDefinition == 2 && NUM) return sum / (double)NUM;
++=======
+   if (distanceDefinition == 2) return sum;
+   if (distanceDefinition == 6) return sum;
++>>>>>>> upstream/2.9.3+dfsg1
    return maxd;
  }
  
@@@ -689,8 -630,12 +829,17 @@@ void HighOrderMeshOptimizer(GModel *gm
  
    std::map<MVertex*, std::vector<MElement *> > vertex2elements;
    std::map<MElement*,GEntity*> element2entity;
++<<<<<<< HEAD
 +  std::set<MElement*> badasses;
 +  double maxdist = 0;
++=======
+   elSet badasses;
+   double maxdist = 0.;                                                  // TODO: To be cleaned?
+ 
+   std::map<MElement*,double> distances;
+   distanceFromElementsToGeometry(gm, p.dim,distances);
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    for (int iEnt = 0; iEnt < entities.size(); ++iEnt) {
      GEntity* &entity = entities[iEnt];
      if (entity->dim() != p.dim || (p.onlyVisible && !entity->getVisibility())) continue;
@@@ -698,21 -643,22 +847,36 @@@
                entity->tag());
      calcVertex2Elements(p.dim,entity,vertex2elements);
      if (p.optPrimSurfMesh) calcElement2Entity(entity,element2entity);
-     for (int iEl = 0; iEl < entity->getNumMeshElements();iEl++) { // Detect bad elements
+     for (int iEl = 0; iEl < entity->getNumMeshElements();iEl++) {       // Detect bad elements
        double jmin, jmax;
        MElement *el = entity->getMeshElement(iEl);
 +      const double DISTE =computeBndDist(el,2,fabs(p.discrTolerance));
 +      //      printf("Element %d Distance %12.5E\n",iEl,DISTE);
 +      maxdist = std::max(DISTE, maxdist);
        if (el->getDim() == p.dim) {
++<<<<<<< HEAD
 +	if (p.optCAD && DISTE > p.optCADDistMax)
 +	  badasses.insert(el);
 +
 +	el->scaledJacRange(jmin, jmax, p.optPrimSurfMesh ? entity : 0);
 +	if (p.BARRIER_MIN_METRIC > 0) jmax = jmin;
 +	if (jmin < p.BARRIER_MIN || jmax > p.BARRIER_MAX){
 +	  badasses.insert(el);
 +        }
++=======
+ 	// FIXME TEST
+ 	//        badasses.insert(el);
+         if (p.optCAD) {
+ 	  //          const double DISTE =computeBndDist(el,2,fabs(p.discrTolerance));
+ 	  const double DISTE =distances[el];
+ 	  //	  if (DISTE > 0)printf("El %d dist %12.5E vs %12.5E\n",iEl,DISTE,p.optCADDistMax);
+           maxdist = std::max(DISTE, maxdist);
+           if (DISTE > p.optCADDistMax) badasses.insert(el);
+         }
+         el->scaledJacRange(jmin, jmax, p.optPrimSurfMesh ? entity : 0);
+         if (p.BARRIER_MIN_METRIC > 0) jmax = jmin;
+         if (jmin < p.BARRIER_MIN || jmax > p.BARRIER_MAX) badasses.insert(el);
++>>>>>>> upstream/2.9.3+dfsg1
        }
      }
    }
diff --cc contrib/HighOrderMeshOptimizer/OptHomRun.h
index f1d172f,df3e460..e8b3c80
--- a/contrib/HighOrderMeshOptimizer/OptHomRun.h
+++ b/contrib/HighOrderMeshOptimizer/OptHomRun.h
@@@ -65,17 -64,19 +64,29 @@@ struct OptHomParameters 
    double CPU; // Time for optimization
  
    OptHomParameters ()
-     : BARRIER_MIN_METRIC(-1.), BARRIER_MIN(0.1), BARRIER_MAX(2.0), weightFixed(1000.),
-       weightFree (1.), nbLayers (6) , dim(3) , itMax(300), onlyVisible(true),
+     : BARRIER_MIN_METRIC(-1.), BARRIER_MIN(0.1), BARRIER_MAX(2.0), weight(1.),
+       nbLayers (6) , dim(3) , itMax(300), onlyVisible(true),
        distanceFactor(12), fixBndNodes(false), strategy(0), maxAdaptBlob(3),
++<<<<<<< HEAD
 +      adaptBlobLayerFact(2.), adaptBlobDistFact(2.), optPrimSurfMesh(false),optCAD(false),
 +      optCADWeight(1000.),optCADDistMax(1.e22),discrTolerance(1.e-4)
++=======
+       adaptBlobLayerFact(2.), adaptBlobDistFact(2.), optPrimSurfMesh(false), optCAD(false),
+       optCADWeight(1000.), optCADDistMax(1.e22), discrTolerance(1.e-4)
++>>>>>>> upstream/2.9.3+dfsg1
    {
    }
  };
  
  void HighOrderMeshOptimizer(GModel *gm, OptHomParameters &p);
++<<<<<<< HEAD
 +// distanceDefinition 1) Hausdorff 2) Area/Length 3) Frechet (not done)
 +double ComputeDistanceToGeometry (GEntity *ge , int distanceDefinition,double tolerance) ;
++=======
+ void HighOrderMeshOptimizerNew(GModel *gm, OptHomParameters &p);
+ // distanceDefinition 1) Hausdorff 2) Area/Length 3) Frechet (not done)
+ double ComputeDistanceToGeometry (GEntity *ge , int distanceDefinition,double tolerance) ;
+ //double ComputeDistanceToGeometry (GModel*gm);
++>>>>>>> upstream/2.9.3+dfsg1
  
  #endif
diff --cc contrib/mobile/Android/AndroidManifest.xml
index 6d55282,2b76786..0451d62
--- a/contrib/mobile/Android/AndroidManifest.xml
+++ b/contrib/mobile/Android/AndroidManifest.xml
@@@ -1,7 -1,7 +1,12 @@@
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="org.geuz.onelab"
++<<<<<<< HEAD
 +          android:versionCode="5"
 +          android:versionName="1.0.6"
++=======
+           android:versionCode="10"
+           android:versionName="1.0.11"
++>>>>>>> upstream/2.9.3+dfsg1
            android:installLocation="auto" >
    
    <uses-sdk android:minSdkVersion="14"
@@@ -16,7 -16,8 +21,12 @@@
                 android:logo="@drawable/ic_launcher"
                 android:allowBackup="true" >
      <activity android:name=".SplashScreen"
++<<<<<<< HEAD
 +              android:label="@string/title_activity_main">
++=======
+               android:label="@string/title_activity_main"
+               android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
++>>>>>>> upstream/2.9.3+dfsg1
        <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
diff --cc contrib/mobile/Android/res/layout/splash.xml
index 4091ae1,18ce462..803e42f
--- a/contrib/mobile/Android/res/layout/splash.xml
+++ b/contrib/mobile/Android/res/layout/splash.xml
@@@ -1,7 -1,8 +1,12 @@@
  <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
++<<<<<<< HEAD
 +                android:layout_height="match_parent" >
++=======
+                 android:layout_height="match_parent" 
+                 android:background="@color/black">
++>>>>>>> upstream/2.9.3+dfsg1
    <ImageView android:id="@+id/splashImage"
               android:layout_centerInParent="true"
               android:layout_width="wrap_content"
diff --cc contrib/mobile/Android/src/org/geuz/onelab/AboutActivity.java
index 708de71,a65dd0b..00740eb
--- a/contrib/mobile/Android/src/org/geuz/onelab/AboutActivity.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/AboutActivity.java
@@@ -9,7 -9,8 +9,12 @@@ import android.webkit.WebView
  
  public class AboutActivity extends Activity{
  
++<<<<<<< HEAD
 +    protected void onCreate(android.os.Bundle savedInstanceState) {
++=======
+     protected void onCreate(android.os.Bundle savedInstanceState)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super.onCreate(savedInstanceState);
          getActionBar().setDisplayHomeAsUpEnabled(true);
          WebView webview = new WebView(this);
@@@ -17,19 -18,24 +22,39 @@@
          String aboutGetDP = Gmsh.getAboutGetDP();
          String aboutOnelab = "<p> </p><center><h3>Onelab/Mobile</h3>";
          try {
++<<<<<<< HEAD
 +            aboutOnelab += "Version "+this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
++=======
+             aboutOnelab += "Version " + this.getPackageManager().
+                 getPackageInfo(this.getPackageName(), 0).versionName;
++>>>>>>> upstream/2.9.3+dfsg1
          }
          catch (android.content.pm.PackageManager.NameNotFoundException e) {
              aboutOnelab += "Version ?.?.?";
          }
++<<<<<<< HEAD
 +        aboutOnelab += "<p>Copyright (C) 2014 Christophe Geuzaine and Maxime Graulich, University of Liège</p>";
 +        aboutOnelab += "<p>Visit <a href=\"http://onelab.info/\">http://onelab.info/</a> for more information</p>";
 +        aboutOnelab += "<p> </p><p>This version of Onelab/Mobile contains:</p>";
 +        webview.loadDataWithBaseURL("", aboutOnelab + aboutGmsh + aboutGetDP, "text/html", "UTF-8", "");
 +        setContentView(webview);
 +    }
 +    @Override
 +	public boolean onMenuItemSelected(int featureId, MenuItem item) {
++=======
+         aboutOnelab += "<p>Copyright (C) 2014-2015 Christophe Geuzaine and Maxime Graulich, ";
+         aboutOnelab += "University of Liège</p>";
+         aboutOnelab += "<p>Visit <a href=\"http://onelab.info/\">http://onelab.info/</a> ";
+         aboutOnelab += "for more information</p>";
+         aboutOnelab += "<p> </p><p>This version of Onelab/Mobile contains:</p>";
+         webview.loadDataWithBaseURL("", aboutOnelab + aboutGmsh + aboutGetDP,
+                                     "text/html", "UTF-8", "");
+         setContentView(webview);
+     }
+     @Override
+     public boolean onMenuItemSelected(int featureId, MenuItem item)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(item.getItemId() == android.R.id.home) {
              Intent returnIntent = new Intent();
              this.setResult(RESULT_CANCELED, returnIntent);
diff --cc contrib/mobile/Android/src/org/geuz/onelab/GLESRender.java
index 7016016,b3af710..ee10bba
--- a/contrib/mobile/Android/src/org/geuz/onelab/GLESRender.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/GLESRender.java
@@@ -27,9 -27,9 +27,15 @@@ public class GLESRender implements Rend
      public void scaleModel(float s) { mGModel.scale(s); }
      public void translateModel(float x, float y) { mGModel.translate(x, y); }
      public void resetModelPosition() { mGModel.resetPosition(); }
++<<<<<<< HEAD
 +    public void viewX() { mGModel.viewX();}
 +    public void viewY() { mGModel.viewY();}
 +    public void viewZ() { mGModel.viewZ();}
++=======
+     public void viewX() { mGModel.viewX(); }
+     public void viewY() { mGModel.viewY(); }
+     public void viewZ() { mGModel.viewZ(); }
++>>>>>>> upstream/2.9.3+dfsg1
  
      // OpenGL ES methods
      public void onDrawFrame(GL10 gl)
@@@ -44,8 -44,8 +50,13 @@@
          _height = height;
      }
      public void onSurfaceCreated(GL10 gl, EGLConfig config) { }
++<<<<<<< HEAD
 +    public void needScreenshot() {_screenshot = null; _needScreenshot = true;}
 +    public Bitmap getScreenshot(){return _screenshot;}
++=======
+     public void needScreenshot() { _screenshot = null; _needScreenshot = true; }
+     public Bitmap getScreenshot(){ return _screenshot; }
++>>>>>>> upstream/2.9.3+dfsg1
      private void screenshot(GL10 gl)
      {
          _needScreenshot = false;
@@@ -54,16 -54,19 +65,27 @@@
          IntBuffer intBuffer = IntBuffer.wrap(bitmapBuffer);
          intBuffer.position(0);
  
++<<<<<<< HEAD
 +        gl.glReadPixels(0, 0, _width, _height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, intBuffer);
++=======
+         gl.glReadPixels(0, 0, _width, _height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE,
+                         intBuffer);
++>>>>>>> upstream/2.9.3+dfsg1
          int offset1, offset2;
          for (int i = 0; i < _height; i++) {
              offset1 = i * _width;
              offset2 = (_height - i - 1) * _width;
              for (int j = 0; j < _width; j++) {
                  int pixel = bitmapBuffer[offset1 + j];
-                 bitmapSource[offset2 + j] = (pixel & 0xFF00FF00) | (pixel << 16) & 0x00FF0000 | (pixel >> 16) & 0x000000FF;
+                 bitmapSource[offset2 + j] = (pixel & 0xFF00FF00) |
+                     (pixel << 16) & 0x00FF0000 | (pixel >> 16) & 0x000000FF;
              }
          }
++<<<<<<< HEAD
 +        _screenshot = Bitmap.createBitmap(bitmapSource, _width, _height, Bitmap.Config.ARGB_8888);
++=======
+         _screenshot = Bitmap.createBitmap(bitmapSource, _width, _height,
+                                           Bitmap.Config.ARGB_8888);
++>>>>>>> upstream/2.9.3+dfsg1
      }
  }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
index cf7dc24,3d4b9d4..9d54390
--- a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
@@@ -5,38 -5,43 +5,75 @@@ import android.os.Parcel
  import android.os.Parcelable;
  
  public class Gmsh implements Parcelable {
++<<<<<<< HEAD
 +    /** From C / C++ code **/
++=======
+     /** from C/C++ code **/
++>>>>>>> upstream/2.9.3+dfsg1
      static {
          System.loadLibrary("f2cblas");
          System.loadLibrary("f2clapack");
          System.loadLibrary("petsc");
++<<<<<<< HEAD
++=======
+         System.loadLibrary("slepc");
++>>>>>>> upstream/2.9.3+dfsg1
          System.loadLibrary("Gmsh");
          System.loadLibrary("GetDP");
          System.loadLibrary("Onelab");
      }
++<<<<<<< HEAD
 +    private native long init(float fontFactor); // Init Gmsh
 +    private native void loadFile(long ptr, String name); // load a file(OpenProjet)
 +    private native void initView(long ptr, int w, int h); // Called each time the GLView change
 +    private native void drawView(long ptr); // Called each time the GLView request a render
 +    private native void eventHandler(long ptr, int event, float x, float y);
 +    public native String[] getParams(); // return the parameters for onelab
 +    public native int setParam(String type, String name, String value); // change a parameters
 +    public native int setStringOption(String category, String name, String value);
 +    public native int setDoubleOption(String category, String name, double value);
 +    public native int setIntegerOption(String category, String name, int value);
 +    public native String getStringOption(String category, String name);
 +    public native double getDoubleOption(String category, String name);
 +    public native int getIntegerOption(String category, String name);
 +    public native String[] getPView(); // get a list of PViews
 +    public native void setPView(int position, int intervalsType,int visible,int nbIso, float raisez); // Change options for a PView
 +    public native int onelabCB(String action); // Call onelab
 +
 +    public boolean haveAnimation() {return numberOfAnimation() > 1;}
++=======
+     // init Gmsh
+     private native long init(float fontFactor);
+     // load a file(OpenProjet)
+     private native void loadFile(long ptr, String name);
+     // called each time the GLView changes
+     private native void initView(long ptr, int w, int h);
+     // called each time the GLView requests a render
+     private native void drawView(long ptr);
+     private native void eventHandler(long ptr, int event, float x, float y);
+     // return the parameters for onelab
+     public native String[] getParams();
+     // change a parameter
+     public native int setParam(String type, String name, String value);
+     // access Gmsh options
+     public native int setStringOption(String category, String name, String value, int index);
+     public native int setDoubleOption(String category, String name, double value, int index);
+     public native int setIntegerOption(String category, String name, int value, int index);
+     public native String getStringOption(String category, String name, int index);
+     public native double getDoubleOption(String category, String name, int index);
+     public native int getIntegerOption(String category, String name, int index);
+     // call onelab
+     public native int onelabCB(String action);
+     public boolean haveAnimation() { return numberOfAnimation() > 1; }
++>>>>>>> upstream/2.9.3+dfsg1
      public native int numberOfAnimation();
      public native int animationNext();
      public native int animationPrev();
      public native void setAnimation(int animation);
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      public static native String getAboutGmsh();
      public static native String getAboutGetDP();
  
@@@ -76,9 -81,9 +113,15 @@@
      {
          this.eventHandler(ptr, 3, x, y);
      }
++<<<<<<< HEAD
 +    public void viewX() { this.eventHandler(ptr, 5, 0, 0);}
 +    public void viewY() { this.eventHandler(ptr, 6, 0, 0);}
 +    public void viewZ() { this.eventHandler(ptr, 7, 0, 0);}
++=======
+     public void viewX() { this.eventHandler(ptr, 5, 0, 0); }
+     public void viewY() { this.eventHandler(ptr, 6, 0, 0); }
+     public void viewZ() { this.eventHandler(ptr, 7, 0, 0); }
++>>>>>>> upstream/2.9.3+dfsg1
      public void endEvent(float x, float y)
      {
          this.eventHandler(ptr, 4, x, y);
@@@ -87,11 -92,13 +130,21 @@@
      {
          this.eventHandler(ptr, 10, 0, 0);
      }
++<<<<<<< HEAD
 +    public void ShowPopup(String message) {
 +        if(handler != null)
 +            handler.obtainMessage(0, message).sendToTarget();
 +    }
 +    public void RequestRender() {
++=======
+     public void ShowPopup(String message)
+     {
+         if(handler != null)
+             handler.obtainMessage(0, message).sendToTarget();
+     }
+     public void RequestRender()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(handler != null)
              handler.obtainMessage(1).sendToTarget();
      }
@@@ -110,7 -117,7 +163,11 @@@
      {
          this.ptr = in.readLong();
      }
++<<<<<<< HEAD
 +    public int describeContents() {return 0;}
++=======
+     public int describeContents() { return 0; }
++>>>>>>> upstream/2.9.3+dfsg1
      public void writeToParcel(Parcel out, int flags)
      {
          out.writeLong(this.ptr);
diff --cc contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java
index 7648795,5f758e4..dca9cb2
--- a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java
@@@ -40,13 -39,15 +39,25 @@@ public class MainActivity extends Activ
      private OptionsFragment _optionsFragment;
      private ArrayList<String> _errors = new ArrayList<String>();
      private Dialog _errorDialog;
++<<<<<<< HEAD
 +
 +    public MainActivity() { }
 +
 +    @Override
 +	protected void onCreate(Bundle savedInstanceState) {
 +        super.onCreate(savedInstanceState);
 +        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
++=======
+ 
+     public MainActivity() { }
+ 
+     @Override
+     protected void onCreate(Bundle savedInstanceState)
+     {
+         super.onCreate(savedInstanceState);
+         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+                              WindowManager.LayoutParams.FLAG_FULLSCREEN);
++>>>>>>> upstream/2.9.3+dfsg1
          getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
          setContentView(R.layout.main_activity_layout);
          _gmsh = new Gmsh(mainHandler, getResources().getDisplayMetrics().density);
@@@ -57,7 -58,8 +68,12 @@@
          Intent intent = getIntent();
      	Bundle extras = intent.getExtras();
      	if(savedInstanceState != null);
++<<<<<<< HEAD
 +    	else if(intent.getAction() != null && intent.getAction().equals(Intent.ACTION_VIEW)) {
++=======
+     	else if(intent.getAction() != null &&
+                 intent.getAction().equals(Intent.ACTION_VIEW)) {
++>>>>>>> upstream/2.9.3+dfsg1
              String tmp = intent.getData().getPath();
              _gmsh.load(tmp);
      	}
@@@ -67,31 -69,36 +83,61 @@@
              String tmp = extras.getString("file");
              _gmsh.load(tmp);
      	}
++<<<<<<< HEAD
 +    	else
 +            this.finish();
 +    	_twoPane = (findViewById(R.id.parameter_fragment) != null);
 +    	_modelFragment = ModelFragment.newInstance(_gmsh);
 +        getFragmentManager().beginTransaction().replace(R.id.model_fragment, _modelFragment).commit();
 +    	if(_twoPane) {
 +            _optionsFragment = OptionsFragment.newInstance(_gmsh);
 +            getFragmentManager().beginTransaction().replace(R.id.parameter_fragment, _optionsFragment).commit();
 +            _optionsFragment.setOnOptionsChangedListener(new OptionsFragment.OnOptionsChangedListener() {
 +
 +                    public void OnOptionsChanged() {
 +                        _modelFragment.requestRender();
 +                    }
 +    		});
++=======
+     	else{
+             this.finish();
+         }
+     	_twoPane = (findViewById(R.id.parameter_fragment) != null);
+     	_modelFragment = ModelFragment.newInstance(_gmsh);
+         getFragmentManager().beginTransaction().replace
+             (R.id.model_fragment, _modelFragment).commit();
+     	if(_twoPane) {
+             _optionsFragment = OptionsFragment.newInstance(_gmsh);
+             getFragmentManager().beginTransaction().replace
+                 (R.id.parameter_fragment, _optionsFragment).commit();
+             _optionsFragment.setOnOptionsChangedListener
+                 (new OptionsFragment.OnOptionsChangedListener(){
+                         public void OnOptionsChanged() {
+                             _modelFragment.requestRender();
+                         }
+                     });
++>>>>>>> upstream/2.9.3+dfsg1
      	}
      }
  
      @Override
++<<<<<<< HEAD
 +	protected void onSaveInstanceState(Bundle outState) {
++=======
+     protected void onSaveInstanceState(Bundle outState)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          outState.putBoolean("Compute", _compute);
          super.onSaveInstanceState(outState);
      }
  
      @Override
++<<<<<<< HEAD
 +        public boolean onCreateOptionsMenu(Menu menu) {
++=======
+     public boolean onCreateOptionsMenu(Menu menu)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
      	super.onCreateOptionsMenu(menu);
      	if(!_twoPane) {
              _switchFragmentMenuItem = menu.add(R.string.menu_parameters);
@@@ -103,13 -110,17 +149,27 @@@
      	shareMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
          return true;
      }
++<<<<<<< HEAD
 +    @Override
 +	public boolean onMenuOpened(int featureId, Menu menu) {
 +        _modelFragment.postDelay();
 +        return super.onMenuOpened(featureId, menu);
 +    }
 +    @Override
 +        public boolean onMenuItemSelected(int featureId, MenuItem item) {
++=======
+ 
+     @Override
+     public boolean onMenuOpened(int featureId, Menu menu)
+     {
+         _modelFragment.postDelay();
+         return super.onMenuOpened(featureId, menu);
+     }
+ 
+     @Override
+     public boolean onMenuItemSelected(int featureId, MenuItem item)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
      	if (item.getTitle().equals(getString(R.string.menu_parameters))) {
              Intent intent = new Intent(this, OptionsActivity.class);
              intent.putExtra("Gmsh", (Parcelable)_gmsh);
@@@ -128,10 -139,9 +188,16 @@@
      	else if(item.getTitle().equals(getString(R.string.menu_share))) {
              if(this._compute) {
                  AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
++<<<<<<< HEAD
 +                _errorDialog = dialogBuilder.setTitle("Can't show the model list")
 +                    .setMessage("The computation has to complete before you can take a screenshot")
 +                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
 +
++=======
+                 _errorDialog = dialogBuilder.setTitle("Cannot show the model list")
+                     .setMessage("The computation has to complete before you can take a screenshot")
+                     .setPositiveButton("OK", new DialogInterface.OnClickListener() {
++>>>>>>> upstream/2.9.3+dfsg1
                              public void onClick(DialogInterface dialog, int which) {
                                  dialog.dismiss();
                              }
@@@ -140,7 -150,8 +206,12 @@@
              }
              else {
                  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss");
++<<<<<<< HEAD
 +                File file = new File(this.getExternalFilesDir(null), "onelab-screenshot-"+dateFormat.format(new Date())+".png");
++=======
+                 File file = new File(this.getExternalFilesDir(null),
+                                      "onelab-screenshot-"+dateFormat.format(new Date())+".png");
++>>>>>>> upstream/2.9.3+dfsg1
                  file.setReadable(true, false);
                  _modelFragment.takeScreenshot(file);
                  Intent shareIntent = new Intent();
@@@ -153,10 -164,9 +224,16 @@@
          else if(item.getItemId() == android.R.id.home) {
              if(this._compute) {
                  AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
++<<<<<<< HEAD
 +                _errorDialog = dialogBuilder.setTitle("Can't show the model list")
 +                    .setMessage("The computation has to complete before you can select another model")
 +                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
 +
++=======
+                 _errorDialog = dialogBuilder.setTitle("Cannot show the model list")
+                     .setMessage("The computation has to complete before you can select another model")
+                     .setPositiveButton("OK", new DialogInterface.OnClickListener() {
++>>>>>>> upstream/2.9.3+dfsg1
                              public void onClick(DialogInterface dialog, int which) {
                                  dialog.dismiss();
                              }
@@@ -170,7 -180,8 +247,12 @@@
      }
  
      @Override
++<<<<<<< HEAD
 +	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
++=======
+     protected void onActivityResult(int requestCode, int resultCode, Intent data)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super.onActivityResult(requestCode, resultCode, data);
          switch (requestCode) {
          case 1:
@@@ -180,7 -191,8 +262,12 @@@
          }
      }
  
++<<<<<<< HEAD
 +    public String getRealPathFromURI(Uri contentUri) {
++=======
+     public String getRealPathFromURI(Uri contentUri)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          String[] proj = { MediaStore.Images.Media.DATA };
          Cursor cursor = managedQuery(contentUri, proj, null, null, null);
          int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
@@@ -191,20 -203,23 +278,35 @@@
      private class Run extends AsyncTask<Void, Void, Integer[]> {
  
      	@Override
++<<<<<<< HEAD
 +            protected void onPreExecute() {
++=======
+         protected void onPreExecute()
+         {
++>>>>>>> upstream/2.9.3+dfsg1
              _compute = true;
              _runStopMenuItem.setTitle(R.string.menu_stop);
              super.onPreExecute();
      	}
  
          @Override
++<<<<<<< HEAD
 +            protected Integer[] doInBackground(Void... params) {
++=======
+         protected Integer[] doInBackground(Void... params)
+         {
++>>>>>>> upstream/2.9.3+dfsg1
              _gmsh.onelabCB("compute");
              return new Integer[] {1};
          }
  
          @Override
++<<<<<<< HEAD
 +            protected void onPostExecute(Integer[] result) {
++=======
+         protected void onPostExecute(Integer[] result)
+          {
++>>>>>>> upstream/2.9.3+dfsg1
              //(Vibrator) getSystemService(Context.VIBRATOR_SERVICE).vibrate(350);
              _runStopMenuItem.setTitle(R.string.menu_run);
              _runStopMenuItem.setEnabled(true);
@@@ -215,8 -230,9 +317,14 @@@
          }
  
      }
++<<<<<<< HEAD
 +    private void showError(){
 +    	if(_errors.size()>0){
++=======
+     private void showError()
+     {
+     	if(_errors.size() > 0){
++>>>>>>> upstream/2.9.3+dfsg1
              if(_errorDialog != null && _errorDialog.isShowing()) _errorDialog.dismiss();
              AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
              dialogBuilder.setTitle("Gmsh/GetDP Error(s)")
@@@ -227,25 -243,28 +335,46 @@@
                              _errorDialog.dismiss();
  		        }
                      });
++<<<<<<< HEAD
 +            if(_errors.size()>1)dialogBuilder.setPositiveButton("Show more", new DialogInterface.OnClickListener() {
 +                    public void onClick(DialogInterface dialog, int which) {
 +                        _errors.remove(_errors.size()-1);
 +                        _errorDialog.dismiss();
 +                        showError();
 +                    }
 +                });
++=======
+             if(_errors.size()>1)
+                 dialogBuilder.setPositiveButton("Show more", new DialogInterface.OnClickListener() {
+                         public void onClick(DialogInterface dialog, int which) {
+                             _errors.remove(_errors.size()-1);
+                             _errorDialog.dismiss();
+                             showError();
+                         }
+                     });
++>>>>>>> upstream/2.9.3+dfsg1
              _errorDialog = dialogBuilder.show();
      	}
      }
      @Override
++<<<<<<< HEAD
 +	protected void onPause() {
++=======
+     protected void onPause()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(_compute) notifyComputing();
          super.onPause();
          _notify = true;
      }
  
      @Override
++<<<<<<< HEAD
 +	protected void onResume() {
++=======
+     protected void onResume()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super.onResume();
          NotificationManager mNotificationManager =
              (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
@@@ -254,22 -273,26 +383,41 @@@
      }
  
      @Override
++<<<<<<< HEAD
 +	protected void onStop() {
++=======
+     protected void onStop()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super.onStop();
          if(_compute) notifyComputing();
          _notify = true;
      }
  
      @Override
++<<<<<<< HEAD
 +	public void onLowMemory() {
 +        if(!_compute) return;
 +        _gmsh.onelabCB("stop");
 +        Toast.makeText(this, "Low memory! Computation is going to stop", Toast.LENGTH_LONG).show();
++=======
+     public void onLowMemory()
+     {
+         if(!_compute) return;
+         _gmsh.onelabCB("stop");
+         Toast.makeText(this, "Low memory! Computation is going to stop",
+                        Toast.LENGTH_LONG).show();
++>>>>>>> upstream/2.9.3+dfsg1
          super.onLowMemory();
      }
  
      @Override
++<<<<<<< HEAD
 +	public void onTrimMemory(int level) {
++=======
+     public void onTrimMemory(int level)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(!_compute) return;
          if(level == Activity.TRIM_MEMORY_COMPLETE){
              _gmsh.onelabCB("stop");
@@@ -282,33 -305,42 +430,69 @@@
          super.onTrimMemory(level);
      }
  
++<<<<<<< HEAD
 +    private void notifyComputing(String msg, boolean alert) {
 +        Intent intent = new Intent(this, MainActivity.class);
 +        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
 +        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
++=======
+     private void notifyComputing(String msg, boolean alert)
+     {
+         Intent intent = new Intent(this, MainActivity.class);
+         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+         PendingIntent pendingIntent = PendingIntent.getActivity
+             (this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
++>>>>>>> upstream/2.9.3+dfsg1
          Notification.Builder notifyBuilder = new Notification.Builder(this);
          notifyBuilder.setContentTitle("ONELAB")
              .setContentIntent(pendingIntent)
              .setContentText(msg)
              .setSmallIcon(R.drawable.ic_launcher)
              .setProgress(0, 0, true);
++<<<<<<< HEAD
 +        if(alert) notifyBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);
 +        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 +        mNotificationManager.notify(1337, notifyBuilder.getNotification());
 +    }
 +
 +    private void notifyComputing() {
 +        notifyComputing("Computation in progress", false);
 +    }
 +
 +    private void notifyEndComputing() {
 +        notifyEndComputing("Computation done!");
 +    }
 +
 +    private void notifyEndComputing(String msg) {
 +        Intent intent = new Intent(this, MainActivity.class);
 +        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
 +        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
++=======
+         if(alert)
+             notifyBuilder.setDefaults(Notification.DEFAULT_SOUND |
+                                       Notification.DEFAULT_VIBRATE);
+         NotificationManager mNotificationManager = (NotificationManager)
+             getSystemService(Context.NOTIFICATION_SERVICE);
+         mNotificationManager.notify(1337, notifyBuilder.getNotification());
+     }
+ 
+     private void notifyComputing()
+     {
+         notifyComputing("Computation in progress", false);
+     }
+ 
+     private void notifyEndComputing()
+     {
+         notifyEndComputing("Computation done!");
+     }
+ 
+     private void notifyEndComputing(String msg)
+     {
+         Intent intent = new Intent(this, MainActivity.class);
+         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+         PendingIntent pendingIntent = PendingIntent.getActivity
+             (this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
++>>>>>>> upstream/2.9.3+dfsg1
          Notification.Builder notifyBuilder = new Notification.Builder(this)
              .setSmallIcon(R.drawable.ic_launcher)
              .setContentIntent(pendingIntent)
@@@ -317,7 -349,8 +501,12 @@@
              .setAutoCancel(true)
              .setProgress(0, 0, false)
              .setContentText(msg);
++<<<<<<< HEAD
 +        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
++=======
+         NotificationManager mNotificationManager = (NotificationManager)
+             getSystemService(Context.NOTIFICATION_SERVICE);
++>>>>>>> upstream/2.9.3+dfsg1
          mNotificationManager.notify(1337, notifyBuilder.getNotification());
      }
  
@@@ -345,5 -378,5 +534,9 @@@
              };
          };
  
++<<<<<<< HEAD
 +    public boolean isComputing() {return _compute;}
++=======
+     public boolean isComputing() { return _compute; }
++>>>>>>> upstream/2.9.3+dfsg1
  }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/Model.java
index 42419e3,dfc50a4..ea97be6
--- a/contrib/mobile/Android/src/org/geuz/onelab/Model.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/Model.java
@@@ -11,36 -11,24 +11,56 @@@ class Model 
      private File _file;
      private Bitmap _bitmap;
      private Uri _url;
++<<<<<<< HEAD
 +
 +    public Model(String name, String summary, File file){
++=======
+     public Model(String name, String summary, File file)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          _name = name;
          _summary = summary;
          _file = file;
      }
++<<<<<<< HEAD
 +    public String getName() {
 +        return _name;
 +    }
 +    public String getSummary() {
 +        return _summary;
 +    }
 +    public File getFile() {
 +        return _file;
 +    }
 +    public Bitmap getBitmap() {
 +        return _bitmap;
 +    }
 +    public Uri getUrl() {
 +        return _url;
 +    }
 +    public void setBitmap(File f) {
 +        BitmapFactory.Options options = new BitmapFactory.Options();
 +        options.inSampleSize = 8;
++=======
+     public String getName() { return _name; }
+     public String getSummary() { return _summary; }
+     public File getFile() { return _file; }
+     public Bitmap getBitmap() { return _bitmap; }
+     public Uri getUrl() { return _url; }
+     public void setBitmap(File f)
+     {
+         BitmapFactory.Options options = new BitmapFactory.Options();
++>>>>>>> upstream/2.9.3+dfsg1
          options.inJustDecodeBounds = false;
          options.inPreferredConfig = Bitmap.Config.RGB_565;
          options.inDither = true;
          _bitmap = BitmapFactory.decodeFile(f.toString(), options);
      }
++<<<<<<< HEAD
 +    public void setUrl(Uri url) {
 +        _url = url;
 +    }
++=======
+     public void setUrl(Uri url) { _url = url; }
++>>>>>>> upstream/2.9.3+dfsg1
  }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/ModelArrayAdapter.java
index b6adf77,60dc9c9..63e5399
--- a/contrib/mobile/Android/src/org/geuz/onelab/ModelArrayAdapter.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelArrayAdapter.java
@@@ -14,24 -14,26 +14,44 @@@ import android.widget.TextView
  public class ModelArrayAdapter extends ArrayAdapter<Model> {
      private List<Model> _models;
  
++<<<<<<< HEAD
 +    public ModelArrayAdapter(Context c) {
++=======
+     public ModelArrayAdapter(Context c)
+         {
++>>>>>>> upstream/2.9.3+dfsg1
          super(c, R.layout.model);
          _models = new ArrayList<Model>();
      }
  
      @Override
++<<<<<<< HEAD
 +	public void add(Model model) {
++=======
+     public void add(Model model)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super.add(model);
          _models.add(model);
      }
  
++<<<<<<< HEAD
 +    public Model getModel(int pos) {
 +        return _models.get(pos);
 +    }
 +
 +    @Override
 +	public View getView(int position, View convertView, final ViewGroup parent) {
 +        LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
++=======
+     public Model getModel(int pos) { return _models.get(pos); }
+ 
+     @Override
+     public View getView(int position, View convertView, final ViewGroup parent)
+     {
+         LayoutInflater inflater = (LayoutInflater) parent.getContext()
+             .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
++>>>>>>> upstream/2.9.3+dfsg1
          final Model m = _models.get(position);
          View rowView = inflater.inflate(R.layout.model, parent, false);
          TextView title = (TextView) rowView.findViewById(R.id.title);
@@@ -41,7 -43,6 +61,10 @@@
          if(m.getSummary() != null) description.setText(m.getSummary());
          if(m.getBitmap() != null) icon.setImageBitmap(m.getBitmap());
          else icon.setImageResource(R.drawable.ic_launcher);
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
          return rowView;
      }
  }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/ModelFragment.java
index caf7144,1c7f053..aaa06aa
--- a/contrib/mobile/Android/src/org/geuz/onelab/ModelFragment.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelFragment.java
@@@ -41,10 -41,11 +41,18 @@@ public class ModelFragment extends Frag
      private SeekBar _animationStepper;
  
      final Runnable hideControlsRunnable = new Runnable() {
++<<<<<<< HEAD
 +            public void run() {hideControlBar();}
 +        };
 +
 +    public static ModelFragment newInstance(Gmsh g) {
++=======
+             public void run() { hideControlBar(); }
+         };
+ 
+     public static ModelFragment newInstance(Gmsh g)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          ModelFragment fragment = new ModelFragment();
          Bundle bundle = new Bundle();
          bundle.putParcelable("Gmsh", g);
@@@ -52,18 -53,19 +60,34 @@@
          return fragment;
      }
  
++<<<<<<< HEAD
 +    public ModelFragment() {
 +    }
 +
 +    @Override
 +	public void onCreate(Bundle savedInstanceState) {
 +        super.onCreate(savedInstanceState);
 +        _gmsh = getArguments().getParcelable("Gmsh");
 +    }
 +
 +    @Override
 +	public View onCreateView(LayoutInflater inflater, ViewGroup container,
 +                                 Bundle savedInstanceState) {
++=======
+     public ModelFragment() { }
+ 
+     @Override
+     public void onCreate(Bundle savedInstanceState)
+     {
+         super.onCreate(savedInstanceState);
+         _gmsh = getArguments().getParcelable("Gmsh");
+     }
+ 
+     @Override
+     public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                              Bundle savedInstanceState)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          View rootView = inflater.inflate(R.layout.fragment_model, container, false);
          RelativeLayout glViewLayout = (RelativeLayout)rootView.findViewById(R.id.glViewLayout);
          GLESRender renderer = new GLESRender(_gmsh);
@@@ -74,12 -76,20 +98,29 @@@
          _glView.requestRender();
          _hideDelay = new Handler();
          _gestureDetector = new GestureDetector(getActivity(), new OnGestureListener() {
++<<<<<<< HEAD
 +                public boolean onSingleTapUp(MotionEvent e) { return false; } // UNUSED Auto-generated method stub
 +                public void onShowPress(MotionEvent e) {} // UNUSED Auto-generated method stub
 +                public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } // UNUSED Auto-generated method stub
 +                public void onLongPress(MotionEvent e) {} // UNUSED Auto-generated method stub
 +                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } // UNUSED Auto-generated method stub
 +                public boolean onDown(MotionEvent e) { return false; } // UNUSED Auto-generated method stub
++=======
+                 // UNUSED Auto-generated method stub
+                 public boolean onSingleTapUp(MotionEvent e) { return false; }
+                 // UNUSED Auto-generated method stub
+                 public void onShowPress(MotionEvent e) {}
+                 // UNUSED Auto-generated method stub
+                 public boolean onScroll(MotionEvent e1, MotionEvent e2,
+                                         float distanceX, float distanceY) { return false; }
+                 // UNUSED Auto-generated method stub
+                 public void onLongPress(MotionEvent e) {}
+                 // UNUSED Auto-generated method stub
+                 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
+                                        float velocityY) { return false; }
+                 // UNUSED Auto-generated method stub
+                 public boolean onDown(MotionEvent e) { return false; }
++>>>>>>> upstream/2.9.3+dfsg1
              });
          _gestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
                  public boolean onSingleTapConfirmed(MotionEvent e) {
@@@ -89,11 -99,12 +130,20 @@@
                          showControlBar();
                      return true;
                  }
++<<<<<<< HEAD
 +                public boolean onDoubleTapEvent(MotionEvent e) { return false; } // UNUSED Auto-generated method stub
 +                public boolean onDoubleTap(MotionEvent e) { return false; } // UNUSED Auto-generated method stub
 +            });
 +        _glView.setOnTouchListener(new View.OnTouchListener() {
 +
++=======
+                 // UNUSED Auto-generated method stub
+                 public boolean onDoubleTapEvent(MotionEvent e) { return false; }
+                 // UNUSED Auto-generated method stub
+                 public boolean onDoubleTap(MotionEvent e) { return false; }
+             });
+         _glView.setOnTouchListener(new View.OnTouchListener() {
++>>>>>>> upstream/2.9.3+dfsg1
                  public boolean onTouch(View v, MotionEvent event) {
                      return _gestureDetector.onTouchEvent(event);
                  }
@@@ -106,7 -117,9 +156,13 @@@
          rotationButton.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                      boolean rotate = !_glView.getRotate();
++<<<<<<< HEAD
 +                    ((ImageButton)v).setBackgroundResource((rotate)?R.drawable.icon_translate:R.drawable.icon_rotate);
++=======
+                     ((ImageButton)v).setBackgroundResource(rotate ?
+                                                            R.drawable.icon_translate :
+                                                            R.drawable.icon_rotate);
++>>>>>>> upstream/2.9.3+dfsg1
                      _glView.setRotate(rotate);
                  }
              });
@@@ -142,15 -155,17 +198,27 @@@
               RelativeLayout.LayoutParams.WRAP_CONTENT);
          layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
          glViewLayout.addView(_progressLayout, layoutParams);
++<<<<<<< HEAD
 +        _controlBarLayout = (LinearLayout) getActivity().getLayoutInflater().inflate(R.layout.control_bar, null);
++=======
+         _controlBarLayout = (LinearLayout) getActivity().getLayoutInflater()
+             .inflate(R.layout.control_bar, null);
++>>>>>>> upstream/2.9.3+dfsg1
          final ImageButton prevButton = (ImageButton)_controlBarLayout.findViewById(R.id.controlPrev);
          final ImageButton playPauseButton = (ImageButton)_controlBarLayout.findViewById(R.id.controlPlay);
          final ImageButton nextButton = (ImageButton)_controlBarLayout.findViewById(R.id.controlNext);
          _animationStepper = (SeekBar)_controlBarLayout.findViewById(R.id.controlStepper);
          _animationStepper.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
++<<<<<<< HEAD
 +
 +                public void onStopTrackingTouch(SeekBar seekBar) {} // UNUSED Auto-generated method stub
 +                public void onStartTrackingTouch(SeekBar seekBar) {} // UNUSED Auto-generated method stub
++=======
+                 // UNUSED Auto-generated method stub
+                 public void onStopTrackingTouch(SeekBar seekBar) {}
+                 // UNUSED Auto-generated method stub
+                 public void onStartTrackingTouch(SeekBar seekBar) {}
++>>>>>>> upstream/2.9.3+dfsg1
                  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                      if(fromUser) {
                          postDelay();
@@@ -207,15 -222,19 +275,31 @@@
          this._controlBarLayout.setVisibility(View.INVISIBLE);
          return rootView;
      }
++<<<<<<< HEAD
 +    public void postDelay(int delay) {
 +        _hideDelay.removeCallbacks(hideControlsRunnable);
 +        _hideDelay.postDelayed(hideControlsRunnable, delay);
 +    }
 +    public void postDelay() {
 +        this.postDelay(6000);
 +    }
 +    public void showControlBar() {
 +        if(getActivity() == null || ((MainActivity)getActivity()).isComputing() || !_gmsh.haveAnimation()) return;
++=======
+     public void postDelay(int delay)
+     {
+         _hideDelay.removeCallbacks(hideControlsRunnable);
+         _hideDelay.postDelayed(hideControlsRunnable, delay);
+     }
+     public void postDelay()
+     {
+         this.postDelay(6000);
+     }
+     public void showControlBar()
+     {
+         if(getActivity() == null || ((MainActivity)getActivity()).isComputing() ||
+            !_gmsh.haveAnimation()) return;
++>>>>>>> upstream/2.9.3+dfsg1
          _controlBarLayout.setEnabled(true);
          _animationStepper.setMax(_gmsh.numberOfAnimation()-1);
          this.postDelay();
@@@ -223,7 -242,8 +307,12 @@@
          _controlBarLayout.setVisibility(View.VISIBLE);
          _controlBarLayout.startAnimation(bottomUp);
      }
++<<<<<<< HEAD
 +    public void hideControlBar() {
++=======
+     public void hideControlBar()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(getActivity() == null || View.INVISIBLE == _controlBarLayout.getVisibility()) return;
          _hideDelay.removeCallbacks(hideControlsRunnable);
          Animation bottomDown = AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out);
@@@ -231,18 -251,22 +320,37 @@@
          _controlBarLayout.setVisibility(View.INVISIBLE);
  
      }
++<<<<<<< HEAD
 +    public void showProgress(String progress) {
 +        _progressLayout.setAlpha(1);
 +        _progress.setText(progress);
 +    }
 +    public void hideProgress() {
 +        _progressLayout.setAlpha(0);
 +        _progress.setText("");
 +    }
 +    public void requestRender() {
 +        _glView.requestRender();
 +    }
 +    public void takeScreenshot(File out) {
++=======
+     public void showProgress(String progress)
+     {
+         _progressLayout.setAlpha(1);
+         _progress.setText(progress);
+     }
+     public void hideProgress()
+     {
+         _progressLayout.setAlpha(0);
+         _progress.setText("");
+     }
+     public void requestRender()
+     {
+         _glView.requestRender();
+     }
+     public void takeScreenshot(File out)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          Bitmap screenshot = _glView.getScreenshot();
          try {
              FileOutputStream f = new FileOutputStream(out);
diff --cc contrib/mobile/Android/src/org/geuz/onelab/ModelList.java
index f770d54,8d9d906..3c6a1be
--- a/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java
@@@ -28,27 -28,27 +28,49 @@@ import android.widget.ListView
  import android.widget.Toast;
  
  public class ModelList extends Activity {
++<<<<<<< HEAD
 +
 +    private ModelArrayAdapter _modelArrayAdapter;
 +
 +    @Override
 +	protected void onCreate(Bundle savedInstanceState) {
 +        super.onCreate(savedInstanceState);
 +        _modelArrayAdapter = new ModelArrayAdapter(this);
 +        try {
 +            this.getModels();
 +        } catch (XmlPullParserException e) {
 +            e.printStackTrace();
 +        } catch (IOException e) {
 +            e.printStackTrace();
 +        }
 +
++=======
+ 
+     private ModelArrayAdapter _modelArrayAdapter;
+ 
+     @Override
+     protected void onCreate(Bundle savedInstanceState)
+     {
+         super.onCreate(savedInstanceState);
+         _modelArrayAdapter = new ModelArrayAdapter(this);
+         try {
+             this.getModels();
+         } catch (XmlPullParserException e) {
+             e.printStackTrace();
+         } catch (IOException e) {
+             e.printStackTrace();
+         }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
          LinearLayout layout = new LinearLayout(this);
      	layout.setOrientation(LinearLayout.VERTICAL);
      	ListView list = new ListView(this);
      	list.setAdapter(_modelArrayAdapter);
      	list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
                  public void onItemClick(AdapterView<?> parent, View view, int position,
  					long id) {
                      Model m = _modelArrayAdapter.getModel(position);
@@@ -59,7 -59,6 +81,10 @@@
                  }
              });
      	list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
                  public boolean onItemLongClick(AdapterView<?> parent, View view,
                                                 int position, long id) {
                      final Model m = _modelArrayAdapter.getModel(position);
@@@ -103,7 -102,8 +128,12 @@@
      }
  
      @Override
++<<<<<<< HEAD
 +	public boolean onCreateOptionsMenu(Menu menu) {
++=======
+     public boolean onCreateOptionsMenu(Menu menu)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          MenuItem about = menu.add("About");
          about.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
          MenuItem loadFile = menu.add(R.string.button_open_file);
@@@ -112,7 -112,8 +142,12 @@@
      }
  
      @Override
++<<<<<<< HEAD
 +	public boolean onMenuItemSelected(int featureId, MenuItem item) {
++=======
+     public boolean onMenuItemSelected(int featureId, MenuItem item)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(item.getTitle().equals(getString(R.string.button_open_file))) {
              Intent fileBrowserIntent = new Intent();
              fileBrowserIntent.setAction(Intent.ACTION_GET_CONTENT);
@@@ -121,7 -122,8 +156,12 @@@
                  startActivityForResult(fileBrowserIntent, 1);
              }
              catch(ActivityNotFoundException e) {
++<<<<<<< HEAD
 +                Toast.makeText(this, "No application found on your device to open the files.", Toast.LENGTH_LONG).show();
++=======
+                 Toast.makeText(this, "No application found on your device to open the files.",
+                                Toast.LENGTH_LONG).show();
++>>>>>>> upstream/2.9.3+dfsg1
              }
          }
          else if(item.getTitle().equals("About")) {
@@@ -132,7 -134,8 +172,12 @@@
      }
  
      @Override
++<<<<<<< HEAD
 +	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
++=======
+     protected void onActivityResult(int requestCode, int resultCode, Intent data)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super.onActivityResult(requestCode, resultCode, data);
          if(resultCode == RESULT_CANCELED) return;
          switch (requestCode) {
@@@ -151,87 -154,89 +196,173 @@@
      }
  
      private void getModels() throws XmlPullParserException, IOException
++<<<<<<< HEAD
 +    {
 +        File document = this.getFilesDir();
 +        File files[] = document.listFiles();
 +        for(int i=0; i<files.length; i++) {
 +            if(files[i].isDirectory()) { // models are in directory
 +                File xmlInfos = new File(files[i], "infos.xml");
 +                if(!xmlInfos.isFile()) continue;
 +                InputStream in = new FileInputStream(xmlInfos);
 +                try {
 +                    XmlPullParser parser = Xml.newPullParser();
 +                    parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
 +                    parser.setInput(in, null);
 +                    parser.nextTag();
 +                    parser.require(XmlPullParser.START_TAG, null, "models");
 +                    while (parser.next() != XmlPullParser.END_TAG) {
 +                        if (parser.getEventType() != XmlPullParser.START_TAG) continue;
 +                        String tagName = parser.getName();
 +                        if(tagName.equals("model"))
 +                            readModel(parser, files[i].toString());
 +                        else
 +                            skipTag(parser);
 +                    }
 +                }
 +                finally {
 +                    in.close();
 +                }
 +            }
 +        }
 +    }
 +    private void readModel(XmlPullParser parser, String dir) throws XmlPullParserException, IOException{
 +        parser.require(XmlPullParser.START_TAG, null, "model");
 +        String title = null;
 +        String summary = null;
 +        String file = null;
 +        String bitmap = null;
 +        String url = null;
 +        while (parser.next() != XmlPullParser.END_TAG) {
 +            if (parser.getEventType() != XmlPullParser.START_TAG) continue;
 +            String name = parser.getName();
 +            if(name.equals("title")) {
 +                if (parser.next() == XmlPullParser.TEXT) {
 +                    title = parser.getText();
 +                    parser.nextTag();
 +                }
 +            }
 +            else if(name.equals("summary")) {
 +                if (parser.next() == XmlPullParser.TEXT) {
 +                    summary = parser.getText();
 +                    parser.nextTag();
 +                }
 +            }
 +            else if(name.equals("file")) {
 +                //String relType = parser.getAttributeValue(null, "type");
 +                if (parser.next() == XmlPullParser.TEXT) {
 +                    file = parser.getText();
 +                    parser.nextTag();
 +                }
 +            }
 +            else if(name.equals("preview")) {
 +                if (parser.next() == XmlPullParser.TEXT) {
 +                    bitmap = parser.getText();
 +                    parser.nextTag();
 +                }
 +            }
 +            else if(name.equals("url")) {
 +                if (parser.next() == XmlPullParser.TEXT) {
 +                    url = parser.getText();
 +                    parser.nextTag();
 +                }
 +            }
 +            else {
 +                skipTag(parser);
 +            }
 +        }
 +        if(title == null || file == null) return;
 +        Model newModel = new Model(title, summary, new File(dir+"/"+file));
 +        if(bitmap != null) newModel.setBitmap(new File(dir+"/"+bitmap));
 +        if(url != null) newModel.setUrl(Uri.parse(url));
 +        _modelArrayAdapter.add(newModel);
 +    }
 +    private void skipTag(XmlPullParser parser) throws XmlPullParserException, IOException {
++=======
+     {
+         File document = this.getFilesDir();
+         File files[] = document.listFiles();
+         for(int i=0; i<files.length; i++) {
+             if(files[i].isDirectory()) { // models are in directory
+                 File xmlInfos = new File(files[i], "infos.xml");
+                 if(!xmlInfos.isFile()) continue;
+                 InputStream in = new FileInputStream(xmlInfos);
+                 try {
+                     XmlPullParser parser = Xml.newPullParser();
+                     parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
+                     parser.setInput(in, null);
+                     parser.nextTag();
+                     parser.require(XmlPullParser.START_TAG, null, "models");
+                     while (parser.next() != XmlPullParser.END_TAG) {
+                         if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+                         String tagName = parser.getName();
+                         if(tagName.equals("model"))
+                             readModel(parser, files[i].toString());
+                         else
+                             skipTag(parser);
+                     }
+                 }
+                 finally {
+                     in.close();
+                 }
+             }
+         }
+     }
+     private void readModel(XmlPullParser parser, String dir) throws XmlPullParserException, IOException
+     {
+         parser.require(XmlPullParser.START_TAG, null, "model");
+         String title = null;
+         String summary = null;
+         String file = null;
+         String bitmap = null;
+         String url = null;
+         while (parser.next() != XmlPullParser.END_TAG) {
+             if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+             String name = parser.getName();
+             if(name.equals("title")) {
+                 if (parser.next() == XmlPullParser.TEXT) {
+                     title = parser.getText();
+                     parser.nextTag();
+                 }
+             }
+             else if(name.equals("summary")) {
+                 if (parser.next() == XmlPullParser.TEXT) {
+                     summary = parser.getText();
+                     parser.nextTag();
+                 }
+             }
+             else if(name.equals("file")) {
+                 //String relType = parser.getAttributeValue(null, "type");
+                 if (parser.next() == XmlPullParser.TEXT) {
+                     file = parser.getText();
+                     parser.nextTag();
+                 }
+             }
+             else if(name.equals("preview")) {
+                 if (parser.next() == XmlPullParser.TEXT) {
+                     bitmap = parser.getText();
+                     parser.nextTag();
+                 }
+             }
+             else if(name.equals("url")) {
+                 if (parser.next() == XmlPullParser.TEXT) {
+                     url = parser.getText();
+                     parser.nextTag();
+                 }
+             }
+             else {
+                 skipTag(parser);
+             }
+         }
+         if(title == null || file == null) return;
+         Model newModel = new Model(title, summary, new File(dir+"/"+file));
+         if(bitmap != null) newModel.setBitmap(new File(dir+"/"+bitmap));
+         if(url != null) newModel.setUrl(Uri.parse(url));
+         _modelArrayAdapter.add(newModel);
+     }
+     private void skipTag(XmlPullParser parser) throws XmlPullParserException, IOException
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if (parser.getEventType() != XmlPullParser.START_TAG) {
              throw new IllegalStateException();
          }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/OptionsActivity.java
index ecac782,394e871..98e845f
--- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsActivity.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsActivity.java
@@@ -11,41 -11,45 +11,85 @@@ public class OptionsActivity extends Ac
  
      boolean _compute;
  
++<<<<<<< HEAD
 +	@Override
 +	protected void onCreate(Bundle savedInstanceState) {
 +		super.onCreate(savedInstanceState);
 +		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 +		setContentView(R.layout.activity_fragment);
 +		Bundle extra = getIntent().getExtras();
 +		Gmsh gmsh = extra.getParcelable("Gmsh");
 +		_compute = extra.getBoolean("Compute", false);
 +		getActionBar().setDisplayHomeAsUpEnabled(true);
 +		getActionBar().setTitle(R.string.title_activity_options);
 +		OptionsFragment optionsFragment = OptionsFragment.newInstance(gmsh);
 +		getFragmentManager().beginTransaction().replace(R.id.model_fragment, optionsFragment).commit();
 +	}
 +
 +	@Override
 +	public boolean onCreateOptionsMenu(Menu menu) {
 +		if(_compute) return super.onCreateOptionsMenu(menu);
 +		MenuItem runStopMenuItem = menu.add(R.string.menu_run);
 +                runStopMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
 +		return super.onCreateOptionsMenu(menu);
 +	}
 +
 +	@Override
 +	public boolean onMenuItemSelected(int featureId, MenuItem item) {
 +            if(item.getTitle().equals(getString(R.string.menu_run))) {
 +                Intent returnIntent = new Intent();
 +                returnIntent.putExtra("Compute", true);
 +                this.setResult(RESULT_OK, returnIntent);
 +                this.finish();
 +            }
 +            else if(item.getItemId() == android.R.id.home) {
 +                Intent returnIntent = new Intent();
 +                this.setResult(RESULT_CANCELED, returnIntent);
 +                this.finish();
 +            }
 +            return super.onMenuItemSelected(featureId, item);
 +	}
++=======
+     @Override
+     protected void onCreate(Bundle savedInstanceState)
+     {
+         super.onCreate(savedInstanceState);
+         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+                              WindowManager.LayoutParams.FLAG_FULLSCREEN);
+         setContentView(R.layout.activity_fragment);
+         Bundle extra = getIntent().getExtras();
+         Gmsh gmsh = extra.getParcelable("Gmsh");
+         _compute = extra.getBoolean("Compute", false);
+         getActionBar().setDisplayHomeAsUpEnabled(true);
+         getActionBar().setTitle(R.string.title_activity_options);
+         OptionsFragment optionsFragment = OptionsFragment.newInstance(gmsh);
+         getFragmentManager().beginTransaction().replace(R.id.model_fragment, optionsFragment).commit();
+     }
+ 
+     @Override
+     public boolean onCreateOptionsMenu(Menu menu)
+     {
+         if(_compute) return super.onCreateOptionsMenu(menu);
+         MenuItem runStopMenuItem = menu.add(R.string.menu_run);
+         runStopMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+         return super.onCreateOptionsMenu(menu);
+     }
+ 
+     @Override
+     public boolean onMenuItemSelected(int featureId, MenuItem item)
+     {
+         if(item.getTitle().equals(getString(R.string.menu_run))) {
+             Intent returnIntent = new Intent();
+             returnIntent.putExtra("Compute", true);
+             this.setResult(RESULT_OK, returnIntent);
+             this.finish();
+         }
+         else if(item.getItemId() == android.R.id.home) {
+             Intent returnIntent = new Intent();
+             this.setResult(RESULT_CANCELED, returnIntent);
+             this.finish();
+         }
+         return super.onMenuItemSelected(featureId, item);
+     }
++>>>>>>> upstream/2.9.3+dfsg1
  }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
index cc44519,1912b9b..a326d2c
--- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
@@@ -20,101 -21,98 +21,177 @@@ import android.widget.SeekBar
  import android.widget.Spinner;
  
  public class OptionsPostProcessingFragment extends Fragment{
- 	private Gmsh _gmsh;
- 	private int _pview;
- 	
- 	public static OptionsPostProcessingFragment newInstance(Gmsh g, int p) {
- 		OptionsPostProcessingFragment fragment = new OptionsPostProcessingFragment();
- 		Bundle bundle = new Bundle();
- 		bundle.putParcelable("Gmsh", g);
- 		bundle.putInt("PView", p);
- 		fragment.setArguments(bundle);
+     private Gmsh _gmsh;
+     private int _pview;
+ 
+     public static OptionsPostProcessingFragment newInstance(Gmsh g, int p)
+     {
+         OptionsPostProcessingFragment fragment = new OptionsPostProcessingFragment();
+         Bundle bundle = new Bundle();
+         bundle.putParcelable("Gmsh", g);
+         bundle.putInt("PView", p);
+         fragment.setArguments(bundle);
          return fragment;
- 	}
- 	
- 	private OptionsPostProcessingFragment() {
- 		super();
- 	}
+     }
  
+     private OptionsPostProcessingFragment()
+     {
+         super();
+     }
+ 
+     @Override
+     public void onCreate(Bundle savedInstanceState)
+     {
+         super.onCreate(savedInstanceState);
+         _gmsh = getArguments().getParcelable("Gmsh");
+         _pview = getArguments().getInt("PView");
+     }
+ 
++<<<<<<< HEAD
 +	@Override
 +	public void onCreate(Bundle savedInstanceState) {
 +		super.onCreate(savedInstanceState);
 +		_gmsh = getArguments().getParcelable("Gmsh");
 +		_pview = getArguments().getInt("PView");
 +	}
 +	
 +	@Override
 +	public View onCreateView(LayoutInflater inflater, ViewGroup container,
 +			Bundle savedInstanceState) {
 +		String[] PViews = _gmsh.getPView();
 +		String[] infos = PViews[_pview].split("\n");
 +		getActivity().getActionBar().setTitle(infos[0]);
 +		LinearLayout layout =  (LinearLayout)inflater.inflate(R.layout.fragment_postprocessing, container, false);
 +		final Spinner intervalsType = (Spinner)layout.findViewById(R.id.intervals_type);
 +		final EditText intervals = (EditText)layout.findViewById(R.id.intervals);
 +		final SeekBar raiseZ = (SeekBar)layout.findViewById(R.id.raisez);
 +		raiseZ.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
 +			
 +			public void onStopTrackingTouch(SeekBar seekBar) {_gmsh.setPView(_pview, -1, -1, -1, seekBar.getProgress());}
 +			public void onStartTrackingTouch(SeekBar seekBar) {} // UNUSED Auto-generated method stub
 +			public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } // UNUSED Auto-generated method stub
 +		});
 +		raiseZ.setProgress(Integer.parseInt(infos[4]));
 +		intervalsType.setEnabled(infos[2].equals("1"));
 +		ArrayList<String> choices;
 +		ArrayAdapter<String> adapter;
 +		choices = new ArrayList<String>();
 +		choices.add("Iso-values");
 +		choices.add("Continous map");
 +		choices.add("Filled iso-values");
 +		adapter = new ArrayAdapter<String>(container.getContext(), android.R.layout.simple_spinner_dropdown_item, choices);
 +		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 +		intervalsType.setAdapter(adapter);
 +		intervalsType.setSelection(Integer.parseInt(infos[1])-1);
 +		intervalsType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
 +			public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
 +				_gmsh.setPView(_pview, pos+1, -1, -1, -1);
 +				//TODO glView.requestRender();
 +				intervals.setEnabled(pos == 0 || pos == 2);
 +			}
 +			public void onNothingSelected(AdapterView<?> arg0) {} // Unused Auto-generated method stub
 +		});
 +		intervals.setText(infos[3]);
 +		intervals.setOnKeyListener(new View.OnKeyListener() {
 +			
 +			public boolean onKey(View v, int keyCode, KeyEvent event) {
 +				if(keyCode == KeyEvent.KEYCODE_ENTER){ // hide the keyboard
 +					InputMethodManager imm = (InputMethodManager)intervals.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
 +					imm.hideSoftInputFromWindow(intervals.getWindowToken(), 0);
 +					return true;
 +				}
 +				return false;
 +			}
 +		});
 +		intervals.addTextChangedListener(new TextWatcher() {
 +			
 +			public void onTextChanged(CharSequence s, int start, int before, int count) {
 +				
 +				int nIso = 1;
 +				try {
 +					if(s.length() < 1) nIso = 1;
 +					else nIso = Integer.parseInt(s.toString());
 +				}
 +				catch(NumberFormatException e)
 +				{
 +					nIso = 1;
 +					intervals.setText("");
 +				}
 +				if(nIso > 1000) {_gmsh.setPView(_pview, -1, -1, 1000, -1); intervals.setText("1000");}
 +				else if(nIso > 0) _gmsh.setPView(_pview, -1, -1, nIso, -1);
 +				else _gmsh.setPView(_pview, -1, -1, 1, -1);
 +			}
 +			
 +			public void beforeTextChanged(CharSequence s, int start, int count, int after) {} // UNUSED Auto-generated method stub
 +			public void afterTextChanged(Editable s) {} // UNUSED Auto-generated method stub
++=======
+     @Override
+     public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                              Bundle savedInstanceState)
+     {
+         getActivity().getActionBar().setTitle(_gmsh.getStringOption("View", "Name", _pview));
+         LinearLayout layout =  (LinearLayout)inflater.inflate(R.layout.fragment_postprocessing,
+                                                               container, false);
+         final Spinner intervalsType = (Spinner)layout.findViewById(R.id.intervals_type);
+         intervalsType.setEnabled(_gmsh.getDoubleOption("View", "Visible", _pview) > 0.);
+         ArrayList<String> choices;
+         ArrayAdapter<String> adapter;
+         choices = new ArrayList<String>();
+         choices.add("Iso-values");
+         choices.add("Continous map");
+         choices.add("Filled iso-values");
+         adapter = new ArrayAdapter<String>(container.getContext(),
+                                            android.R.layout.simple_spinner_dropdown_item, choices);
+         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+         intervalsType.setAdapter(adapter);
+         intervalsType.setSelection((int)_gmsh.getDoubleOption("View", "IntervalsType", _pview) - 1);
+         intervalsType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+                 public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
+                     _gmsh.setDoubleOption("View", "IntervalsType", pos + 1, _pview);
+                     // TODO glView.requestRender();
+                 }
+                 // Unused Auto-generated method stub
+                 public void onNothingSelected(AdapterView<?> arg0) {}
+             });
++>>>>>>> upstream/2.9.3+dfsg1
  
- 		});
+         final SeekBar intervals = (SeekBar)layout.findViewById(R.id.intervals);
+         intervals.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+                 public void onStopTrackingTouch(SeekBar seekBar) {
+                     double d = seekBar.getProgress();
+                     if(d < 1.) d = 1.;
+                     _gmsh.setDoubleOption("View", "NbIso", d, _pview);
+                 }
+                 // UNUSED Auto-generated method stub
+                 public void onStartTrackingTouch(SeekBar seekBar) {}
+                 // UNUSED Auto-generated method stub
+                 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { }
+             });
+         intervals.setProgress((int)_gmsh.getDoubleOption("View", "NbIso", _pview));
  
- 		return layout;
- 	}
+         final SeekBar raiseZ = (SeekBar)layout.findViewById(R.id.raisez);
+         raiseZ.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+                 public void onStopTrackingTouch(SeekBar seekBar) {
+                     double maxval = Math.max(Math.abs(_gmsh.getDoubleOption("View", "Min", _pview)),
+                                              Math.abs(_gmsh.getDoubleOption("View", "Max", _pview)));
+                     if(maxval == 0.) maxval = 1.;
+                     double val2 = 2. * _gmsh.getDoubleOption("General", "BoundingBoxSize", 0) / maxval;
+                     // map [0,100] to [-val2,val2]
+                     double d = 2 * val2 * (seekBar.getProgress() / 100. - 0.5);
+                     _gmsh.setDoubleOption("View", "RaiseZ", d, _pview);
+                 }
+                 // UNUSED Auto-generated method stub
+                 public void onStartTrackingTouch(SeekBar seekBar) {}
+                 // UNUSED Auto-generated method stub
+                 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { }
+             });
+         double maxval = Math.max(Math.abs(_gmsh.getDoubleOption("View", "Min", _pview)),
+                                  Math.abs(_gmsh.getDoubleOption("View", "Max", _pview)));
+         if(maxval == 0.) maxval = 1.;
+         double val2 = 2. * _gmsh.getDoubleOption("General", "BoundingBoxSize", 0) / maxval;
+         // map [-val2,val2] to [0,100]
+         double d = 100. * (_gmsh.getDoubleOption("View", "RaiseZ", _pview) / (2 * val2) + 0.5);
+         raiseZ.setProgress((int)d);
+         return layout;
+     }
  }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/Parameter.java
index dae90a4,0c86a28..5645e3e
--- a/contrib/mobile/Android/src/org/geuz/onelab/Parameter.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/Parameter.java
@@@ -15,7 -14,8 +14,12 @@@ public class Parameter 
      protected boolean _changed;
      protected TextView _title;
  
++<<<<<<< HEAD
 +    public Parameter(Context context, Gmsh gmsh, String name){
++=======
+     public Parameter(Context context, Gmsh gmsh, String name)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          _context = context;
          _gmsh = gmsh;
          _readOnly = false;
@@@ -25,63 -25,74 +29,135 @@@
          _title.setTextAppearance(context, android.R.style.TextAppearance_DeviceDefault_Medium);
          _title.setTextColor(Color.DKGRAY);
      }
++<<<<<<< HEAD
 +    public Parameter(Context context, Gmsh gmsh, String name, boolean readOnly){
++=======
+     public Parameter(Context context, Gmsh gmsh, String name, boolean readOnly)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          this(context, gmsh, name);
          _readOnly = readOnly;
          _changed = false;
      }
++<<<<<<< HEAD
 +
 +    protected void update(){
 +        if(_label != null && !_label.equals(""))
 +            _title.setText(_label);
 +        else
 +            _title.setText(getShortName());
 +        if(isReadOnly()) _title.setAlpha(0.423f);
 +    }
 +
 +    public void setName(String name) {_name = name;this.update();}
 +    public void setReadOnly(boolean readOnly) {_readOnly = readOnly;this.update();}
 +    public void setLabel(String label) {
 +        _label = label;
 +        this.update();
 +    }
 +    public String getName() { return _name;}
 +    public String getShortName() {
 +        if(_label != null && _label.length() > 0) return _label;
 +        String[] splited = _name.split("/");
 +        String name = splited[splited.length-1];
 +        while(name.length() > 0 && name.charAt(0) >= '0' && name.charAt(0) <= '9')
 +            name = name.substring(1);
 +        return name;
 +    }
 +    public boolean isReadOnly() {return _readOnly;}
 +    public String getLabel() {return _label;}
 +    public int fromString(String s){
 +        String[] infos = s.split(Character.toString((char)0x03));
 +        int pos=0;
 +        pos++;// version
 +        pos++;// type
 +        setName(infos[pos++]);// name
 +        setLabel(infos[pos++]);// label
 +        pos++;// help
 +        pos++;// never change
 +        if(Integer.parseInt(infos[pos++]) != 1)return -1;// visible
 +        this.setReadOnly((infos[pos++].equals("1")));// read only
 +        int nAttributes = Integer.parseInt(infos[pos++]);// number of attributes
 +        pos+=(nAttributes*2);// key+value
 +        int nClients = Integer.parseInt(infos[pos++]);// number of client
 +        pos+=(nClients*2);// client+changed
 +        this.update();
 +        return pos;
 +    }
 +    public boolean changed() { if(_changed){_changed=false; return true;}return _changed;}
 +    public String getType(){return "Parameter";}
 +
 +    public LinearLayout getView() {
 +        LinearLayout paramLayout = new LinearLayout(_context);
 +        paramLayout.setOrientation(LinearLayout.VERTICAL);
 +        paramLayout.addView(_title);
 +        return paramLayout;
 +    }
 +}
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  
+     protected void update()
+     {
+         if(_label != null && !_label.equals(""))
+             _title.setText(_label);
+         else
+             _title.setText(getShortName());
+         if(isReadOnly()) _title.setAlpha(0.423f);
+     }
+ 
+     public void setName(String name) { _name = name; this.update(); }
+     public void setReadOnly(boolean readOnly) { _readOnly = readOnly; this.update(); }
+     public void setLabel(String label)
+     {
+         _label = label;
+         this.update();
+     }
+     public String getName() { return _name; }
+     public String getShortName()
+     {
+         if(_label != null && _label.length() > 0) return _label;
+         String[] splited = _name.split("/");
+         String name = splited[splited.length-1];
+         while(name.length() > 0 && name.charAt(0) >= '0' && name.charAt(0) <= '9')
+             name = name.substring(1);
+         return name;
+     }
+     public boolean isReadOnly() { return _readOnly; }
+     public String getLabel() { return _label; }
+     public int fromString(String s)
+     {
+         String[] infos = s.split(Character.toString((char)0x03));
+         int pos=0;
+         pos++;// version
+         pos++;// type
+         setName(infos[pos++]);// name
+         setLabel(infos[pos++]);// label
+         pos++;// help
+         pos++;// never change
+         if(Integer.parseInt(infos[pos++]) != 1)return -1;// visible
+         this.setReadOnly((infos[pos++].equals("1")));// read only
+         int nAttributes = Integer.parseInt(infos[pos++]);// number of attributes
+         pos+=(nAttributes*2);// key+value
+         int nClients = Integer.parseInt(infos[pos++]);// number of client
+         pos+=(nClients*2);// client+changed
+         this.update();
+         return pos;
+     }
+     public boolean changed()
+     {
+         if(_changed){
+             _changed = false;
+             return true;
+         }
+         return _changed;
+     }
+     public String getType(){ return "Parameter"; }
+     public LinearLayout getView()
+     {
+         LinearLayout paramLayout = new LinearLayout(_context);
+         paramLayout.setOrientation(LinearLayout.VERTICAL);
+         paramLayout.addView(_title);
+         return paramLayout;
+     }
+ }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
index 4ec9e82,523113c..96ed99d
--- a/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
@@@ -23,51 -23,54 +23,99 @@@ import android.app.DialogFragment
  import android.content.DialogInterface;
  import android.widget.LinearLayout;
  import android.widget.TextView;
++<<<<<<< HEAD
 +
 +public class ParameterNumber extends Parameter {
 +    private double _value, _tmpValue, _min, _max, _step;
 +    private SeekBar _bar;
 +    private ArrayList<Double> _values;
 +    private ArrayList<String> _choices;
 +    private ArrayAdapter<String> _adapter;
 +    private Spinner _spinner;
 +    private CheckBox _checkbox;
 +    private EditText _edittext;
 +    private Stepper _stepper;
 +
 +    public ParameterNumber(Context context, Gmsh gmsh, String name){
 +        super(context, gmsh, name);
 +    }
 +    public ParameterNumber(Context context, Gmsh gmsh, String name,  double value, double min, double max, double step)
 +    {
 +        this(context, gmsh, name);
 +        _value = value;
 +        _min = min;
 +        _max = max;
 +        _step = step;
 +    }
 +    public ParameterNumber(Context context, Gmsh gmsh, String name, boolean readOnly, double value, double min, double max, double step)
 +    {
 +        this(context, gmsh, name, value, min, max, step);
 +        _readOnly = readOnly;
 +    }
 +
 +    public static String formatDouble(double x)
 +    {
 +        return String.format("%.6g", x).replaceFirst("\\.?0+(e|$)", "$1");
 +    }
 +
++=======
+ 
+ public class ParameterNumber extends Parameter {
+     private double _value, _tmpValue, _min, _max, _step;
+     private SeekBar _bar;
+     private ArrayList<Double> _values;
+     private ArrayList<String> _choices;
+     private ArrayAdapter<String> _adapter;
+     private Spinner _spinner;
+     private CheckBox _checkbox;
+     private EditText _edittext;
+     private Stepper _stepper;
+ 
+     public ParameterNumber(Context context, Gmsh gmsh, String name)
+     {
+         super(context, gmsh, name);
+     }
+     public ParameterNumber(Context context, Gmsh gmsh, String name,
+                            double value, double min, double max, double step)
+     {
+         this(context, gmsh, name);
+         _value = value;
+         _min = min;
+         _max = max;
+         _step = step;
+     }
+     public ParameterNumber(Context context, Gmsh gmsh, String name, boolean readOnly,
+                            double value, double min, double max, double step)
+     {
+         this(context, gmsh, name, value, min, max, step);
+         _readOnly = readOnly;
+     }
+ 
+     public static String formatDouble(double x)
+     {
+         return String.format("%.6g", x).replaceFirst("\\.?0+(e|$)", "$1");
+     }
+ 
++>>>>>>> upstream/2.9.3+dfsg1
      protected void update()
      {
          super.update();
          if(_bar != null) {
++<<<<<<< HEAD
 +            _title.setText(getShortName() + " (" + formatDouble(_value)+ ")");
++=======
+             _title.setText(getShortName() + " (" + formatDouble(_value) + ")");
++>>>>>>> upstream/2.9.3+dfsg1
              _bar.setMax(100);
              _bar.setProgress((int)(100*(_value-_min)/(_max-_min)));
              _bar.setEnabled(!this.isReadOnly());
          }
          else if(_spinner != null) {
++<<<<<<< HEAD
 +            for(int i=0;i<_choices.size();i++)
++=======
+             for(int i = 0; i < _choices.size(); i++)
++>>>>>>> upstream/2.9.3+dfsg1
                  if(_values.get(i) == _value)
                      _spinner.setSelection(i, true);
          }
@@@ -76,7 -79,7 +124,11 @@@
              _checkbox.setChecked((_value == 0)? false : true);
          }
          else if(_edittext != null) {
++<<<<<<< HEAD
 +            _edittext.setText(""+formatDouble(_value));
++=======
+             _edittext.setText("" + formatDouble(_value));
++>>>>>>> upstream/2.9.3+dfsg1
          }
          else if(_stepper != null) {
              _stepper.setMaximum((int)Math.round(_max));
@@@ -86,19 -89,15 +138,28 @@@
      }
      public void setValue(double value)
      {
++<<<<<<< HEAD
 +        if(value < _min || value > _max) {
 +            //Log.w("ParameterNumber", "Incorect value "+value+" (max="+_max+" min="+_min+")");
 +            return;
 +        }
++=======
++>>>>>>> upstream/2.9.3+dfsg1
          if(value == _value) return;
          _value = value;
          _changed = true;
          _gmsh.setParam(getType(), getName(), String.valueOf(value));
          if(mListener != null) mListener.OnParameterChanged();
      }
++<<<<<<< HEAD
 +    public void setMin(double min) {_min = min;this.update();}
 +    public void setMax(double max) {_max = max;this.update();}
 +    public void setStep(double step) {_step = step;this.update();}
++=======
+     public void setMin(double min) { _min = min; this.update(); }
+     public void setMax(double max) { _max = max; this.update(); }
+     public void setStep(double step) { _step = step;this.update(); }
++>>>>>>> upstream/2.9.3+dfsg1
      public void addChoice(double choice, String value)
      {
          if(_values == null) {
@@@ -108,7 -107,9 +169,13 @@@
              _choices.add(value);
              if(_spinner == null) {
                  _spinner = new Spinner(_context);
++<<<<<<< HEAD
 +                _adapter = new ArrayAdapter<String>(_context, android.R.layout.simple_spinner_dropdown_item, _choices);
++=======
+                 _adapter = new ArrayAdapter<String>(_context,
+                                                     android.R.layout.simple_spinner_dropdown_item,
+                                                     _choices);
++>>>>>>> upstream/2.9.3+dfsg1
                  _adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                  _spinner.setAdapter(_adapter);
              }
@@@ -119,20 -120,19 +186,34 @@@
                      _choices.set(i, value);
                      return;
                  }
++<<<<<<< HEAD
 +                else if(_values.get(i).equals(choice))
 +                    {
 +                        _choices.add(value);
 +                        return;
 +                    }
++=======
+                 else if(_values.get(i).equals(choice)){
+                     _choices.add(value);
+                     return;
+                 }
++>>>>>>> upstream/2.9.3+dfsg1
              }
              _values.add(choice);
              _choices.add(value);
          }
      }
++<<<<<<< HEAD
 +    public double getValue() {return _value;}
 +    public double getMax() {return _max;}
 +    public double getMin() {return _min;}
 +    public double getStep() {return _step;}
++=======
+     public double getValue() { return _value; }
+     public double getMax() { return _max; }
+     public double getMin() { return _min; }
+     public double getStep() { return _step; }
++>>>>>>> upstream/2.9.3+dfsg1
      public int fromString(String s)
      {
          int pos = super.fromString(s);
@@@ -149,7 -149,7 +230,11 @@@
          pos++;// index
          int nChoix = Integer.parseInt(infos[pos++]); // choices' size
          double choices[] = new double[nChoix];
++<<<<<<< HEAD
 +        for(int i=0; i<nChoix; i++)
++=======
+         for(int i = 0; i < nChoix; i++)
++>>>>>>> upstream/2.9.3+dfsg1
              choices[i] = Double.parseDouble(infos[pos++]); // choice
          int nLabels = Integer.parseInt(infos[pos++]); // labels' size
          if(nChoix == 2 && choices[0] == 0 && choices[1] == 1 && nLabels == 0) {
@@@ -159,7 -159,7 +244,11 @@@
          }
          if(_choices != null)_choices.clear();
          if(_values != null) _values.clear();
++<<<<<<< HEAD
 +        for(int i=0; i<nLabels && nChoix == nLabels; i++){
++=======
+         for(int i = 0; i < nLabels && nChoix == nLabels; i++){
++>>>>>>> upstream/2.9.3+dfsg1
              double val = Double.parseDouble(infos[pos++]); // choice
              this.addChoice(val, infos[pos++]); // label
          }
@@@ -181,43 -181,48 +270,88 @@@
          paramLayout.addView(_title);
          if(!_readOnly) paramLayout.setOnLongClickListener(new View.OnLongClickListener(){
                  @Override
++<<<<<<< HEAD
 +                public boolean onLongClick(View v){
 +			AlertDialog.Builder builder = new AlertDialog.Builder(_context);
 +			LinearLayout layout = new LinearLayout(_context);
 +			layout.setOrientation(LinearLayout.VERTICAL);
 +			TextView label = new TextView(_context);
 +			label.setText("Edit value of \n" + _name);
 +			EditText edit = new EditText(_context);
 +			edit.setText(String.valueOf(_value));
 +			edit.addTextChangedListener(new TextWatcher() {
 +				public void onTextChanged(CharSequence s, int start, int before, int count) {
 +					try {
 +						if(s.length() < 1)  _tmpValue = 1;
 +						_tmpValue = Double.parseDouble(s.toString());
 +					} catch(NumberFormatException e) {
 +	                                	_tmpValue = 1;
 +					}
 +				}
 +		                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} // UNUSED Auto-generated method stub
 +		                    public void afterTextChanged(Editable s) {} // UNUSED Auto-generated method stub
 +		        	});
 +			edit.requestFocus();
 +			//_context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
 +			layout.addView(label);
 +			layout.addView(edit);
 +			builder.setView(layout)
 +				.setPositiveButton("OK", new DialogInterface.OnClickListener() {
 +					public void onClick(DialogInterface dialog, int id) {
 +						setValue(_tmpValue);
 +					}
 +				})
 +				.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
 +					public void onClick(DialogInterface dialog, int id) {
 +						// User cancelled the dialog
 +					}
 +				});
 +			builder.create().show();
 +                	return true;
++=======
+                 public boolean onLongClick(View v)
+                 {
+                     AlertDialog.Builder builder = new AlertDialog.Builder(_context);
+                     LinearLayout layout = new LinearLayout(_context);
+                     layout.setOrientation(LinearLayout.VERTICAL);
+                     TextView label = new TextView(_context);
+                     label.setText("Edit value of \n" + _name);
+                     EditText edit = new EditText(_context);
+                     edit.setText(String.valueOf(_value));
+                     edit.addTextChangedListener(new TextWatcher() {
+                             public void onTextChanged(CharSequence s, int start, int before, int count) {
+                                 try {
+                                     if(s.length() < 1)  _tmpValue = 1;
+                                     _tmpValue = Double.parseDouble(s.toString());
+                                 }
+                                 catch(NumberFormatException e) {
+                                     _tmpValue = 1;
+                                 }
+                             }
+                             // UNUSED Auto-generated method stub
+                             public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+                             // UNUSED Auto-generated method stub
+                             public void afterTextChanged(Editable s) {}
+                         });
+                     edit.requestFocus();
+                     //_context.getWindow().setSoftInputMode
+                     //    (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+                     layout.addView(label);
+                     layout.addView(edit);
+                     builder.setView(layout)
+                         .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+                                 public void onClick(DialogInterface dialog, int id) {
+                                     setValue(_tmpValue);
+                                 }
+                             })
+                         .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                                 public void onClick(DialogInterface dialog, int id) {
+                                     // User cancelled the dialog
+                                 }
+                             });
+                     builder.create().show();
+                     return true;
++>>>>>>> upstream/2.9.3+dfsg1
                  }
              });
          if(_spinner != null) {
@@@ -237,9 -242,7 +371,13 @@@
                      public void onStopTrackingTouch(SeekBar seekBar) {
                          setValue(getMin() + (getMax() - getMin())*seekBar.getProgress()/100);
                      }
++<<<<<<< HEAD
 +
 +                    public void onStartTrackingTouch(SeekBar seekBar) {}
 +
++=======
+                     public void onStartTrackingTouch(SeekBar seekBar) {}
++>>>>>>> upstream/2.9.3+dfsg1
                      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
                  });
          }
@@@ -248,7 -251,6 +386,10 @@@
              paramLayout.addView(_checkbox);
              _checkbox.setEnabled(!_readOnly);
              _checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
                      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                          setValue((isChecked)? 1 : 0);
                      }
@@@ -257,39 -259,41 +398,77 @@@
          else if(_edittext != null){
              paramLayout.addView(_edittext);
              _edittext.setEnabled(!_readOnly);
++<<<<<<< HEAD
 +
 +            _edittext.setOnKeyListener(new View.OnKeyListener() {
 +                    public boolean onKey(View v, int keyCode, KeyEvent event) {
 +                        if(keyCode == KeyEvent.KEYCODE_ENTER){ // hide the keyboard
 +                            InputMethodManager imm = (InputMethodManager)_context.getSystemService(
 +                                                                                                   Context.INPUT_METHOD_SERVICE);
 +                            imm.hideSoftInputFromWindow(_edittext.getWindowToken(), 0);
 +                            setValue(_value);
 +                            _edittext.clearFocus();
 +                            return true;
 +                        }
 +                        if(keyCode > KeyEvent.KEYCODE_9 && keyCode != KeyEvent.KEYCODE_NUMPAD_DOT && (keyCode <KeyEvent.KEYCODE_NUMPAD_0 || keyCode >KeyEvent.KEYCODE_NUMPAD_9) && keyCode != KeyEvent.KEYCODE_DEL)
 +                            return true;
 +                        return false;
 +                    }
 +                });
 +            _edittext.addTextChangedListener(new TextWatcher() {
 +
 +                    public void onTextChanged(CharSequence s, int start, int before, int count) {
 +                        try {
 +                            if(s.length() < 1) _value = 1;
 +                            else _value = Double.parseDouble(s.toString());
 +                        }
 +                        catch(NumberFormatException e)
 +                            {
 +                                _value = 1;
 +                                //_edittext.setText("");
 +                            }
 +                    }
 +
 +                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} // UNUSED Auto-generated method stub
 +                    public void afterTextChanged(Editable s) {} // UNUSED Auto-generated method stub
 +
++=======
+ 
+             _edittext.setOnKeyListener(new View.OnKeyListener() {
+                     public boolean onKey(View v, int keyCode, KeyEvent event) {
+                         if(keyCode == KeyEvent.KEYCODE_ENTER){ // hide the keyboard
+                             InputMethodManager imm = (InputMethodManager)_context.getSystemService
+                                 (Context.INPUT_METHOD_SERVICE);
+                             imm.hideSoftInputFromWindow(_edittext.getWindowToken(), 0);
+                             setValue(_value);
+                             _edittext.clearFocus();
+                             return true;
+                         }
+                         if(keyCode > KeyEvent.KEYCODE_9 &&
+                            keyCode != KeyEvent.KEYCODE_NUMPAD_DOT &&
+                            (keyCode <KeyEvent.KEYCODE_NUMPAD_0 ||
+                             keyCode >KeyEvent.KEYCODE_NUMPAD_9) &&
+                            keyCode != KeyEvent.KEYCODE_DEL)
+                             return true;
+                         return false;
+                     }
+                 });
+             _edittext.addTextChangedListener(new TextWatcher() {
+                     public void onTextChanged(CharSequence s, int start, int before, int count) {
+                         try {
+                             if(s.length() < 1) _value = 1;
+                             else _value = Double.parseDouble(s.toString());
+                         }
+                         catch(NumberFormatException e){
+                             _value = 1;
+                             //_edittext.setText("");
+                         }
+                     }
+                     // UNUSED Auto-generated method stub
+                     public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+                     // UNUSED Auto-generated method stub
+                     public void afterTextChanged(Editable s) {}
++>>>>>>> upstream/2.9.3+dfsg1
                  });
          }
          else if(_stepper != null) {
@@@ -303,7 -307,10 +482,14 @@@
          return paramLayout;
      }
      private OnParameterChangedListener mListener;
++<<<<<<< HEAD
 +    public void setOnParameterChangedListener(OnParameterChangedListener listener) { mListener = listener;}
++=======
+     public void setOnParameterChangedListener(OnParameterChangedListener listener)
+     {
+         mListener = listener;
+     }
++>>>>>>> upstream/2.9.3+dfsg1
      public interface OnParameterChangedListener
      {
          void OnParameterChanged();
diff --cc contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java
index 0847f0c,c3c0ce4..dfe6f92
--- a/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java
@@@ -16,14 -16,15 +16,23 @@@ import android.widget.Spinner
  
  public class ParameterString extends Parameter{
  
++<<<<<<< HEAD
 +    private  String _kind;
++=======
+     private String _kind;
++>>>>>>> upstream/2.9.3+dfsg1
      private int _index;
      private ArrayList<String> _choices;
      private ArrayAdapter<String> _adapter;
      private Spinner _spinner;
      private EditText _edittext;
  
++<<<<<<< HEAD
 +    public ParameterString(Context context, Gmsh gmsh, String name) {
++=======
+     public ParameterString(Context context, Gmsh gmsh, String name)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super(context, gmsh, name);
          _choices = new ArrayList<String>();
          _choices.add("-"); // Default choice
@@@ -33,12 -34,15 +42,23 @@@
      {
          if(_spinner != null) return;
          _spinner = new Spinner(_context);
++<<<<<<< HEAD
 +        _adapter = new ArrayAdapter<String>(_context, android.R.layout.simple_spinner_dropdown_item, _choices);
++=======
+         _adapter = new ArrayAdapter<String>(_context,
+                                             android.R.layout.simple_spinner_dropdown_item,
+                                             _choices);
++>>>>>>> upstream/2.9.3+dfsg1
          _adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
          _spinner.setAdapter(_adapter);
      }
  
++<<<<<<< HEAD
 +    protected void update(){
++=======
+     protected void update()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super.update();
          if(_spinner != null)
              _spinner.setSelection(_index);
@@@ -46,14 -50,17 +66,25 @@@
              _edittext.setText(_choices.get(0));
      }
  
++<<<<<<< HEAD
 +    public void setValue(int index) {
++=======
+     public void setValue(int index)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(index == _index) return;
          _changed = true;
          _index = index;
          _gmsh.setParam(getType(), getName(), _choices.get(_index));
          if(mListener != null) mListener.OnParameterChanged();
      }
++<<<<<<< HEAD
 +    public void setValue(String value) {
++=======
+ 
+     public void setValue(String value)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          int index = _choices.indexOf(value);
          if(index < 0) { // the value is not in the list, add it
              this.addChoices(value);
@@@ -65,8 -72,10 +96,15 @@@
          _gmsh.setParam(getType(), getName(), value);
          if(mListener != null) mListener.OnParameterChanged();
      }
++<<<<<<< HEAD
 +    public void setKind(String kind) {_kind = kind;}
 +    public void addChoices(String choice) {
++=======
+ 
+     public void setKind(String kind) { _kind = kind; }
+     public void addChoices(String choice)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(_edittext == null && _spinner == null) createSpinner();
          for(String c : _choices) // do not add a duplicate value
              if(c.equals(choice))return;
@@@ -75,11 -84,16 +113,24 @@@
          _choices.add(choice);
          this.update();
      }
++<<<<<<< HEAD
 +    public String getValue() {if( _index < 0) return "";return _choices.get(_index);}
 +    public String getKind() {return _kind;}
 +    public int getIndex() {return _index;}
 +    public ArrayList<String> getChoices() {return _choices;}
 +    public int fromString(String s){
++=======
+     public String getValue() {
+         if( _index < 0)
+             return "";
+         return _choices.get(_index);
+     }
+     public String getKind() { return _kind; }
+     public int getIndex() { return _index; }
+     public ArrayList<String> getChoices() { return _choices; }
+     public int fromString(String s)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          int pos = super.fromString(s);
          if(pos <= 0) return -1; // error
          String[] infos = s.split(Character.toString((char)0x03));
@@@ -97,8 -111,9 +148,14 @@@
          this.update();
          return pos;
      }
++<<<<<<< HEAD
 +    public String getType(){return "ParameterString";}
 +    public LinearLayout getView() {
++=======
+     public String getType(){ return "ParameterString"; }
+     public LinearLayout getView()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          LinearLayout paramLayout = new LinearLayout(_context);
          paramLayout.setOrientation(LinearLayout.VERTICAL);
          paramLayout.addView(_title);
@@@ -106,24 -121,20 +163,38 @@@
              paramLayout.addView(_spinner);
              _spinner.setEnabled(!_readOnly);
              _spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
++<<<<<<< HEAD
 +
 +                    public void onNothingSelected(AdapterView<?> arg0) {}
 +
 +                    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
 +                        setValue(pos);
 +                    }
 +
++=======
+                     public void onNothingSelected(AdapterView<?> arg0) {}
+                     public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
+                         setValue(pos);
+                     }
++>>>>>>> upstream/2.9.3+dfsg1
                  });
          }
          else if(_edittext != null){
              paramLayout.addView(_edittext);
              _edittext.setEnabled(!_readOnly);
              _edittext.setOnKeyListener(new View.OnKeyListener() {
++<<<<<<< HEAD
 +
 +                    public boolean onKey(View v, int keyCode, KeyEvent event) {
 +                        if(keyCode == KeyEvent.KEYCODE_ENTER){ // hide the keyboard
 +                            InputMethodManager imm = (InputMethodManager)_context.getSystemService(
 +                                                                                                   Context.INPUT_METHOD_SERVICE);
++=======
+                     public boolean onKey(View v, int keyCode, KeyEvent event) {
+                         if(keyCode == KeyEvent.KEYCODE_ENTER){ // hide the keyboard
+                             InputMethodManager imm = (InputMethodManager)_context.getSystemService
+                                 (Context.INPUT_METHOD_SERVICE);
++>>>>>>> upstream/2.9.3+dfsg1
                              imm.hideSoftInputFromWindow(_edittext.getWindowToken(), 0);
                              _edittext.clearFocus();
                              return true;
@@@ -132,13 -143,11 +203,21 @@@
                      }
                  });
              _edittext.addTextChangedListener(new TextWatcher() {
++<<<<<<< HEAD
 +
 +                    public void onTextChanged(CharSequence s, int start, int before, int count) {
 +                        _choices.clear(); _choices.add(s.toString());
 +                    }
 +
 +                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} // UNUSED Auto-generated method stub
 +
++=======
+                     public void onTextChanged(CharSequence s, int start, int before, int count) {
+                         _choices.clear(); _choices.add(s.toString());
+                     }
+                     // UNUSED Auto-generated method stub
+                     public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
++>>>>>>> upstream/2.9.3+dfsg1
                      public void afterTextChanged(Editable s) {
                          _gmsh.setParam(getType(), getName(), _choices.get(0));
                      }
@@@ -147,8 -156,12 +226,17 @@@
          return paramLayout;
      }
      private OnParameterChangedListener mListener;
++<<<<<<< HEAD
 +    public void setOnParameterChangedListener(OnParameterChangedListener listener) { mListener = listener;}
 +    public interface OnParameterChangedListener {
++=======
+     public void setOnParameterChangedListener(OnParameterChangedListener listener)
+     {
+         mListener = listener;
+     }
+     public interface OnParameterChangedListener
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          void OnParameterChanged();
      }
  
diff --cc contrib/mobile/Android/src/org/geuz/onelab/SeparatedListView.java
index 4a20677,9fcc861..1ebf53e
--- a/contrib/mobile/Android/src/org/geuz/onelab/SeparatedListView.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/SeparatedListView.java
@@@ -35,15 -34,18 +34,28 @@@ public class SeparatedListView extends 
          adapter = new SeparatedListAdaptater();
          this.setAdapter(adapter);
      }
++<<<<<<< HEAD
 +
 +    public void addItem(String header, View item) {
 +        TextView title = (TextView)((LayoutInflater) _context.getSystemService( Context.LAYOUT_INFLATER_SERVICE )).inflate(R.layout.list_header, null);
++=======
+     public void addItem(String header, View item)
+     {
+         TextView title = (TextView)
+             ((LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
+             .inflate(R.layout.list_header, null);
++>>>>>>> upstream/2.9.3+dfsg1
          title.setText(header);
          adapter.addItem(header, title, item);
          adapter.notifyDataSetChanged();
          this.invalidateViews();
      }
++<<<<<<< HEAD
 +    public int itemsCountInSection(String header) {
++=======
+     public int itemsCountInSection(String header)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          return adapter.getCountForSection(header);
      }
      public void refresh()
@@@ -51,13 -53,11 +63,19 @@@
          adapter.notifyDataSetChanged();
          this.invalidateViews();
      }
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      public void clear()
      {
          adapter.clear();
          adapter.notifyDataSetChanged();
      }
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      private class Section{
          private String _name;
          private List<View> _items;
@@@ -78,17 -78,13 +96,26 @@@
              return _items.get(pos);
          }
      }
++<<<<<<< HEAD
 +
      private class SeparatedListAdaptater extends BaseAdapter{
 +
          List<Section> sections;
          List<View> titles;
 +
++=======
++    private class SeparatedListAdaptater extends BaseAdapter{
++        List<Section> sections;
++        List<View> titles;
++>>>>>>> upstream/2.9.3+dfsg1
          public SeparatedListAdaptater() {
              sections = new ArrayList<SeparatedListView.Section>();
              titles = new ArrayList<View>();
          }
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
          public void addItem(String header, View title, View item) {
              for(Section s : sections){
                  if(s.getName().equals(header)){
@@@ -101,7 -97,6 +128,10 @@@
              sections.add(s);
              titles.add(title);
          }
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
          //@Override
          public int getCount() {
              int count = 0;
diff --cc contrib/mobile/Android/src/org/geuz/onelab/SplashScreen.java
index 48bd02e,13febbf..24099ba
--- a/contrib/mobile/Android/src/org/geuz/onelab/SplashScreen.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/SplashScreen.java
@@@ -23,8 -23,7 +23,12 @@@ public class SplashScreen extends Activ
  
      private Intent newIntent;
  
++<<<<<<< HEAD
 +    private final Handler handler = new Handler()
 +	{
++=======
+     private final Handler handler = new Handler() {
++>>>>>>> upstream/2.9.3+dfsg1
              public void handleMessage(Message msg) {
                  switch (msg.what) {
                  case STOPSPLASH:
@@@ -40,11 -39,13 +44,21 @@@
              };
  	};
  
++<<<<<<< HEAD
 +    protected void onCreate(android.os.Bundle savedInstanceState) {
 +        super.onCreate(savedInstanceState);
 +        setContentView(R.layout.splash);
 +        Intent oldIntent = this.getIntent();
 +        if(oldIntent != null && oldIntent.getAction() != null && oldIntent.getAction().equals(Intent.ACTION_VIEW)){
++=======
+     protected void onCreate(android.os.Bundle savedInstanceState)
+     {
+         super.onCreate(savedInstanceState);
+         setContentView(R.layout.splash);
+         Intent oldIntent = this.getIntent();
+         if(oldIntent != null && oldIntent.getAction() != null &&
+            oldIntent.getAction().equals(Intent.ACTION_VIEW)){
++>>>>>>> upstream/2.9.3+dfsg1
              newIntent = new Intent(SplashScreen.this, MainActivity.class);
              newIntent.setAction(oldIntent.getAction());
              newIntent.setData(oldIntent.getData());
@@@ -54,15 -55,17 +68,29 @@@
  	SharedPreferences sharedPref = getSharedPreferences(getPackageName(), Context.MODE_PRIVATE);
  	int codev = 0;
  	try {
++<<<<<<< HEAD
 +		codev = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
 +	} catch (android.content.pm.PackageManager.NameNotFoundException e) {}
 +	int modelsv = sharedPref.getInt("OnelabModelsVersion", 0);
 +	if(modelsv == 0 || modelsv != codev) {
 +		Log.d("Models", "Updating models to version "+codev);
 +		SharedPreferences.Editor editor = sharedPref.edit();
 +		editor.putInt("OnelabModelsVersion", codev);
 +		editor.commit();
 +		loadNative();
++=======
+             codev = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
+ 	}
+         catch (android.content.pm.PackageManager.NameNotFoundException e) {
+         }
+ 	int modelsv = sharedPref.getInt("OnelabModelsVersion", 0);
+ 	if(modelsv == 0 || modelsv != codev) {
+             Log.d("Models", "Updating models to version "+codev);
+             SharedPreferences.Editor editor = sharedPref.edit();
+             editor.putInt("OnelabModelsVersion", codev);
+             editor.commit();
+             loadNative();
++>>>>>>> upstream/2.9.3+dfsg1
  	}
  	else Log.d("Models", "Leaving models as-is (version "+modelsv+")");
          final Message msg = new Message();
@@@ -76,7 -79,8 +104,12 @@@
      private void loadNative()
      {
      	try {
++<<<<<<< HEAD
 +            ZipInputStream zipStream = new ZipInputStream(new BufferedInputStream(getResources().openRawResource(R.raw.models)));
++=======
+             ZipInputStream zipStream = new ZipInputStream
+                 (new BufferedInputStream(getResources().openRawResource(R.raw.models)));
++>>>>>>> upstream/2.9.3+dfsg1
              ZipEntry entry;
              while ((entry = zipStream.getNextEntry()) != null) {
                  String name = entry.getName();
@@@ -95,11 -99,13 +128,21 @@@
                      outputStream = openFileOutput(name, Context.MODE_PRIVATE);
                  }
                  byte[] buffer = new byte[2048];
++<<<<<<< HEAD
 +                for (int i = zipStream.read(buffer, 0, buffer.length); i > 0;i = zipStream.read(buffer, 0, buffer.length))
 +                    outputStream.write(buffer,0,i);
 +            }
 +            zipStream.close();
 +        } catch (IOException e1) {
++=======
+                 for (int i = zipStream.read(buffer, 0, buffer.length); i > 0;
+                      i = zipStream.read(buffer, 0, buffer.length))
+                     outputStream.write(buffer,0,i);
+             }
+             zipStream.close();
+         }
+         catch (IOException e1) {
++>>>>>>> upstream/2.9.3+dfsg1
              e1.printStackTrace();
          }
      }
diff --cc contrib/mobile/Android/src/org/geuz/onelab/Stepper.java
index 5392218,46b2047..b547f06
--- a/contrib/mobile/Android/src/org/geuz/onelab/Stepper.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/Stepper.java
@@@ -8,7 -8,6 +8,10 @@@ import android.widget.EditText
  import android.text.TextWatcher;
  import android.text.Editable;
  
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  class Stepper extends LinearLayout{
  
      private int _min, _max, _val;
@@@ -58,7 -57,10 +61,14 @@@
      public void inc(){setValue(_val+1);}
      public void dec(){setValue(_val-1);}
  
++<<<<<<< HEAD
 +    public void setOnValueChangedListener(OnValueChangedListener listener) {_listener = listener;}
++=======
+     public void setOnValueChangedListener(OnValueChangedListener listener)
+     {
+         _listener = listener;
+     }
++>>>>>>> upstream/2.9.3+dfsg1
      public void setMaximum(int max){_max = max;}
      public void setMinimum(int min){_min = min;}
      public void setValue(int val){
diff --cc contrib/mobile/Android/src/org/geuz/onelab/StringTexture.java
index c53de72,2528573..a8c45cf
--- a/contrib/mobile/Android/src/org/geuz/onelab/StringTexture.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/StringTexture.java
@@@ -26,7 -26,8 +26,12 @@@ public class StringTexture 
          getBitmapFromText(12.0f, Color.BLACK);
      }
  
++<<<<<<< HEAD
 +    private void getBitmapFromText(float textSize, int textColor) {
++=======
+     private void getBitmapFromText(float textSize, int textColor)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          Paint paint = new Paint();
          paint.setTextSize(textSize);
          paint.setColor(textColor);
@@@ -41,7 -42,8 +46,12 @@@
          canvas.drawText(_text, 0, baseline, paint);
      }
  
++<<<<<<< HEAD
 +    private void loadGLTexture(GL10 gl) {
++=======
+     private void loadGLTexture(GL10 gl)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          if(_bitmap == null) return;
          gl.glGenTextures(1, _textures, 0);
  
@@@ -55,7 -57,8 +65,12 @@@
          _bitmap.recycle();
      }
  
++<<<<<<< HEAD
 +    public void draw(GL10 gl, int x, int y) {
++=======
+     public void draw(GL10 gl, int x, int y)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          gl.glEnable(GL10.GL_TEXTURE_2D);
          // VERTEX
          float vertex[] = {
@@@ -87,7 -90,6 +102,10 @@@
          loadGLTexture(gl);
          gl.glBindTexture(GL10.GL_TEXTURE_2D, _textures[0]);
  
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
          // DRAW
          gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
          gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
@@@ -122,14 -124,6 +140,17 @@@
          Canvas canvas = new Canvas(bitmap);
          canvas.setBitmap(bitmap);
          canvas.drawText(s, 0, baseline, paint);
++<<<<<<< HEAD
 +        // TMP
 +        try {
 +            FileOutputStream stream = new FileOutputStream(Environment.getExternalStorageDirectory()+"/test.jpg");
 +            bitmap.compress(CompressFormat.JPEG, 80, stream);
 +        } catch (FileNotFoundException e) {
 +            // TODO Auto-generated catch block
 +            e.printStackTrace();
 +        }
++=======
++>>>>>>> upstream/2.9.3+dfsg1
          // Get the pixel in a map
          ByteBuffer buffer = ByteBuffer.allocateDirect(width*height);
          buffer.order(ByteOrder.nativeOrder());
diff --cc contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java
index c69bbbc,ea2ab71..a5ad4f5
--- a/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java
@@@ -17,7 -17,8 +17,12 @@@ class mGLSurfaceView extends GLSurfaceV
      private GLESRender _renderer;
      private boolean _rotate;
  
++<<<<<<< HEAD
 +    public mGLSurfaceView(Context context, GLESRender renderer) {
++=======
+     public mGLSurfaceView(Context context, GLESRender renderer)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          super(context);
          _renderer = renderer;
          gesture = new GestureDetector(context, new GestureListener());
@@@ -44,7 -45,8 +49,12 @@@
      }
  
      @Override
++<<<<<<< HEAD
 +	public boolean onTouchEvent(MotionEvent event) {
++=======
+     public boolean onTouchEvent(MotionEvent event)
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          scaleGesture.onTouchEvent(event);
          return gesture.onTouchEvent(event);
      }
@@@ -54,18 -56,11 +64,26 @@@
              _renderer.startInteraction(e.getX(),e.getY());
              return true;
          }
++<<<<<<< HEAD
 +
 +        public boolean onFling(MotionEvent e1, MotionEvent e2,
 +                               float velocityX, float velocityY) {
 +            // UNUSED Auto-generated method stub
 +            return false;
 +        }
 +
 +        public void onLongPress(MotionEvent e) {
 +            // UNUSED Auto-generated method stub
 +
 +        }
 +
++=======
+         // UNUSED Auto-generated method stub
+         public boolean onFling(MotionEvent e1, MotionEvent e2,
+                                float velocityX, float velocityY) { return false; }
+         // UNUSED Auto-generated method stub
+         public void onLongPress(MotionEvent e) { }
++>>>>>>> upstream/2.9.3+dfsg1
          public boolean onScroll(MotionEvent e1, MotionEvent e2,
  				float distanceX, float distanceY) {
              if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false;
@@@ -76,39 -71,31 +94,64 @@@
              requestRender();
              return true;
          }
++<<<<<<< HEAD
 +
 +        public void onShowPress(MotionEvent e) {
 +            // UNUSED Auto-generated method stub
 +
 +        }
 +
 +        public boolean onSingleTapUp(MotionEvent e) {
 +            // UNUSED Auto-generated method stub
 +            return false;
 +        }
 +        public boolean onDoubleTap(MotionEvent e) {
 +            // UNUSED Auto-generated method stub
 +            return false;
 +        }
++=======
+         // UNUSED Auto-generated method stub
+         public void onShowPress(MotionEvent e) { }
+         // UNUSED Auto-generated method stub
+         public boolean onSingleTapUp(MotionEvent e) { return false; }
+         // UNUSED Auto-generated method stub
+         public boolean onDoubleTap(MotionEvent e) { return false; }
++>>>>>>> upstream/2.9.3+dfsg1
          public boolean onDoubleTapEvent(MotionEvent e) {
              scaleFactor = 1f;
              _renderer.resetModelPosition();
              requestRender();
              return true;
          }
++<<<<<<< HEAD
 +        public boolean onSingleTapConfirmed(MotionEvent e) {
 +            // UNUSED Auto-generated method stub
 +            return false;
 +        }
 +
 +    }
 +    public boolean getRotate() {return _rotate;}
 +    public void setRotate(boolean r) {_rotate = r;}
 +    public void resetScale(){
 +        scaleFactor = 1f;
 +        _renderer.scaleModel(scaleFactor);
 +    }
 +    public Bitmap getScreenshot() {
++=======
+         // UNUSED Auto-generated method stub
+         public boolean onSingleTapConfirmed(MotionEvent e) { return false; }
+ 
+     }
+     public boolean getRotate() { return _rotate; }
+     public void setRotate(boolean r) { _rotate = r; }
+     public void resetScale()
+     {
+         scaleFactor = 1f;
+         _renderer.scaleModel(scaleFactor);
+     }
+     public Bitmap getScreenshot()
+     {
++>>>>>>> upstream/2.9.3+dfsg1
          _renderer.needScreenshot();
          this.requestRender();
          while(_renderer.getScreenshot() == null);
diff --cc contrib/mobile/CMakeLists.txt
index d85a1ab,a432175..22e529b
--- a/contrib/mobile/CMakeLists.txt
+++ b/contrib/mobile/CMakeLists.txt
@@@ -97,10 -95,20 +95,27 @@@ if(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_
      COMMAND ${CMAKE_COMMAND} -E copy_directory ${PETSC_FRAMEWORK}/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/petsc.framework/
      COMMAND ${CMAKE_COMMAND} -E copy_directory ${SLEPC_FRAMEWORK}/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/slepc.framework/
    )
++<<<<<<< HEAD
 +  foreach(DIR ${BENCHMARKS})
 +    get_filename_component(DIRNAME ${DIR} NAME)
 +    add_custom_command(TARGET xcodeProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory
 +                    ${DIR} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/files/${DIRNAME})
++=======
+   add_custom_command(TARGET xcodeProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove_directory
+                     ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/files)
+   foreach(DIR ${BENCHMARKS})
+     get_filename_component(DIRNAME ${DIR} NAME)
+     add_custom_command(TARGET xcodeProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory
+                        ${DIR} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/files/${DIRNAME})
+     file(GLOB PNG ${DIR}/*.png)
+     foreach(IMG ${PNG})
+       get_filename_component(IMGNAME ${IMG} NAME)
+       if(NOT (IMGNAME MATCHES ".*_128.png"))
+         add_custom_command(TARGET xcodeProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove
+                           "${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/files/${DIRNAME}/${IMGNAME}")
+       endif()
+     endforeach(IMG)
++>>>>>>> upstream/2.9.3+dfsg1
    endforeach(DIR)
  
    message(STATUS "")
@@@ -171,10 -181,22 +188,28 @@@ if(ENABLE_BUILD_ANDROID
        COMMAND ${CMAKE_COMMAND} -E copy ${LAPACK_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
        COMMAND ${CMAKE_COMMAND} -E copy ${BLAS_LIB} ${CMAKE_CURRENT_BINARY_DIR}/Onelab/libs/armeabi-v7a/
      )
++<<<<<<< HEAD
++=======
+     add_custom_command(TARGET androidProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove_directory
+                       ${CMAKE_CURRENT_BINARY_DIR}/models)
+     add_custom_command(TARGET androidProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove
+                       ${CMAKE_CURRENT_BINARY_DIR}/Onelab/res/raw/models.zip)
++>>>>>>> upstream/2.9.3+dfsg1
      foreach(DIR ${BENCHMARKS})
        get_filename_component(DIRNAME ${DIR} NAME)
        add_custom_command(TARGET androidProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory
                        ${DIR} ${CMAKE_CURRENT_BINARY_DIR}/models/${DIRNAME})
++<<<<<<< HEAD
++=======
+       file(GLOB PNG ${DIR}/*.png)
+       foreach(IMG ${PNG})
+ 	get_filename_component(IMGNAME ${IMG} NAME)
+ 	if(NOT (IMGNAME MATCHES ".*_128.png"))
+           add_custom_command(TARGET androidProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove
+                       "${CMAKE_CURRENT_BINARY_DIR}/models/${DIRNAME}/${IMGNAME}")
+ 	endif()
+       endforeach(IMG)
++>>>>>>> upstream/2.9.3+dfsg1
      endforeach(DIR)
      find_program(ZIP_COMMAND zip)
      add_custom_command(TARGET androidProject POST_BUILD COMMAND cd ${CMAKE_CURRENT_BINARY_DIR}/models/ && zip -r
@@@ -187,7 -209,7 +222,13 @@@
    message(STATUS " * Finally you can build the app with ant 'ant debug'")
    message(STATUS "")
   
++<<<<<<< HEAD
 +  else(PETSC_LIB AND BLAS_LIB AND LAPACK_LIB AND ONELAB_LIB)
 +    message(STATUS "Cannot make Android project without PETSc or without BLAS or without LAPACK or without \"Onelab library\"")
 +  endif(PETSC_LIB AND BLAS_LIB AND LAPACK_LIB AND ONELAB_LIB)
++=======
+   else(PETSC_LIB AND SLEPC_LIB AND BLAS_LIB AND LAPACK_LIB AND ONELAB_LIB)
+     message(STATUS "Cannot make Android project without PETSc or SLEPc or without BLAS or without LAPACK or without \"Onelab library\"")
+   endif(PETSC_LIB AND SLEPC_LIB AND BLAS_LIB AND LAPACK_LIB AND ONELAB_LIB)
++>>>>>>> upstream/2.9.3+dfsg1
  endif(ENABLE_BUILD_ANDROID)
diff --cc contrib/mobile/README.txt
index d451b4e,941360c..eec6f6d
--- a/contrib/mobile/README.txt
+++ b/contrib/mobile/README.txt
@@@ -1,30 -1,367 +1,397 @@@
  This directory contains the source code for Onelab/Mobile, the mobile version of
  Onelab for iOS and Android devices.
  
++<<<<<<< HEAD
 +Copyright (C) 2014 Christophe Geuzaine and Maxime Graulich, University of Liege
 +
 +On iTunes:
 +
 +Onelab (http://onelab.info) is a finite element package based on the open source
 +mesh generator Gmsh (http://gmsh.info) and the solver GetDP
 +(http://getdp.info). It can be used to simulate a wide variety of multi-physic
 +problems: electromagnetics, thermics, mechanics...
 +
 +Onelab comes packaged with a selection of ready-to-use examples. New models can
 +be added through iTunes file sharing: see http://onelab.info/wiki/Mobile for
 +more information.
 +
 +https://itunes.apple.com/us/app/onelab/id845930897
 +
 +On Google Play:
 +
 +Onelab (http://onelab.info) is a finite element package based on the open source
 +mesh generator Gmsh (http://gmsh.info) and the solver GetDP
 +(http://getdp.info). It can be used to simulate a wide variety of multi-physic
 +problems: electromagnetics, thermics, mechanics... 
 +
 +Onelab comes packaged with a selection of ready-to-use examples. New models can
 +be opened directly on your device: see http://onelab.info/wiki/Mobile for more
 +information.
 +
 +https://play.google.com/store/apps/details?id=org.geuz.onelab
++=======
+ Copyright (C) 2014-2015 Christophe Geuzaine and Maxime Graulich, University of Liege
+ 
+ Onelab/Mobile (http://onelab.info) is a finite element package based on the open
+ source mesh generator Gmsh (http://gmsh.info) and the solver GetDP
+ (http://getdp.info). It can be used to simulate a wide variety of multi-physic
+ problems: electromagnetics, thermics, mechanics...
+ 
+ Onelab/Mobile comes packaged with a selection of ready-to-use examples. New
+ models can be added through iTunes file sharing on iOS devices, or opened
+ directly on your devices on Android: see http://onelab.info/wiki/Mobile for more
+ information.
+ 
+ Onelab/Mobile is available on the AppStore and the Google Play store:
+ 
+ https://itunes.apple.com/us/app/onelab/id845930897
+ https://play.google.com/store/apps/details?id=org.geuz.onelab
+ 
+ Sample scripts for building Onelab/Mobile are available in utils/onelab_*_build.sh
+ 
+                               ***
+ 
+ Onelab/Mobile is provided under the terms of the GNU General Public License
+ (GPL), Version 2 or later.
+ 
+ 		    GNU GENERAL PUBLIC LICENSE
+ 		       Version 2, June 1991
+ 
+  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+  Everyone is permitted to copy and distribute verbatim copies
+  of this license document, but changing it is not allowed.
+ 
+ 			    Preamble
+ 
+   The licenses for most software are designed to take away your
+ freedom to share and change it.  By contrast, the GNU General Public
+ License is intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users.  This
+ General Public License applies to most of the Free Software
+ Foundation's software and to any other program whose authors commit to
+ using it.  (Some other Free Software Foundation software is covered by
+ the GNU Library General Public License instead.)  You can apply it to
+ your programs, too.
+ 
+   When we speak of free software, we are referring to freedom, not
+ price.  Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ this service if you wish), that you receive source code or can get it
+ if you want it, that you can change the software or use pieces of it
+ in new free programs; and that you know you can do these things.
+ 
+   To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the rights.
+ These restrictions translate to certain responsibilities for you if you
+ distribute copies of the software, or if you modify it.
+ 
+   For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights that
+ you have.  You must make sure that they, too, receive or can get the
+ source code.  And you must show them these terms so they know their
+ rights.
+ 
+   We protect your rights with two steps: (1) copyright the software, and
+ (2) offer you this license which gives you legal permission to copy,
+ distribute and/or modify the software.
+ 
+   Also, for each author's protection and ours, we want to make certain
+ that everyone understands that there is no warranty for this free
+ software.  If the software is modified by someone else and passed on, we
+ want its recipients to know that what they have is not the original, so
+ that any problems introduced by others will not reflect on the original
+ authors' reputations.
+ 
+   Finally, any free program is threatened constantly by software
+ patents.  We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making the
+ program proprietary.  To prevent this, we have made it clear that any
+ patent must be licensed for everyone's free use or not licensed at all.
+ 
+   The precise terms and conditions for copying, distribution and
+ modification follow.
+ 
+ 		    GNU GENERAL PUBLIC LICENSE
+    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ 
+   0. This License applies to any program or other work which contains
+ a notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License.  The "Program", below,
+ refers to any such program or work, and a "work based on the Program"
+ means either the Program or any derivative work under copyright law:
+ that is to say, a work containing the Program or a portion of it,
+ either verbatim or with modifications and/or translated into another
+ language.  (Hereinafter, translation is included without limitation in
+ the term "modification".)  Each licensee is addressed as "you".
+ 
+ Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope.  The act of
+ running the Program is not restricted, and the output from the Program
+ is covered only if its contents constitute a work based on the
+ Program (independent of having been made by running the Program).
+ Whether that is true depends on what the Program does.
+ 
+   1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any warranty;
+ and give any other recipients of the Program a copy of this License
+ along with the Program.
+ 
+ You may charge a fee for the physical act of transferring a copy, and
+ you may at your option offer warranty protection in exchange for a fee.
+ 
+   2. You may modify your copy or copies of the Program or any portion
+ of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+ 
+     a) You must cause the modified files to carry prominent notices
+     stating that you changed the files and the date of any change.
+ 
+     b) You must cause any work that you distribute or publish, that in
+     whole or in part contains or is derived from the Program or any
+     part thereof, to be licensed as a whole at no charge to all third
+     parties under the terms of this License.
+ 
+     c) If the modified program normally reads commands interactively
+     when run, you must cause it, when started running for such
+     interactive use in the most ordinary way, to print or display an
+     announcement including an appropriate copyright notice and a
+     notice that there is no warranty (or else, saying that you provide
+     a warranty) and that users may redistribute the program under
+     these conditions, and telling the user how to view a copy of this
+     License.  (Exception: if the Program itself is interactive but
+     does not normally print such an announcement, your work based on
+     the Program is not required to print an announcement.)
+ 
+ These requirements apply to the modified work as a whole.  If
+ identifiable sections of that work are not derived from the Program,
+ and can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works.  But when you
+ distribute the same sections as part of a whole which is a work based
+ on the Program, the distribution of the whole must be on the terms of
+ this License, whose permissions for other licensees extend to the
+ entire whole, and thus to each and every part regardless of who wrote it.
+ 
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Program.
+ 
+ In addition, mere aggregation of another work not based on the Program
+ with the Program (or with a work based on the Program) on a volume of
+ a storage or distribution medium does not bring the other work under
+ the scope of this License.
+ 
+   3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms of
+ Sections 1 and 2 above provided that you also do one of the following:
+ 
+     a) Accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software interchange; or,
+ 
+     b) Accompany it with a written offer, valid for at least three
+     years, to give any third party, for a charge no more than your
+     cost of physically performing source distribution, a complete
+     machine-readable copy of the corresponding source code, to be
+     distributed under the terms of Sections 1 and 2 above on a medium
+     customarily used for software interchange; or,
+ 
+     c) Accompany it with the information you received as to the offer
+     to distribute corresponding source code.  (This alternative is
+     allowed only for noncommercial distribution and only if you
+     received the program in object code or executable form with such
+     an offer, in accord with Subsection b above.)
+ 
+ The source code for a work means the preferred form of the work for
+ making modifications to it.  For an executable work, complete source
+ code means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to
+ control compilation and installation of the executable.  However, as a
+ special exception, the source code distributed need not include
+ anything that is normally distributed (in either source or binary
+ form) with the major components (compiler, kernel, and so on) of the
+ operating system on which the executable runs, unless that component
+ itself accompanies the executable.
+ 
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+ 
+   4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License.  Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this License.
+ However, parties who have received copies, or rights, from you under
+ this License will not have their licenses terminated so long as such
+ parties remain in full compliance.
+ 
+   5. You are not required to accept this License, since you have not
+ signed it.  However, nothing else grants you permission to modify or
+ distribute the Program or its derivative works.  These actions are
+ prohibited by law if you do not accept this License.  Therefore, by
+ modifying or distributing the Program (or any work based on the
+ Program), you indicate your acceptance of this License to do so, and
+ all its terms and conditions for copying, distributing or modifying
+ the Program or works based on it.
+ 
+   6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions.  You may not impose any further
+ restrictions on the recipients' exercise of the rights granted herein.
+ You are not responsible for enforcing compliance by third parties to
+ this License.
+ 
+   7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License.  If you cannot
+ distribute so as to satisfy simultaneously your obligations under this
+ License and any other pertinent obligations, then as a consequence you
+ may not distribute the Program at all.  For example, if a patent
+ license would not permit royalty-free redistribution of the Program by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Program.
+ 
+ If any portion of this section is held invalid or unenforceable under
+ any particular circumstance, the balance of the section is intended to
+ apply and the section as a whole is intended to apply in other
+ circumstances.
+ 
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is
+ implemented by public license practices.  Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is willing
+ to distribute software through any other system and a licensee cannot
+ impose that choice.
+ 
+ This section is intended to make thoroughly clear what is believed to
+ be a consequence of the rest of this License.
+ 
+   8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Program under this License
+ may add an explicit geographical distribution limitation excluding
+ those countries, so that distribution is permitted only in or among
+ countries not thus excluded.  In such case, this License incorporates
+ the limitation as if written in the body of this License.
+ 
+   9. The Free Software Foundation may publish revised and/or new versions
+ of the General Public License from time to time.  Such new versions will
+ be similar in spirit to the present version, but may differ in detail to
+ address new problems or concerns.
+ 
+ Each version is given a distinguishing version number.  If the Program
+ specifies a version number of this License which applies to it and "any
+ later version", you have the option of following the terms and conditions
+ either of that version or of any later version published by the Free
+ Software Foundation.  If the Program does not specify a version number of
+ this License, you may choose any version ever published by the Free Software
+ Foundation.
+ 
+   10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the author
+ to ask for permission.  For software which is copyrighted by the Free
+ Software Foundation, write to the Free Software Foundation; we sometimes
+ make exceptions for this.  Our decision will be guided by the two goals
+ of preserving the free status of all derivatives of our free software and
+ of promoting the sharing and reuse of software generally.
+ 
+ 			    NO WARRANTY
+ 
+   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+ REPAIR OR CORRECTION.
+ 
+   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGES.
+ 
+ 		     END OF TERMS AND CONDITIONS
+ 
+ 	    How to Apply These Terms to Your New Programs
+ 
+   If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these terms.
+ 
+   To do so, attach the following notices to the program.  It is safest
+ to attach them to the start of each source file to most effectively
+ convey the exclusion of warranty; and each file should have at least
+ the "copyright" line and a pointer to where the full notice is found.
+ 
+     <one line to give the program's name and a brief idea of what it does.>
+     Copyright (C) <year>  <name of author>
+ 
+     This program is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+     the Free Software Foundation; either version 2 of the License, or
+     (at your option) any later version.
+ 
+     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.
+ 
+     You should have received a copy of the GNU General Public License
+     along with this program; if not, write to the Free Software
+     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ 
+ 
+ Also add information on how to contact you by electronic and paper mail.
+ 
+ If the program is interactive, make it output a short notice like this
+ when it starts in an interactive mode:
+ 
+     Gnomovision version 69, Copyright (C) year name of author
+     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+     This is free software, and you are welcome to redistribute it
+     under certain conditions; type `show c' for details.
+ 
+ The hypothetical commands `show w' and `show c' should show the appropriate
+ parts of the General Public License.  Of course, the commands you use may
+ be called something other than `show w' and `show c'; they could even be
+ mouse-clicks or menu items--whatever suits your program.
+ 
+ You should also get your employer (if you work as a programmer) or your
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary.  Here is a sample; alter the names:
+ 
+   Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+   `Gnomovision' (which makes passes at compilers) written by James Hacker.
+ 
+   <signature of Ty Coon>, 1 April 1989
+   Ty Coon, President of Vice
+ 
+ This General Public License does not permit incorporating your program into
+ proprietary programs.  If your program is a subroutine library, you may
+ consider it more useful to permit linking proprietary applications with the
+ library.  If this is what you want to do, use the GNU Library General
+ Public License instead of this License.
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc contrib/mobile/androidGModel.cpp
index c8de0cc,597d8ad..ee41ed2
--- a/contrib/mobile/androidGModel.cpp
+++ b/contrib/mobile/androidGModel.cpp
@@@ -1,3 -1,5 +1,8 @@@
++<<<<<<< HEAD
++=======
+ #undef NDEBUG
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #ifndef NDEBUG
  #include <android/log.h>
  #define  LOG_TAG    "Gmsh"
@@@ -109,15 -111,15 +114,27 @@@ void getBitmapFromString(const char *te
    jstring jtext = env->NewStringUTF(text);
    jmethodID mid = env->GetStaticMethodID(jClass, "getHeightFromString",
                                           "(Ljava/lang/String;I)I");
++<<<<<<< HEAD
 +  *height = env->CallIntMethod(gCallbackObject, mid, jtext, textsize);
 +  mid = env->GetStaticMethodID(jClass, "getWidthFromString", "(Ljava/lang/String;I)I");
 +  *width =env->CallIntMethod(gCallbackObject, mid, jtext, textsize);
 +  if(realWidth != NULL){
 +    mid = env->GetStaticMethodID(jClass, "getRealWidthFromString", "(Ljava/lang/String;I)I");
 +    *realWidth = env->CallIntMethod(gCallbackObject, mid, jtext, textsize);
 +  }
 +  mid = env->GetStaticMethodID(jClass, "getBytesFromString", "(Ljava/lang/String;I)[B");
 +  jobject jbuffer = env->CallObjectMethod(gCallbackObject, mid, jtext, textsize);
++=======
+   *height = env->CallStaticIntMethod(jClass, mid, jtext, textsize);
+   mid = env->GetStaticMethodID(jClass, "getWidthFromString", "(Ljava/lang/String;I)I");
+   *width =env->CallStaticIntMethod(jClass, mid, jtext, textsize);
+   if(realWidth != NULL){
+     mid = env->GetStaticMethodID(jClass, "getRealWidthFromString", "(Ljava/lang/String;I)I");
+     *realWidth = env->CallStaticIntMethod(jClass, mid, jtext, textsize);
+   }
+   mid = env->GetStaticMethodID(jClass, "getBytesFromString", "(Ljava/lang/String;I)[B");
+   jobject jbuffer = env->CallStaticObjectMethod(jClass, mid, jtext, textsize);
++>>>>>>> upstream/2.9.3+dfsg1
    jbyteArray *jarray = reinterpret_cast<jbyteArray*>(&jbuffer);
    *map = (unsigned char *) malloc((*height)*(*width));
    env->GetByteArrayRegion(*jarray, 0, (*height)*(*width), (jbyte*)*map);
@@@ -162,7 -164,7 +179,11 @@@ extern "C" 
      ((drawContext *)jptr)->eventHandler(jevent, jx, jy);
    }
    JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setStringOption
++<<<<<<< HEAD
 +  (JNIEnv *env, jobject obj, jstring c, jstring n, jstring v)
++=======
+   (JNIEnv *env, jobject obj, jstring c, jstring n, jstring v, jint idx)
++>>>>>>> upstream/2.9.3+dfsg1
    {
      const char* tmp;
      tmp = env->GetStringUTFChars(v, NULL);
@@@ -174,10 -176,10 +195,17 @@@
      tmp = env->GetStringUTFChars(c, NULL);
      std::string category(tmp, strlen(tmp));
      env->ReleaseStringUTFChars(c, tmp);
++<<<<<<< HEAD
 +    GmshSetOption(category, name, value, 0);
 +  }
 +  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setDoubleOption
 +  (JNIEnv *env, jobject obj, jstring c, jstring n, jdouble v)
++=======
+     GmshSetStringOption(category, name, value, (int)idx);
+   }
+   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setDoubleOption
+   (JNIEnv *env, jobject obj, jstring c, jstring n, jdouble v, jint idx)
++>>>>>>> upstream/2.9.3+dfsg1
    {
      const char* tmp;
      tmp = env->GetStringUTFChars(n, NULL);
@@@ -186,10 -188,10 +214,17 @@@
      tmp = env->GetStringUTFChars(c, NULL);
      const std::string category(tmp, strlen(tmp));
      env->ReleaseStringUTFChars(c, tmp);
++<<<<<<< HEAD
 +    GmshSetOption(category, name, (double)v);
 +  }
 +  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setIntegerOption
 +  (JNIEnv *env, jobject obj, jstring c, jstring n, jint v)
++=======
+     GmshSetNumberOption(category, name, (double)v, (int)idx);
+   }
+   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setIntegerOption
+   (JNIEnv *env, jobject obj, jstring c, jstring n, jint v, jint idx)
++>>>>>>> upstream/2.9.3+dfsg1
    {
      const char* tmp;
      tmp = env->GetStringUTFChars(n, NULL);
@@@ -198,10 -200,10 +233,17 @@@
      tmp = env->GetStringUTFChars(c, NULL);
      const std::string category(tmp, strlen(tmp));
      env->ReleaseStringUTFChars(c, tmp);
++<<<<<<< HEAD
 +    GmshSetOption(category, name, (unsigned int)v);
 +  }
 +  JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getStringOption
 +  (JNIEnv *env, jobject obj, jstring c, jstring n)
++=======
+     GmshSetColorOption(category, name, (unsigned int)v, (int)idx);
+   }
+   JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getStringOption
+   (JNIEnv *env, jobject obj, jstring c, jstring n, jint idx)
++>>>>>>> upstream/2.9.3+dfsg1
    {
      const char* tmp;
      tmp = env->GetStringUTFChars(n, NULL);
@@@ -209,13 -211,13 +251,23 @@@
      env->ReleaseStringUTFChars(n, tmp);
      tmp = env->GetStringUTFChars(c, NULL);
      const std::string category(tmp, strlen(tmp));
++<<<<<<< HEAD
 +    std::string value;
 +    GmshGetOption(category, name, value);
 +    return env->NewStringUTF(value.c_str());
 +
 +  }
 +  JNIEXPORT jdouble JNICALL Java_org_geuz_onelab_Gmsh_getDoubleOption
 +  (JNIEnv *env, jobject obj, jstring c, jstring n)
++=======
+     env->ReleaseStringUTFChars(c, tmp);
+     std::string value;
+     value = GmshGetStringOption(category, name, (int)idx);
+     return env->NewStringUTF(value.c_str());
+   }
+   JNIEXPORT jdouble JNICALL Java_org_geuz_onelab_Gmsh_getDoubleOption
+   (JNIEnv *env, jobject obj, jstring c, jstring n, jint idx)
++>>>>>>> upstream/2.9.3+dfsg1
    {
      const char* tmp;
      tmp = env->GetStringUTFChars(n, NULL);
@@@ -223,12 -225,11 +275,20 @@@
      env->ReleaseStringUTFChars(n, tmp);
      tmp = env->GetStringUTFChars(c, NULL);
      const std::string category(tmp, strlen(tmp));
++<<<<<<< HEAD
 +    double value;
 +    GmshGetOption(category, name, value);
 +    return value;
 +  }
 +  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_getIntegerOption
 +  (JNIEnv *env, jobject obj, jstring c, jstring n)
++=======
+     double value = GmshGetNumberOption(category, name, (int)idx);
+     return value;
+   }
+   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_getIntegerOption
+   (JNIEnv *env, jobject obj, jstring c, jstring n, jint idx)
++>>>>>>> upstream/2.9.3+dfsg1
    {
      const char* tmp;
      tmp = env->GetStringUTFChars(n, NULL);
@@@ -236,18 -237,16 +296,29 @@@
      env->ReleaseStringUTFChars(n, tmp);
      tmp = env->GetStringUTFChars(c, NULL);
      const std::string category(tmp, strlen(tmp));
++<<<<<<< HEAD
 +    unsigned int value;
 +    GmshGetOption(category, name, value, 0);
 +    return value;
 +  }
 +
++=======
+     unsigned int value = GmshGetColorOption(category, name, (int)idx);
+     return value;
+   }
++>>>>>>> upstream/2.9.3+dfsg1
    JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getParams
    (JNIEnv *env, jobject obj)
    {
      jclass stringClass = env->FindClass( "java/lang/String" );
      std::vector<std::string> tmp =  onelab::server::instance()->toChar();
++<<<<<<< HEAD
 +    for(unsigned int i=0;i<tmp.size();i++)
 +      for(unsigned int j=0; j<tmp[i].size();j++)
++=======
+     for(unsigned int i = 0; i < tmp.size(); i++)
+       for(unsigned int j = 0; j < tmp[i].size(); j++)
++>>>>>>> upstream/2.9.3+dfsg1
          if(tmp[i][j] == '\0') tmp[i][j] = 0x03;
      jobjectArray params = env->NewObjectArray(tmp.size(), stringClass, 0);
      for(int i=0; i<tmp.size();i++){
@@@ -257,7 -256,6 +328,10 @@@
      }
      return params;
    }
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
    JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setParam
    (JNIEnv *env, jobject obj, jstring jtype, jstring jname, jstring jvalue)
    {
@@@ -265,14 -263,14 +339,22 @@@
      const char *name = env->GetStringUTFChars(jname, NULL);
      const char *value = env->GetStringUTFChars(jvalue, NULL);
      // Get the original param and then change the value
++<<<<<<< HEAD
 +    if(strcmp(type,"ParameterNumber") == 0){
++=======
+     if(strcmp(type, "ParameterNumber") == 0){
++>>>>>>> upstream/2.9.3+dfsg1
        std::vector<onelab::number> s;
        if(onelab::server::instance()->get(s,  name)){
          s[0].setValue(atof(value));
          onelab::server::instance()->set(s[0]);
        }
      }
++<<<<<<< HEAD
 +    else if(strcmp(type,"ParameterString") == 0){
++=======
+     else if(strcmp(type, "ParameterString") == 0){
++>>>>>>> upstream/2.9.3+dfsg1
        std::vector<onelab::string> s;
        if(onelab::server::instance()->get(s,  name)){
          s[0].setValue(value);
@@@ -280,36 -278,7 +362,40 @@@
        }
      }
    }
++<<<<<<< HEAD
 +
 +  JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getPView
 +  (JNIEnv *env, jobject obj)
 +  {
 +    jclass stringClass = env->FindClass( "java/lang/String" );
 +    jobjectArray jPView = env->NewObjectArray(PView::list.size(), stringClass, 0);
 +    for(unsigned int i = 0; i < PView::list.size(); i++){
 +      std::ostringstream sstream;
 +      sstream	<< PView::list[i]->getData()->getName().c_str()
 +                << "\n" <<  PView::list[i]->getOptions()->intervalsType
 +                << "\n" << ((PView::list[i]->getOptions()->visible) ? 1 : 0)
 +                << "\n" << PView::list[i]->getOptions()->nbIso
 +                << "\n" << PView::list[i]->getOptions()->raise[2];
 +      jstring s = env->NewStringUTF(sstream.str().c_str());
 +      env->SetObjectArrayElement(jPView, i, s);
 +      env->DeleteLocalRef(s);
 +    }
 +    return jPView;
 +  }
 +
 +  JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setPView
 +  (JNIEnv *env, jobject, jint pos, jint intervalsType, jint visible, jint nIntervals, jfloat raisez)
 +  {
 +    if(intervalsType > 0 && intervalsType < 4) PView::list[pos]->getOptions()->intervalsType = intervalsType;
 +    if(visible >= 0) PView::list[pos]->getOptions()->visible = visible;
 +    if(nIntervals > 0) PView::list[pos]->getOptions()->nbIso = nIntervals;
 +    if(raisez>=0) PView::list[pos]->getOptions()->raise[2] = raisez;
 +    PView::list[pos]->setChanged(true);
 +  }
 +
++=======
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_onelabCB
    (JNIEnv *env, jobject obj, jstring jaction)
    {
@@@ -344,7 -313,7 +430,11 @@@
      sstream << "<center><h3>Gmsh</h3>"
              << "Version " << GMSH_VERSION << " "
              << "(<i>Build date:</i> " << GMSH_DATE << ")"
++<<<<<<< HEAD
 +            << "<p>Copyright (C) 1997-2014 Christophe Geuzaine and Jean-François Remacle</p>"
++=======
+             << "<p>Copyright (C) 1997-2015 Christophe Geuzaine and Jean-François Remacle</p>"
++>>>>>>> upstream/2.9.3+dfsg1
              << "<p><a href=\"http://geuz.org/gmsh/doc/CREDITS.txt\">Credits</a> "
              << "and <a href=\"http://geuz.org/gmsh/doc/LICENSE.txt\">licensing information</a></p>"
              << "<p><i>Build options:</i> " << GMSH_CONFIG_OPTIONS << "</p>"
@@@ -358,7 -327,7 +448,11 @@@
      sstream << "<center><h3>GetDP</h3>"
              << "Version " << GETDP_VERSION << " "
              << "(<i>Build date:</i> " << GETDP_DATE << ")"
++<<<<<<< HEAD
 +            << "<p>Copyright (C) 1997-2014 Patrick Dular and Christophe Geuzaine, University of Liège</p>"
++=======
+             << "<p>Copyright (C) 1997-2015 Patrick Dular and Christophe Geuzaine, University of Liège</p>"
++>>>>>>> upstream/2.9.3+dfsg1
              << "<p><a href=\"http://geuz.org/getdp/doc/CREDITS.txt\">Credits</a> "
              << "and <a href=\"http://geuz.org/getdp/doc/LICENSE.txt\">licensing information</a></p>"
              << "<p><i>Build options:</i> " << GETDP_CONFIG_OPTIONS << "</p>"
diff --cc contrib/mobile/androidGModel.h
index fca4dfd,58a6060..135dcef
--- a/contrib/mobile/androidGModel.h
+++ b/contrib/mobile/androidGModel.h
@@@ -9,182 -9,47 +9,79 @@@ void getBitmapFromString(const char *te
  #ifdef __cplusplus
  extern "C" {
  #endif
++<<<<<<< HEAD
 +/*
 + * Class:     org_geuz_onelab_Gmsh
 + * Method:    init
 + * Signature: (F)J
 + */
  JNIEXPORT jlong JNICALL Java_org_geuz_onelab_Gmsh_init
    (JNIEnv *, jobject, jfloat);
 +
 +/*
 + * Class:     org_geuz_onelab_Gmsh
 + * Method:    loadFile
 + * Signature: (JLjava/lang/String;)V
 + */
++=======
++JNIEXPORT jlong JNICALL Java_org_geuz_onelab_Gmsh_init
++  (JNIEnv *, jobject, jfloat);
++>>>>>>> upstream/2.9.3+dfsg1
  JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_loadFile
    (JNIEnv *, jobject, jlong, jstring);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    initView
-  * Signature: (JII)V
-  */
  JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_initView
    (JNIEnv *, jobject, jlong, jint, jint);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    drawView
-  * Signature: (J)V
-  */
  JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_drawView
    (JNIEnv *, jobject, jlong);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    eventHandler
-  * Signature: (JIFF)V
-  */
  JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_eventHandler
    (JNIEnv *, jobject, jlong, jint, jfloat, jfloat);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    setStringOption
-  * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-  */
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setStringOption
-   (JNIEnv *, jobject, jstring, jstring, jstring);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    setDoubleOption
-  * Signature: (Ljava/lang/String;Ljava/lang/String;D)I
-  */
+   (JNIEnv *, jobject, jstring, jstring, jstring, jint);
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setDoubleOption
-   (JNIEnv *, jobject, jstring, jstring, jdouble);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    setIntegerOption
-  * Signature: (Ljava/lang/String;Ljava/lang/String;I)I
-  */
+   (JNIEnv *, jobject, jstring, jstring, jdouble, jint);
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setIntegerOption
-   (JNIEnv *, jobject, jstring, jstring, jint);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    getStringOption
-  * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-  */
+   (JNIEnv *, jobject, jstring, jstring, jint, jint);
  JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getStringOption
-   (JNIEnv *, jobject, jstring, jstring);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    getDoubleOption
-  * Signature: (Ljava/lang/String;Ljava/lang/String;)D
-  */
+   (JNIEnv *, jobject, jstring, jstring, jint);
  JNIEXPORT jdouble JNICALL Java_org_geuz_onelab_Gmsh_getDoubleOption
-   (JNIEnv *, jobject, jstring, jstring);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    getIntegerOption
-  * Signature: (Ljava/lang/String;Ljava/lang/String;)I
-  */
+ (JNIEnv *, jobject, jstring, jstring, jint);
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_getIntegerOption
-   (JNIEnv *, jobject, jstring, jstring);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    getParams
-  * Signature: ()[Ljava/lang/String;
-  */
+ (JNIEnv *, jobject, jstring, jstring, jint);
  JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getParams
    (JNIEnv *, jobject);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    setParam
-  * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-  */
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setParam
    (JNIEnv *, jobject, jstring, jstring, jstring);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    getPView
-  * Signature: ()[Ljava/lang/String;
-  */
- JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getPView
-   (JNIEnv *, jobject);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    setPView
-  * Signature: (IIIIF)V
-  */
- JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setPView
-   (JNIEnv *, jobject, jint, jint, jint, jint, jfloat);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    onelabCB
-  * Signature: (Ljava/lang/String;)I
-  */
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_onelabCB
    (JNIEnv *, jobject, jstring);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    numberOfAnimation
-  * Signature: ()I
-  */
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_numberOfAnimation
    (JNIEnv *, jobject);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    animationNext
-  * Signature: ()I
-  */
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_animationNext
    (JNIEnv *, jobject);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    animationPrev
-  * Signature: ()I
-  */
  JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_animationPrev
    (JNIEnv *, jobject);
- 
- /*
-  * Class:     org_geuz_onelab_Gmsh
-  * Method:    setAnimation
-  * Signature: (I)V
-  */
  JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setAnimation
    (JNIEnv *, jobject, jint);
+ JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getAboutGmsh
+   (JNIEnv *, jclass);
+ JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getAboutGetDP
+   (JNIEnv *, jclass);
  
 +/*
 + * Class:     org_geuz_onelab_Gmsh
 + * Method:    getAboutGmsh
 + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 + */
 +JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getAboutGmsh
 +  (JNIEnv *, jclass);
 +
 +/*
 + * Class:     org_geuz_onelab_Gmsh
 + * Method:    getAboutGetDP
 + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 + */
 +JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getAboutGetDP
 +  (JNIEnv *, jclass);
 +
  #ifdef __cplusplus
  }
  #endif
diff --cc contrib/mobile/drawContext.cpp
index f8c45f6,4a377ae..6ff60ee
--- a/contrib/mobile/drawContext.cpp
+++ b/contrib/mobile/drawContext.cpp
@@@ -46,8 -46,8 +46,13 @@@ drawContext::drawContext(float fontFact
  
  static void checkGlError(const char* op)
  {
++<<<<<<< HEAD
 +  for (GLint error = glGetError(); error; error = glGetError())
 +    Msg::Error("%s: glError (0x%x)",op,error);
++=======
+   //for (GLint error = glGetError(); error; error = glGetError())
+   //  Msg::Error("%s: glError (0x%x)",op,error);
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  void drawContext::load(std::string filename)
@@@ -363,8 -363,12 +368,17 @@@ void drawContext::drawPView(PView *p
    glLineWidth((GLfloat)opt->lineWidth);
  
    drawArray(p->va_points, GL_POINTS, true);
++<<<<<<< HEAD
 +  drawArray(p->va_lines, GL_LINES, true);
 +  drawArray(p->va_triangles, GL_TRIANGLES, true, true);
++=======
+ 
+   drawArray(p->va_lines, GL_LINES, true);
+ 
+   glEnable(GL_LIGHTING);
+   drawArray(p->va_triangles, GL_TRIANGLES, true, true);
+   glDisable(GL_LIGHTING);
++>>>>>>> upstream/2.9.3+dfsg1
  
    glLineWidth(1);
    glPointSize(1);
@@@ -382,7 -386,7 +396,11 @@@ void drawContext::drawScale(
    double height = size / 10.;
    double dh = height / 5;
  
++<<<<<<< HEAD
 +	// Draw the scale bar
++=======
+   // Draw the scale bar
++>>>>>>> upstream/2.9.3+dfsg1
    int nPview = 0;
    for(int i=0; i<PView::list.size();i++){
      PView *p = PView::list[i];
@@@ -576,6 -580,70 +594,73 @@@ void drawContext::drawAxes(
    drawString z("Z", 15 * _fontFactor, colors+16);
    z.draw(x0 + zx + o, y0 + zy + o, 0, _width/(_right-_left), _height/(_top-_bottom), false);
    glPopMatrix();
++<<<<<<< HEAD
++=======
+ }
+ 
+ int drawContext::fix2dCoordinates(double *x, double *y)
+ {
+   int ret = (*x > 99999 && *y > 99999) ? 3 : (*y > 99999) ? 2 : (*x > 99999) ? 1 : 0;
+ 
+   if(*x < 0) // measure from right border
+     *x = _right + *x;
+   else if(*x > 99999) // by convention, x-centered
+     *x = _right / 2;
+ 
+   if(*y < 0) // measure from bottom border
+     *y = -(*y);
+   else if(*y > 99999) // by convention, y-centered
+     *y = _top / 2.;
+   else
+     *y = _top - *y;
+   return ret;
+ }
+ 
+ void drawContext::drawText2d()
+ {
+   glPushMatrix();
+   glLoadIdentity();
+ 
+   for(unsigned int i = 0; i < PView::list.size(); i++){
+     PViewData *data = PView::list[i]->getData();
+     PViewOptions *opt = PView::list[i]->getOptions();
+     if(opt->visible && opt->drawStrings){
+       for(int j = 0; j < data->getNumStrings2D(); j++){
+         double x, y, style;
+         std::string str;
+         data->getString2D(j, opt->timeStep, str, x, y, style);
+         //fix2dCoordinates(&x, &y);
+         GLfloat colors[] = {0., 0, 0, 1.};
+         drawString s(str.c_str(), 20 * _fontFactor, colors);
+         // FIXME:
+         s.draw(_left + (_right - _left) / 2.,
+                _bottom + 0.8 * (_top - _bottom), 0,
+                _width/(_right-_left), _height/(_top-_bottom), true);
+       }
+     }
+   }
+ 
+   glPopMatrix();
+ }
+ 
+ void drawGraph2d()
+ {
+   glPushMatrix();
+   glLoadIdentity();
+ 
+   std::vector<PView*> graphs;
+   for(unsigned int i = 0; i < PView::list.size(); i++){
+     PViewData *data = PView::list[i]->getData();
+     PViewOptions *opt = PView::list[i]->getOptions();
+     if(!data->getDirty() && opt->visible && opt->type != PViewOptions::Plot3D)
+       graphs.push_back(PView::list[i]);
+   }
+   if(graphs.empty()) return;
+ 
+   // FIXME: draw 2d graph(s)
+ 
+   glPopMatrix();
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  void drawContext::drawView()
@@@ -583,7 -651,8 +668,12 @@@
    OrthofFromGModel();
  
    glMatrixMode(GL_MODELVIEW);
++<<<<<<< HEAD
 +  // fill the background
++=======
+ 
+   // draw the background
++>>>>>>> upstream/2.9.3+dfsg1
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    if(CTX::instance()->bgGradient){
      glPushMatrix();
@@@ -611,10 -680,73 +701,80 @@@
    }
    checkGlError("Draw background");
  
++<<<<<<< HEAD
 +  glLoadIdentity();
 +  glScalef(_scale[0], _scale[1], _scale[2]);
 +  glTranslatef(_translate[0], _translate[1], _translate[2]);
 +
++=======
+   // init lights
+   glPushMatrix();
+   glLoadIdentity();
+   glScalef(_scale[0], _scale[1], _scale[2]);
+   glTranslatef(_translate[0], _translate[1], _translate[2]);
+   for(int i = 0; i < 6; i++) {
+     if(CTX::instance()->light[i]) {
+       GLfloat position[4] = {
+         (GLfloat)CTX::instance()->lightPosition[i][0],
+         (GLfloat)CTX::instance()->lightPosition[i][1],
+         (GLfloat)CTX::instance()->lightPosition[i][2],
+         (GLfloat)CTX::instance()->lightPosition[i][3]
+       };
+       glLightfv((GLenum)(GL_LIGHT0 + i), GL_POSITION, position);
+       GLfloat r = (GLfloat)(CTX::instance()->unpackRed
+                             (CTX::instance()->color.ambientLight[i]) / 255.);
+       GLfloat g = (GLfloat)(CTX::instance()->unpackGreen
+                             (CTX::instance()->color.ambientLight[i]) / 255.);
+       GLfloat b = (GLfloat)(CTX::instance()->unpackBlue
+                             (CTX::instance()->color.ambientLight[i]) / 255.);
+       GLfloat ambient[4] = {r, g, b, 1.0F};
+       glLightfv((GLenum)(GL_LIGHT0 + i), GL_AMBIENT, ambient);
+       r = (GLfloat)(CTX::instance()->unpackRed
+                     (CTX::instance()->color.diffuseLight[i]) / 255.);
+       g = (GLfloat)(CTX::instance()->unpackGreen
+                     (CTX::instance()->color.diffuseLight[i]) / 255.);
+       b = (GLfloat)(CTX::instance()->unpackBlue
+                     (CTX::instance()->color.diffuseLight[i]) / 255.);
+       GLfloat diffuse[4] = {r, g, b, 1.0F};
+       glLightfv((GLenum)(GL_LIGHT0 + i), GL_DIFFUSE, diffuse);
+       r = (GLfloat)(CTX::instance()->unpackRed
+                     (CTX::instance()->color.specularLight[i]) / 255.);
+       g = (GLfloat)(CTX::instance()->unpackGreen
+                     (CTX::instance()->color.specularLight[i]) / 255.);
+       b = (GLfloat)(CTX::instance()->unpackBlue
+                     (CTX::instance()->color.specularLight[i]) / 255.);
+       GLfloat specular[4] = {r, g, b, 1.0F};
+       glLightfv((GLenum)(GL_LIGHT0 + i), GL_SPECULAR, specular);
+       glEnable((GLenum)(GL_LIGHT0 + i));
+     }
+     else{
+       glDisable((GLenum)(GL_LIGHT0 + i));
+     }
+   }
+   glPopMatrix();
+   // ambient and diffuse material colors track glColor automatically
+   //glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
+   glEnable(GL_COLOR_MATERIAL);
+   // "white"-only specular material reflection color
+   GLfloat spec[4] = {(GLfloat)CTX::instance()->shine,
+                      (GLfloat)CTX::instance()->shine,
+                      (GLfloat)CTX::instance()->shine, 1.0F};
+   glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec);
+   // specular exponent in [0,128] (larger means more "focused"
+   // reflection)
+   glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS,
+               (GLfloat)CTX::instance()->shineExponent);
+   glShadeModel(GL_SMOOTH);
+   glEnable(GL_RESCALE_NORMAL);
+   glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 1.);
+   glDisable(GL_LIGHTING);
+   checkGlError("Initialize lights");
+ 
+   // init position
+   glLoadIdentity();
+   glScalef(_scale[0], _scale[1], _scale[2]);
+   glTranslatef(_translate[0], _translate[1], _translate[2]);
++>>>>>>> upstream/2.9.3+dfsg1
    if(CTX::instance()->rotationCenterCg)
      glTranslatef(CTX::instance()->cg[0],
                   CTX::instance()->cg[1],
@@@ -623,10 -755,8 +783,15 @@@
      glTranslatef(CTX::instance()->rotationCenter[0],
                   CTX::instance()->rotationCenter[1],
                   CTX::instance()->rotationCenter[2]);
++<<<<<<< HEAD
 +
 +  buildRotationMatrix();
 +  glMultMatrixf(_rotatef);
 +
++=======
+   buildRotationMatrix();
+   glMultMatrixf(_rotatef);
++>>>>>>> upstream/2.9.3+dfsg1
    if(CTX::instance()->rotationCenterCg)
      glTranslatef(-CTX::instance()->cg[0],
                   -CTX::instance()->cg[1],
@@@ -635,22 -765,18 +800,37 @@@
      glTranslatef(-CTX::instance()->rotationCenter[0],
                   -CTX::instance()->rotationCenter[1],
                   -CTX::instance()->rotationCenter[2]);
++<<<<<<< HEAD
 +
 +  checkGlError("Initialize position");
 +
 +  glEnable(GL_DEPTH_TEST);
 +
 +  drawMesh();
 +  checkGlError("Draw mesh");
 +  drawGeom();
 +  checkGlError("Draw geometry");
 +  drawPost();
 +  checkGlError("Draw post-pro");
 +  glDisable(GL_DEPTH_TEST);
 +  drawScale();
 +  checkGlError("Draw scales");
 +  drawAxes();
 +  checkGlError("Draw axes");
++=======
+   checkGlError("Initialize position");
+ 
+   // draw everything
+   glEnable(GL_DEPTH_TEST);
+   drawMesh(); checkGlError("Draw mesh");
+   drawGeom(); checkGlError("Draw geometry");
+   drawPost(); checkGlError("Draw post-pro");
+   glDisable(GL_DEPTH_TEST);
+   drawScale(); checkGlError("Draw scales");
+   drawAxes(); checkGlError("Draw axes");
+   drawText2d(); checkGlError("Draw text2d");
+   drawGraph2d(); checkGlError("Draw graph2d");
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  std::vector<std::string> commandToVector(const std::string cmd)
@@@ -730,6 -856,7 +910,10 @@@ int onelab_cb(std::string action
    } while(action == "compute" && !onelabStop && (onelabUtils::incrementLoop("3") ||
                                                   onelabUtils::incrementLoop("2") ||
                                                   onelabUtils::incrementLoop("1")));
++<<<<<<< HEAD
++=======
+   onelabStop = false;
++>>>>>>> upstream/2.9.3+dfsg1
    locked = false;
    return onelab::server::instance()->getChanged();
  }
diff --cc contrib/mobile/drawContext.h
index ac7076d,5768e54..53a7765
--- a/contrib/mobile/drawContext.h
+++ b/contrib/mobile/drawContext.h
@@@ -36,12 -36,14 +36,20 @@@ public
    void setScale(int i, float s) {if(i>=0 && i<3) _scale[i] = s;}
    float getScale(int i) {if(i>=0 && i<3) return _scale[i]; return 0;}
    void initView(int w, int h);
++<<<<<<< HEAD
++=======
+   int fix2dCoordinates(double *x, double *y);
++>>>>>>> upstream/2.9.3+dfsg1
    void drawView();
    void drawAxes();
    void drawGeom();
    void drawMesh();
    void drawPost();
    void drawScale();
++<<<<<<< HEAD
++=======
+   void drawText2d();
++>>>>>>> upstream/2.9.3+dfsg1
  };
  
  void drawArray(VertexArray *va, int type, bool useColorArray=false,
diff --cc contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
index 3eb4164,9387ffc..0a43228
--- a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
+++ b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
@@@ -445,6 -445,7 +445,10 @@@
  		9C96086D1712C16400E1D4A0 /* Debug */ = {
  			isa = XCBuildConfiguration;
  			buildSettings = {
++<<<<<<< HEAD
++=======
+ 				ARCHS = "$(ARCHS_STANDARD)";
++>>>>>>> upstream/2.9.3+dfsg1
  				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
  				CLANG_ENABLE_OBJC_ARC = YES;
@@@ -474,6 -475,7 +478,10 @@@
  		9C96086E1712C16400E1D4A0 /* Release */ = {
  			isa = XCBuildConfiguration;
  			buildSettings = {
++<<<<<<< HEAD
++=======
+ 				ARCHS = "$(ARCHS_STANDARD)";
++>>>>>>> upstream/2.9.3+dfsg1
  				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
  				CLANG_ENABLE_OBJC_ARC = YES;
diff --cc contrib/mobile/iOS/Onelab/AboutViewController.mm
index b7d2423,cd9610a..74ab34d
--- a/contrib/mobile/iOS/Onelab/AboutViewController.mm
+++ b/contrib/mobile/iOS/Onelab/AboutViewController.mm
@@@ -35,8 -35,8 +35,13 @@@
    // Do any additional setup after loading the view.
    self.aboutView.delegate = self;
    self.aboutView.dataDetectorTypes = UIDataDetectorTypeNone;
++<<<<<<< HEAD
 +  [self.aboutView loadHTMLString:[NSString stringWithFormat:@"<html><head><style type=\"text/css\"><!--body { background-color: #FFFFFF; color: #252525; margin: 35px 10px 35px 10px; padding: 0; font-family: helvetica-neue,sans-serif; font-size: 1em; }--></style></head><body><center><p><!--img width=32 src=\"icon_onelab.png\"--></p><h3>Onelab/Mobile</h3>Version %@<p>Copyright (C) 2014 Christophe Geuzaine and Maxime Graulich, University of Liège</p><p>Visit <a href=\"http://onelab. [...]
 +                                           [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"],
++=======
+   [self.aboutView loadHTMLString:[NSString stringWithFormat:@"<html><head><style type=\"text/css\"><!--body { background-color: #FFFFFF; color: #252525; margin: 35px 10px 35px 10px; padding: 0; font-family: helvetica-neue,sans-serif; font-size: 1em; }--></style></head><body><center><p><!--img width=32 src=\"icon_onelab.png\"--></p><h3>Onelab/Mobile</h3>Version %@<p>Copyright (C) 2014-2015 Christophe Geuzaine and Maxime Graulich, University of Liège</p><p>Visit <a href=\"http://on [...]
+                                            [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"],
++>>>>>>> upstream/2.9.3+dfsg1
                                             GMSH_VERSION,
                                             GMSH_DATE,
                                             GMSH_CONFIG_OPTIONS,
diff --cc contrib/mobile/iOS/Onelab/ModelViewController.mm
index 7afc0bb,226599c..734ff4f
--- a/contrib/mobile/iOS/Onelab/ModelViewController.mm
+++ b/contrib/mobile/iOS/Onelab/ModelViewController.mm
@@@ -379,7 -379,7 +379,11 @@@ void getBitmap(void *self, const char *
  
  -(void) getBitmapFromStringObjC:(const char *)text withTextSize:(int)textsize inMap:(unsigned char **)map inHeight:(int *)height inWidth:(int *)width inRealWidth:(int *) realWidth
  {
++<<<<<<< HEAD
 +  UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 1024, textsize)];
++=======
+   UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 1024, 7*textsize/6)];
++>>>>>>> upstream/2.9.3+dfsg1
    lbl.font = [UIFont systemFontOfSize:textsize];
    [lbl setText:[NSString stringWithCString:text  encoding:[NSString defaultCStringEncoding]]];
    [lbl setBackgroundColor:[UIColor clearColor]];
diff --cc contrib/mobile/iOS/Onelab/Onelab-Info.plist
index 64118d5,f35e1b1..3658c05
--- a/contrib/mobile/iOS/Onelab/Onelab-Info.plist
+++ b/contrib/mobile/iOS/Onelab/Onelab-Info.plist
@@@ -35,11 -35,11 +35,19 @@@
      <key>CFBundlePackageType</key>
      <string>APPL</string>
      <key>CFBundleShortVersionString</key>
++<<<<<<< HEAD
 +    <string>1.0.6</string>
 +    <key>CFBundleSignature</key>
 +    <string>????</string>
 +    <key>CFBundleVersion</key>
 +    <string>1.0.6</string>
++=======
+     <string>1.0.11</string>
+     <key>CFBundleSignature</key>
+     <string>????</string>
+     <key>CFBundleVersion</key>
+     <string>1.0.11</string>
++>>>>>>> upstream/2.9.3+dfsg1
      <key>LSRequiresIPhoneOS</key>
      <true/>
      <key>UIFileSharingEnabled</key>
diff --cc contrib/mobile/iOS/Onelab/Parameter.mm
index b487416,5ac5cba..3b43f36
--- a/contrib/mobile/iOS/Onelab/Parameter.mm
+++ b/contrib/mobile/iOS/Onelab/Parameter.mm
@@@ -141,28 -142,42 +142,67 @@@
  
  -(void)selectValue
  {
++<<<<<<< HEAD
 +  std::vector<onelab::number> number;
 +  onelab::server::instance()->get(number,[name UTF8String]);
 +  if(number.size() < 1) return;
 +  UIActionSheet *popupSelectValue = [[UIActionSheet alloc] initWithTitle:[NSString stringWithFormat:@"%s", number[0].getLabel().c_str()] delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
 +  std::vector<double> choices = number[0].getChoices();
 +  for(int i=0;i<choices.size();i++)
 +    [popupSelectValue addButtonWithTitle:[NSString stringWithFormat:@"%s", number[0].getValueLabel(choices[i]).c_str()]];
 +  [popupSelectValue addButtonWithTitle:@"Cancel"];
 +  [popupSelectValue setCancelButtonIndex:popupSelectValue.numberOfButtons - 1];
 +  [popupSelectValue showInView:button];
 +}
 +
 +-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
 +{
 +  std::vector<onelab::number> number;
 +  onelab::server::instance()->get(number,[name UTF8String]);
 +  if(number.size() < 1) return;
 +  if(buttonIndex > number[0].getChoices().size() - 1) return; // cancel
 +  double selected = number[0].getChoices()[buttonIndex];
 +  number[0].setValue(selected);
 +  onelab::server::instance()->set(number[0]);
 +  [button setTitle:[NSString stringWithFormat:@"%s", number[0].getValueLabel(number[0].getValue()).c_str()] forState:UIControlStateNormal];
++=======
+   std::vector<onelab::number> numbers;
+   onelab::server::instance()->get(numbers,[name UTF8String]);
+   if(numbers.size() < 1) return;
+   UIAlertController *alertController;
+   UIAlertAction *destroyAction;
+   alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
+   std::vector<double> choices = numbers[0].getChoices();
+   for(unsigned int i = 0; i < choices.size(); i++)
+     [alertController addAction:[UIAlertAction actionWithTitle:[NSString stringWithFormat:@"%s", numbers[0].getValueLabel(choices[i]).c_str()]
+                                                         style:UIAlertActionStyleDefault
+                                                       handler:^(UIAlertAction *action) {
+           [self updateNumber:numbers[0] withValue:choices[i]];
+           [button setTitle:[NSString stringWithFormat:@"%s", numbers[0].getValueLabel(i).c_str()] forState:UIControlStateNormal];
+ 	}]];
+ 
+   destroyAction = [UIAlertAction actionWithTitle:@"Cancel"
+                                            style:UIAlertActionStyleDestructive
+                                          handler:^(UIAlertAction *action) {
+       // do nothing
+     }];
+ 
+   [alertController addAction:destroyAction];
+   [alertController setModalPresentationStyle:UIModalPresentationPopover];
+ 
+   UIPopoverPresentationController *popPresenter = [alertController popoverPresentationController];
+   popPresenter.sourceView = button;
+   popPresenter.sourceRect = button.bounds;
+   // FIXME: is traverseResponderChainForUIViewController a good idea?
+   [[Utils traverseResponderChainForUIViewController:button] presentViewController:alertController animated:YES completion:nil];
+ }
+ 
+ -(void) updateNumber: (onelab::number)n withValue:(double)v
+ {
+   n.setValue(v);
+   onelab::server::instance()->set(n);
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    [super editValue];
  }
  
@@@ -245,64 -260,64 +285,125 @@@
    onelab::server::instance()->get(number,[name UTF8String]);
    if(number.size() < 1) return YES;
    return number[0].getReadOnly();
++<<<<<<< HEAD
 +}
 +
 ++(double)getHeight
 +{
 +  return 40.0f;
 +}
 + at end
 +
 + at implementation ParameterNumberStepper
 +-(id) initWithNumber:(onelab::number) number
 +{
 +  self = [super init];
 +  if(self) {
 +    name = [NSString stringWithCString:number.getName().c_str() encoding:[NSString defaultCStringEncoding]];
 +    label.alpha = (number.getReadOnly())? 0.439216f : 1.0f;
 +    stepper = [[UIStepper alloc] init];
 +    [stepper setValue:number.getValue()];
 +    [stepper setStepValue:1];
 +    [stepper setMaximumValue:number.getMax()];
 +    [stepper setMinimumValue:number.getMin()];
 +    [stepper addTarget:self action:@selector(stepperValueChanged:) forControlEvents:UIControlEventValueChanged];
 +    [label setText:[NSString stringWithFormat:@"%s %d" ,number.getShortName().c_str(), (int)number.getValue()]];
 +  }
 +  return self;
 +}
 +
 +-(void)stepperValueChanged:(UIStepper *)sender
 +{
 +  std::vector<onelab::number> number;
 +  onelab::server::instance()->get(number,[name UTF8String]);
 +  if(number.size() < 1) return;
 +  number[0].setValue(sender.value);
 +  onelab::server::instance()->set(number[0]);
 +  [label setText:[NSString stringWithFormat:@"%s %d" ,number[0].getShortName().c_str(), (int)number[0].getValue()]];
 +  [super editValue];
 +}
 +
 +-(void)refresh
 +{
 +  std::vector<onelab::number> number;
 +  onelab::server::instance()->get(number,[name UTF8String]);
 +  if(number.size() < 1) return;
 +  [stepper setValue:number[0].getValue()];
 +  [label setText:[NSString stringWithFormat:@"%s %d" ,number[0].getShortName().c_str(), (int)number[0].getValue()]];
 +}
 +
 +-(void)setFrame:(CGRect)frame
 +{
 +  [stepper setFrame:frame];
 +}
 +
 +-(UIStepper *)getStepper
 +{
 +  return stepper;
 +}
 +
 ++(double)getHeight
 +{
++=======
+ }
+ 
+ +(double)getHeight
+ {
+   return 40.0f;
+ }
+ @end
+ 
+ @implementation ParameterNumberStepper
+ -(id) initWithNumber:(onelab::number) number
+ {
+   self = [super init];
+   if(self) {
+     name = [NSString stringWithCString:number.getName().c_str() encoding:[NSString defaultCStringEncoding]];
+     label.alpha = (number.getReadOnly())? 0.439216f : 1.0f;
+     stepper = [[UIStepper alloc] init];
+     [stepper setValue:number.getValue()];
+     [stepper setStepValue:1];
+     [stepper setMaximumValue:number.getMax()];
+     [stepper setMinimumValue:number.getMin()];
+     [stepper addTarget:self action:@selector(stepperValueChanged:) forControlEvents:UIControlEventValueChanged];
+     [label setText:[NSString stringWithFormat:@"%s %d" ,number.getShortName().c_str(), (int)number.getValue()]];
+   }
+   return self;
+ }
+ 
+ -(void)stepperValueChanged:(UIStepper *)sender
+ {
+   std::vector<onelab::number> number;
+   onelab::server::instance()->get(number,[name UTF8String]);
+   if(number.size() < 1) return;
+   number[0].setValue(sender.value);
+   onelab::server::instance()->set(number[0]);
+   [label setText:[NSString stringWithFormat:@"%s %d" ,number[0].getShortName().c_str(), (int)number[0].getValue()]];
+   [super editValue];
+ }
+ 
+ -(void)refresh
+ {
+   std::vector<onelab::number> number;
+   onelab::server::instance()->get(number,[name UTF8String]);
+   if(number.size() < 1) return;
+   [stepper setValue:number[0].getValue()];
+   [label setText:[NSString stringWithFormat:@"%s %d" ,number[0].getShortName().c_str(), (int)number[0].getValue()]];
+ }
+ 
+ -(void)setFrame:(CGRect)frame
+ {
+   [stepper setFrame:frame];
+ }
+ 
+ -(UIStepper *)getStepper
+ {
+   return stepper;
+ }
+ 
+ +(double)getHeight
+ {
++>>>>>>> upstream/2.9.3+dfsg1
    return 60.0f;
  }
  @end
diff --cc contrib/mobile/iOS/Onelab/Utils.mm
index 91b06af,f76a002..6a71a2e
--- a/contrib/mobile/iOS/Onelab/Utils.mm
+++ b/contrib/mobile/iOS/Onelab/Utils.mm
@@@ -20,10 -20,23 +20,30 @@@
      NSString *modelSrc = [[resPath stringByAppendingString:@"/"] stringByAppendingString:obj];
      NSString *modelDst = [[docPath stringByAppendingString:@"/"] stringByAppendingString:obj];
      [[NSFileManager defaultManager] removeItemAtPath:modelDst error:nil];
++<<<<<<< HEAD
 +    NSError *error;
 +    if (![[NSFileManager defaultManager] copyItemAtPath:modelSrc toPath:modelDst error:&error])
 +      NSLog(@"Error: %@", error);
 +  }
++=======
+     NSError *error = nil;
+     if (![[NSFileManager defaultManager] copyItemAtPath:modelSrc toPath:modelDst error:&error])
+       NSLog(@"Error: %@", error);
+     else if(![[NSURL fileURLWithPath:modelDst] setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error])
+       NSLog(@"Error %@", error);
+   }
+ }
+ 
+ + (UIViewController *) traverseResponderChainForUIViewController:(UIView *)v
+ {
+   id nextResponder = [v nextResponder];
+   if ([nextResponder isKindOfClass:[UIViewController class]])
+     return nextResponder;
+   else if ([nextResponder isKindOfClass:[UIView class]])
+     return [Utils traverseResponderChainForUIViewController:nextResponder];
+   else
+     return nil;
++>>>>>>> upstream/2.9.3+dfsg1
  }
  
  @end
diff --cc contrib/mobile/iOS/Onelab/emulatorFix.c
index 4af626e,2624820..6541b40
--- a/contrib/mobile/iOS/Onelab/emulatorFix.c
+++ b/contrib/mobile/iOS/Onelab/emulatorFix.c
@@@ -17,6 -18,7 +18,10 @@@
  #include <pthread.h>
  #include <sys/time.h>
  #include <time.h>
++<<<<<<< HEAD
++=======
+ #include <string.h>
++>>>>>>> upstream/2.9.3+dfsg1
  
  int getrlimit$UNIX2003( int resource, struct rlimit *rlp)
  {
@@@ -140,3 -142,43 +145,46 @@@ clock_t clock$UNIX2003(
  {
      return clock();
  }
++<<<<<<< HEAD
++=======
+ 
+ int creat$UNIX2003(const char *path, mode_t mode)
+ {
+   return creat(path, mode);
+ }
+ 
+ int nanosleep$UNIX2003(const struct timespec *rqtp, struct timespec *rmtp)
+ {
+   return nanosleep(rqtp, rmtp);
+ }
+ 
+ FILE *popen$UNIX2003(const char *command, const char *mode)
+ {
+   return popen(command, mode);
+ }
+ 
+ int setenv$UNIX2003(const char *name, const char *value, int overwrite)
+ {
+   return setenv(name, value, overwrite);
+ }
+ 
+ unsigned int sleep$UNIX2003(unsigned int seconds)
+ {
+   return sleep(seconds);
+ }
+ 
+ char *strerror$UNIX2003(int errnum)
+ {
+   return strerror(errnum);
+ }
+ 
+ double strtod$UNIX2003(const char *restrict nptr, char **restrict endptr)
+ {
+   return strtod(nptr, endptr);
+ }
+ 
+ int system$UNIX2003(const char *command)
+ {
+   return system(command);
+ }
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc contrib/mobile/utils/android_petsc_reconfigure-armv7-android-linux.py
index d920a1b,ae7712b..46875eb
--- a/contrib/mobile/utils/android_petsc_reconfigure-armv7-android-linux.py
+++ b/contrib/mobile/utils/android_petsc_reconfigure-armv7-android-linux.py
@@@ -4,16 -4,21 +4,34 @@@ if __name__ == '__main__'
    import os
    sys.path.insert(0, os.path.abspath('config'))
    import configure
++<<<<<<< HEAD
 +  configure_options = [
 +    '--AR=/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-ar',
 +    '--CC=/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc',
 +    '--CFLAGS=--sysroot=/opt/android-ndk/platforms/android-8/arch-arm',
 +    '--CPP=/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-cpp',
 +    '--CPPFLAGS=--sysroot=/opt/android-ndk/platforms/android-8/arch-arm',
 +    '--CXX=/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-g++',
 +    '--CXXFLAGS=--sysroot=/opt/android-ndk/platforms/android-8/arch-arm -fsigned-char -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fdata-sections -ffunction-sections -fPIC -Wno-psabi -frtti -fexceptions -mthumb -O3 -fomit-frame-pointer -DNDEBUG -fPIC -isystem /opt/android-ndk/platforms/android-8/arch-arm/usr/include -isystem /opt/android-ndk/sources/cxx-stl/gnu-libstdc++/4.6/include -isystem /opt/android-ndk/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include -lstdc++',
 +    '--LDFLAGS= -L/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/user/libs/armeabi-v7a  -L/home/maxime/Stage/_gmsh/CMakeFiles/ndklibs/armeabi-v7a  -L/home/maxime/Stage/petsc-3.3-p6/armv7-unknown-linux/lib',
 +    '--LD_SHARED=/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-ld',
++=======
+   ndkroot='/Users/geuzaine/android-ndk-r8b/'
+   ndkbin=ndkroot + 'toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/'
+   ndklibs=ndkroot + 'toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/user/libs/'
+   ndklibs2=ndkroot + 'platforms/android-14/arch-arm/usr/lib/'
+   externallibs='/Users/geuzaine/src/gmsh/contrib/mobile/frameworks_android/petsc/'
+   configure_options = [
+     '--AR=' + ndkbin + 'arm-linux-androideabi-ar',
+     '--CC=' + ndkbin + 'arm-linux-androideabi-gcc',
+     '--CFLAGS=--sysroot=' + ndkroot + 'platforms/android-8/arch-arm',
+     '--CPP=' + ndkbin + 'arm-linux-androideabi-cpp',
+     '--CPPFLAGS=--sysroot=' + ndkroot + 'platforms/android-8/arch-arm',
+     '--CXX=' + ndkbin + 'arm-linux-androideabi-g++',
+     '--CXXFLAGS=--sysroot=' + ndkroot + 'platforms/android-8/arch-arm -fsigned-char -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fdata-sections -ffunction-sections -fPIC -Wno-psabi -frtti -fexceptions -mthumb -O3 -fomit-frame-pointer -DNDEBUG -fPIC -isystem ' + ndkroot + 'platforms/android-8/arch-arm/usr/include -isystem ' + ndkroot + 'sources/cxx-stl/gnu-libstdc++/4.6/include -isystem ' + ndkroot + 'sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include -lstdc++',
+     '--LDFLAGS= -L' + ndklibs + 'armeabi-v7a -L' + ndklibs2 + ' -lm',
+     '--LD_SHARED=' + ndkbin + 'arm-linux-androideabi-ld',
++>>>>>>> upstream/2.9.3+dfsg1
      '--download-blacs=0',
      '--download-mumps=0',
      '--download-parmetis=0',
@@@ -34,18 -39,18 +52,32 @@@
      '--known-sizeof-short=2',
      '--known-sizeof-size_t=8',
      '--known-sizeof-void-p=8',
++<<<<<<< HEAD
 +    '--with-blas-lib=/home/maxime/Stage/petsc-3.3-p6/externalpackages/f2cblaslapack-3.1.1.q/libf2cblas.so',
++=======
+     '--with-blas-lib=' + externallibs + 'libf2cblas.so',
++>>>>>>> upstream/2.9.3+dfsg1
      '--with-clanguage=cxx',
      '--with-cmake=1',
      '--with-debugging=0',
      '--with-fc=0',
++<<<<<<< HEAD
 +    '--with-lapack-lib=/home/maxime/Stage/petsc-3.3-p6/externalpackages/f2clapacklapack-3.1.1.q/libf2clapack.so',
 +    '--with-mpi=0',
 +    '--with-shared-libraries=1',
 +    '--with-x=0',
 +    '-I/opt/android-ndk/sources/cxx-stl/gnu-libstdc++/include/',
 +    '-I/opt/android-ndk/sources/cxx-stl/gnu-libstdc++/include/backward',
 +    '-I/opt/android-ndk/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include',
++=======
+     '--with-lapack-lib=' + externallibs + 'libf2clapack.so',
+     '--with-mpi=0',
+     '--with-shared-libraries=1',
+     '--with-x=0',
+     '-I' + ndkroot + 'sources/cxx-stl/gnu-libstdc++/include/',
+     '-I' + ndkroot + 'sources/cxx-stl/gnu-libstdc++/include/backward',
+     '-I' + ndkroot + 'sources/cxx-stl/gnu-libstdc++/libs/armeabi/include',
++>>>>>>> upstream/2.9.3+dfsg1
      '-lstdc++',
      '-with-batch=1',
      'PETSC_ARCH=armv7-android-linux',
diff --cc contrib/mobile/utils/iOS.cmake
index 5c79dd1,611a6c9..599f18c
--- a/contrib/mobile/utils/iOS.cmake
+++ b/contrib/mobile/utils/iOS.cmake
@@@ -25,10 -25,10 +25,17 @@@ set (UNIX True
  set (APPLE True)
  set (IOS True)
  
++<<<<<<< HEAD
 +# Force the compilers to gcc for iOS
 +include (CMakeForceCompiler)
 +CMAKE_FORCE_C_COMPILER (gcc gcc)
 +CMAKE_FORCE_CXX_COMPILER (g++ g++)
++=======
+ # Force the compilers to gcc for iOS - removed for Yosemite XCode
+ #include (CMakeForceCompiler)
+ #CMAKE_FORCE_C_COMPILER (gcc gcc)
+ #CMAKE_FORCE_CXX_COMPILER (g++ g++)
++>>>>>>> upstream/2.9.3+dfsg1
  
  # Skip the platform compiler checks for cross compiling
  set (CMAKE_CXX_COMPILER_WORKS TRUE)
diff --cc contrib/mobile/utils/onelab_android_build.sh
index 3a85946,a59de38..54d2503
--- a/contrib/mobile/utils/onelab_android_build.sh
+++ b/contrib/mobile/utils/onelab_android_build.sh
@@@ -6,7 -6,7 +6,11 @@@ frameworks_dir="${HOME}/src/gmsh/contri
  
  petsc_lib="$frameworks_dir/petsc"
  slepc_lib="$frameworks_dir/slepc"
++<<<<<<< HEAD
 +android_ndk="${HOME}/android-ndk-r8b/"
++=======
+ android_ndk="${HOME}/android-ndk-r8b/" 
++>>>>>>> upstream/2.9.3+dfsg1
  android_sdk="${HOME}/android-sdk/"
  
  cmake_default="-DDEFAULT=0 -DCMAKE_TOOLCHAIN_FILE=$gmsh_svn/contrib/mobile/utils/Android.cmake -DENABLE_BUILD_ANDROID=1 -DCMAKE_BUILD_TYPE=Release"
@@@ -16,11 -16,12 +20,19 @@@ function check 
    return_code=$?
    if [ $return_code != 0 ]; then
      echo "last command failed (return $return_code)"
++<<<<<<< HEAD
 +    exit $return_cod
++=======
+     exit $return_code
++>>>>>>> upstream/2.9.3+dfsg1
    fi
  }
  
  # PETSc and BLAS/LAPACK
++<<<<<<< HEAD
++=======
+ echo $petsc_lib/libpetsc.so
++>>>>>>> upstream/2.9.3+dfsg1
  if [ ! -f "$petsc_lib/libpetsc.so" ] || [ ! -f "$petsc_lib/libf2clapack.so" ] || [ ! -f "$petsc_lib/libf2cblas.so" ] || [ ! -d "$petsc_lib/Headers/" ]; then 
    echo -e "ERROR: Need BLAS (f2c), LAPACK (f2c) and PETSc\ncheck android_petsc_reconfigure-armv7-android-linux.py for compile options\n"
    exit 1
@@@ -35,7 -36,7 +47,11 @@@ if [ ! -d "$gmsh_svn/build_android" ] |
    mkdir $gmsh_svn/build_android
  fi
  cd $gmsh_svn/build_android
++<<<<<<< HEAD
 +cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_SHARED=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_TETGEN=1 -DBLAS_LIB="$petsc_lib/libf2cblas.so" -DLAPACK_LIB="$petsc_lib/libf2clapack.so" ..
++=======
+ cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_SHARED=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 -DBLAS_LIB="$petsc_lib/libf2cblas.so" -DLAPACK_LIB="$petsc_lib/libf2clapack.so" ..
++>>>>>>> upstream/2.9.3+dfsg1
  check
  make androidGmsh -j$cmake_thread
  check
@@@ -49,7 -50,7 +65,11 @@@ if [ ! -d "$getdp_svn/build_android" ] 
    mkdir $getdp_svn/build_android
  fi
  cd $getdp_svn/build_android
++<<<<<<< HEAD
 +PETSC_DIR= PETSC_ARCH= SLEPC_DIR= cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_SHARED=1 -DENABLE_GMSH=1 -DENABLE_LEGACY=1 -DENABLE_PETSC=1 -DPETSC_INC="$petsc_lib/Headers;$petsc_lib/Headers/mpiuni" -DPETSC_LIBS="$petsc_lib/libpetsc.so" -DENABLE_SLEPC=1 -DSLEPC_INC="$slepc_lib/Headers/" -DSLEPC_LIB="$slepc_lib/libslepc.a" -DGMSH_INC="$gmsh_svn/build_android/Headers/" -DGMSH_LIB="$gmsh_svn/build_android/libs/libGmsh.so" -DBLAS_LAPACK_LIBRARIES="$petsc_lib/libf2cblas.so;$pets [...]
++=======
+ PETSC_DIR= PETSC_ARCH= SLEPC_DIR= cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_SHARED=1 -DENABLE_GMSH=1 -DENABLE_LEGACY=1 -DENABLE_PETSC=1 -DPETSC_INC="$petsc_lib/Headers;$petsc_lib/Headers/mpiuni" -DPETSC_LIBS="$petsc_lib/libpetsc.so" -DENABLE_SLEPC=1 -DSLEPC_INC="$slepc_lib/Headers/" -DSLEPC_LIB="$slepc_lib/libslepc.so" -DGMSH_INC="$gmsh_svn/build_android/Headers/" -DGMSH_LIB="$gmsh_svn/build_android/libs/libGmsh.so" -DBLAS_LAPACK_LIBRARIES="$petsc_lib/libf2cblas.so;$pet [...]
++>>>>>>> upstream/2.9.3+dfsg1
  check
  make androidGetdp -j$cmake_thread
  check
@@@ -57,14 -58,15 +77,26 @@@ make get_header
  check
  
  # Onelab/Mobile interface
++<<<<<<< HEAD
 +if [ ! -d "$gmsh_svn/contrib/mobile/build_android" ] || [ ! -f "$gmsh_svn/contrib/mobile/build_android/CMakeCache.txt" ]; then
 +  mkdir $gmsh_svn/contrib/mobile/build_android
 +fi
 +cd $gmsh_svn/contrib/mobile/build_android
 +cmake $cmake_default \
 +      -DCMAKE_INCLUDE_PATH="$getdp_svn/" \
 +      -DBLAS_LIB="$petsc_lib/libf2cblas.so" -DLAPACK_LIB="$petsc_lib/libf2clapack.so" \
 +      -DPETSC_LIB="$petsc_lib/libpetsc.so" \
++=======
+ if [ ! -d "$gmsh_svn/contrib/mobile/build_android" ]; then
+   mkdir $gmsh_svn/contrib/mobile/build_android
+ fi
+ cd $gmsh_svn/contrib/mobile/build_android
+ 
+ cmake $cmake_default \
+       -DCMAKE_INCLUDE_PATH="$getdp_svn/" \
+       -DBLAS_LIB="$petsc_lib/libf2cblas.so" -DLAPACK_LIB="$petsc_lib/libf2clapack.so" \
+       -DPETSC_LIB="$petsc_lib/libpetsc.so" -DSLEPC_LIB="$slepc_lib/libslepc.so" \
++>>>>>>> upstream/2.9.3+dfsg1
        -DGMSH_INC="$gmsh_svn/build_android/Headers" -DGMSH_LIB="$gmsh_svn/build_android/libs/libGmsh.so" \
        -DBENCHMARKSDIR="$getdp_svn/" \
        -DGETDP_INC="$getdp_svn/build_android/Headers" -DGETDP_LIB="$getdp_svn/build_android/libs/libGetDP.so" ..
@@@ -74,8 -76,24 +106,29 @@@ chec
  make androidProject
  check
  
++<<<<<<< HEAD
 +# Onelab/Mobile package
 +cd Onelab
++=======
+ # Potentially modify source tree for alternate branding
+ cd Onelab
+ if [ $# -eq 1 ] ; then
+   packagename=${1,,}
+   appname=$1
+   # change package name
+   mv src/org/geuz/onelab/ src/org/geuz/$packagename
+   mkdir src/org/geuz/onelab
+   mv src/org/geuz/$packagename/Gmsh.java src/org/geuz/onelab
+   find . -type f -name '*.java' -not -name 'Gmsh.java' -exec sed -i "s/org\.geuz\.onelab/org\.geuz\.$packagename/g" {} \;
+   sed -i "s/org\.geuz\.onelab/org\.geuz\.$packagename/g" AndroidManifest.xml
+   grep -r -m 1 'Gmsh' src | cut -d ':' -f 1 | xargs -n 1 sed -i "s/org\.geuz\.$packagename;/org\.geuz\.$packagename;\n\nimport org.geuz.onelab.Gmsh;/"
+   # change app name
+   sed -i "s/<string name=\"app_name\">Onelab<\/string>/<string name=\"app_name\">$appname<\/string>/" res/values/strings.xml
+ fi
+ 
+ 
+ # Onelab/Mobile package
++>>>>>>> upstream/2.9.3+dfsg1
  if [ ! -d "libs/armeabi-v7a/" ]; then mkdir -p libs/armeabi-v7a/; fi
  target=1
  while read line; do
@@@ -98,6 -116,9 +151,12 @@@
    target=$(($target+1))
  done < <($android_sdk/tools/android list target | grep -A 5 "id:")
  
++<<<<<<< HEAD
++=======
+ # to sign the APK:
+ # cp utils/ant.properties build_android/Onelab/
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  # to re-install on the device:
  # $android_sdk/platform-tools/adb install -r $gmsh_svn/contrib/mobile/build_android/Onelab/bin/Onelab-release.apk
  
diff --cc contrib/mobile/utils/onelab_ios_build.sh
index 73e5b8e,ae47971..45d8293
--- a/contrib/mobile/utils/onelab_ios_build.sh
+++ b/contrib/mobile/utils/onelab_ios_build.sh
@@@ -29,7 -29,7 +29,11 @@@ function build_gmsh 
      mkdir $gmsh_svn/build_ios_$1
    fi
    cd $gmsh_svn/build_ios_$1
++<<<<<<< HEAD
 +  cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_TETGEN=1 -DCMAKE_OSX_ARCHITECTURES="$1" ..
++=======
+   cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 -DCMAKE_OSX_ARCHITECTURES="$1" ..
++>>>>>>> upstream/2.9.3+dfsg1
    check
    $build_cmd
    check
@@@ -80,6 -80,9 +84,12 @@@ cd $gmsh_svn/contrib/mobile/build_io
  cmake -DCMAKE_INCLUDE_PATH="$frameworks_dir;$getdp_svn" ..
  make xcodeProject
  
++<<<<<<< HEAD
++=======
+ # Potentially modify source tree for alternate branding
+ 
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  #TODO
  #xcodebuild -project "Onelab" -target "Onelab" -configuration Release
  #xcrun -sdk iphoneos PackageApplication -v "Onelab.app" -o "Onelab.ipa" --sign "iPhone Distribution: Your Signature\" --embed enterprise.mobileprovision
diff --cc contrib/mobile/utils/onelab_iossimulator_build.sh
index 77ea8e6,1fa4b42..0d99069
--- a/contrib/mobile/utils/onelab_iossimulator_build.sh
+++ b/contrib/mobile/utils/onelab_iossimulator_build.sh
@@@ -17,7 -17,7 +17,11 @@@ function build_gmsh 
      mkdir $gmsh_svn/build_iossimulator
    fi
    cd $gmsh_svn/build_iossimulator
++<<<<<<< HEAD
 +  cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_TETGEN=1 ..
++=======
+   cmake $cmake_default -DENABLE_BLAS_LAPACK=1 -DENABLE_BUILD_LIB=1 -DENABLE_MATHEX=1 -DENABLE_MESH=1 -DENABLE_ONELAB=1 -DENABLE_PARSER=1 -DENABLE_POST=1 -DENABLE_ANN=1 -DENABLE_TETGEN=1 ..
++>>>>>>> upstream/2.9.3+dfsg1
    $build_cmd
    $headers_cmd
    cd -
diff --cc contrib/onelab/OnelabParser.cpp
index 24159fd,cfd9dba..3006e64
--- a/contrib/onelab/OnelabParser.cpp
+++ b/contrib/onelab/OnelabParser.cpp
@@@ -4,7 -4,6 +4,10 @@@
  
  #include "OnelabClients.h"
  
++<<<<<<< HEAD
 +
++=======
++>>>>>>> upstream/2.9.3+dfsg1
  // reserved keywords for the onelab parser
  
  namespace olkey{
diff --cc contrib/onelab/python/onelab.py
index 6bed104,3d0d08c..f2269c0
--- a/contrib/onelab/python/onelab.py
+++ b/contrib/onelab/python/onelab.py
@@@ -27,27 -27,20 +27,24 @@@ Please report all bugs and problems to 
  <gmsh at geuz.org>.
  """
  
++<<<<<<< HEAD
 +import socket, struct, os, sys, subprocess
++=======
+ import socket, struct, os, sys, subprocess, time
++>>>>>>> upstream/2.9.3+dfsg1
  _VERSION = '1.1'
  
- def file_exist(filename):
-   try:
-     with open(filename) as f:
-       return True
-   except IOError:
-     return False
- 
- def path(ref,inp=''):
-   # ref is reference directory name
-   # inp is an optional file or directory name
-   dirname = os.path.dirname(ref)
+ def path(dirname, inp):
+   # dirname is a directory, can be empty
+   # inp is an optional file or subdirectory name
+   # returns the path to 'inp' in the same directory as 'ref' 
+   dirname = os.path.dirname(dirname + os.sep)
    if not inp: 
-     if dirname:
-       return dirname
-     else :
-       return '.'
+     return dirname
    if inp[0] == '/' or inp[0] == '\\' or (len(inp) > 2 and inp[1] == '\:'):
-      return inp # do nothing, inp is an absolute path
+     return inp # do nothing, inp is an absolute path
+   if inp[0] == '.' :
+     inp = inp[2:] # cut off heading './' or '.\'
    if dirname: 
      return dirname + os.sep + inp # append inp to the path of the reference file
    else:
@@@ -311,7 -304,7 +308,11 @@@ class client 
      if not self.socket or not filename :
        return
      self._send(self._GMSH_MERGE_FILE, filename)
++<<<<<<< HEAD
 +
++=======
+         
++>>>>>>> upstream/2.9.3+dfsg1
    def openProject(self, filename) :
      if not self.socket or not filename :
        return
@@@ -345,18 -338,18 +346,33 @@@
        if msg == "true" :
            return True
      return False
++<<<<<<< HEAD
 +
 +  def isChanged(self, name) :
 +    if not self.socket :
 +      return
 +    msg = ["get", name]
 +    self._send(self._GMSH_CLIENT_CHANGED, '\0'.join(msg))
 +    (t, msg) = self._receive() 
 +    if t == self._GMSH_CLIENT_CHANGED :
 +      if msg == "true" :
 +          return True
 +    return False
 +
++=======
+   
+   def isChanged(self, name) :
+     if not self.socket :
+       return
+     msg = ["get", name]
+     self._send(self._GMSH_CLIENT_CHANGED, '\0'.join(msg))
+     (t, msg) = self._receive()
+     if t == self._GMSH_CLIENT_CHANGED :
+       if msg == "true" :
+           return True
+     return False
+ 
++>>>>>>> upstream/2.9.3+dfsg1
    def setChanged(self, name, changed) :
      if not self.socket :
        return
@@@ -405,7 -399,6 +422,10 @@@
      self.action = "compute" # default (subclients have no client.Action defined)
      self.action = self.getString(self.name + '/Action', False)
      self.setNumber('IsPyMetamodel',value=1,visible=0)
++<<<<<<< HEAD
 +    #self.defineNumber('0Metamodel/Loop',value=0,visible=0)
++=======
++>>>>>>> upstream/2.9.3+dfsg1
      self.loop = self.getNumber('0Metamodel/Loop', warn_if_not_found=False)
      self.batch = self.getNumber('0Metamodel/Batch', warn_if_not_found=False)
      self.sendInfo("Performing OneLab '" + self.action + "'")
@@@ -425,7 -418,7 +445,11 @@@
    def __del__(self):
      self.finalize()
  
++<<<<<<< HEAD
 +  def call(self, name, cmdline, remote='', rundir='', logfile=''):
++=======
+   def call(self, name, cmdline, remote='', rundir='', logfile='', poll=0):
++>>>>>>> upstream/2.9.3+dfsg1
      cwd = None
      if not remote :
        argv = cmdline.rsplit(' ')
@@@ -441,19 -443,31 +474,42 @@@
      else:
        call = subprocess.Popen(argv, bufsize=1, cwd=cwd,
                                stdout=subprocess.PIPE,
-                               stderr=subprocess.PIPE)
+                               stderr=subprocess.STDOUT)
+       count = 0
        for line in iter(call.stdout.readline, b''):
          print(line.rstrip())
+         count += 1
+         if count == 50 : # check every 50 lines for the stop signal from Gmsh
+           count = 0
+           self.action = self.getString(self.name + '/Action', False)
+           if self.action == 'stop':
+             call.terminate()
+             self._send(self._GMSH_WARNING, 'client killed')
+             sys.exit(1)
+       
      result = call.wait()
      if result == 0 :
++<<<<<<< HEAD
 +      self._send(self._GMSH_INFO, 'call \"' + ' '.join(argv) + '\"')
 +      if self.action == 'compute':
 +        self.setChanged(name, False)
 +    else :
 +      for line in iter(call.stderr.readline, b''):
 +        self._send(self._GMSH_ERROR, line.rstrip().encode('utf-8'))
 +      sys.exit(1)
 +      
++=======
+       self._send(self._GMSH_INFO, 'done \"' + ' '.join(argv) + '\"')
+       if self.action == 'compute':
+         self.setChanged(name, False)
+     else :
+       self._send(self._GMSH_ERROR, 'error \"' + ' '.join(argv) + '\"')
+       sys.exit(1)
+   
+   def copy(self, here, there):
+     os.system('cp '+ here + ' ' + there)
+     
++>>>>>>> upstream/2.9.3+dfsg1
    def upload(self, here, there, remote='') :
      if not here or not there :
        return
@@@ -483,28 -497,72 +539,96 @@@
        self._send(self._GMSH_INFO, 'download: ' + ' '.join(argv))
      else :
        print(call.stderr.read())
++<<<<<<< HEAD
 +      
 +  def solutionFiles(self, list) :
++=======
+ 
+   def getPath(self, inp='') :
+     return path(self.wdir, inp)
+ 
+   def fileExists(self, p) :
+     return os.path.exists(p)
+ 
+   def checkFile(self, p) :
+     if not self.fileExists(p):
+       self.sendError('path error: %s' %(p))
+       exit(0) 
+     return True
+ 
+   def checkPath(self, inp='') :
+     p = path(self.wdir,inp)
+     self.checkFile(p)
+     return p
+ 
+   def solutionFiles(self, client, list) :
++>>>>>>> upstream/2.9.3+dfsg1
      self.defineNumber('0Metamodel/9Use restored solution', value=0, choices=[0,1])
      self.defineString('0Metamodel/9Tag', value='')
      if list :
        if self.getNumber('0Metamodel/9Use restored solution') :
++<<<<<<< HEAD
 +        return self.getStringChoices('0Metamodel/9Solution files')  
 +      else :
 +        self.setString('0Metamodel/9Solution files', value=list[0],
 +                       choices=list, readOnly=1)      
 +    return list
 +
 +  def restoreSolution(self) :
 +    return self.getNumber('0Metamodel/9Use restored solution')
 +
 +  def outputFiles(self, list) :
 +    if list :
 +      self.setString(self.name+'/9Output files', value=list[0],
 +                     choices=list, visible=0)
 +
 +# tool to extract the (i, j)th element in an array file
 +from rlcompleter import readline
++=======
+         solFiles = self.getStringChoices('0Metamodel/9Solution files')
+         for i in solFiles:
+           self.checkFile(i)
+       else :
+         solFiles = list
+         self.setString('0Metamodel/9Solution files', value=solFiles[0],
+                        choices=solFiles, readOnly=1)
+         for i in solFiles:
+           if not self.fileExists(i) :
+             self.setChanged(client, 'true')
+     return solFiles
+ 
+   def needsCompute(self, client) :
+     # Avoid recomputation when a database with restored solutions has just been loaded
+     # Otherwise, stop using restored solutions when the client elmer has changed
+     if self.useRestoredSolution() == 2: # we have just loaded a database
+       self.setRestoredSolution(1)
+       self.setChanged(client, 'false') # do not compute
+     else :
+       if self.isChanged(client):
+         self.setRestoredSolution(0)
+         return True
+     return False
+ 
+   def willCompute(self, client) : # Inform user about the value of needsCompute
+     if self.useRestoredSolution() == 2: # special value
+       return False
+     else :
+       return True if self.isChanged(client) else False
+ 
+   def useRestoredSolution(self) :
+     return self.getNumber('0Metamodel/9Use restored solution') 
+ 
+   def setRestoredSolution(self, val) :
+     self.setNumber('0Metamodel/9Use restored solution', value=val)
+ 
+   def outputFiles(self, list) :
+     if list :
+       self.setString('0Metamodel/9Output files', value=list[0],
+                      choices=list, visible=1)
+ 
+ # tool to extract the (i, j)th element in an array file
+ # from rlcompleter import readline
++>>>>>>> upstream/2.9.3+dfsg1
  def extract(filename,i,j):
      input = open(filename,'r')
      all_lines = input.readlines()
diff --cc doc/CREDITS.txt
index 24bc6a5,70ad210..f0e3814
--- a/doc/CREDITS.txt
+++ b/doc/CREDITS.txt
@@@ -130,4 -130,5 +130,9 @@@ Van den Abeele, Simon Vun, Simon Corbin
  Dechaume, Jose Paulo Moitinho de Almeida, Thomas Pinchard, Corrado Chisari, Axel
  Hackbarth, Peter Wainwright, Jiri Hnidek, Thierry Thomas, Konstantinos Poulios,
  Laurent Van Miegroet, Shahrokh Ghavamian, Geordie McBain, Jose Paulo Moitinho de
++<<<<<<< HEAD
 +Almeida, Guillaume Demesy, Wendy Merks-Swolfs, Cosmin Stefan Deaconu.
++=======
+ Almeida, Guillaume Demesy, Wendy Merks-Swolfs, Cosmin Stefan Deaconu, Nigel
+ Nunn, Serban Georgescu.
++>>>>>>> upstream/2.9.3+dfsg1
diff --cc doc/VERSIONS.txt
index 07c88d2,c529a8c..b249aba
--- a/doc/VERSIONS.txt
+++ b/doc/VERSIONS.txt
@@@ -1,3 -1,21 +1,24 @@@
++<<<<<<< HEAD
++=======
+ 2.9.3 (April 18, 2015): updated versions of PETSc/SLEPc and OpenCASCADE/OCE
+ libraries used in official binary builds; new Find() command; miscellaneous code
+ cleanups and small fixes.
+ 
+ 2.9.2 (March 31, 2015): added support for extrusion of embedded points/curves;
+ improved hex-dominant algorithm; fixed crashes in quad algorithm; fix regression
+ in MED reader introduced in 2.9.0; new dark interface mode.
+ 
+ 2.9.1 (March 18, 2015): minor bug fixes.
+ 
+ 2.9.0 (March 12, 2015): improved robustness of spatial searches (extruded meshes,
+ geometry coherence); improved reproductibility of 2D and 3D meshes; added
+ support for high resolution ("retina") graphics; interactive graph point
+ commands; on-the-fly creation of onelab clients in scripts; general periodic
+ meshes using afine transforms; scripted selection of entities in bounding boxes;
+ extended string and list handling functions; many small improvements and bug
+ fixes.
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  2.8.5 (Jul 9, 2014): improved stability and error handling, better Coherence
  function, updated onelab API version and inline parameter definitions, new
  background image modes, more robust Triangulate/Tetrahedralize plugins, new PGF
diff --cc doc/gmsh.html
index 871f9ff,74f9887..68a5144
--- a/doc/gmsh.html
+++ b/doc/gmsh.html
@@@ -29,7 -29,7 +29,11 @@@ generator with built-in pre- and post-p
  
  <h4 align="center">Christophe Geuzaine and Jean-Fran�ois Remacle</h4>
  
++<<<<<<< HEAD
 +<h4 align="center">Version 2.8.5, July 9 2014</h4>
++=======
+ <h4 align="center">Version 2.9.3, April 18 2015</h4>
++>>>>>>> upstream/2.9.3+dfsg1
  
  <center>
    <a href="#Description">Description</a> |
@@@ -68,15 -68,15 +72,27 @@@ the <a href="doc/LICENSE.txt">GNU Gener
  <ul>
    <li>
      <p class="highlight">
++<<<<<<< HEAD
 +      <strong>Current stable release</strong>: Windows
 +      <a href="bin/Windows/gmsh-2.8.5-Windows.zip"><strong>32 bit</strong></a> /
 +      <a href="bin/Windows/gmsh-2.8.5-Windows64.zip"><strong>64 bit</strong></a>,
 +      Linux
 +      <a href="bin/Linux/gmsh-2.8.5-Linux.tgz"><strong>32 bit</strong></a> /
 +      <a href="bin/Linux/gmsh-2.8.5-Linux64.tgz"><strong>64 bit</strong></a>,
 +      <a href="bin/MacOSX/gmsh-2.8.5-MacOSX.dmg"><strong>Mac OS X</strong></a>
 +      and
 +      <a href="src/gmsh-2.8.5-source.tgz"><strong>source code</strong></a>
++=======
+       <strong>Download current stable release</strong>: Windows
+       <a href="bin/Windows/gmsh-2.9.3-Windows32.zip"><strong>32 bit</strong></a> /
+       <a href="bin/Windows/gmsh-2.9.3-Windows64.zip"><strong>64 bit</strong></a>,
+       Linux
+       <a href="bin/Linux/gmsh-2.9.3-Linux32.tgz"><strong>32 bit</strong></a> /
+       <a href="bin/Linux/gmsh-2.9.3-Linux64.tgz"><strong>64 bit</strong></a>,
+       <a href="bin/MacOSX/gmsh-2.9.3-MacOSX.dmg"><strong>Mac OS X</strong></a>
+       and
+       <a href="src/gmsh-2.9.3-source.tgz"><strong>source code</strong></a>
++>>>>>>> upstream/2.9.3+dfsg1
      </p>
      <p>
        <em>A <a href="doc/texinfo/gmsh.html#Tutorial"><strong>tutorial</strong></a>
diff --cc doc/texinfo/gmsh.texi
index a16b3e8,41d8589..05ed2ba
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@@ -21,8 -21,8 +21,13 @@@
  @c =========================================================================
  @c %**start of header
  @setfilename gmsh.info
++<<<<<<< HEAD
 + at set GMSH-VERSION 2.8
 + at set COPYRIGHT @copyright{} 1997-2014 Christophe Geuzaine, Jean-Fran@,{c}ois Remacle
++=======
+ @set GMSH-VERSION 2.9
+ @set COPYRIGHT @copyright{} 1997-2015 Christophe Geuzaine, Jean-Fran@,{c}ois Remacle
++>>>>>>> upstream/2.9.3+dfsg1
  @settitle Gmsh @value{GMSH-VERSION}
  @footnotestyle separate
  @setchapternewpage odd
@@@ -1014,14 -1027,16 +1032,27 @@@ The brackets @code{[]} permit to extrac
  @var{operator-ternary-right} are defined in @ref{Operators}. For the
  definition of @w{@var{built-in-function}s}, see @ref{Built-in
  functions}. The various @w{@var{real-option}s} are listed in
++<<<<<<< HEAD
 + at ref{Options}. @code{StrFind} searches the first @var{char-expression}
 +for any occurrence of the second @var{char-expression}. @code{StrCmp}
 +compares the two strings (returns an integer greater than, equal to, or
 +less than 0, according as the first string is greater than, equal to, or
 +less than the second string).  @code{TextAttributes} creates attributes
 +for text strings. @code{Exists} checks if a variable with the given name
 +exists (i.e., has been defined previously), and @code{FileExists} checks
 +if the file with the given name exists.
++=======
+ @ref{Options}.  @code{Find} searches for occurrences of the first
+ expression in the second (both of which can be lists).  @code{StrFind}
+ searches the first @var{char-expression} for any occurrence of the
+ second @var{char-expression}. @code{StrCmp} compares the two strings
+ (returns an integer greater than, equal to, or less than 0, according as
+ the first string is greater than, equal to, or less than the second
+ string).  @code{TextAttributes} creates attributes for text
+ strings. @code{Exists} checks if a variable with the given name exists
+ (i.e., has been defined previously), and @code{FileExists} checks if the
+ file with the given name exists.
++>>>>>>> upstream/2.9.3+dfsg1
  
  @code{DefineNumber} allows to define a ONELAB variable in-line. The
  @var{expression} given as the first argument is the default value; this
diff --cc doc/texinfo/opt_fields.texi
index 9bee17c,b20d016..d97bd67
--- a/doc/texinfo/opt_fields.texi
+++ b/doc/texinfo/opt_fields.texi
@@@ -597,41 -630,12 +630,45 @@@ default value: @code{1
  Volume indices@*
  type: list@*
  default value: @code{@{@}}
+ @item VerticesList
+ Point indices@*
+ type: list@*
+ default value: @code{@{@}}
  @end table
  
 + at item Sphere
 +The value of this field is VIn inside a sphere, VOut outside. The sphere is given by@*
 +@*
 +  ||dX||^2 < R^2 &&@*
 +  dX = (X - XC)^2 + (Y-YC)^2 + (Z-ZC)^2@*
 +Options:@*
 + at table @code
 + at item Radius
 +Radius@*
 +type: float@*
 +default value: @code{0}
 + at item VIn
 +Value inside the sphere@*
 +type: float@*
 +default value: @code{0}
 + at item VOut
 +Value outside the sphere@*
 +type: float@*
 +default value: @code{0}
 + at item XCenter
 +X coordinate of the sphere center@*
 +type: float@*
 +default value: @code{0}
 + at item YCenter
 +Y coordinate of the sphere center@*
 +type: float@*
 +default value: @code{0}
 + at item ZCenter
 +Z coordinate of the sphere center@*
 +type: float@*
 +default value: @code{0}
 + at end table
 +
  @item Structured
  Linearly interpolate between data provided on a 3D rectangular structured grid.@*
  @*
diff --cc doc/texinfo/opt_plugin.texi
index bba5e25,496a66f..71c1181
--- a/doc/texinfo/opt_plugin.texi
+++ b/doc/texinfo/opt_plugin.texi
@@@ -5,29 -5,31 +5,57 @@@
  
  @ftable @code
  @item Plugin(AnalyseCurvedMesh)
++<<<<<<< HEAD
 +Plugin(AnalyseCurvedMesh) analyse all elements of a given dimension. It computes, min(J) where J is the scaled Jacobian determinant. Eventually, it computes min(R) where R is the ratio between the smaller and the greater of the eigenvalues of the metric. It creates one or more PView and hides elements for which min(@{J, R@}) < 'Hidding threshold'.@*
 +@*
 +Parameters:@*
 +@*
 +- Show [...] = @{0, 1@}: If 0, computes Jacobian and shows min(J). If 1, computes Jacobian and metric and shows min(R).@*
 +@*
 +- Number of PView = @{0, 1, 2@}: If 1, create one PView with all elements. If 2, create two PView, one with straight-sided elements and one with curved elements.@*
 +@*
 +- Hidding threshold = [0,1]: Hides all element for which min(R) or min(J) is strictly greater than the threshold. If = 1, no effect, if = 0 hide all elements except invalid.@*
 +@*
 +- Dimension = @{-1, 1, 2, 3@}: If = -1, analyse element of the greater dimension.@*
 +@*
 +- Recompute = @{0,1@}: If the mesh has changed, set to 1 to recompute the bounds.@*
 +@*
 +- Tolerance = ]0, 1[: Tolerance on the computation of min(R) or min(J). It should be at most 0.01 but it can be set to 1 to just check the validity of the mesh.
 +Numeric options:
 + at table @code
 + at item Show: (0) Jacobian, (1) Metric
 +Default value: @code{1}
 + at item Number of PView
 +Default value: @code{2}
 + at item Hidding threshold
 +Default value: @code{0.1}
++=======
+ Plugin(AnalyseCurvedMesh) analyse all elements of a given dimension. It computes, min(J) where J is the scaled Jacobian determinant and, if asked, min(R) where R is the ratio between the smaller and the greater of the eigenvalues of the metric. It creates a PView and hides elements for which min(@{J, R@}) < 'Hidding threshold'.@*
+ @*
+ J is faster to compute but gives informations only on validity while R gives also informations on quality.@*
+ @*
+ Parameters:@*
+ @*
+ - Show [...] = @{0, 1, 2@}: If 0, computes Jacobian and shows min(J). If 1, computes Jacobian and metric and shows min(R). If 2, behaves like it is 1 but draw the two min(J) and min(R) PView@*
+ @*
+ - Draw PView = @{0, 1@}: Creates a PView of min(@{J, R@}) if it does not exist already. If 'Recompute' = 1, a new PView is redrawed.@*
+ @*
+ - Hidding threshold = [0,1]: Hides all element for which min(R) or min(J) is strictly greater than the threshold. If = 1, no effect, if = 0 hide all elements except invalid.@*
+ @*
+ - Dimension = @{-1, 1, 2, 3, 4@}: If = -1, analyse element of the greater dimension. If = 4, analyse 2D and 3D elements@*
+ @*
+ - Recompute = @{0,1@}: If the mesh has changed, set to 1 to recompute the bounds.@*
+ @*
+ - Tolerance = ]0, 1[: Tolerance on the computation of min(@{R, J@}). It should be at most 0.01 but it can be set to 1 or greater to just check the validity of the mesh.
+ Numeric options:
+ @table @code
+ @item Show: 0:J, 1:R, 2:J&&R
+ Default value: @code{1}
+ @item Draw PView
+ Default value: @code{1}
+ @item Hidding threshold
+ Default value: @code{10}
++>>>>>>> upstream/2.9.3+dfsg1
  @item Dimension of elements
  Default value: @code{-1}
  @item Recompute bounds
@@@ -350,6 -352,14 +378,17 @@@ Numeric options
  Default value: @code{-1}
  @end table
  
++<<<<<<< HEAD
++=======
+ @item Plugin(DuplicateBoundaries)
+ Plugin(DuplicateBoundaries) is not documented yet.
+ Numeric options:
+ @table @code
+ @item Dummy
+ Default value: @code{1}
+ @end table
+ 
++>>>>>>> upstream/2.9.3+dfsg1
  @item Plugin(Eigenvalues)
  Plugin(Eigenvalues) computes the three real eigenvalues of each tensor in the view `View'.@*
  @*
@@@ -574,7 -584,7 +613,11 @@@ Plugin(Integrate) integrates a scalar f
  @*
  If `View' < 0, the plugin is run on the current view.@*
  @*
++<<<<<<< HEAD
 +If `OverTime' = 1 , the plugin integrates the scalar view over time instead of over space.@*
++=======
+ If `OverTime' = i > -1 , the plugin integrates the scalar view over time instead of over space, starting at iteration i.If `Visible' = 1, the plugin only integrates overvisible entities.@*
++>>>>>>> upstream/2.9.3+dfsg1
  @*
  Plugin(Integrate) creates one new view.
  Numeric options:
@@@ -714,14 -726,24 +759,35 @@@ Default value: @code{0
  Default value: @code{-1}
  @end table
  
++<<<<<<< HEAD
 + at item Plugin(MinMax)
 +Plugin(MinMax) computes the min/max of a view.@*
 +@*
 +If `View' < 0, the plugin is run on the current view.@*
 +@*
 +If `OverTime' = 1, calculates the min/max over space AND time@*
 +@*
 +If `Argument' = 1, calculates the min/max AND the argmin/argmax@*
++=======
+ @item Plugin(MeshSubEntities)
+ Plugin(MeshSubEntities) creates mesh elements for the entities of dimension `OutputDimension' (0 for vertices, 1 for edges, 2 for faces) of the `InputPhysicalGroup' of dimension `InputDimension'. The plugin creates new elements belonging to `OutputPhysicalGroup'.
+ Numeric options:
+ @table @code
+ @item InputDimension
+ Default value: @code{1}
+ @item InputPhysicalGroup
+ Default value: @code{1}
+ @item OuputDimension
+ Default value: @code{0}
+ @item OuputPhysicalGroup
+ Default value: @code{2000}
+ @end table
+ 
+ @item Plugin(MinMax)
+ Plugin(MinMax) computes the min/max of a view.@*
+ @*
+ If `View' < 0, the plugin is run on the current view. If `OverTime' = 1, the plugin calculates the min/max over space and time. If `Argument' = 1, the plugin calculates the min/max and the argmin/argmax. If `Visible' = 1, the plugin is only applied to visible entities.@*
++>>>>>>> upstream/2.9.3+dfsg1
  @*
  Plugin(MinMax) creates two new views.
  Numeric options:
@@@ -1204,7 -1228,7 +1272,11 @@@ Default value: @code{-1
  @end table
  
  @item Plugin(Triangulate)
++<<<<<<< HEAD
 +Plugin(Triangulate) triangulates the points in the view `View', assuming that all the points belong to a surface that can be projected one-to-one onto a plane.@*
++=======
+ Plugin(Triangulate) triangulates the points in the view `View', assuming that all the points belong to a surface that can be projected one-to-one onto a plane. Algorithm selects the old (0) or new (1) meshing algorithm.@*
++>>>>>>> upstream/2.9.3+dfsg1
  @*
  If `View' < 0, the plugin is run on the current view.@*
  @*
diff --cc utils/misc/package_gmsh_getdp.sh
index 44c3950,0be0784..b76c1fd
--- a/utils/misc/package_gmsh_getdp.sh
+++ b/utils/misc/package_gmsh_getdp.sh
@@@ -14,10 -17,20 +17,25 @@@ examples." > /tmp/README.tx
  GMSH=svn
  GETDP=svn
  
++<<<<<<< HEAD
 +#GMSH=2.8.4
 +#GETDP=2.4.3
++=======
+ #GMSH=2.8.5
+ #GETDP=2.4.4
++>>>>>>> upstream/2.9.3+dfsg1
  
- rm -rf gmsh-getdp-Windows64
+ MODELS='machines relay inductor indheat magnetometer antennas acoustic_scattering time_reversal shielding waveguides transfo_simple ddm_wave_simple bloch_periodic_waveguides magnets thermal_conduction'
+ 
+ # get onelab models
+ mkdir /tmp/models
+ for m in ${MODELS}; do
+   curl -O http://onelab.info/files/${m}.zip
+   unzip -q -o ${m}.zip -d /tmp/models
+   rm -f ${m}.zip
+ done
+ 
+ rm -rf gmsh-getdp-Windows64*
  mkdir gmsh-getdp-Windows64
  curl -O http://geuz.org/gmsh/bin/Windows/gmsh-${GMSH}-Windows64.zip
  curl -O http://geuz.org/getdp/bin/Windows/getdp-${GETDP}-Windows64c.zip
diff --cc utils/solvers/c++/GmshSocket.h
index 312d160,1483a31..407fe84
--- a/utils/solvers/c++/GmshSocket.h
+++ b/utils/solvers/c++/GmshSocket.h
@@@ -82,6 -82,7 +82,10 @@@ class GmshSocket
      GMSH_PARAMETER_CLEAR     = 31,
      GMSH_PARAMETER_UPDATE    = 32,
      GMSH_OPEN_PROJECT        = 33,
++<<<<<<< HEAD
++=======
+     GMSH_CLIENT_CHANGED      = 34,
++>>>>>>> upstream/2.9.3+dfsg1
      GMSH_OPTION_1            = 100,
      GMSH_OPTION_2            = 101,
      GMSH_OPTION_3            = 102,
diff --cc utils/solvers/c++/onelab.h
index 615b4da,fafc38a..6c93ef7
--- a/utils/solvers/c++/onelab.h
+++ b/utils/solvers/c++/onelab.h
@@@ -695,6 -1016,9 +1016,12 @@@ namespace onelab
        }
        else{
          T* newp = new T(p);
++<<<<<<< HEAD
++=======
+ #ifdef HAVE_ONELAB2
+         newp->isInDatabase(true);
+ #endif
++>>>>>>> upstream/2.9.3+dfsg1
          if(client.size()) newp->addClient(client, true);
          ps.insert(newp);
        }
@@@ -798,7 -1147,7 +1150,11 @@@
        }
        return false;
      }
++<<<<<<< HEAD
 +    // set the changed flag for all the parameters that depend on the give
++=======
+     // set the changed flag for all the parameters that depend on the given
++>>>>>>> upstream/2.9.3+dfsg1
      // client (or for all parameters if no client name is provided)
      void setChanged(bool changed, const std::string &client="")
      {
diff --cc wrappers/gmshpy/gmshGeo.i
index 67e3432,9cb1d60..88c9dbe
--- a/wrappers/gmshpy/gmshGeo.i
+++ b/wrappers/gmshpy/gmshGeo.i
@@@ -148,3 -181,30 +181,33 @@@ namespace std 
      return p;
    }
  }
++<<<<<<< HEAD
++=======
+ 
+ %extend GEdge {
+   void setTransfinite(int nbPointsTransfinite, int typeTransfinite = 0, double coeffTransfinite = 1) {
+     $self->meshAttributes.method = MESH_TRANSFINITE;
+     $self->meshAttributes.typeTransfinite = typeTransfinite;
+     $self->meshAttributes.nbPointsTransfinite = std::max(2, nbPointsTransfinite);
+     $self->meshAttributes.coeffTransfinite = coeffTransfinite;
+   }
+ }
+ 
+ %extend GFace {
+   void setTransfinite() {
+     $self->meshAttributes.method = MESH_TRANSFINITE;
+   }
+   void setRecombine() {
+     $self->meshAttributes.recombine = 1;
+   }
+ }
+ 
+ %extend GRegion {
+   void setTransfinite() {
+     $self->meshAttributes.method = MESH_TRANSFINITE;
+   }
+   void setRecombine() {
+     $self->meshAttributes.recombine3D = 1;
+   }
+ }
++>>>>>>> upstream/2.9.3+dfsg1

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/gmsh.git



More information about the debian-science-commits mailing list