diff --git a/Box/Main.cpp b/Box/Main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9937cb5b2b4bc965fe2e986173650f549244a737
--- /dev/null
+++ b/Box/Main.cpp
@@ -0,0 +1,195 @@
+// $Id: Main.cpp,v 1.1 2001-02-17 22:08:53 geuzaine Exp $
+
+#include <signal.h>
+
+#include "Gmsh.h"
+#include "GmshVersion.h"
+#include "Const.h"
+#include "Geo.h"
+#include "Mesh.h"
+#include "Views.h"
+#include "Parser.h"
+#include "Context.h"
+#include "OpenFile.h"
+#include "GetOptions.h"
+#include "MinMax.h"
+#include "Static.h"
+
+/* dummy defs for link purposes */
+
+void AddViewInUI(int, char *, int){}
+void draw_polygon_2d (double, double, double, int, double *, double *, double *){}
+void set_r(int, double){}
+void Draw(void){}
+void DrawUI(void){}
+void Replot(void){}
+void CreateOutputFile(char *, int){}
+
+/* ------------------------------------------------------------------------ */
+/*  I n f o                                                                 */
+/* ------------------------------------------------------------------------ */
+
+void Info (int level, char *arg0){
+  switch(level){
+  case 0 :
+    fprintf(stderr, "%s\n", gmsh_progname);
+    fprintf(stderr, "%s\n", gmsh_copyright);
+    Print_Options(arg0);
+    exit(1);
+  case 1:
+    fprintf(stderr, "%.2f\n", GMSH_VERSION);
+    exit(1) ; 
+  case 2:
+    fprintf(stderr, "%s%.2f\n", gmsh_version, GMSH_VERSION);
+    fprintf(stderr, "%s\n", gmsh_os);
+    fprintf(stderr, "%s\n", gmsh_date);
+    fprintf(stderr, "%s\n", gmsh_host);
+    fprintf(stderr, "%s\n", gmsh_packager);
+    fprintf(stderr, "%s\n", gmsh_url);
+    fprintf(stderr, "%s\n", gmsh_email);
+    exit(1) ; 
+  default :
+    break;
+  }
+}
+
+/* ------------------------------------------------------------------------ */
+/*  m a i n                                                                 */
+/* ------------------------------------------------------------------------ */
+
+int main(int argc, char *argv[]){
+  int     i, nbf;
+
+  Init_Context(0);
+  Get_Options(argc, argv, &nbf);
+
+  signal(SIGINT,  Signal); 
+  signal(SIGSEGV, Signal);
+  signal(SIGFPE,  Signal); 
+
+  OpenProblem(CTX.filename);
+  if(yyerrorstate)
+    exit(1);
+  else{
+    if(nbf>1){
+      for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]);
+    }
+    if(TheBgmFileName){
+      MergeProblem(TheBgmFileName);
+      if(List_Nbr(Post_ViewList))
+        BGMWithView((Post_View*)List_Pointer(Post_ViewList, List_Nbr(Post_ViewList)-1));
+      else
+        fprintf(stderr, ERROR_STR "Invalid BGM (no view)\n"); exit(1);
+    }
+    if(CTX.interactive > 0){
+      mai3d(THEM, CTX.interactive);
+      Print_Mesh(THEM,NULL,CTX.mesh.format);
+    }
+    exit(1);
+  }    
+
+}
+
+
+/* ------------------------------------------------------------------------ */
+/*  S i g n a l                                                             */
+/* ------------------------------------------------------------------------ */
+
+
+void Signal (int sig_num){
+
+  switch (sig_num){
+  case SIGSEGV : Msg(FATAL, "Segmentation Violation (Invalid Memory Reference)"); break;
+  case SIGFPE  : Msg(FATAL, "Floating Point Exception (Division by Zero?)"); break;
+  case SIGINT  : Msg(FATAL, "Interrupt (Generated from Terminal Special Char)"); break;
+  default      : Msg(FATAL, "Unknown Signal"); break;
+  }
+}
+
+
+/* ------------------------------------------------------------------------ */
+/*  M s g                                                                   */
+/* ------------------------------------------------------------------------ */
+
+void Msg(int level, char *fmt, ...){
+  va_list  args;
+  int      abort=0;
+  int      nb, nbvis;
+
+  va_start (args, fmt);
+
+  switch(level){
+
+  case FATAL :
+  case FATAL1 :
+  case FATAL2 :
+  case FATAL3 :
+    fprintf(stderr, FATAL_STR);
+    vfprintf(stderr, fmt, args); fprintf(stderr, "\n");
+    abort = 1 ;
+    break ;
+
+  case GERROR :
+  case GERROR1 :
+  case GERROR2 :
+  case GERROR3 :
+    fprintf(stderr, ERROR_STR);
+    vfprintf(stderr, fmt, args); fprintf(stderr, "\n");
+    abort = 1 ;
+    break ;
+
+  case WARNING :
+  case WARNING1 :
+  case WARNING2 :
+  case WARNING3 :
+    fprintf(stderr, WARNING_STR);
+    vfprintf(stderr, fmt,args); fprintf(stderr, "\n");
+    break;
+
+  case PARSER_ERROR :
+    fprintf(stderr, PARSER_ERROR_STR); 
+    vfprintf(stderr, fmt, args); fprintf(stderr, "\n");
+    break ;
+
+  case PARSER_INFO :
+    if(CTX.verbosity == 5){
+      fprintf(stderr, PARSER_INFO_STR);
+      vfprintf(stderr, fmt, args); fprintf(stderr, "\n");
+    }
+    break ;
+
+  case DIRECT :
+    vfprintf(stderr, fmt, args); fprintf(stderr, "\n");
+    break;
+
+  default :
+    if(CTX.verbosity == 5){
+      fprintf(stderr, INFO_STR);
+      vfprintf(stderr, fmt, args); fprintf(stderr, "\n");
+    }
+    break;
+  }
+
+  va_end (args);
+
+  if(abort) exit(1);
+
+}
+
+/* ------------------------------------------------------------------------ */
+/*  C p u                                                                   */
+/* ------------------------------------------------------------------------ */
+
+double Cpu(void){
+  return 0.;
+}
+
+/* ------------------------------------------------------------------------ */
+/*  P r o g r e s s                                                         */
+/* ------------------------------------------------------------------------ */
+
+void Progress(int i){
+}
+
+void   AddALineInTheEditGeometryForm (char* line){
+};
diff --git a/Box/Makefile b/Box/Makefile
index 7b05a6d3bee5f651b6fc641cac8ff3ccedaa5a75..242ee9bccd8d3c4d08480ea936ef5e27fd27226f 100644
--- a/Box/Makefile
+++ b/Box/Makefile
@@ -1,6 +1,6 @@
-# $Id: Makefile,v 1.6 2001-02-12 17:38:02 geuzaine Exp $
+# $Id: Makefile,v 1.7 2001-02-17 22:08:53 geuzaine Exp $
 #
-# Makefile for ".a"
+# Makefile for "libBox.a"
 #
 
 .IGNORE:
@@ -20,7 +20,7 @@ VERSION_FLAGS =
 RMFLAGS  = -f
 CFLAGS   = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) 
 
-SRC = Box.cpp
+SRC = Main.cpp
 
 OBJ = $(SRC:.cpp=.o)
 
@@ -48,11 +48,11 @@ depend:
 	$(RM) $(RMFLAGS) Makefile.new
 
 # DO NOT DELETE THIS LINE
-Box.o: Box.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \
-  ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
-  ../Common/GmshVersion.h ../Common/Const.h ../Geo/Geo.h ../Mesh/Mesh.h \
-  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
-  ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Common/Views.h \
-  ../Common/ColorTable.h ../Parser/Parser.h ../Common/Context.h \
-  ../Parser/OpenFile.h ../Common/GetOptions.h ../Geo/MinMax.h \
-  ../Common/Static.h
+Main.o: Main.cpp ../Common/Gmsh.h ../Common/Message.h \
+ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
+ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshVersion.h \
+ ../Common/Const.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \
+ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \
+ ../Mesh/Metric.h ../Common/Views.h ../Common/ColorTable.h \
+ ../Parser/Parser.h ../Common/Context.h ../Parser/OpenFile.h \
+ ../Common/GetOptions.h ../Geo/MinMax.h ../Common/Static.h
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 73a84b3d19026badb2f54dddbad188361514b4b1..232f652686fe9ab1e74c527025789fe72ae676f8 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -2,426 +2,451 @@
 #define _DEFAULT_OPTIONS_H_
 
 // Option Database (General, Geometry, Mesh, Post, View, Print), with
-// default values
+// default values. The first number defines the level of saving: O
+// for the option file, S for the session file and F for the full
+// listing:
+
+#define S GMSH_SESSIONRC
+#define O GMSH_OPTIONSRC
+#define F GMSH_FULLRC
 
 // STRINGS
 
 StringXString GeneralOptions_String[] = {
-  { "Display" , opt_general_display , "" },
-  { NULL , NULL , NULL }
+  { F, "Display" , opt_general_display , "" },
+  { 0, "SessionFileName" , opt_general_session_filename , ".gmshrc" },
+  { F|S, "DefaultFileName" , opt_general_default_filename , "unnamed.geo" },
+  { F|S, "TmpFileName" , opt_general_tmp_filename , ".gmsh-tmp" },
+  { F|S, "ErrorFileName" , opt_general_error_filename , ".gmsh-errors" },
+  { F|S, "OptionsFileName" , opt_general_options_filename , ".gmsh-options" },
+  { 0, NULL , NULL , NULL }
 } ;
 
 StringXString GeometryOptions_String[] = {
-  { NULL , NULL ,  NULL }
+  { 0, NULL , NULL , NULL }
 } ;
 
 StringXString MeshOptions_String[] = {
-  { NULL , NULL ,  NULL }
+  { 0, NULL , NULL , NULL }
 } ;
 
 StringXString PostProcessingOptions_String[] = {
-  { NULL , NULL ,  NULL }
+  { 0, NULL , NULL , NULL }
 } ;
 
 StringXString ViewOptions_String[] = {
-  { "Name"      , opt_view_name , "" },
-  { "Format"    , opt_view_format , "%.3e" },
-  { "FileName"  , opt_view_filename , "" },
-  { NULL , NULL , NULL }
+  { F, "Name" , opt_view_name , "" },
+  { F|O, "Format" , opt_view_format , "%.3e" },
+  { F, "FileName" , opt_view_filename , "" },
+  { 0, NULL , NULL , NULL }
 } ;
 
 StringXString PrintOptions_String[] = {
-  { "Font" ,  opt_print_font , "Courier" },
-  { NULL , NULL , NULL }
+  { F|O, "Font" , opt_print_font , "Courier" },
+  { 0, NULL , NULL , NULL }
 } ;
 
 // NUMBERS
 
 StringXNumber GeneralOptions_Number[] = {
-  { "Viewport0"            , opt_general_viewport0 , 0. }, 
-  { "Viewport1"            , opt_general_viewport1 , 0. }, 
-  { "Viewport2"            , opt_general_viewport2 , 700. }, 
-  { "Viewport3"            , opt_general_viewport3 , 500. }, 
-  { "GraphicsPosition0"    , opt_general_graphics_position0 , 20. }, 
-  { "GraphicsPosition1"    , opt_general_graphics_position1 , 30. }, 
-  { "GraphicsFontSize"     , opt_general_graphics_fontsize , 11. }, 
-  { "MenuPosition0"        , opt_general_menu_position0 , 800. }, 
-  { "MenuPosition1"        , opt_general_menu_position1 , 50. }, 
-  { "MenuFontSize"         , opt_general_menu_fontsize , 12. }, 
-  { "CenterWindows"        , opt_general_center_windows , 1. }, 
-  { "Rotation0"            , opt_general_rotation0 , 0.0 }, 
-  { "Rotation1"            , opt_general_rotation1 , 0.0 }, 
-  { "Rotation2"            , opt_general_rotation2 , 0.0 }, 
-  { "TrackballQuaternion0" , opt_general_quaternion0 , 0.0 }, 
-  { "TrackballQuaternion1" , opt_general_quaternion1 , 0.0 }, 
-  { "TrackballQuaternion2" , opt_general_quaternion2 , 0.0 }, 
-  { "TrackballQuaternion3" , opt_general_quaternion3 , 1.0 }, 
-  { "Translation0"         , opt_general_translation0 , 0.0 }, 
-  { "Translation1"         , opt_general_translation1 , 0.0 }, 
-  { "Translation2"         , opt_general_translation2 , 0.0 }, 
-  { "Scale0"               , opt_general_scale0 , 1.0 }, 
-  { "Scale1"               , opt_general_scale1 , 1.0 }, 
-  { "Scale2"               , opt_general_scale2 , 1.0 }, 
-  { "Shininess"            , opt_general_shine , 0.4 }, 
-  { "ColorScheme"          , opt_general_color_scheme , 0. }, 
-  { "Verbosity"            , opt_general_verbosity , 2. },
-  { "Terminal"             , opt_general_terminal , 1. },
-  { "Orthographic"         , opt_general_orthographic , 1. }, 
-  { "FastRedraw"           , opt_general_fast_redraw , 1. },
-  { "Axes"                 , opt_general_axes , 1. },
-  { "SmallAxes"            , opt_general_small_axes , 1. },
-  { "DisplayLists"         , opt_general_display_lists , 0. },
-  { "AlphaBlending"        , opt_general_alpha_blending , 0. },
-  { "Trackball"            , opt_general_trackball , 1. },
-  { "ZoomFactor"           , opt_general_zoom_factor , 1.1 }, 
-  { "Clip0"                , opt_general_clip0 , 0. },
-  { "Clip0a"               , opt_general_clip0a , 0.0 }, 
-  { "Clip0b"               , opt_general_clip0b , 0.0 }, 
-  { "Clip0c"               , opt_general_clip0c , 0.0 }, 
-  { "Clip0d"               , opt_general_clip0d , 0.0 }, 
-  { "Clip1"                , opt_general_clip1 , 0. },
-  { "Clip1a"               , opt_general_clip1a , 0.0 }, 
-  { "Clip1b"               , opt_general_clip1b , 0.0 }, 
-  { "Clip1c"               , opt_general_clip1c , 0.0 }, 
-  { "Clip1d"               , opt_general_clip1d , 0.0 }, 
-  { "Clip2"                , opt_general_clip2 , 0. },
-  { "Clip2a"               , opt_general_clip2a , 0.0 }, 
-  { "Clip2b"               , opt_general_clip2b , 0.0 }, 
-  { "Clip2c"               , opt_general_clip2c , 0.0 }, 
-  { "Clip2d"               , opt_general_clip2d , 0.0 }, 
-  { "Clip3"                , opt_general_clip3 , 0. },
-  { "Clip3a"               , opt_general_clip3a , 0.0 }, 
-  { "Clip3b"               , opt_general_clip3b , 0.0 }, 
-  { "Clip3c"               , opt_general_clip3c , 0.0 }, 
-  { "Clip3d"               , opt_general_clip3d , 0.0 }, 
-  { "Clip4"                , opt_general_clip4 , 0. },
-  { "Clip4a"               , opt_general_clip4a , 0.0 }, 
-  { "Clip4b"               , opt_general_clip4b , 0.0 }, 
-  { "Clip4c"               , opt_general_clip4c , 0.0 }, 
-  { "Clip4d"               , opt_general_clip4d , 0.0 }, 
-  { "Clip5"                , opt_general_clip5 , 0. },
-  { "Clip5a"               , opt_general_clip5a , 0.0 }, 
-  { "Clip5b"               , opt_general_clip5b , 0.0 }, 
-  { "Clip5c"               , opt_general_clip5c , 0.0 }, 
-  { "Clip5d"               , opt_general_clip5d , 0.0 }, 
-  { "Light0"               , opt_general_light0 , 1. },
-  { "Light00"              , opt_general_light00 , 0.5 }, 
-  { "Light01"              , opt_general_light01 , 0.3 }, 
-  { "Light02"              , opt_general_light02 , 1.0 }, 
-  { "Light1"               , opt_general_light1 , 0. },
-  { "Light10"              , opt_general_light10 , 0.5 }, 
-  { "Light11"              , opt_general_light11 , 0.3 }, 
-  { "Light12"              , opt_general_light12 , 1.0 }, 
-  { "Light2"               , opt_general_light2 , 0. },
-  { "Light20"              , opt_general_light20 , 0.5 }, 
-  { "Light21"              , opt_general_light21 , 0.3 }, 
-  { "Light22"              , opt_general_light22 , 1.0 }, 
-  { "Light3"               , opt_general_light3 , 0. },
-  { "Light30"              , opt_general_light30 , 0.5 }, 
-  { "Light31"              , opt_general_light31 , 0.3 }, 
-  { "Light32"              , opt_general_light32 , 1.0 }, 
-  { "Light4"               , opt_general_light4 , 0. },
-  { "Light40"              , opt_general_light40 , 0.5 }, 
-  { "Light41"              , opt_general_light41 , 0.3 }, 
-  { "Light42"              , opt_general_light42 , 1.0 }, 
-  { "Light5"               , opt_general_light5 , 0. },
-  { "Light50"              , opt_general_light50 , 0.5 }, 
-  { "Light51"              , opt_general_light51 , 0.3 }, 
-  { "Light52"              , opt_general_light52 , 1.0 }, 
-  { NULL , NULL , 0. }
+  { F|S, "SaveSession" , opt_general_session_save, 1. }, 
+  { F|S, "SaveOptions" , opt_general_options_save, 0. }, 
+  { F|S, "FontSize" , opt_general_fontsize , 12. }, 
+  { F|S, "GraphicsFontSize" , opt_general_graphics_fontsize , 11. }, 
+  { F|S, "GraphicsPositionX" , opt_general_graphics_position0 , 20. }, 
+  { F|S, "GraphicsPositionY" , opt_general_graphics_position1 , 30. }, 
+  { F|S, "GraphicsWidth" , opt_general_viewport2 , 700. }, 
+  { F|S, "GraphicsHeight" , opt_general_viewport3 , 500. }, 
+  { F|S, "MenuPositionX" , opt_general_menu_position0 , 800. }, 
+  { F|S, "MenuPositionY" , opt_general_menu_position1 , 50. }, 
+  { F|S, "MessagePositionX" , opt_general_message_position0 , 650. }, 
+  { F|S, "MessagePositionY" , opt_general_message_position1 , 150. }, 
+  { F|S, "MessageWidth" , opt_general_message_size0 , 450. }, 
+  { F|S, "MessageHeight" , opt_general_message_size1 , 350. }, 
+  { F|O, "CenterWindows" , opt_general_center_windows , 1. }, 
+  { F, "RotationX" , opt_general_rotation0 , 0.0 }, 
+  { F, "RotationY" , opt_general_rotation1 , 0.0 }, 
+  { F, "RotationZ" , opt_general_rotation2 , 0.0 }, 
+  { F, "TrackballQuaternion0" , opt_general_quaternion0 , 0.0 }, 
+  { F, "TrackballQuaternion1" , opt_general_quaternion1 , 0.0 }, 
+  { F, "TrackballQuaternion2" , opt_general_quaternion2 , 0.0 }, 
+  { F, "TrackballQuaternion3" , opt_general_quaternion3 , 1.0 }, 
+  { F, "TranslationX" , opt_general_translation0 , 0.0 }, 
+  { F, "TranslationY" , opt_general_translation1 , 0.0 }, 
+  { F, "TranslationZ" , opt_general_translation2 , 0.0 }, 
+  { F, "ScaleX" , opt_general_scale0 , 1.0 }, 
+  { F, "ScaleY" , opt_general_scale1 , 1.0 }, 
+  { F, "ScaleZ" , opt_general_scale2 , 1.0 }, 
+  { F|O, "Shininess" , opt_general_shine , 0.4 }, 
+  { F|O, "ColorScheme", opt_general_color_scheme , 0. }, 
+  { F|O, "Verbosity" , opt_general_verbosity , 2. },
+#ifdef _FLTK
+  { F|O, "Terminal" , opt_general_terminal , 0. },
+#else		      
+  { F|O, "Terminal" , opt_general_terminal , 1. },
+#endif
+  { F|O, "Orthographic" , opt_general_orthographic , 1. }, 
+  { F|O, "FastRedraw" , opt_general_fast_redraw , 1. },
+  { F|O, "Axes" , opt_general_axes , 1. },
+  { F|O, "SmallAxes" , opt_general_small_axes , 1. },
+  { F|O, "DisplayLists" , opt_general_display_lists , 0. },
+  { F|O, "AlphaBlending" , opt_general_alpha_blending , 0. },
+  { F|O, "Trackball" , opt_general_trackball , 1. },
+  { F|O, "ZoomFactor" , opt_general_zoom_factor , 1.1 }, 
+  { F, "Clip0" , opt_general_clip0 , 0. },
+  { F, "Clip0A" , opt_general_clip0a , 0.0 }, 
+  { F, "Clip0B" , opt_general_clip0b , 0.0 }, 
+  { F, "Clip0C" , opt_general_clip0c , 0.0 }, 
+  { F, "Clip0D" , opt_general_clip0d , 0.0 }, 
+  { F, "Clip1" , opt_general_clip1 , 0. },
+  { F, "Clip1A" , opt_general_clip1a , 0.0 }, 
+  { F, "Clip1B" , opt_general_clip1b , 0.0 }, 
+  { F, "Clip1C" , opt_general_clip1c , 0.0 }, 
+  { F, "Clip1D" , opt_general_clip1d , 0.0 }, 
+  { F, "Clip2" , opt_general_clip2 , 0. },
+  { F, "Clip2A" , opt_general_clip2a , 0.0 }, 
+  { F, "Clip2B" , opt_general_clip2b , 0.0 }, 
+  { F, "Clip2C" , opt_general_clip2c , 0.0 }, 
+  { F, "Clip2D" , opt_general_clip2d , 0.0 }, 
+  { F, "Clip3" , opt_general_clip3 , 0. },
+  { F, "Clip3A" , opt_general_clip3a , 0.0 }, 
+  { F, "Clip3B" , opt_general_clip3b , 0.0 }, 
+  { F, "Clip3C" , opt_general_clip3c , 0.0 }, 
+  { F, "Clip3D" , opt_general_clip3d , 0.0 }, 
+  { F, "Clip4" , opt_general_clip4 , 0. },
+  { F, "Clip4A" , opt_general_clip4a , 0.0 }, 
+  { F, "Clip4B" , opt_general_clip4b , 0.0 }, 
+  { F, "Clip4C" , opt_general_clip4c , 0.0 }, 
+  { F, "Clip4D" , opt_general_clip4d , 0.0 }, 
+  { F, "Clip5" , opt_general_clip5 , 0. },
+  { F, "Clip5A" , opt_general_clip5a , 0.0 }, 
+  { F, "Clip5B" , opt_general_clip5b , 0.0 }, 
+  { F, "Clip5C" , opt_general_clip5c , 0.0 }, 
+  { F, "Clip5D" , opt_general_clip5d , 0.0 }, 
+  { F|O, "MovingLight" , opt_general_moving_light , 0. },
+  { F|O, "Light0" , opt_general_light0 , 1. },
+  { F|O, "Light0X" , opt_general_light00 , 0.5 }, 
+  { F|O, "Light0Y" , opt_general_light01 , 0.3 }, 
+  { F|O, "Light0Z" , opt_general_light02 , 1.0 }, 
+  { F|O, "Light1" , opt_general_light1 , 0. },
+  { F|O, "Light1X" , opt_general_light10 , 0.5 }, 
+  { F|O, "Light1Y" , opt_general_light11 , 0.3 }, 
+  { F|O, "Light1Z" , opt_general_light12 , 1.0 }, 
+  { F|O, "Light2" , opt_general_light2 , 0. },
+  { F|O, "Light2X" , opt_general_light20 , 0.5 }, 
+  { F|O, "Light2Y" , opt_general_light21 , 0.3 }, 
+  { F|O, "Light2Z" , opt_general_light22 , 1.0 }, 
+  { F|O, "Light3" , opt_general_light3 , 0. },
+  { F|O, "Light3X" , opt_general_light30 , 0.5 }, 
+  { F|O, "Light3Y" , opt_general_light31 , 0.3 }, 
+  { F|O, "Light3Z" , opt_general_light32 , 1.0 }, 
+  { F|O, "Light4" , opt_general_light4 , 0. },
+  { F|O, "Light4X" , opt_general_light40 , 0.5 }, 
+  { F|O, "Light4Y" , opt_general_light41 , 0.3 }, 
+  { F|O, "Light4Z" , opt_general_light42 , 1.0 }, 
+  { F|O, "Light5" , opt_general_light5 , 0. },
+  { F|O, "Light5X" , opt_general_light50 , 0.5 }, 
+  { F|O, "Light5Y" , opt_general_light51 , 0.3 }, 
+  { F|O, "Light5Z" , opt_general_light52 , 1.0 }, 
+  { 0, NULL , NULL , 0. }
 } ;
 
 StringXNumber GeometryOptions_Number[] = {
-  { "Normals"         , opt_geometry_normals , 0. }, 
-  { "Tangents"        , opt_geometry_tangents , 0. }, 
-  { "Points"          , opt_geometry_points , 1. }, 
-  { "Lines"           , opt_geometry_lines , 1. }, 
-  { "Surfaces"        , opt_geometry_surfaces , 0. }, 
-  { "Volumes"         , opt_geometry_volumes , 0. }, 
-  { "PointsNumbers"   , opt_geometry_points_num , 0. }, 
-  { "LinesNumbers"    , opt_geometry_lines_num , 0. }, 
-  { "SurfacesNumbers" , opt_geometry_surfaces_num , 0. }, 
-  { "VolumesNumbers"  , opt_geometry_volumes_num , 0. }, 
-  { "HiddenLines"     , opt_geometry_hidden , 0. }, 
-  { "Shading"         , opt_geometry_shade , 0. }, 
-  { "Highlight"       , opt_geometry_highlight , 1. }, 
-  { "OldCircle"       , opt_geometry_old_circle , 0. }, 
-  { "ScalingFactor"   , opt_geometry_scaling_factor , 1.0 }, 
-  { NULL , NULL , 0. }
+  { F|O, "Normals" , opt_geometry_normals , 0. }, 
+  { F|O, "Tangents" , opt_geometry_tangents , 0. }, 
+  { F|O, "Points" , opt_geometry_points , 1. }, 
+  { F|O, "Lines" , opt_geometry_lines , 1. }, 
+  { F|O, "Surfaces" , opt_geometry_surfaces , 0. }, 
+  { F|O, "Volumes" , opt_geometry_volumes , 0. }, 
+  { F|O, "PointsNumbers" , opt_geometry_points_num , 0. }, 
+  { F|O, "LinesNumbers" , opt_geometry_lines_num , 0. }, 
+  { F|O, "SurfacesNumbers" , opt_geometry_surfaces_num , 0. }, 
+  { F|O, "VolumesNumbers" , opt_geometry_volumes_num , 0. }, 
+  { F|O, "Aspect" , opt_geometry_aspect , 0. }, 
+  { F|O, "Highlight" , opt_geometry_highlight , 1. }, 
+  { F|O, "OldCircle" , opt_geometry_old_circle , 0. }, 
+  { F|O, "ScalingFactor" , opt_geometry_scaling_factor , 1.0 }, 
+  { F|O, "ColorScheme" , opt_geometry_color_scheme , 0. }, 
+  { 0, NULL , NULL , 0. }
 } ;
 
 StringXNumber MeshOptions_Number[] = {
-  { "Quality"         , opt_mesh_quality , 0.0 }, 
-  { "Normals"         , opt_mesh_normals , 0.0 }, 
-  { "Tangents"        , opt_mesh_tangents , 0.0 }, 
-  { "Explode"         , opt_mesh_explode , 1.0 }, 
-  { "ScalingFactor"   , opt_mesh_scaling_factor , 1.0 }, 
-  { "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 }, 
-  { "RandomFactor"    , opt_mesh_rand_factor , 1.e-5 }, 
-  { "GammaLimit"      , opt_mesh_limit_gamma , 0.0 }, 
-  { "EtaLimit"        , opt_mesh_limit_eta , 0.0 }, 
-  { "RhoLimit"        , opt_mesh_limit_rho , 0.0 }, 
-  { "Points"          , opt_mesh_points , 1. }, 
-  { "Lines"           , opt_mesh_lines , 1. }, 
-  { "Surfaces"        , opt_mesh_surfaces , 1. }, 
-  { "Volumes"         , opt_mesh_volumes , 1. }, 
-  { "PointsNumbers"   , opt_mesh_points_num , 0. }, 
-  { "LinesNumbers"    , opt_mesh_lines_num , 0. }, 
-  { "SurfacesNumbers" , opt_mesh_surfaces_num , 0. }, 
-  { "VolumesNumbers"  , opt_mesh_volumes_num , 0. }, 
-  { "HiddenLines"     , opt_mesh_hidden , 0. }, 
-  { "Shading"         , opt_mesh_shade , 0. }, 
-  { "Format"          , opt_mesh_format , FORMAT_MSH }, 
-  { "Smoothing"       , opt_mesh_nb_smoothing , 0. }, 
-  { "Algorithm"       , opt_mesh_algo , DELAUNAY_OLDALGO }, 
-  { "PointInsertion"  , opt_mesh_point_insertion, CENTER_CIRCCIRC }, 
-  { "SpeedMax"        , opt_mesh_speed_max , 0. }, 
-  { "MinimumCirclePoints" , opt_mesh_min_circ_points, 7. }, 
-  { "Degree"          , opt_mesh_degree , 1. }, 
-  { "Dual"            , opt_mesh_dual , 0. }, 
-  { "Interactive"     , opt_mesh_interactive , 0. }, 
-  { "use_cut_plane"   , opt_mesh_use_cut_plane , 0  }, 
-  { "cut_planea"      , opt_mesh_cut_planea , 1. }, 
-  { "cut_planeb"      , opt_mesh_cut_planeb , 0. }, 
-  { "cut_planec"      , opt_mesh_cut_planec , 0. }, 
-  { "cut_planed"      , opt_mesh_cut_planed , 0. }, 
-  { NULL , NULL , 0. }
+  { F|O, "Quality" , opt_mesh_quality , 0.0 }, 
+  { F|O, "Normals" , opt_mesh_normals , 0.0 }, 
+  { F|O, "Tangents" , opt_mesh_tangents , 0.0 }, 
+  { F|O, "Explode" , opt_mesh_explode , 1.0 }, 
+  { F|O, "ScalingFactor" , opt_mesh_scaling_factor , 1.0 }, 
+  { F|O, "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 }, 
+  { F|O, "RandomFactor" , opt_mesh_rand_factor , 1.e-4 }, 
+  { F|O, "GammaLimit" , opt_mesh_limit_gamma , 0.0 }, 
+  { F|O, "EtaLimit" , opt_mesh_limit_eta , 0.0 }, 
+  { F|O, "RhoLimit" , opt_mesh_limit_rho , 0.0 }, 
+  { F|O, "Points" , opt_mesh_points , 1. }, 
+  { F|O, "Lines" , opt_mesh_lines , 1. }, 
+  { F|O, "Surfaces" , opt_mesh_surfaces , 1. }, 
+  { F|O, "Volumes" , opt_mesh_volumes , 1. }, 
+  { F|O, "PointsNumbers" , opt_mesh_points_num , 0. }, 
+  { F|O, "LinesNumbers" , opt_mesh_lines_num , 0. }, 
+  { F|O, "SurfacesNumbers" , opt_mesh_surfaces_num , 0. }, 
+  { F|O, "VolumesNumbers" , opt_mesh_volumes_num , 0. }, 
+  { F|O, "Aspect" , opt_mesh_aspect , 0. }, 
+  { F|O, "Format" , opt_mesh_format , FORMAT_MSH }, 
+  { F|O, "Smoothing" , opt_mesh_nb_smoothing , 0. }, 
+  { F|O, "Algorithm" , opt_mesh_algo , DELAUNAY_OLDALGO }, 
+  { F|O, "PointInsertion" , opt_mesh_point_insertion, CENTER_CIRCCIRC }, 
+  { F|O, "SpeedMax" , opt_mesh_speed_max , 0. }, 
+  { F|O, "MinimumCirclePoints" , opt_mesh_min_circ_points, 7. }, 
+  { F|O, "Degree" , opt_mesh_degree , 1. }, 
+  { F|O, "Dual" , opt_mesh_dual , 0. }, 
+  { F|O, "Interactive" , opt_mesh_interactive , 0. }, 
+  { F|O, "ColorScheme" , opt_mesh_color_scheme , 0. }, 
+  { F|O, "ColorCarousel" , opt_mesh_color_carousel , 1. }, 
+  { F, "use_cut_plane" , opt_mesh_use_cut_plane , 0  }, 
+  { F, "cut_planea" , opt_mesh_cut_planea , 1. }, 
+  { F, "cut_planeb" , opt_mesh_cut_planeb , 0. }, 
+  { F, "cut_planec" , opt_mesh_cut_planec , 0. }, 
+  { F, "cut_planed" , opt_mesh_cut_planed , 0. }, 
+  { 0, NULL , NULL , 0. }
 } ;
 
 StringXNumber PostProcessingOptions_Number[] = {
-  { "Scales"           , opt_post_scales , 1. }, 
-  { "Link"             , opt_post_link , 0. }, 
-  { "Smoothing"        , opt_post_smooth , 1. }, 
-  { "AnimationDelay"   , opt_post_anim_delay , 0.25 }, 
-  { "NbViews"          , opt_post_nb_views , 0. }, 
-  { NULL , NULL , 0. }
+  { F|O, "Scales" , opt_post_scales , 1. }, 
+  { F|O, "Link" , opt_post_link , 0. }, 
+  { F|O, "Smoothing" , opt_post_smooth , 0. }, 
+  { F|O, "AnimationDelay" , opt_post_anim_delay , 0.25 }, 
+  { F, "NbViews" , opt_post_nb_views , 0. }, 
+  { 0, NULL , NULL , 0. }
 } ;
 
 StringXNumber ViewOptions_Number[] = {
-  { "NbTimeStep"       , opt_view_nb_timestep , 1. }, 
-  { "TimeStep"         , opt_view_timestep , 0. }, 
-  { "Min"              , opt_view_min , 1.e200 }, 
-  { "Max"              , opt_view_max , -1.e200 }, 
-  { "CustomMin"        , opt_view_custom_min , 0. }, 
-  { "CustomMax"        , opt_view_custom_max , 0. }, 
-  { "Offset0"          , opt_view_offset0 , 0. }, 
-  { "Offset1"          , opt_view_offset1 , 0. }, 
-  { "Offset2"          , opt_view_offset2 , 0. }, 
-  { "Raise0"           , opt_view_raise0 , 0. }, 
-  { "Raise1"           , opt_view_raise1 , 0. }, 
-  { "Raise2"           , opt_view_raise2 , 0. }, 
-  { "ArrowScale"       , opt_view_arrow_scale , 100. }, 
-  { "Visible"          , opt_view_visible , 1. }, 
-  { "IntervalsType"    , opt_view_intervals_type , DRAW_POST_ISO }, 
-  { "NbIso"            , opt_view_nb_iso , 15. }, 
-  { "Light"            , opt_view_light , 0. }, 
-  { "ShowElement"      , opt_view_show_element , 0. }, 
-  { "ShowTime"         , opt_view_show_time , 1. }, 
-  { "ShowScale"        , opt_view_show_scale , 1. }, 
-  { "TransparentScale" , opt_view_transparent_scale , 1. }, 
-  { "ScaleType"        , opt_view_scale_type , DRAW_POST_LINEAR }, 
-  { "RangeType"        , opt_view_range_type , DRAW_POST_DEFAULT }, 
-  { "ArrowType"        , opt_view_arrow_type , DRAW_POST_ARROW }, 
-  { "ArrowLocation"    , opt_view_arrow_location , DRAW_POST_LOCATE_COG }, 
-  { NULL , NULL , 0. }
+  { F, "NbTimeStep" , opt_view_nb_timestep , 1. }, 
+  { F, "TimeStep" , opt_view_timestep , 0. }, 
+  { F, "Min" , opt_view_min , 1.e200 }, 
+  { F, "Max" , opt_view_max , -1.e200 }, 
+  { F, "CustomMin" , opt_view_custom_min , 0. }, 
+  { F, "CustomMax" , opt_view_custom_max , 0. }, 
+  { F, "OffsetX" , opt_view_offset0 , 0. }, 
+  { F, "OffsetY" , opt_view_offset1 , 0. }, 
+  { F, "OffsetZ" , opt_view_offset2 , 0. }, 
+  { F, "RaiseX" , opt_view_raise0 , 0. }, 
+  { F, "RaiseY" , opt_view_raise1 , 0. }, 
+  { F, "RaiseZ" , opt_view_raise2 , 0. }, 
+  { F|O, "ArrowScale" , opt_view_arrow_scale , 100. }, 
+  { F, "Visible" , opt_view_visible , 1. }, 
+  { F|O, "IntervalsType" , opt_view_intervals_type , DRAW_POST_ISO }, 
+  { F|O, "NbIso" , opt_view_nb_iso , 15. }, 
+  { F|O, "Light" , opt_view_light , 0. }, 
+  { F|O, "ShowElement" , opt_view_show_element , 0. }, 
+  { F|O, "ShowTime" , opt_view_show_time , 1. }, 
+  { F|O, "ShowScale" , opt_view_show_scale , 1. }, 
+  { F|O, "TransparentScale" , opt_view_transparent_scale , 1. }, 
+  { F|O, "ScaleType" , opt_view_scale_type , DRAW_POST_LINEAR }, 
+  { F|O, "RangeType" , opt_view_range_type , DRAW_POST_DEFAULT }, 
+  { F|O, "ArrowType" , opt_view_arrow_type , DRAW_POST_ARROW }, 
+  { F|O, "ArrowLocation" , opt_view_arrow_location , DRAW_POST_LOCATE_COG }, 
+  { 0, NULL , NULL , 0. }
 } ;
 
 StringXNumber PrintOptions_Number[] = {
-  { "Format"         , opt_print_format , FORMAT_AUTO }, 
-  { "EpsQuality"     , opt_print_eps_quality , 1 }, 
-  { "JpegQuality"    , opt_print_jpeg_quality , 85 }, 
-  { "GifDither"      , opt_print_gif_dither , 0 }, 
-  { "GifSort"        , opt_print_gif_sort , 1 }, 
-  { "GifInterlace"   , opt_print_gif_interlace , 0 }, 
-  { "GifTransparent" , opt_print_gif_transparent , 0 }, 
-  { "FontSize"       , opt_print_font_size , 12. }, 
-  { NULL , NULL , 0. }
+  { F|O, "Format" , opt_print_format , FORMAT_AUTO }, 
+  { F|O, "EpsQuality" , opt_print_eps_quality , 1 }, 
+  { F|O, "JpegQuality" , opt_print_jpeg_quality , 85 }, 
+  { F|O, "GifDither" , opt_print_gif_dither , 0 }, 
+  { F|O, "GifSort" , opt_print_gif_sort , 1 }, 
+  { F|O, "GifInterlace" , opt_print_gif_interlace , 0 }, 
+  { F|O, "GifTransparent" , opt_print_gif_transparent , 0 }, 
+  { F|O, "FontSize" , opt_print_font_size , 12. }, 
+  { 0, NULL , NULL , 0. }
 } ;
 
 // COLORS
 
 StringXColor GeneralOptions_Color[] = {
-  { "Background" , opt_general_color_background ,
+  { F|O, "Background" , opt_general_color_background ,
     PACK_COLOR(0,   0,   0,   255), 
     PACK_COLOR(255, 255, 255, 255), 
     PACK_COLOR(255, 255, 255, 255) },
-  { "Foreground" , opt_general_color_foreground ,
+  { F|O, "Foreground" , opt_general_color_foreground ,
     PACK_COLOR(255, 255, 255, 255),
     PACK_COLOR(0,   0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Text" , opt_general_color_text ,
+  { F|O, "Text" , opt_general_color_text ,
     PACK_COLOR(255, 255, 255, 255),
     PACK_COLOR(0,   0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Axes" , opt_general_color_axes ,
+  { F|O, "Axes" , opt_general_color_axes ,
     PACK_COLOR(255, 255, 0,   255),
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "SmallAxes" , opt_general_color_small_axes ,
+  { F|O, "SmallAxes" , opt_general_color_small_axes ,
     PACK_COLOR(255, 255, 255, 255),
     PACK_COLOR(0,   0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { NULL , NULL ,  0, 0, 0 }
+  { 0, NULL , NULL ,  0, 0, 0 }
 } ;
 
 StringXColor GeometryOptions_Color[] = {
-  { "Points" , opt_geometry_color_points , 
+  { F|O, "Points" , opt_geometry_color_points , 
     PACK_COLOR(178, 182, 129, 255) ,
     PACK_COLOR(178, 182, 129, 255) ,
     PACK_COLOR(0,   0,   0,   255) },
-  { "Lines" , opt_geometry_color_lines ,
+  { F|O, "Lines" , opt_geometry_color_lines ,
     PACK_COLOR(0,   0,   255, 255),
     PACK_COLOR(0,   0,   255, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Surfaces" , opt_geometry_color_surfaces ,
+  { F|O, "Surfaces" , opt_geometry_color_surfaces ,
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Volumes" , opt_geometry_color_volumes ,
+  { F|O, "Volumes" , opt_geometry_color_volumes ,
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "PointsSelect" , opt_geometry_color_points_select ,
+  { F|O, "PointsSelect" , opt_geometry_color_points_select ,
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "LinesSelect" , opt_geometry_color_lines_select ,
+  { F|O, "LinesSelect" , opt_geometry_color_lines_select ,
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "SurfacesSelect" , opt_geometry_color_surfaces_select ,
+  { F|O, "SurfacesSelect" , opt_geometry_color_surfaces_select ,
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "VolumesSelect" , opt_geometry_color_volumes_select ,
+  { F|O, "VolumesSelect" , opt_geometry_color_volumes_select ,
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "PointsHighlight" , opt_geometry_color_points_highlight ,
+  { F|O, "PointsHighlight" , opt_geometry_color_points_highlight ,
     PACK_COLOR(0,   255, 0,   255),
     PACK_COLOR(0,   255, 0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "LinesHighlight" , opt_geometry_color_lines_highlight ,
+  { F|O, "LinesHighlight" , opt_geometry_color_lines_highlight ,
     PACK_COLOR(0,   0,   255, 255),
     PACK_COLOR(0,   0,   255, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "SurfacesHighlight" , opt_geometry_color_surfaces_highlight ,
+  { F|O, "SurfacesHighlight" , opt_geometry_color_surfaces_highlight ,
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "VolumesHighlight" , opt_geometry_color_volumes_highlight ,
+  { F|O, "VolumesHighlight" , opt_geometry_color_volumes_highlight ,
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Tangents" , opt_geometry_color_tangents ,
+  { F|O, "Tangents" , opt_geometry_color_tangents ,
     PACK_COLOR(255, 255, 0,   255),
     PACK_COLOR(255, 255, 0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Normals" , opt_geometry_color_normals ,
+  { F|O, "Normals" , opt_geometry_color_normals ,
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(255, 0,   0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { NULL , NULL , 0, 0, 0  }
+  { 0, NULL , NULL , 0, 0, 0  }
 } ;
 
 StringXColor MeshOptions_Color[] = {
-  { "Points" , opt_mesh_color_points , 
+  { F|O, "Points" , opt_mesh_color_points , 
     PACK_COLOR(0  , 123, 59 , 255),
     PACK_COLOR(0  , 123, 59 , 255),
   },
-  { "PointsSupp" , opt_mesh_color_points_supp , 
+  { F|O, "PointsSupp" , opt_mesh_color_points_supp , 
     PACK_COLOR(255, 0,   255, 255),
     PACK_COLOR(255, 0,   255, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Lines" , opt_mesh_color_lines , 
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Triangles" , opt_mesh_color_triangles ,
+  { F|O, "Lines" , opt_mesh_color_lines , 
     PACK_COLOR(0,   255, 0,   255),
     PACK_COLOR(0,   255, 0,   255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Quadrangles" , opt_mesh_color_quadrangles ,
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Tetrahedra" , opt_mesh_color_tetrahedra ,
+  { F|O, "Triangles" , opt_mesh_color_triangles ,
+    PACK_COLOR(153, 143, 255, 255),
+    PACK_COLOR(153, 143, 255, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { F|O, "Quadrangles" , opt_mesh_color_quadrangles ,
+    PACK_COLOR(182, 92,  255, 255),
+    PACK_COLOR(182, 92,  255, 255),
+    PACK_COLOR(255, 255, 255, 255) },
+  { F|O, "Tetrahedra" , opt_mesh_color_tetrahedra ,
     PACK_COLOR(0,   255, 0,   255),
     PACK_COLOR(0,   255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Hexahedra" , opt_mesh_color_hexahedra ,
+    PACK_COLOR(255, 255, 255, 255) },
+  { F|O, "Hexahedra" , opt_mesh_color_hexahedra ,
     PACK_COLOR(128, 255, 0,   255),
     PACK_COLOR(128, 255, 0,   255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Prisms" , opt_mesh_color_prisms ,
+    PACK_COLOR(255, 255, 255, 255) },
+  { F|O, "Prisms" , opt_mesh_color_prisms ,
     PACK_COLOR(0,   255, 128, 255),
     PACK_COLOR(0,   255, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Pyramids" , opt_mesh_color_pyramid ,
+    PACK_COLOR(255, 255, 255, 255) },
+  { F|O, "Pyramids" , opt_mesh_color_pyramid ,
     PACK_COLOR(128, 255, 128, 255),
     PACK_COLOR(128, 255, 128, 255),
-    PACK_COLOR(0,   0,   0,   255) },
-  { "Tangents" , opt_mesh_color_tangents ,
+    PACK_COLOR(255, 255, 255, 255) },
+  { F|O, "Tangents" , opt_mesh_color_tangents ,
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "Normals" , opt_mesh_color_normals ,
+  { F|O, "Normals" , opt_mesh_color_normals ,
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(128, 128, 128, 255),
     PACK_COLOR(0,   0,   0,   255) },
-  { "One" , opt_mesh_color_1 ,
+  { F|O, "One" , opt_mesh_color_1 ,
     PACK_COLOR(0  , 82 , 138, 255),
     PACK_COLOR(0  , 82 , 138, 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Two" , opt_mesh_color_2 ,
+  { F|O, "Two" , opt_mesh_color_2 ,
     PACK_COLOR(255, 0  , 0  , 255),
     PACK_COLOR(255, 0  , 0  , 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Three" , opt_mesh_color_3 ,
+  { F|O, "Three" , opt_mesh_color_3 ,
     PACK_COLOR(31 , 110, 171, 255),
     PACK_COLOR(31 , 110, 171, 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Four" , opt_mesh_color_4 ,
+  { F|O, "Four" , opt_mesh_color_4 ,
     PACK_COLOR(255, 255, 0  , 255),
     PACK_COLOR(255, 255, 0  , 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Five" , opt_mesh_color_5 ,
+  { F|O, "Five" , opt_mesh_color_5 ,
     PACK_COLOR(255, 0  , 255, 255),
     PACK_COLOR(255, 0  , 255, 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Six" , opt_mesh_color_6 ,
+  { F|O, "Six" , opt_mesh_color_6 ,
     PACK_COLOR(128, 128, 0  , 255),
     PACK_COLOR(128, 128, 0  , 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Seven" , opt_mesh_color_7 ,
+  { F|O, "Seven" , opt_mesh_color_7 ,
     PACK_COLOR(128, 0  , 255, 255),
     PACK_COLOR(128, 0  , 255, 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Eight" , opt_mesh_color_8 ,
+  { F|O, "Eight" , opt_mesh_color_8 ,
     PACK_COLOR(128, 128, 255, 255),
     PACK_COLOR(128, 128, 255, 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Nine" , opt_mesh_color_9 ,
+  { F|O, "Nine" , opt_mesh_color_9 ,
     PACK_COLOR(128, 128, 255, 255),
     PACK_COLOR(128, 128, 255, 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { "Ten" , opt_mesh_color_10 ,
+  { F|O, "Ten" , opt_mesh_color_10 ,
     PACK_COLOR(0  , 0  , 255, 255),
     PACK_COLOR(0  , 0  , 255, 255),
     PACK_COLOR(255, 255, 255, 255) },
-  { NULL , NULL , 0, 0, 0  }
+  { 0, NULL , NULL , 0, 0, 0  }
 } ;
 
 StringXColor PostProcessingOptions_Color[] = {
-  { NULL , NULL ,  0, 0, 0 }
+  { 0, NULL , NULL , 0, 0, 0 }
 } ;
 
 StringXColor ViewOptions_Color[] = {
-  { NULL , NULL ,  0, 0, 0 }
+  { 0, NULL , NULL , 0, 0, 0 }
 } ;
 
 StringXColor PrintOptions_Color[] = {
-  { NULL , NULL ,  0, 0, 0 }
+  { 0, NULL , NULL , 0, 0, 0 }
 } ;
 
+#undef S
+#undef O
+#undef F
+
 #endif
diff --git a/Common/Options.cpp b/Common/Options.cpp
index d5bfface088d9d1f5e446038401250fece973922..12f8dc07f0da390fc9db0124abbf1dbb9b0c3dc7 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.1 2001-02-12 17:39:39 geuzaine Exp $
+// $Id: Options.cpp,v 1.2 2001-02-17 22:13:03 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -17,7 +17,30 @@ extern Context_T   CTX ;
 extern GUI        *WID ;
 #endif
 
-#define NOVIEW Msg(WARNING, "View[%d] does not exist", num)
+#define GET_VIEW(error_val)						\
+  Post_View *v;								\
+  if(!Post_ViewList)							\
+    v = Post_ViewReference ;						\
+  else{									\
+    if(!(v = (Post_View*)List_Pointer_Test(Post_ViewList, num))){	\
+      Msg(WARNING, "View[%d] does not exist", num) ;			\
+      return (error_val) ;						\
+    }									\
+  }
+
+#if defined(WIN32) && !defined(__CYGWIN__)
+#define SLASH "\\"
+#else
+#define SLASH "/"
+#endif
+
+#define GET_PATH(path_val)					\
+  char *tmp;							\
+  if     ((tmp = getenv("HOME"))) strcpy(path_val, tmp);	\
+  else if((tmp = getenv("TMP")))  strcpy(path_val, tmp);	\
+  else if((tmp = getenv("TEMP"))) strcpy(path_val, tmp);	\
+  else                            strcpy(path_val, "");		\
+  if(strlen(path_val)) strcat(path_val, SLASH);
 
 //******************* Strings ***********************************
 
@@ -25,26 +48,75 @@ char * opt_general_display(OPT_ARGS_STR){
   if(action & GMSH_SET) CTX.display = val;
   return CTX.display;
 }
+char * opt_general_default_filename(OPT_ARGS_STR){
+  if(action & GMSH_SET) CTX.default_filename = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_input[0]->value(CTX.default_filename);
+#endif
+  return CTX.default_filename;
+}
+char * opt_general_tmp_filename(OPT_ARGS_STR){
+  if(action & GMSH_SET) CTX.tmp_filename = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_input[1]->value(CTX.tmp_filename);
+#endif
+  return CTX.tmp_filename;
+}
+char * opt_general_error_filename(OPT_ARGS_STR){
+  if(action & GMSH_SET) CTX.error_filename = val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_input[2]->value(CTX.error_filename);
+#endif
+  return CTX.error_filename;
+}
+char * opt_general_session_filename(OPT_ARGS_STR){
+  if(action & GMSH_SET){
+    CTX.session_filename = val;
+    GET_PATH(CTX.sessionrc_filename);
+    strcat(CTX.sessionrc_filename, CTX.session_filename);
+  }
+  return CTX.session_filename;
+}
+char * opt_general_options_filename(OPT_ARGS_STR){
+  if(action & GMSH_SET){
+    CTX.options_filename = val;
+    GET_PATH(CTX.optionsrc_filename);
+    strcat(CTX.optionsrc_filename, CTX.options_filename);
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_input[3]->value(CTX.options_filename);
+#endif
+  return CTX.options_filename;
+}
 
 
 char * opt_view_name(OPT_ARGS_STR){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW;  return NULL; }
-  if(action & GMSH_SET) 
+  GET_VIEW(NULL) ;
+  if(action & GMSH_SET){
     strcpy(v->Name, val);
+#ifdef _FLTK
+    if(WID){
+      WID->m_toggle_butt[num]->label(v->Name);
+      WID->m_toggle_butt[num]->redraw();
+    }
+#endif
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
     WID->view_input[0]->value(v->Name);
-    WID->m_toggle_butt[num]->label(v->Name);
   }
 #endif
   return v->Name;
 }
 char * opt_view_format(OPT_ARGS_STR){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return NULL; }
-  if(action & GMSH_SET)
+  GET_VIEW(NULL) ;
+  if(action & GMSH_SET){
     strcpy(v->Format, val);
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_input[1]->value(v->Format);
@@ -52,8 +124,7 @@ char * opt_view_format(OPT_ARGS_STR){
   return v->Format;
 }
 char * opt_view_filename(OPT_ARGS_STR){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return NULL; }
+  GET_VIEW(NULL) ;
   if(action & GMSH_SET)
     strcpy(v->FileName, val);
   return v->FileName;
@@ -69,13 +140,13 @@ char * opt_print_font(OPT_ARGS_STR){
 //******************* Numbers ***********************************
 
 
-double opt_general_viewport0(OPT_ARGS_NUM){
-  if(action & GMSH_SET) CTX.viewport[0] = (int)val;
-  return CTX.viewport[0];
+double opt_general_fontsize(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.fontsize = (int)val;
+  return CTX.fontsize;
 }
-double opt_general_viewport1(OPT_ARGS_NUM){
-  if(action & GMSH_SET) CTX.viewport[1] = (int)val;
-  return CTX.viewport[1];
+double opt_general_graphics_fontsize(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.gl_fontsize = (int)val;
+  return CTX.gl_fontsize;
 }
 double opt_general_viewport2(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.viewport[2] = (int)val;
@@ -93,10 +164,6 @@ double opt_general_graphics_position1(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.gl_position[1] = (int)val;
   return CTX.gl_position[1];
 }
-double opt_general_graphics_fontsize(OPT_ARGS_NUM){
-  if(action & GMSH_SET) CTX.gl_fontsize = (int)val;
-  return CTX.gl_fontsize;
-}
 double opt_general_menu_position0(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.position[0] = (int)val;
   return CTX.position[0];
@@ -105,14 +172,42 @@ double opt_general_menu_position1(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.position[1] = (int)val;
   return CTX.position[1];
 }
-double opt_general_menu_fontsize(OPT_ARGS_NUM){
-  if(action & GMSH_SET) CTX.fontsize = (int)val;
-  return CTX.fontsize;
+double opt_general_message_position0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.msg_position[0] = (int)val;
+  return CTX.msg_position[0];
+}
+double opt_general_message_position1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.msg_position[1] = (int)val;
+  return CTX.msg_position[1];
+}
+double opt_general_message_size0(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.msg_size[0] = (int)val;
+  return CTX.msg_size[0];
+}
+double opt_general_message_size1(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.msg_size[1] = (int)val;
+  return CTX.msg_size[1];
 }
 double opt_general_center_windows(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.center_windows = (int)val;
   return CTX.center_windows;
 }
+double opt_general_session_save(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.session_save = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[7]->value(CTX.session_save);
+#endif
+  return CTX.session_save;
+}
+double opt_general_options_save(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.options_save = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[8]->value(CTX.options_save);
+#endif
+  return CTX.options_save;
+}
 double opt_general_rotation0(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.r[0] = val;
   return CTX.r[0];
@@ -177,11 +272,19 @@ double opt_general_shine(OPT_ARGS_NUM){
 double opt_general_verbosity(OPT_ARGS_NUM){
   if(action & GMSH_SET) 
     CTX.verbosity = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_value[5]->value(CTX.verbosity);
+#endif
   return CTX.verbosity;
 }
 double opt_general_terminal(OPT_ARGS_NUM){
   if(action & GMSH_SET) 
     CTX.terminal = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[6]->value(CTX.terminal);
+#endif
   return CTX.terminal;
 }
 double opt_general_orthographic(OPT_ARGS_NUM){
@@ -189,8 +292,8 @@ double opt_general_orthographic(OPT_ARGS_NUM){
     CTX.ortho = (int)val;
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI)){
-    WID->gen_butt[6]->value(CTX.ortho);
-    WID->gen_butt[7]->value(!CTX.ortho);
+    WID->gen_butt[9]->value(CTX.ortho);
+    WID->gen_butt[10]->value(!CTX.ortho);
   }
 #endif
   return CTX.ortho;
@@ -244,7 +347,8 @@ double opt_general_color_scheme(OPT_ARGS_NUM){
   if(action & GMSH_SET){
     CTX.color_scheme = (int)val;
     if(CTX.color_scheme>2) CTX.color_scheme=0;
-    Init_Colors(0);
+    Set_DefaultColorOptions(0, GeneralOptions_Color, CTX.color_scheme);
+    Set_ColorOptions_GUI(0, GeneralOptions_Color);
   }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI))
@@ -385,6 +489,14 @@ double opt_general_clip5d(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.clip_plane[5][3] = val;
   return CTX.clip_plane[5][3];
 }
+double opt_general_moving_light(OPT_ARGS_NUM){
+  if(action & GMSH_SET) CTX.moving_light = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[11]->value(CTX.moving_light);
+#endif
+  return CTX.moving_light;
+}
 double opt_general_light0(OPT_ARGS_NUM){
   if(action & GMSH_SET) CTX.light[0] = (int)val;
   return CTX.light[0];
@@ -586,15 +698,17 @@ double opt_geometry_volumes_num(OPT_ARGS_NUM){
 #endif
   return CTX.geom.volumes_num;
 }
-double opt_geometry_hidden(OPT_ARGS_NUM){
-  if(action & GMSH_SET) 
-    CTX.geom.hidden = (int)val;
-  return CTX.geom.hidden;
-}
-double opt_geometry_shade(OPT_ARGS_NUM){
-  if(action & GMSH_SET) 
-    CTX.geom.shade = (int)val;
-  return CTX.geom.shade;
+double opt_geometry_aspect(OPT_ARGS_NUM){
+  if(action & GMSH_SET){ 
+    switch((int)val){
+    case 1  : CTX.geom.hidden = 1; CTX.geom.shade = 0; break ;
+    case 2  : CTX.geom.hidden = 1; CTX.geom.shade = 1; break ;
+    default : CTX.geom.hidden = CTX.geom.shade = 0; break ;
+    }
+  }
+  if(CTX.geom.hidden && !CTX.geom.shade) return 1;
+  else if(CTX.geom.hidden && CTX.geom.shade) return 2;
+  else return 0;
 }
 double opt_geometry_highlight(OPT_ARGS_NUM){
   if(action & GMSH_SET) 
@@ -611,6 +725,19 @@ double opt_geometry_scaling_factor(OPT_ARGS_NUM){
     CTX.geom.scaling_factor = (int)val;
   return CTX.geom.scaling_factor;
 }
+double opt_geometry_color_scheme(OPT_ARGS_NUM){
+  if(action & GMSH_SET){
+    CTX.geom.color_scheme = (int)val;
+    if(CTX.geom.color_scheme>2) CTX.geom.color_scheme=0;
+    Set_DefaultColorOptions(0, GeometryOptions_Color, CTX.geom.color_scheme);
+    Set_ColorOptions_GUI(0, GeometryOptions_Color);
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->geo_value[2]->value(CTX.geom.color_scheme);
+#endif
+  return CTX.geom.color_scheme;
+}
 
 
 double opt_mesh_quality(OPT_ARGS_NUM){
@@ -763,23 +890,24 @@ double opt_mesh_volumes_num(OPT_ARGS_NUM){
 #endif
   return CTX.mesh.volumes_num;
 }
-double opt_mesh_hidden(OPT_ARGS_NUM){
-  if(action & GMSH_SET) 
-    CTX.mesh.hidden = (int)val;
-#ifdef _FLTK
-  if(WID && (action & GMSH_GUI))
-    WID->mesh_butt[11]->value(!CTX.mesh.hidden);
-#endif
-  return CTX.mesh.hidden;
-}
-double opt_mesh_shade(OPT_ARGS_NUM){
-  if(action & GMSH_SET) 
-    CTX.mesh.shade = (int)val;
+double opt_mesh_aspect(OPT_ARGS_NUM){
+  if(action & GMSH_SET){ 
+    switch((int)val){
+    case 1  : CTX.mesh.hidden = 1; CTX.mesh.shade = 0; break ;
+    case 2  : CTX.mesh.hidden = 1; CTX.mesh.shade = 1; break ;
+    default : CTX.mesh.hidden = CTX.mesh.shade = 0; break ;
+    }
+  }
 #ifdef _FLTK
-  if(WID && (action & GMSH_GUI))
-    WID->mesh_butt[13]->value(CTX.mesh.shade);
+  if(WID && (action & GMSH_GUI)){
+    WID->mesh_butt[11]->value(!CTX.mesh.hidden && !CTX.mesh.shade);
+    WID->mesh_butt[12]->value(CTX.mesh.hidden && !CTX.mesh.shade);
+    WID->mesh_butt[13]->value(CTX.mesh.hidden && CTX.mesh.shade);
+  }
 #endif
-  return CTX.mesh.shade;
+  if(CTX.mesh.hidden && !CTX.mesh.shade) return 1;
+  else if(CTX.mesh.hidden && CTX.mesh.shade) return 2;
+  else return 0;
 }
 double opt_mesh_format(OPT_ARGS_NUM){
   if(action & GMSH_SET) 
@@ -867,6 +995,28 @@ double opt_mesh_cut_planed(OPT_ARGS_NUM){
     CTX.mesh.cut_planed = val;
   return CTX.mesh.cut_planed;
 }
+double opt_mesh_color_scheme(OPT_ARGS_NUM){
+  if(action & GMSH_SET){
+    CTX.mesh.color_scheme = (int)val;
+    if(CTX.mesh.color_scheme>2) CTX.mesh.color_scheme=0;
+    Set_DefaultColorOptions(0, MeshOptions_Color, CTX.mesh.color_scheme);
+    Set_ColorOptions_GUI(0, MeshOptions_Color);
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_value[7]->value(CTX.mesh.color_scheme);
+#endif
+  return CTX.mesh.color_scheme;
+}
+double opt_mesh_color_carousel(OPT_ARGS_NUM){
+  if(action & GMSH_SET)
+    CTX.mesh.color_carousel = (int)val;
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->mesh_butt[14]->value(CTX.mesh.color_carousel);
+#endif
+  return CTX.mesh.color_carousel;
+}
 
 
 
@@ -914,21 +1064,25 @@ double opt_post_nb_views(OPT_ARGS_NUM){
 
 
 double opt_view_nb_timestep(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
+  GET_VIEW(0.) ;
   if(action & GMSH_SET) 
     v->NbTimeStep = (int)val;
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[9]->maximum(v->NbTimeStep-1);
+  if(WID && (action & GMSH_GUI) && v->NbTimeStep > 1)
+    WID->g_status_butt[5]->activate();
 #endif
   return v->NbTimeStep;
 }
 double opt_view_timestep(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->TimeStep = (int)val;
+    if(v->TimeStep > v->NbTimeStep-1 || v->TimeStep < 0)
+      v->TimeStep = 0 ;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[9]->value(v->TimeStep);
@@ -936,24 +1090,27 @@ double opt_view_timestep(OPT_ARGS_NUM){
   return v->TimeStep;
 }
 double opt_view_min(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){ 
     v->Min = val;
+    v->Changed = 1;
+  }
   return v->Min;
 }
 double opt_view_max(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Max = val;
+    v->Changed = 1;
+  }
   return v->Max;
 }
 double opt_view_custom_min(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->CustomMin = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
     WID->view_value[0]->value(v->CustomMin);
@@ -962,10 +1119,11 @@ double opt_view_custom_min(OPT_ARGS_NUM){
   return v->CustomMin;
 }
 double opt_view_custom_max(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->CustomMax = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[1]->value(v->CustomMax);
@@ -973,10 +1131,11 @@ double opt_view_custom_max(OPT_ARGS_NUM){
   return v->CustomMax;
 }
 double opt_view_offset0(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Offset[0] = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[3]->value(v->Offset[0]);
@@ -984,10 +1143,11 @@ double opt_view_offset0(OPT_ARGS_NUM){
   return v->Offset[0];
 }
 double opt_view_offset1(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Offset[1] = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[4]->value(v->Offset[1]);
@@ -995,10 +1155,11 @@ double opt_view_offset1(OPT_ARGS_NUM){
   return v->Offset[1];
 }
 double opt_view_offset2(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Offset[2] = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[5]->value(v->Offset[2]);
@@ -1006,10 +1167,11 @@ double opt_view_offset2(OPT_ARGS_NUM){
   return v->Offset[2];
 }
 double opt_view_raise0(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Raise[0] = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[6]->value(v->Raise[0]);
@@ -1017,10 +1179,11 @@ double opt_view_raise0(OPT_ARGS_NUM){
   return v->Raise[0];
 }
 double opt_view_raise1(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Raise[1] = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[7]->value(v->Raise[1]);
@@ -1028,10 +1191,11 @@ double opt_view_raise1(OPT_ARGS_NUM){
   return v->Raise[1];
 }
 double opt_view_raise2(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Raise[2] = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[8]->value(v->Raise[2]);
@@ -1039,10 +1203,11 @@ double opt_view_raise2(OPT_ARGS_NUM){
   return v->Raise[2];
 }
 double opt_view_arrow_scale(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->ArrowScale = val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[10]->value(v->ArrowScale);
@@ -1050,36 +1215,43 @@ double opt_view_arrow_scale(OPT_ARGS_NUM){
   return v->ArrowScale;
 }
 double opt_view_visible(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Visible = (int)val;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->m_toggle_butt[num]->value(v->Visible);
 #endif
+  Msg(DEBUG1, "View %d", v->Num);
+  Msg(DEBUG2, "  -> Name '%s'", v->Name);
+  Msg(DEBUG2, "  -> FileName '%s'", v->FileName);
+  Msg(DEBUG2, "  -> DuplicateOf %d", v->DuplicateOf);
+  Msg(DEBUG3, "  -> Links %d", v->Links);
   return v->Visible;
 }
 double opt_view_intervals_type(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->IntervalsType = (int)val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[6]->value(v->IntervalsType==DRAW_POST_ISO);
-    WID->view_butt[7]->value(v->IntervalsType==DRAW_POST_DISCRETE);
-    WID->view_butt[8]->value(v->IntervalsType==DRAW_POST_CONTINUOUS);
-    WID->view_butt[9]->value(v->IntervalsType==DRAW_POST_NUMERIC);
+    WID->view_butt[3]->value(v->IntervalsType==DRAW_POST_ISO);
+    WID->view_butt[4]->value(v->IntervalsType==DRAW_POST_DISCRETE);
+    WID->view_butt[5]->value(v->IntervalsType==DRAW_POST_CONTINUOUS);
+    WID->view_butt[6]->value(v->IntervalsType==DRAW_POST_NUMERIC);
   }
 #endif
   return v->IntervalsType;
 }
 double opt_view_nb_iso(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->NbIso = (int)val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
     WID->view_value[2]->value(v->NbIso);
@@ -1087,100 +1259,114 @@ double opt_view_nb_iso(OPT_ARGS_NUM){
   return v->NbIso;
 }
 double opt_view_light(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->Light = (int)val;
+    v->Changed = 1;
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_butt[17]->value(v->Light);
+#endif
   return v->Light;
 }
 double opt_view_show_element(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->ShowElement = (int)val;
+    v->Changed = 1;
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI) && (num == WID->view_number))
+    WID->view_butt[13]->value(v->ShowElement);
+#endif
   return v->ShowElement;
 }
 double opt_view_show_time(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->ShowTime = (int)val;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
-    WID->view_butt[1]->value(v->ShowTime);
+    WID->view_butt[15]->value(v->ShowTime);
 #endif
   return v->ShowTime;
 }
 double opt_view_show_scale(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->ShowScale = (int)val;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
-    WID->view_butt[0]->value(v->ShowScale);
+    WID->view_butt[14]->value(v->ShowScale);
 #endif
   return v->ShowScale;
 }
 double opt_view_transparent_scale(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->TransparentScale = (int)val;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
-    WID->view_butt[2]->value(v->TransparentScale);
+    WID->view_butt[16]->value(v->TransparentScale);
 #endif
   return v->TransparentScale;
 }
 double opt_view_scale_type(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->ScaleType = (int)val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[4]->value(v->ScaleType==DRAW_POST_LINEAR);
-    WID->view_butt[5]->value(v->ScaleType==DRAW_POST_LOGARITHMIC);
+    WID->view_butt[1]->value(v->ScaleType==DRAW_POST_LINEAR);
+    WID->view_butt[2]->value(v->ScaleType==DRAW_POST_LOGARITHMIC);
   }
 #endif
   return v->ScaleType;
 }
 double opt_view_range_type(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->RangeType = (int)val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
-    WID->view_butt[3]->value(v->RangeType==DRAW_POST_CUSTOM);
+    WID->view_butt[0]->value(v->RangeType==DRAW_POST_CUSTOM);
 #endif
   return v->RangeType;
 }
 double opt_view_arrow_type(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->ArrowType = (int)val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[10]->value(v->ArrowType==DRAW_POST_SEGMENT);
-    WID->view_butt[11]->value(v->ArrowType==DRAW_POST_ARROW);
-    WID->view_butt[12]->value(v->ArrowType==DRAW_POST_CONE);
-    WID->view_butt[13]->value(v->ArrowType==DRAW_POST_DISPLACEMENT);
+    WID->view_butt[7]->value(v->ArrowType==DRAW_POST_SEGMENT);
+    WID->view_butt[8]->value(v->ArrowType==DRAW_POST_ARROW);
+    WID->view_butt[9]->value(v->ArrowType==DRAW_POST_CONE);
+    WID->view_butt[10]->value(v->ArrowType==DRAW_POST_DISPLACEMENT);
   }
 #endif
   return v->ArrowType;
 }
 double opt_view_arrow_location(OPT_ARGS_NUM){
-  Post_View *v = (Post_View*)List_Pointer_Test(Post_ViewList, num);
-  if(!v){ NOVIEW; return 0.; }
-  if(action & GMSH_SET) 
+  GET_VIEW(0.) ;
+  if(action & GMSH_SET){
     v->ArrowLocation = (int)val;
+    v->Changed = 1;
+  }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number)){
-    WID->view_butt[14]->value(v->ArrowLocation==DRAW_POST_LOCATE_COG);
-    WID->view_butt[15]->value(v->ArrowLocation==DRAW_POST_LOCATE_VERTEX);
+    WID->view_butt[11]->value(v->ArrowLocation==DRAW_POST_LOCATE_COG);
+    WID->view_butt[12]->value(v->ArrowLocation==DRAW_POST_LOCATE_VERTEX);
   }
 #endif
   return v->ArrowLocation;
@@ -1231,204 +1417,339 @@ double opt_print_font_size(OPT_ARGS_NUM){
 
 //******************* Colors ***********************************
 
+#ifdef _FLTK
+#define CCC(col,but)							\
+  if(WID && (action & GMSH_GUI)){					\
+    Fl_Color c = fl_color_cube(UNPACK_RED(col)*FL_NUM_RED/256, 		\
+			       UNPACK_GREEN(col)*FL_NUM_GREEN/256,	\
+			       UNPACK_BLUE(col)*FL_NUM_BLUE/256);	\
+    (but)->color(c);							\
+    (but)->labelcolor(contrast(FL_BLACK,c));				\
+    (but)->redraw();							\
+  }
+#endif
 
 unsigned int opt_general_color_background(OPT_ARGS_COL){
-  if(action & GMSH_SET) 
+  if(action & GMSH_SET){
     CTX.color.bg = val;
+#ifdef _FLTK
+    if(WID) WID->view_colorbar_window->redraw();
+#endif
+  }
+#ifdef _FLTK
+  CCC(CTX.color.bg,WID->gen_col[0]);
+#endif
   return CTX.color.bg;
 }
 unsigned int opt_general_color_foreground(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.fg = val;
+#ifdef _FLTK
+  CCC(CTX.color.fg,WID->gen_col[1]);
+#endif
   return CTX.color.fg;
 }
 unsigned int opt_general_color_text(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.text = val;
+#ifdef _FLTK
+  CCC(CTX.color.text,WID->gen_col[2]);
+#endif
   return CTX.color.text;
 }
 unsigned int opt_general_color_axes(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.axes = val;
+#ifdef _FLTK
+  CCC(CTX.color.axes,WID->gen_col[3]);
+#endif
   return CTX.color.axes;
 }
 unsigned int opt_general_color_small_axes(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.small_axes = val;
+#ifdef _FLTK
+  CCC(CTX.color.small_axes,WID->gen_col[4]);
+#endif
   return CTX.color.small_axes;
 }
 unsigned int opt_geometry_color_points(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.point = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.point,WID->geo_col[0]);
+#endif
   return CTX.color.geom.point;
 } 
 unsigned int opt_geometry_color_lines(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.line = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.line,WID->geo_col[1]);
+#endif
   return CTX.color.geom.line;
 }
 unsigned int opt_geometry_color_surfaces(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.surface = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.surface,WID->geo_col[2]);
+#endif
   return CTX.color.geom.surface;
 }
 unsigned int opt_geometry_color_volumes(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.volume = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.volume,WID->geo_col[3]);
+#endif
   return CTX.color.geom.volume;
 }
 unsigned int opt_geometry_color_points_select(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.point_sel = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.point_sel,WID->geo_col[4]);
+#endif
   return CTX.color.geom.point_sel;
 }
 unsigned int opt_geometry_color_lines_select(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.line_sel = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.line_sel,WID->geo_col[5]);
+#endif
   return CTX.color.geom.line_sel;
 }
 unsigned int opt_geometry_color_surfaces_select(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.surface_sel = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.surface_sel,WID->geo_col[6]);
+#endif
   return CTX.color.geom.surface_sel;
 }
 unsigned int opt_geometry_color_volumes_select(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.volume_sel = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.volume_sel,WID->geo_col[7]);
+#endif
   return CTX.color.geom.volume_sel;
 }
 unsigned int opt_geometry_color_points_highlight(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.point_hlt = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.point_hlt,WID->geo_col[8]);
+#endif
   return CTX.color.geom.point_hlt;
 }
 unsigned int opt_geometry_color_lines_highlight(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.line_hlt = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.line_hlt,WID->geo_col[9]);
+#endif
   return CTX.color.geom.line_hlt;
 }
 unsigned int opt_geometry_color_surfaces_highlight(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.surface_hlt = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.surface_hlt,WID->geo_col[10]);
+#endif
   return CTX.color.geom.surface_hlt;
 }
 unsigned int opt_geometry_color_volumes_highlight(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.volume_hlt = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.volume_hlt,WID->geo_col[11]);
+#endif
   return CTX.color.geom.volume_hlt;
 }
 unsigned int opt_geometry_color_tangents(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.tangents = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.tangents,WID->geo_col[12]);
+#endif
   return CTX.color.geom.tangents;
 }
 unsigned int opt_geometry_color_normals(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.geom.normals = val;
+#ifdef _FLTK
+  CCC(CTX.color.geom.normals,WID->geo_col[13]);
+#endif
   return CTX.color.geom.normals;
 }
 unsigned int opt_mesh_color_points(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.vertex = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.vertex,WID->mesh_col[0]);
+#endif
   return CTX.color.mesh.vertex;
 } 
 unsigned int opt_mesh_color_points_supp(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.vertex_supp = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.vertex_supp,WID->mesh_col[1]);
+#endif
   return CTX.color.mesh.vertex_supp;
 } 
 unsigned int opt_mesh_color_lines(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.line = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.line,WID->mesh_col[2]);
+#endif
   return CTX.color.mesh.line;
 } 
 unsigned int opt_mesh_color_triangles(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.triangle = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.triangle,WID->mesh_col[3]);
+#endif
   return CTX.color.mesh.triangle;
 }
 unsigned int opt_mesh_color_quadrangles(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.quadrangle = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.quadrangle,WID->mesh_col[4]);
+#endif
   return CTX.color.mesh.quadrangle;
 }
 unsigned int opt_mesh_color_tetrahedra(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.tetrahedron = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.tetrahedron,WID->mesh_col[5]);
+#endif
   return CTX.color.mesh.tetrahedron;
 }
 unsigned int opt_mesh_color_hexahedra(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.hexahedron = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.hexahedron,WID->mesh_col[6]);
+#endif
   return CTX.color.mesh.hexahedron;
 }
 unsigned int opt_mesh_color_prisms(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.prism = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.prism,WID->mesh_col[7]);
+#endif
   return CTX.color.mesh.prism;
 }
 unsigned int opt_mesh_color_pyramid(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.pyramid = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.pyramid,WID->mesh_col[8]);
+#endif
   return CTX.color.mesh.pyramid;
 }
 unsigned int opt_mesh_color_tangents(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.tangents = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.tangents,WID->mesh_col[9]);
+#endif
   return CTX.color.mesh.tangents;
 }
 unsigned int opt_mesh_color_normals(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.normals = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.normals,WID->mesh_col[10]);
+#endif
   return CTX.color.mesh.normals;
 }
 unsigned int opt_mesh_color_1(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[0] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[0],WID->mesh_col[11]);
+#endif
   return CTX.color.mesh.carousel[0];
 }
 unsigned int opt_mesh_color_2(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[1] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[1],WID->mesh_col[12]);
+#endif
   return CTX.color.mesh.carousel[1];
 }
 unsigned int opt_mesh_color_3(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[2] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[2],WID->mesh_col[13]);
+#endif
   return CTX.color.mesh.carousel[2];
 }
 unsigned int opt_mesh_color_4(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[3] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[3],WID->mesh_col[14]);
+#endif
   return CTX.color.mesh.carousel[3];
 }
 unsigned int opt_mesh_color_5(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[4] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[4],WID->mesh_col[15]);
+#endif
   return CTX.color.mesh.carousel[4];
 }
 unsigned int opt_mesh_color_6(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[5] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[5],WID->mesh_col[16]);
+#endif
   return CTX.color.mesh.carousel[5];
 }
 unsigned int opt_mesh_color_7(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[6] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[6],WID->mesh_col[17]);
+#endif
   return CTX.color.mesh.carousel[6];
 }
 unsigned int opt_mesh_color_8(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[7] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[7],WID->mesh_col[18]);
+#endif
   return CTX.color.mesh.carousel[7];
 }
 unsigned int opt_mesh_color_9(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[8] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[8],WID->mesh_col[19]);
+#endif
   return CTX.color.mesh.carousel[8];
 }
 unsigned int opt_mesh_color_10(OPT_ARGS_COL){
   if(action & GMSH_SET) 
     CTX.color.mesh.carousel[9] = val;
+#ifdef _FLTK
+  CCC(CTX.color.mesh.carousel[9],WID->mesh_col[20]);
+#endif
   return CTX.color.mesh.carousel[9];
 }
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 1d9ee8328cb604ff442387239db4416733823084..d11e324aa153d0bcdcd2814a7f6baf6f86c97f05 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.30 2001-02-16 20:16:40 remacle Exp $
+// $Id: Callbacks.cpp,v 1.31 2001-02-17 22:02:17 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -11,6 +11,7 @@
 #include "Visibility.h"
 #include "CreateFile.h"
 #include "OpenFile.h"
+#include "GetOptions.h"
 #include "Context.h"
 #include "Options.h"
 #include "GUI.h"
@@ -27,82 +28,11 @@ extern Context_T  CTX;
 
 int AddViewInUI(int i, char *Name, int Num){
   if(i > NB_BUTT_MAX -1) return 1;
-  if(WID->get_context() == 2)
+  if(WID && (WID->get_context() == 2))
     WID->set_context(menu_post,0);
   return 0;
 }
 
-void MarkAllViewsChanged(int action){
-  int i;
-  Post_View *v;
-
-  for(i = 0 ; i< List_Nbr(Post_ViewList) ; i++){
-    v = (Post_View*)List_Pointer(Post_ViewList, i);
-    switch(action){
-    case 1: // toggle drawing mode
-      if(v->IntervalsType == DRAW_POST_ISO) 
-        v->IntervalsType = DRAW_POST_DISCRETE ;
-      else if(v->IntervalsType == DRAW_POST_DISCRETE) 
-        v->IntervalsType = DRAW_POST_CONTINUOUS ;
-      else 
-        v->IntervalsType = DRAW_POST_ISO ;
-      break;
-    case 2: // time step++
-      if(v->TimeStep < v->NbTimeStep-1)
-        v->TimeStep++ ;
-      else
-        v->TimeStep = 0 ;
-      break;
-    case 3: // time step--
-      if(v->TimeStep > 0)
-        v->TimeStep-- ;
-      else
-        v->TimeStep = v->NbTimeStep-1 ;
-    }
-    v->Changed = 1 ;
-  }
-}
-
-#ifdef _USETHREADS
-
-#include <pthread.h>
-
-int        MeshDim ;
-pthread_t  MeshThread ;
-
-void* StartMeshThread(void * data){
-  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-  mai3d(&M,MeshDim);
-  Msg(STATUS3N,"Ready");
-  CTX.mesh.draw = 1;
-  CTX.threads_lock = 0;
-  XtSetSensitive(WID.G.Butt[6], 0);
-  Draw();
-  pthread_exit(NULL);
-  return NULL ;
-}
-
-void CancelMeshThread(void){
-  if(CTX.threads){
-    pthread_cancel(MeshThread);
-    CTX.mesh.draw = 1;
-    CTX.threads_lock = 0;
-    XtSetSensitive(WID.G.Butt[6], 0);    
-    Msg(STATUS2,"Mesh Aborted");
-    mesh_event_handler(MESH_DELETE);
-    Msg(STATUS3N,"Ready");
-    Draw();
-  }
-}
-
-#else
-
-void CancelMeshThread(void){
-  
-}
-
-#endif
-
 int SetGlobalShortcut(int event){
   return WID->global_shortcuts(event);
 }
@@ -142,8 +72,6 @@ int SelectContour (int type, int num, List_T *Liste1){
   return k;
 }
 
-///////////////////////////////////////////////////////////////////////////////
-
 
 // Common callbacks 
 
@@ -151,6 +79,17 @@ void cancel_cb(CALLBACK_ARGS){
   if(data) ((Fl_Window*)data)->hide();
 }
 
+void color_cb(CALLBACK_ARGS){
+  unsigned int (*fct) (int, int, unsigned int);
+  fct = (unsigned int (*) (int, int, unsigned int))data ;
+  uchar r = UNPACK_RED(fct(0,GMSH_GET,0)) ; 
+  uchar g = UNPACK_GREEN(fct(0,GMSH_GET,0)) ; 
+  uchar b = UNPACK_BLUE(fct(0,GMSH_GET,0)) ; 
+  if (fl_color_chooser("Color Chooser",r,g,b))
+    fct(0,GMSH_SET|GMSH_GUI,PACK_COLOR(r,g,b,255));
+  Draw();
+}
+
 // Graphical window 
 
 void status_xyz1p_cb(CALLBACK_ARGS){
@@ -184,7 +123,8 @@ void status_xyz1p_cb(CALLBACK_ARGS){
     Draw(); 
     break;
   case 4 :
-    Print_Context(0,NULL);
+    Print_Context(0,GMSH_FULLRC,NULL);
+    WID->create_message_window();
     break ;
   }
 }
@@ -192,6 +132,7 @@ void status_xyz1p_cb(CALLBACK_ARGS){
 static int stop_anim ;
 void status_play_cb(CALLBACK_ARGS){
   static long anim_time ;
+  int i;
   WID->set_anim(0);
   stop_anim = 0 ;
   anim_time = GetTime();
@@ -199,7 +140,8 @@ void status_play_cb(CALLBACK_ARGS){
     if(stop_anim) break ;
     if(GetTime() - anim_time > 1.e6*CTX.post.anim_delay){
       anim_time = GetTime();
-      MarkAllViewsChanged(2);
+      for(i=0 ; i<List_Nbr(Post_ViewList) ; i++)
+	opt_view_timestep(i, GMSH_SET|GMSH_GUI, opt_view_timestep(i, GMSH_GET, 0)+1);
       Draw();
     }
     WID->check();
@@ -212,33 +154,41 @@ void status_pause_cb(CALLBACK_ARGS){
 }
 
 void status_cancel_cb(CALLBACK_ARGS){
-  CancelMeshThread();
 }
 
 // File Menu
 
 void file_open_cb(CALLBACK_ARGS) {
   char *newfile;
+  int n = List_Nbr(Post_ViewList);
   newfile = fl_file_chooser("Open File", "*.geo", NULL);
   if (newfile != NULL) {
     OpenProblem(newfile); 
     Draw(); 
   }
+  if(n != List_Nbr(Post_ViewList))
+    WID->set_context(menu_post, 0);
 }
 
 void file_merge_cb(CALLBACK_ARGS) {
   char *newfile;
+  int n = List_Nbr(Post_ViewList);
   newfile = fl_file_chooser("Merge File", "*", NULL);
   if (newfile != NULL) {
     MergeProblem(newfile); 
     Draw(); 
   }
+  if(n != List_Nbr(Post_ViewList))
+    WID->set_context(menu_post, 0);
 }
 
-void file_save_cb(CALLBACK_ARGS) {
+void file_save_mesh_cb(CALLBACK_ARGS) {
   Print_Mesh(&M, NULL, CTX.mesh.format);
 }
 
+void file_save_options_cb(CALLBACK_ARGS) {
+  Print_Context(0,GMSH_OPTIONSRC, CTX.optionsrc_filename); 
+}
 
 void file_save_as_auto_cb(CALLBACK_ARGS) {
   char *newfile;
@@ -255,7 +205,7 @@ void file_save_as_geo_cb(CALLBACK_ARGS) {
 void file_save_as_geo_options_cb(CALLBACK_ARGS) {
   char *newfile;
   if((newfile = fl_file_chooser("Save Options File", "*", NULL)))
-    Print_Context(0,newfile); 
+    Print_Context(0,GMSH_FULLRC, newfile); 
 }
 
 void file_save_as_msh_cb(CALLBACK_ARGS) {
@@ -328,28 +278,6 @@ void file_save_as_yuv_cb(CALLBACK_ARGS) {
     CreateOutputFile(newfile, CTX.print.format = FORMAT_YUV); 
 }
 
-static int RELOAD_ALL_VIEWS = 0 ;
-
-void file_reload_all_views_cb(CALLBACK_ARGS) {
-  if(!Post_ViewList) return;
-  RELOAD_ALL_VIEWS = 1;
-  for(int i = 0 ; i<List_Nbr(Post_ViewList) ; i++)
-    view_reload_cb(NULL, (void *)i);
-  RELOAD_ALL_VIEWS = 0;
-  Draw();
-}
-
-static int REMOVE_ALL_VIEWS = 0 ;
-
-void file_remove_all_views_cb(CALLBACK_ARGS) {
-  if(!Post_ViewList) return;
-  REMOVE_ALL_VIEWS = 1;
-  while(List_Nbr(Post_ViewList))
-    view_remove_cb(NULL, (void*)0);
-  REMOVE_ALL_VIEWS = 0;
-  Draw();
-}
-
 void file_quit_cb(CALLBACK_ARGS) {
   Exit(0);
 }
@@ -359,6 +287,10 @@ void file_quit_cb(CALLBACK_ARGS) {
 void opt_general_cb(CALLBACK_ARGS) {
   WID->create_general_options_window();
 }
+void opt_general_color_scheme_cb(CALLBACK_ARGS){
+  opt_general_color_scheme(0,GMSH_SET, WID->gen_value[0]->value());
+  Draw();
+}
 void opt_general_ok_cb(CALLBACK_ARGS){
   opt_general_axes(0, GMSH_SET, WID->gen_butt[0]->value());
   opt_general_small_axes(0, GMSH_SET, WID->gen_butt[1]->value());
@@ -366,13 +298,22 @@ void opt_general_ok_cb(CALLBACK_ARGS){
   opt_general_display_lists(0, GMSH_SET, WID->gen_butt[3]->value());
   opt_general_alpha_blending(0, GMSH_SET, WID->gen_butt[4]->value());
   opt_general_trackball(0, GMSH_SET, WID->gen_butt[5]->value());
-  opt_general_orthographic(0, GMSH_SET, WID->gen_butt[6]->value());
+  opt_general_terminal(0, GMSH_SET, WID->gen_butt[6]->value());
+  opt_general_session_save(0, GMSH_SET, WID->gen_butt[7]->value());
+  opt_general_options_save(0, GMSH_SET, WID->gen_butt[8]->value());
+  opt_general_orthographic(0, GMSH_SET, WID->gen_butt[9]->value());
+  opt_general_moving_light(0, GMSH_SET, WID->gen_butt[11]->value());
 
-  opt_general_color_scheme(0,GMSH_SET, WID->gen_value[0]->value());
   opt_general_shine(0, GMSH_SET, WID->gen_value[1]->value());
   opt_general_light00(0, GMSH_SET, WID->gen_value[2]->value());
   opt_general_light01(0, GMSH_SET, WID->gen_value[3]->value());
   opt_general_light02(0, GMSH_SET, WID->gen_value[4]->value());
+  opt_general_verbosity(0, GMSH_SET, WID->gen_value[5]->value());
+
+  opt_general_default_filename(0, GMSH_SET, (char*)WID->gen_input[0]->value());
+  opt_general_tmp_filename(0, GMSH_SET, (char*)WID->gen_input[1]->value());
+  opt_general_error_filename(0, GMSH_SET, (char*)WID->gen_input[2]->value());
+  opt_general_options_filename(0, GMSH_SET, (char*)WID->gen_input[3]->value());
   Draw();
 }
 
@@ -394,6 +335,10 @@ void opt_geometry_show_by_entity_num_cb(CALLBACK_ARGS) {
   }
   Draw();
 }
+void opt_geometry_color_scheme_cb(CALLBACK_ARGS){
+  opt_geometry_color_scheme(0,GMSH_SET, WID->geo_value[2]->value());
+  Draw();
+}
 void opt_geometry_ok_cb(CALLBACK_ARGS) {
   opt_geometry_points(0, GMSH_SET, WID->geo_butt[0]->value());
   opt_geometry_lines(0, GMSH_SET, WID->geo_butt[1]->value());
@@ -417,6 +362,10 @@ void opt_mesh_cb(CALLBACK_ARGS) {
 void opt_mesh_show_by_entity_num_cb(CALLBACK_ARGS) {
   opt_geometry_show_by_entity_num_cb(w,data);
 }
+void opt_mesh_color_scheme_cb(CALLBACK_ARGS){
+  opt_mesh_color_scheme(0,GMSH_SET, WID->mesh_value[7]->value());
+  Draw();
+}
 void opt_mesh_ok_cb(CALLBACK_ARGS) {
   opt_mesh_degree(0, GMSH_SET, WID->mesh_butt[0]->value()?2:1);
   opt_mesh_interactive(0, GMSH_SET, WID->mesh_butt[1]->value());
@@ -429,8 +378,11 @@ void opt_mesh_ok_cb(CALLBACK_ARGS) {
   opt_mesh_lines_num(0, GMSH_SET, WID->mesh_butt[8]->value());
   opt_mesh_surfaces_num(0, GMSH_SET, WID->mesh_butt[9]->value());
   opt_mesh_volumes_num(0, GMSH_SET, WID->mesh_butt[10]->value());
-  opt_mesh_hidden(0, GMSH_SET, !WID->mesh_butt[11]->value());
-  opt_mesh_shade(0, GMSH_SET, WID->mesh_butt[13]->value());
+  opt_mesh_aspect(0, GMSH_SET, 
+		  WID->mesh_butt[11]->value()?0:
+		  WID->mesh_butt[12]->value()?1:
+		  2);
+  opt_mesh_color_carousel(0, GMSH_SET, WID->mesh_butt[14]->value());
 
   opt_mesh_nb_smoothing(0, GMSH_SET, WID->mesh_value[0]->value());
   opt_mesh_scaling_factor(0, GMSH_SET, WID->mesh_value[1]->value());
@@ -470,16 +422,89 @@ void opt_statistics_update_cb(CALLBACK_ARGS) {
 void opt_message_cb(CALLBACK_ARGS) {
   WID->create_message_window();
 }
+void opt_message_clear_cb(CALLBACK_ARGS) {
+  WID->clear_message();
+}
 void opt_message_save_cb(CALLBACK_ARGS) {
   char *newfile;
-  if((newfile = fl_file_chooser("Save Log", "*", NULL)))
+  if((newfile = fl_file_chooser("Save Messages", "*", NULL)))
     WID->save_message(newfile); 
 }
 
 // Help Menu
 
 void help_short_cb(CALLBACK_ARGS){
-  WID->create_help_window();
+  Msg(DIRECT, "");
+  Msg(DIRECT, "Mouse:");
+  Msg(DIRECT, "");
+  Msg(DIRECT, "  move          - highlight the elementary geometrical entity");
+  Msg(DIRECT, "                  currently under the mouse pointer and display");
+  Msg(DIRECT, "                  its properties in the status bar");
+  Msg(DIRECT, "                - size a rubber zoom started with (Ctrl+mouse1)");
+  Msg(DIRECT, "  mouse1        - rotate");
+  Msg(DIRECT, "                - accept a rubber zoom started by Ctrl+mouse1"); 
+  Msg(DIRECT, "  Ctrl+mouse1   start (anisotropic) rubber zoom"); 
+  Msg(DIRECT, "  Shift+mouse1  - zoom (isotropic)");
+  Msg(DIRECT, "                - cancel a rubber zoom");
+  Msg(DIRECT, "  mouse2        same as Shift+mouse1");
+  Msg(DIRECT, "  Ctrl+mouse2   orthogonalize display"); 
+  Msg(DIRECT, "  mouse3        - pan");
+  Msg(DIRECT, "                - cancel a rubber zoom");
+  Msg(DIRECT, "                - pop up menu on module name");
+  Msg(DIRECT, "                - pop up menu on post-processing view button");
+  Msg(DIRECT, "  Ctrl+mouse3   reset viewpoint to default");   
+  Msg(DIRECT, "");
+  Msg(DIRECT, "Menu bar shortcuts:");
+  Msg(DIRECT, "");
+  Msg(DIRECT, "  g             go to geometry module");
+  Msg(DIRECT, "  Shift+g       show geometry options");
+  Msg(DIRECT, "  Shift+i       show statistics window"); 
+  Msg(DIRECT, "  m             go to mesh module");
+  Msg(DIRECT, "  Shift+m       show mesh options");
+  Msg(DIRECT, "  Ctrl+m        merge file"); 
+  Msg(DIRECT, "  Shift+o       show general options"); 
+  Msg(DIRECT, "  Ctrl+o        open file"); 
+  Msg(DIRECT, "  p             go to post processor module");
+  Msg(DIRECT, "  Shift+p       show post-processing general options");
+  Msg(DIRECT, "  Ctrl+p        save file by extension");
+  Msg(DIRECT, "  Ctrl+q        quit");
+  Msg(DIRECT, "  Ctrl+s        save mesh");
+  Msg(DIRECT, "");
+  Msg(DIRECT, "Other shortcuts");
+  Msg(DIRECT, "");
+  Msg(DIRECT, "  0 or Esc      reload geometry input file");
+  Msg(DIRECT, "  1 or F1       mesh curves");
+  Msg(DIRECT, "  2 or F2       mesh surfaces");
+  Msg(DIRECT, "  3 or F3       mesh volumes");
+  Msg(DIRECT, "  Alt+a         hide/show small axes"); 
+  Msg(DIRECT, "  Alt+Shift+a   hide/show big moving axes"); 
+  Msg(DIRECT, "  Alt+b         hide/show all post processing scales");
+  Msg(DIRECT, "  Alt+c         alternate between predefined color schemes");
+  Msg(DIRECT, "  Alt+d         alternate between mesh wire frame, hidden lines and shading modes");
+  Msg(DIRECT, "  Alt+f         toggle redraw mode (fast/full)"); 
+  Msg(DIRECT, "  Alt+l         hide/show geometry lines");
+  Msg(DIRECT, "  Alt+Shift+l   hide/show mesh lines");
+  Msg(DIRECT, "  Alt+m         toggle visibility of all mesh entities");
+  Msg(DIRECT, "  Alt+o         change projection mode");
+  Msg(DIRECT, "  Alt+p         hide/show geometry points");
+  Msg(DIRECT, "  Alt+Shift+p   hide/show mesh points");
+  Msg(DIRECT, "  s             increase animation delay");
+  Msg(DIRECT, "  Shift+s       decrease animation delay");
+  Msg(DIRECT, "  Alt+s         hide/show geometry surfaces");
+  Msg(DIRECT, "  Alt+Shift+s   hide/show mesh surfaces");
+  Msg(DIRECT, "  Alt+t         alternate intervals mode for all post-processing views"); 
+  Msg(DIRECT, "  Alt+v         hide/show geometry volumes");
+  Msg(DIRECT, "  Alt+Shift+v   hide/show mesh volumes");
+  Msg(DIRECT, "  Alt+x         set X view"); 
+  Msg(DIRECT, "  Alt+y         set Y view"); 
+  Msg(DIRECT, "  Alt+z         set Z view"); 
+  Msg(DIRECT, "");
+  WID->create_message_window();
+}
+void help_command_line_cb(CALLBACK_ARGS){
+  Msg(DIRECT, "");
+  Print_Options("gmsh");
+  WID->create_message_window();
 }
 void help_about_cb(CALLBACK_ARGS){
   WID->create_about_window();
@@ -993,41 +1018,17 @@ void mesh_define_cb(CALLBACK_ARGS){
   WID->set_context(menu_mesh_define, 0);
 }
 void mesh_1d_cb(CALLBACK_ARGS){
-#ifdef _USETHREADS
-  if(CTX.threads){
-    XtSetSensitive(WID.G.Butt[6], 1);
-    CTX.mesh.draw = 0; CTX.threads_lock = 1 ; MeshDim = 1 ; 
-    pthread_create(&MeshThread, NULL, StartMeshThread, NULL);
-  }
-  else
-#endif
-    mai3d(&M, 1); 
+  mai3d(&M, 1); 
   Draw();
   Msg(STATUS3N,"Ready");
 }
 void mesh_2d_cb(CALLBACK_ARGS){
-#ifdef _USETHREADS
-  if(CTX.threads){
-    XtSetSensitive(WID.G.Butt[6], 1);
-    CTX.mesh.draw = 0; CTX.threads_lock = 1 ; MeshDim = 2 ; 
-    pthread_create(&MeshThread, NULL, StartMeshThread, NULL);
-  }
-  else
-#endif
-    mai3d(&M, 2);
+  mai3d(&M, 2);
   Draw();
   Msg(STATUS3N,"Ready");
 } 
 void mesh_3d_cb(CALLBACK_ARGS){
-#ifdef _USETHREADS
-  if(CTX.threads){
-    XtSetSensitive(WID.G.Butt[6], 1);
-    CTX.mesh.draw = 0; CTX.threads_lock = 1 ; MeshDim = 3 ; 
-    pthread_create(&MeshThread, NULL, StartMeshThread, NULL);
-  }
-  else
-#endif
-    mai3d(&M, 3); 
+  mai3d(&M, 3); 
   Draw();
   Msg(STATUS3N,"Ready");
 } 
@@ -1195,18 +1196,18 @@ void mesh_define_transfinite_volume_cb(CALLBACK_ARGS){
 // Dynamic Post Menus
 
 void view_toggle_cb(CALLBACK_ARGS){
-  if(!Post_ViewList) return;
-
-  Post_View  *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  opt_view_visible((int)data, GMSH_SET, WID->m_toggle_butt[(int)data]->value());
+  Draw();
+}
 
-  Msg(DEBUG1, "View %d", v->Num);
-  Msg(DEBUG2, "  -> Name '%s'", v->Name);
-  Msg(DEBUG2, "  -> FileName '%s'", v->FileName);
-  Msg(DEBUG2, "  -> DuplicateOf %d", v->DuplicateOf);
-  Msg(DEBUG3, "  -> Links %d", v->Links);
+static int RELOAD_ALL_VIEWS = 0 ;
 
-  v->Visible = !v->Visible;
-  
+void view_reload_all_cb(CALLBACK_ARGS) {
+  if(!Post_ViewList) return;
+  RELOAD_ALL_VIEWS = 1;
+  for(int i = 0 ; i<List_Nbr(Post_ViewList) ; i++)
+    view_reload_cb(NULL, (void *)i);
+  RELOAD_ALL_VIEWS = 0;
   Draw();
 }
 
@@ -1233,14 +1234,28 @@ void view_reload_cb(CALLBACK_ARGS){
     Draw();
 }
 
+static int REMOVE_ALL_VIEWS = 0 ;
+
+void view_remove_all_cb(CALLBACK_ARGS) {
+  if(!Post_ViewList) return;
+  REMOVE_ALL_VIEWS = 1;
+  while(List_Nbr(Post_ViewList))
+    view_remove_cb(NULL, (void*)0);
+  REMOVE_ALL_VIEWS = 0;
+  Draw();
+}
+
 void view_remove_cb(CALLBACK_ARGS){
-  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
-  FreeView(v);
+  int i, play=0;
 
-  if(!List_Suppress(Post_ViewList, v, fcmpPostViewNum))
-    Msg(GERROR, "Could Not Suppress View from List");
+  FreeView((int)data);
 
-  CTX.post.nb_views = List_Nbr(Post_ViewList);
+  for(i=0 ; i<List_Nbr(Post_ViewList) ; i++)
+    if(((Post_View*)List_Pointer(Post_ViewList,i))->NbTimeStep > 1){
+      play = 1 ; 
+      break ;
+    }
+  if(!play) WID->g_status_butt[5]->deactivate();
 
   if(WID->get_context() == 2)
     WID->set_context(menu_post, 0);  
@@ -1249,12 +1264,24 @@ void view_remove_cb(CALLBACK_ARGS){
     Draw();
 }
 
-void view_duplicate_cb(CALLBACK_ARGS){
+void view_save_ascii_cb(CALLBACK_ARGS){
+  char *newfile;
+  if((newfile = fl_file_chooser("Save View in ASCII Format", "*", NULL)))
+    Write_View(0, (Post_View*)List_Pointer(Post_ViewList,(int)data), newfile); 
+}
+
+void view_save_binary_cb(CALLBACK_ARGS){
+  char *newfile;
+  if((newfile = fl_file_chooser("Save View in Binary Format", "*", NULL)))
+    Write_View(1, (Post_View*)List_Pointer(Post_ViewList,(int)data), newfile); 
+}
+
+static void _duplicate_view(int num, int options){
   Post_View  v, *v1, *v2, *v3 ;
 
   if(!Post_ViewList) return;
 
-  v1 = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  v1 = (Post_View*)List_Pointer(Post_ViewList,num);
 
   BeginView(0, 0);
   EndView(0, 0, v1->FileName, v1->Name);
@@ -1295,39 +1322,23 @@ void view_duplicate_cb(CALLBACK_ARGS){
   v2->Max         = v1->Max;      
   v2->NbTimeStep  = v1->NbTimeStep;
 
-  CopyViewOptions(v1, v2);
+  if(options) CopyViewOptions(v1, v2);
   AddViewInUI(List_Nbr(Post_ViewList), v2->Name, v2->Num);
   Draw();
 }
-
-#define STARTVIEWMOD					\
-  Post_View *v;						\
-  int i;						\
-  for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){		\
-    v = (Post_View*)List_Pointer(Post_ViewList, i);	\
-    if(CTX.post.link == 2 ||				\
-       (CTX.post.link == 1 && v->Visible) ||		\
-       (CTX.post.link == 0 && i == WID->view_number)){
-
-#define ENDVIEWMOD				\
-    }						\
-  }
-
-void view_lighting_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    v->Light = !v->Light;
-    v->Changed = 1;
-  ENDVIEWMOD
-  Draw() ;
+void view_duplicate_cb(CALLBACK_ARGS){
+  _duplicate_view((int)data,0);
 }
-void view_elements_cb(CALLBACK_ARGS){
-  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
-  v->ShowElement = !v->ShowElement;
-  v->Changed = 1;
-  Draw() ;
+void view_duplicate_with_options_cb(CALLBACK_ARGS){
+  _duplicate_view((int)data,1);
 }
+
 void view_applybgmesh_cb(CALLBACK_ARGS){
   Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  if(!v->ScalarOnly){
+    Msg(GERROR, "Background mesh generation impossible with non-scalar view");
+    return;
+  }
   BGMWithView(v); 
 }
 void view_options_cb(CALLBACK_ARGS){
@@ -1335,7 +1346,7 @@ void view_options_cb(CALLBACK_ARGS){
 }
 
 void view_options_custom_cb(CALLBACK_ARGS){
-  if(WID->view_butt[3]->value()){
+  if(WID->view_butt[0]->value()){
     WID->view_value[0]->activate();
     WID->view_value[1]->activate();
   }
@@ -1346,120 +1357,128 @@ void view_options_custom_cb(CALLBACK_ARGS){
 }
 
 void view_options_timestep_cb(CALLBACK_ARGS){
-  int ii = (int)((Fl_Value_Input*)w)->value();
-  STARTVIEWMOD
-    if(ii>=0 && ii<v->NbTimeStep){
-      v->TimeStep = ii ;
-      v->Changed = 1;
+  int links = (int)opt_post_link(0, GMSH_GET, 0);
+  for(int i=0 ; i<List_Nbr(Post_ViewList) ; i++){
+    if((links == 2) ||
+       (links == 1 && opt_view_visible(i, GMSH_GET, 0)) ||
+       (links == 0 && i == (int)data)){
+      opt_view_timestep(i, GMSH_SET, (int)((Fl_Value_Input*)w)->value());
     }
-  ENDVIEWMOD
+  }
   Draw();
 }
 
 void view_options_ok_cb(CALLBACK_ARGS){
-  STARTVIEWMOD
-    opt_view_show_scale(i, GMSH_SET, WID->view_butt[0]->value());
-    opt_view_show_time(i, GMSH_SET, WID->view_butt[1]->value());
-    opt_view_transparent_scale(i, GMSH_SET, WID->view_butt[2]->value());
-    opt_view_range_type(i, GMSH_SET, WID->view_butt[3]->value()?DRAW_POST_CUSTOM:DRAW_POST_DEFAULT);
-    opt_view_scale_type(i, GMSH_SET, WID->view_butt[4]->value()?DRAW_POST_LINEAR:DRAW_POST_LOGARITHMIC);
-    opt_view_intervals_type(i, GMSH_SET, 
-			    WID->view_butt[6]->value()?DRAW_POST_ISO:
-			    WID->view_butt[7]->value()?DRAW_POST_DISCRETE:
-			    WID->view_butt[8]->value()?DRAW_POST_CONTINUOUS:
-			    DRAW_POST_NUMERIC);
-    opt_view_arrow_type(i, GMSH_SET, 
-			WID->view_butt[10]->value()?DRAW_POST_SEGMENT:
-			WID->view_butt[11]->value()?DRAW_POST_ARROW:
-			WID->view_butt[12]->value()?DRAW_POST_CONE:
-			DRAW_POST_DISPLACEMENT);
-    opt_view_arrow_location(i, GMSH_SET, 
-			    WID->view_butt[14]->value()?DRAW_POST_LOCATE_COG:
-			    DRAW_POST_LOCATE_VERTEX);
-
-    opt_view_custom_min(i, GMSH_SET, WID->view_value[0]->value());
-    opt_view_custom_max(i, GMSH_SET, WID->view_value[1]->value());
-    opt_view_nb_iso(i, GMSH_SET, WID->view_value[2]->value());
-    opt_view_offset0(i, GMSH_SET, WID->view_value[3]->value());
-    opt_view_offset1(i, GMSH_SET, WID->view_value[4]->value());
-    opt_view_offset2(i, GMSH_SET, WID->view_value[5]->value());
-    opt_view_raise0(i, GMSH_SET, WID->view_value[6]->value());
-    opt_view_raise1(i, GMSH_SET, WID->view_value[7]->value());
-    opt_view_raise2(i, GMSH_SET, WID->view_value[8]->value());
-    opt_view_timestep(i, GMSH_SET, WID->view_value[9]->value());
-    opt_view_arrow_scale(i, GMSH_SET, WID->view_value[10]->value());
-
-    opt_view_name(i, GMSH_SET, (char*)WID->view_input[0]->value());
-    opt_view_format(i, GMSH_SET, (char*)WID->view_input[1]->value());
-    v->Changed = 1;
-  ENDVIEWMOD
+  int links = (int)opt_post_link(0, GMSH_GET, 0);
+  for(int i=0 ; i<List_Nbr(Post_ViewList) ; i++){
+    if((links == 2) ||
+       (links == 1 && opt_view_visible(i, GMSH_GET, 0)) ||
+       (links == 0 && i == (int)data)){
+      opt_view_range_type(i, GMSH_SET, 
+			  WID->view_butt[0]->value()?DRAW_POST_CUSTOM:
+			  DRAW_POST_DEFAULT);
+      opt_view_scale_type(i, GMSH_SET, 
+			  WID->view_butt[1]->value()?DRAW_POST_LINEAR:
+			  DRAW_POST_LOGARITHMIC);
+      opt_view_intervals_type(i, GMSH_SET, 
+			      WID->view_butt[3]->value()?DRAW_POST_ISO:
+			      WID->view_butt[4]->value()?DRAW_POST_DISCRETE:
+			      WID->view_butt[5]->value()?DRAW_POST_CONTINUOUS:
+			      DRAW_POST_NUMERIC);
+      opt_view_arrow_type(i, GMSH_SET, 
+			  WID->view_butt[7]->value()?DRAW_POST_SEGMENT:
+			  WID->view_butt[8]->value()?DRAW_POST_ARROW:
+			  WID->view_butt[9]->value()?DRAW_POST_CONE:
+			  DRAW_POST_DISPLACEMENT);
+      opt_view_arrow_location(i, GMSH_SET, 
+			      WID->view_butt[11]->value()?DRAW_POST_LOCATE_COG:
+			      DRAW_POST_LOCATE_VERTEX);
+      opt_view_show_element(i, GMSH_SET, WID->view_butt[13]->value());
+      opt_view_show_scale(i, GMSH_SET, WID->view_butt[14]->value());
+      opt_view_show_time(i, GMSH_SET, WID->view_butt[15]->value());
+      opt_view_transparent_scale(i, GMSH_SET, WID->view_butt[16]->value());
+      opt_view_light(i,GMSH_SET,WID->view_butt[17]->value());
+      
+      opt_view_custom_min(i, GMSH_SET, WID->view_value[0]->value());
+      opt_view_custom_max(i, GMSH_SET, WID->view_value[1]->value());
+      opt_view_nb_iso(i, GMSH_SET, WID->view_value[2]->value());
+      opt_view_offset0(i, GMSH_SET, WID->view_value[3]->value());
+      opt_view_offset1(i, GMSH_SET, WID->view_value[4]->value());
+      opt_view_offset2(i, GMSH_SET, WID->view_value[5]->value());
+      opt_view_raise0(i, GMSH_SET, WID->view_value[6]->value());
+      opt_view_raise1(i, GMSH_SET, WID->view_value[7]->value());
+      opt_view_raise2(i, GMSH_SET, WID->view_value[8]->value());
+      opt_view_timestep(i, GMSH_SET, WID->view_value[9]->value());
+      opt_view_arrow_scale(i, GMSH_SET, WID->view_value[10]->value());
+      
+      opt_view_name(i, GMSH_SET, (char*)WID->view_input[0]->value());
+      opt_view_format(i, GMSH_SET, (char*)WID->view_input[1]->value());
+    }
+  }
   Draw();
 }
 
-#undef STARTVIEWMOD
-#undef ENDVIEWMOD
-
 // Contextual windows for geometry
 
 void con_geometry_define_parameter_cb(CALLBACK_ARGS){
-  add_param(WID->get_geometry_parameter(0),
-	    WID->get_geometry_parameter(1),
+  add_param((char*)WID->context_geometry_input[0]->value(),
+	    (char*)WID->context_geometry_input[1]->value(),
 	    CTX.filename);
 }
 
 void con_geometry_define_point_cb(CALLBACK_ARGS){
- strcpy(x_text, WID->get_geometry_point(0));
- strcpy(y_text, WID->get_geometry_point(1));
- strcpy(z_text, WID->get_geometry_point(2));
- strcpy(l_text, WID->get_geometry_point(3));
- add_point(CTX.filename);
- ZeroHighlight(&M);
- Replot();
+  strcpy(x_text, (char*)WID->context_geometry_input[2]->value());
+  strcpy(y_text, WID->context_geometry_input[3]->value());
+  strcpy(z_text, WID->context_geometry_input[4]->value());
+  strcpy(l_text, WID->context_geometry_input[5]->value());
+  add_point(CTX.filename);
+  ZeroHighlight(&M);
+  Replot();
 }
 
 void con_geometry_define_translation_cb(CALLBACK_ARGS){
-  strcpy(tx_text, WID->get_geometry_translation(0));
-  strcpy(ty_text, WID->get_geometry_translation(1));
-  strcpy(tz_text, WID->get_geometry_translation(2));
+  strcpy(tx_text, WID->context_geometry_input[6]->value());
+  strcpy(ty_text, WID->context_geometry_input[7]->value());
+  strcpy(tz_text, WID->context_geometry_input[8]->value());
 }
 
 void con_geometry_define_rotation_cb(CALLBACK_ARGS){
-  strcpy(px_text, WID->get_geometry_rotation(0));
-  strcpy(py_text, WID->get_geometry_rotation(1));
-  strcpy(pz_text, WID->get_geometry_rotation(2));
-  strcpy(ax_text, WID->get_geometry_rotation(3));
-  strcpy(ay_text, WID->get_geometry_rotation(4));
-  strcpy(az_text, WID->get_geometry_rotation(5));
-  strcpy(angle_text, WID->get_geometry_rotation(6));
+  strcpy(px_text, WID->context_geometry_input[9]->value());
+  strcpy(py_text, WID->context_geometry_input[10]->value());
+  strcpy(pz_text, WID->context_geometry_input[11]->value());
+  strcpy(ax_text, WID->context_geometry_input[12]->value());
+  strcpy(ay_text, WID->context_geometry_input[13]->value());
+  strcpy(az_text, WID->context_geometry_input[14]->value());
+  strcpy(angle_text, WID->context_geometry_input[15]->value());
 }
 
 void con_geometry_define_scale_cb(CALLBACK_ARGS){
-  strcpy(dx_text, WID->get_geometry_scale(0));
-  strcpy(dy_text, WID->get_geometry_scale(1));
-  strcpy(dz_text, WID->get_geometry_scale(2));
-  strcpy(df_text, WID->get_geometry_scale(3));
+  strcpy(dx_text, WID->context_geometry_input[16]->value());
+  strcpy(dy_text, WID->context_geometry_input[17]->value());
+  strcpy(dz_text, WID->context_geometry_input[18]->value());
+  strcpy(df_text, WID->context_geometry_input[19]->value());
 }
 
 void con_geometry_define_symmetry_cb(CALLBACK_ARGS){
-  strcpy(sa_text, WID->get_geometry_symmetry(0));
-  strcpy(sb_text, WID->get_geometry_symmetry(1));
-  strcpy(sc_text, WID->get_geometry_symmetry(2));
-  strcpy(sd_text, WID->get_geometry_symmetry(3));
+  strcpy(sa_text, WID->context_geometry_input[20]->value());
+  strcpy(sb_text, WID->context_geometry_input[21]->value());
+  strcpy(sc_text, WID->context_geometry_input[22]->value());
+  strcpy(sd_text, WID->context_geometry_input[23]->value());
 }
 
 
 // Contextual windows for mesh
 
 void con_mesh_define_length_cb(CALLBACK_ARGS){
-  strcpy(char_length_text, WID->get_mesh_length());
+  strcpy(char_length_text, WID->context_mesh_input[0]->value());
 }
 
 void con_mesh_define_transfinite_line_cb(CALLBACK_ARGS){
-  strcpy(trsf_pts_text, WID->get_mesh_transfinite_line(0));
-  strcpy(trsf_type_text, WID->get_mesh_transfinite_line(1));
+  strcpy(trsf_pts_text, WID->context_mesh_input[1]->value());
+  strcpy(trsf_type_text, WID->context_mesh_input[2]->value());
 }
 
 void con_mesh_define_transfinite_volume_cb(CALLBACK_ARGS){
-  strcpy(trsf_vol_text, WID->get_mesh_transfinite_volume());
+  strcpy(trsf_vol_text, WID->context_mesh_input[3]->value());
 }
 
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index e2c90cdc7f7c35abb4bd825d0a5775eb68ef9a41..120e7a18e0f6a498ba5c0bdf6257e0dc846ae71a 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -4,12 +4,11 @@
 #define CALLBACK_ARGS   Fl_Widget* w, void* data
 
 int SetGlobalShortcut(int event);
-void MarkAllViewsChanged(int action);
 
 // Common callbacks
 
 void cancel_cb(CALLBACK_ARGS) ;
-void ok_cb(CALLBACK_ARGS) ;
+void color_cb(CALLBACK_ARGS) ;
 
 // Graphical window
 
@@ -22,7 +21,8 @@ void status_cancel_cb(CALLBACK_ARGS) ;
 
 void file_open_cb(CALLBACK_ARGS) ;
 void file_merge_cb(CALLBACK_ARGS) ;
-void file_save_cb(CALLBACK_ARGS) ;
+void file_save_mesh_cb(CALLBACK_ARGS) ;
+void file_save_options_cb(CALLBACK_ARGS) ;
 void file_save_as_auto_cb(CALLBACK_ARGS) ;
 void file_save_as_geo_cb(CALLBACK_ARGS) ;
 void file_save_as_geo_options_cb(CALLBACK_ARGS) ;
@@ -37,25 +37,26 @@ void file_save_as_gif_dithered_cb(CALLBACK_ARGS) ;
 void file_save_as_gif_transparent_cb(CALLBACK_ARGS) ;
 void file_save_as_ppm_cb(CALLBACK_ARGS) ;
 void file_save_as_yuv_cb(CALLBACK_ARGS) ;
-void file_reload_all_views_cb(CALLBACK_ARGS) ;
-void file_remove_all_views_cb(CALLBACK_ARGS) ;
 void file_quit_cb(CALLBACK_ARGS) ;
 
 // Option General Menu
 
 void opt_general_cb(CALLBACK_ARGS) ;
+void opt_general_color_scheme_cb(CALLBACK_ARGS) ;
 void opt_general_ok_cb(CALLBACK_ARGS) ;
 
 // Option Geometry Menu
 
 void opt_geometry_cb(CALLBACK_ARGS) ;
 void opt_geometry_show_by_entity_num_cb(CALLBACK_ARGS) ;
+void opt_geometry_color_scheme_cb(CALLBACK_ARGS) ;
 void opt_geometry_ok_cb(CALLBACK_ARGS) ;
 
 // Option Mesh Menu
 
 void opt_mesh_cb(CALLBACK_ARGS) ;
 void opt_mesh_show_by_entity_num_cb(CALLBACK_ARGS) ;
+void opt_mesh_color_scheme_cb(CALLBACK_ARGS) ;
 void opt_mesh_ok_cb(CALLBACK_ARGS) ;
 
 // Option Post Menu
@@ -71,11 +72,13 @@ void opt_statistics_update_cb(CALLBACK_ARGS) ;
 // Option Message Menu
 
 void opt_message_cb(CALLBACK_ARGS) ;
+void opt_message_clear_cb(CALLBACK_ARGS) ;
 void opt_message_save_cb(CALLBACK_ARGS) ;
 
 // Help Menu
 
 void help_short_cb(CALLBACK_ARGS) ;
+void help_command_line_cb(CALLBACK_ARGS) ;
 void help_about_cb(CALLBACK_ARGS) ;
 
 // Module Menu
@@ -179,10 +182,15 @@ void con_mesh_define_transfinite_volume_cb(CALLBACK_ARGS) ;
 
 // Dynamic post menus
 
-void view_reload_cb(CALLBACK_ARGS) ;
 void view_toggle_cb(CALLBACK_ARGS) ;
+void view_reload_cb(CALLBACK_ARGS) ;
+void view_reload_all_cb(CALLBACK_ARGS) ;
 void view_remove_cb(CALLBACK_ARGS) ;
+void view_remove_all_cb(CALLBACK_ARGS) ;
+void view_save_ascii_cb(CALLBACK_ARGS) ;
+void view_save_binary_cb(CALLBACK_ARGS) ;
 void view_duplicate_cb(CALLBACK_ARGS) ;
+void view_duplicate_with_options_cb(CALLBACK_ARGS) ;
 void view_lighting_cb(CALLBACK_ARGS) ;
 void view_elements_cb(CALLBACK_ARGS) ;
 void view_applybgmesh_cb(CALLBACK_ARGS) ;
diff --git a/Fltk/Colorbar_Window.cpp b/Fltk/Colorbar_Window.cpp
index 0fbdab8b0817401db6814bc4eb7fc8b82089f8e4..34f29434290645202ebc38019a6b3b80d6c071da 100644
--- a/Fltk/Colorbar_Window.cpp
+++ b/Fltk/Colorbar_Window.cpp
@@ -1,4 +1,4 @@
-// $Id: Colorbar_Window.cpp,v 1.7 2001-02-05 14:20:14 geuzaine Exp $
+// $Id: Colorbar_Window.cpp,v 1.8 2001-02-17 22:02:17 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -145,7 +145,7 @@ void Colorbar_Window::redraw_range(int a, int b){
    y2 = intensity_to_y(0); 
 
    // erase region
-   fl_color(FL_BLACK);
+   fl_color(color_bg);
    fl_rectf(x1, y1, x2-x1+1, y2-y1+1);
 
    // redraw region of entries in interval [a,b]
@@ -217,7 +217,7 @@ void Colorbar_Window::redraw_range(int a, int b){
      x = index_to_x(i);
      y = intensity_to_y(UNPACK_ALPHA(ct->table[i]));
      if (i!=a){
-       fl_color(FL_WHITE);
+       fl_color(contrast(FL_BLACK,color_bg));
        fl_line(px,py,x,y);
      }
      px = x;  py = y;
@@ -238,7 +238,7 @@ void Colorbar_Window::redraw_range(int a, int b){
 
    // print colortable mode and help
    fl_font(FL_HELVETICA, font_height);
-   fl_color(FL_WHITE);
+   fl_color(contrast(FL_BLACK,color_bg));
    if (help_flag){
      int i=0, xx=13*font_height;
      fl_draw("1, 2, ..., 6", 10,10+(i+1)*font_height); 
@@ -259,8 +259,8 @@ void Colorbar_Window::redraw_range(int a, int b){
      fl_draw(    "move or rotate colormap", xx,10+(i+1)*font_height); i++;
      fl_draw("up, down", 10,10+(i+1)*font_height); 
      fl_draw(    "modify color curvature", xx,10+(i+1)*font_height); i++;
-     fl_draw("Ctrl+up, Ctrl+down", 10,10+(i+1)*font_height); 
-     fl_draw(    "modify alpha curvature", xx,10+(i+1)*font_height); i++;
+     //fl_draw("Ctrl+up, Ctrl+down", 10,10+(i+1)*font_height); 
+     //fl_draw(    "modify alpha curvature", xx,10+(i+1)*font_height); i++;
      fl_draw("i, Ctrl+i", 10,10+(i+1)*font_height); 
      fl_draw(    "invert x or y range", xx,10+(i+1)*font_height); i++;
      fl_draw("b, Ctrl+b", 10,10+(i+1)*font_height); 
@@ -288,12 +288,12 @@ void Colorbar_Window::redraw_marker(){
   y0 = marker_y;
   y1 = h() - 1;
   
-  fl_color(FL_BLACK);
+  fl_color(color_bg);
   fl_rectf(0, y0, w(), y1-y0+1);
   
   // draw marker below color wedge
   x = index_to_x(marker_pos);
-  fl_color(FL_WHITE);   
+  fl_color(contrast(FL_BLACK,color_bg));   
   fl_line(x, marker_y, x, marker_y+marker_height);
   fl_line(x, marker_y, x-3, marker_y+6);
   fl_line(x, marker_y, x+3, marker_y+6);
@@ -308,11 +308,13 @@ void Colorbar_Window::redraw_marker(){
 // Draw everything
 
 void Colorbar_Window::draw(){
-  Fl_Window::draw();
   if(ct){
     label_y = h() - 5; 
     marker_y = label_y - marker_height - font_height;
     wedge_y = marker_y - wedge_height;
+    color_bg = fl_color_cube(UNPACK_RED(CTX.color.bg)*FL_NUM_RED/256,
+			     UNPACK_GREEN(CTX.color.bg)*FL_NUM_GREEN/256,
+			     UNPACK_BLUE(CTX.color.bg)*FL_NUM_BLUE/256);
     redraw_range(0, ct->size-1);
     redraw_marker();
   }
diff --git a/Fltk/Colorbar_Window.h b/Fltk/Colorbar_Window.h
index d74ca3e9189dbe142bdbd42f92f995c778212fb3..5bcf210bdb09c514ea13d33ec22ade68096ac3c6 100644
--- a/Fltk/Colorbar_Window.h
+++ b/Fltk/Colorbar_Window.h
@@ -28,6 +28,8 @@ class Colorbar_Window : public Fl_Window {
   ColorTable *ct;  // pointer to the color table (allocated in Post_View)
   int *viewchanged;// pointer to changed bit in view
 
+  Fl_Color color_bg;
+
 public:
 
   Colorbar_Window(int x,int y,int w,int h,const char *l=0);
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index d8dfc81bab817cb492fa8cbfdaa9750a735f783a..5b963666b4cd99cef3a3b6b92b05ea1546efd712 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.45 2001-02-16 20:16:40 remacle Exp $
+// $Id: GUI.cpp,v 1.46 2001-02-17 22:02:17 geuzaine Exp $
 
 // To make the interface as visually consistent as possible, please:
 // - use the BH, BW, WB, IW values for button heights/widths, window borders, etc.
@@ -19,6 +19,8 @@
 #include "Bitmaps.h"
 #include "GetOptions.h"
 
+#define WINDOW_BOX FL_FLAT_BOX
+
 extern Context_T  CTX;
 
 //******************* Definition of the static menus ***********************************
@@ -26,12 +28,13 @@ extern Context_T  CTX;
 Fl_Menu_Item m_menubar_table[] = {
   {"File", 0, 0, 0, FL_SUBMENU},
     {"Open...",          FL_CTRL+'o', (Fl_Callback *)file_open_cb, 0},
-    {"Merge...",         FL_CTRL+'m', (Fl_Callback *)file_merge_cb, 0, FL_MENU_DIVIDER},
-    {"Save",             FL_CTRL+'s', (Fl_Callback *)file_save_cb, 0},
+    {"Merge...",         FL_CTRL+'m', (Fl_Callback *)file_merge_cb, 0},
+    {"Save Mesh",        FL_CTRL+'s', (Fl_Callback *)file_save_mesh_cb, 0},
+    {"Save Options",     0,           (Fl_Callback *)file_save_options_cb, 0},
     {"Save As",          0, 0, 0, FL_MENU_DIVIDER|FL_SUBMENU},
       {"By extension...",      FL_CTRL+'p', (Fl_Callback *)file_save_as_auto_cb, 0},
-      {"GEO...",               0, (Fl_Callback *)file_save_as_geo_cb, 0},
-      {"GEO options...",       0, (Fl_Callback *)file_save_as_geo_options_cb, 0},
+      {"GEO complete options...",  0, (Fl_Callback *)file_save_as_geo_options_cb, 0},
+      {"GEO flattened...",     0, (Fl_Callback *)file_save_as_geo_cb, 0},
       {"MSH...",               0, (Fl_Callback *)file_save_as_msh_cb, 0},
       {"UNV...",               0, (Fl_Callback *)file_save_as_unv_cb, 0},
       {"GREF...",              0, (Fl_Callback *)file_save_as_gref_cb, 0},
@@ -44,8 +47,6 @@ Fl_Menu_Item m_menubar_table[] = {
       {"PPM...",               0, (Fl_Callback *)file_save_as_ppm_cb, 0},
       {"UCB YUV...",           0, (Fl_Callback *)file_save_as_yuv_cb, 0},
       {0},
-    {"Reload All Views", FL_CTRL+'l', (Fl_Callback *)file_reload_all_views_cb, 0},
-    {"Remove All Views", FL_CTRL+'r', (Fl_Callback *)file_remove_all_views_cb, 0, FL_MENU_DIVIDER},
     {"Quit",             FL_CTRL+'q', (Fl_Callback *)file_quit_cb, 0},
     {0},
   {"Options",0,0,0,FL_SUBMENU},
@@ -57,8 +58,9 @@ Fl_Menu_Item m_menubar_table[] = {
     {"Message log...",     FL_SHIFT+'l', (Fl_Callback *)opt_message_cb, 0},
     {0},
   {"Help",0,0,0,FL_SUBMENU},
-    {"Short Help...",   0, (Fl_Callback *)help_short_cb, 0, FL_MENU_DIVIDER},
-    {"About...",        0, (Fl_Callback *)help_about_cb, 0},
+    {"Shortcuts...",             0, (Fl_Callback *)help_short_cb, 0},
+    {"Command line options...",  0, (Fl_Callback *)help_command_line_cb, 0},
+    {"About...",                 0, (Fl_Callback *)help_about_cb, 0},
     {0},
   {0}
 };
@@ -239,10 +241,11 @@ Context_Item menu_post[] =
 //********************** Definition of global shortcuts ********************************
 
 int GUI::global_shortcuts(int event){
+  int i, j;
+
   // we only handle shortcuts here
   if(event != FL_SHORTCUT) return 0 ;
 
-
   if(Fl::test_shortcut('0') || Fl::test_shortcut(FL_Escape)){
     geometry_reload_cb(0,0);
     return 1;
@@ -308,19 +311,13 @@ int GUI::global_shortcuts(int event){
   }
   else if(Fl::test_shortcut(FL_ALT+'c')){
     opt_general_color_scheme(0,GMSH_SET|GMSH_GUI,opt_general_color_scheme(0,GMSH_GET,0)+1);
+    opt_geometry_color_scheme(0,GMSH_SET|GMSH_GUI,opt_geometry_color_scheme(0,GMSH_GET,0)+1);
+    opt_mesh_color_scheme(0,GMSH_SET|GMSH_GUI,opt_mesh_color_scheme(0,GMSH_GET,0)+1);
     redraw_opengl();
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'d')){
-    if(!CTX.mesh.hidden && !CTX.mesh.shade)
-      CTX.mesh.hidden = 1;
-    else if(CTX.mesh.hidden && !CTX.mesh.shade)  
-      CTX.mesh.shade = 1;
-    else{
-      CTX.mesh.hidden = 0; CTX.mesh.shade = 0; 
-    }
-    opt_mesh_hidden(0,GMSH_GUI,0);
-    opt_mesh_shade(0,GMSH_GUI,0);
+    opt_mesh_aspect(0,GMSH_SET|GMSH_GUI,opt_mesh_aspect(0,GMSH_GET,0)+1);
     redraw_opengl();
     return 1;
   }
@@ -395,12 +392,17 @@ int GUI::global_shortcuts(int event){
     return 1;
   }
   else if(Fl::test_shortcut(FL_ALT+'t')){
-    MarkAllViewsChanged(1);
-    opt_view_intervals_type(view_number, GMSH_GUI, 0);
+    for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){
+      j = (int)opt_view_intervals_type(i, GMSH_GET, 0);
+      opt_view_intervals_type(i, GMSH_SET|GMSH_GUI, 
+			      (j == DRAW_POST_ISO) ? DRAW_POST_DISCRETE :
+			      (j == DRAW_POST_DISCRETE) ? DRAW_POST_CONTINUOUS :
+			      DRAW_POST_ISO);
+    }
     redraw_opengl();
     return 1;
   }
-
+  
 
   return 0;
 }
@@ -414,8 +416,8 @@ GUI::GUI(int argc, char **argv) {
   BW = 3*IW/2; // width of a button with external label
   BB = 5*CTX.fontsize; // width of a button with internal label
   BH = 2*CTX.fontsize+2; // button height
-  WB = CTX.fontsize-6; // window border
-
+  WB = 4; // window border
+  
   init_menu_window = 0;
   init_graphic_window = 0;
   init_general_options_window = 0;
@@ -424,7 +426,6 @@ GUI::GUI(int argc, char **argv) {
   init_post_options_window = 0;
   init_statistics_window = 0;
   init_message_window = 0;
-  init_help_window = 0;
   init_about_window = 0;
   init_view_window = 0;
   init_geometry_context_window = 0;
@@ -442,7 +443,7 @@ GUI::GUI(int argc, char **argv) {
 
   // All static windows are contructed (even if some are not
   // displayed) since the shortcuts should be valid even for hidden
-  // windows
+  // windows, and we don't want to test for widget existence every time
 
   create_menu_window(argc, argv);
   create_graphic_window(argc, argv);
@@ -466,7 +467,6 @@ GUI::GUI(int argc, char **argv) {
   create_post_options_window();
   create_view_options_window(-1);
   create_message_window();
-  create_help_window();
   create_about_window();
 
   // Draw the scene
@@ -505,7 +505,7 @@ void GUI::create_menu_window(int argc, char **argv){
     MH = 2*BH+6 ; // this is the initial height: no dynamic button is shown!
 
     m_window = new Fl_Window(width,MH);
-    m_window->box(FL_THIN_UP_BOX);
+    m_window->box(WINDOW_BOX);
     m_window->label("Gmsh");
     m_window->callback(file_quit_cb);
 
@@ -548,16 +548,22 @@ void GUI::create_menu_window(int argc, char **argv){
       m_toggle_butt[i]->hide();
       m_popup_butt[i] = new Fl_Menu_Button(0,y+i*BH,width,BH);
       m_popup_butt[i]->type(Fl_Menu_Button::POPUP3);
-      m_popup_butt[i]->add("Reload", 0, 
+      m_popup_butt[i]->add("Reload/View", 0, 
 			   (Fl_Callback *)view_reload_cb, (void*)i, 0);
-      m_popup_butt[i]->add("Remove", 0, 
+      m_popup_butt[i]->add("Reload/All Views", 0, 
+			   (Fl_Callback *)view_reload_all_cb, (void*)i, 0);
+      m_popup_butt[i]->add("Remove/View", 0, 
 			   (Fl_Callback *)view_remove_cb, (void*)i, 0);
-      m_popup_butt[i]->add("Duplicate", 0,
-			   (Fl_Callback *)view_duplicate_cb, (void*)i, FL_MENU_DIVIDER) ;
-      m_popup_butt[i]->add("Lighting", 0,
-			   (Fl_Callback *)view_lighting_cb, (void*)i, 0);
-      m_popup_butt[i]->add("Show Elements", 0,
-			   (Fl_Callback *)view_elements_cb, (void*)i, 0);
+      m_popup_butt[i]->add("Remove/All Views", 0, 
+			   (Fl_Callback *)view_remove_all_cb, (void*)i, 0);
+      m_popup_butt[i]->add("Duplicate/View without Options", 0,
+			   (Fl_Callback *)view_duplicate_cb, (void*)i, 0) ;
+      m_popup_butt[i]->add("Duplicate/View with Options", 0,
+			   (Fl_Callback *)view_duplicate_with_options_cb, (void*)i, 0) ;
+      m_popup_butt[i]->add("Save as/ASCII View...", 0,
+			   (Fl_Callback *)view_save_ascii_cb, (void*)i, 0) ;
+      m_popup_butt[i]->add("Save as/Binary View...", 0,
+			   (Fl_Callback *)view_save_binary_cb, (void*)i, 0) ;
       m_popup_butt[i]->add("Apply as Background Mesh", 0,
 			   (Fl_Callback *)view_applybgmesh_cb, (void*)i, FL_MENU_DIVIDER);
       m_popup_butt[i]->add("Options...", 0,
@@ -723,19 +729,17 @@ void GUI::create_graphic_window(int argc, char **argv){
       g_status_butt[3]->callback(status_xyz1p_cb, (void*)3);
       g_status_butt[4] = new Fl_Button(x,glheight+2,sw,sh-4,"?"); x+=sw;
       g_status_butt[4]->callback(status_xyz1p_cb, (void*)4);
-
       g_status_butt[5] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw;
       g_status_butt[5]->callback(status_play_cb);
       start_bmp = new Fl_Bitmap(start_bits,start_width,start_height);
       start_bmp->label(g_status_butt[5]);
       stop_bmp = new Fl_Bitmap(stop_bits,stop_width,stop_height);
-
+      g_status_butt[5]->deactivate();
       g_status_butt[6] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw;
       g_status_butt[6]->callback(status_cancel_cb);
       abort_bmp = new Fl_Bitmap(abort_bits,abort_width,abort_height);
       abort_bmp->label(g_status_butt[6]);
       g_status_butt[6]->deactivate();
-
       for(i = 0 ; i<7 ; i++){
 	g_status_butt[i]->box(FL_FLAT_BOX);
 	g_status_butt[i]->selection_color(FL_WHITE);
@@ -774,15 +778,6 @@ void GUI::set_size(int new_w, int new_h){
   g_window->size(new_w,new_h+g_window->h()-g_opengl_window->h());
 }
 
-// Get the position of the 2 main windows
-
-void GUI::get_position(int m[2], int g[2]){
-  m[0] = m_window->x();
-  m[1] = m_window->y();
-  g[0] = g_window->x();
-  g[1] = g_window->y();
-}
-
 // Set graphic window title
 
 void GUI::set_title(char *str){
@@ -840,10 +835,10 @@ void GUI::create_general_options_window(){
     init_general_options_window = 1 ;
 
     int width = 25*CTX.fontsize;
-    int height = 5*WB+8*BH ;
+    int height = 5*WB+10*BH ;
     
     gen_window = new Fl_Window(width,height);
-    gen_window->box(FL_THIN_UP_BOX);
+    gen_window->box(WINDOW_BOX);
     gen_window->label("General Options");
     { 
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
@@ -864,13 +859,44 @@ void GUI::create_general_options_window(){
 	}
         o->end();
       }
+      { 
+	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Output");
+	o->labelsize(CTX.fontsize);
+        gen_butt[6] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Print messages on terminal");
+        gen_butt[7] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Save session information on exit");
+        gen_butt[8] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Save options on exit");
+	for(i=6 ; i<9 ; i++){
+	  gen_butt[i]->type(FL_TOGGLE_BUTTON);
+	  gen_butt[i]->down_box(FL_DOWN_BOX);
+	  gen_butt[i]->labelsize(CTX.fontsize);
+	  gen_butt[i]->selection_color(FL_YELLOW);
+	}
+        gen_value[5] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Message verbosity");
+	gen_value[5]->minimum(0); 
+	gen_value[5]->maximum(10); 
+	gen_value[5]->step(1);
+	gen_value[5]->labelsize(CTX.fontsize);
+	gen_value[5]->textsize(CTX.fontsize);
+	gen_value[5]->type(FL_HORIZONTAL);
+	gen_value[5]->align(FL_ALIGN_RIGHT);
+	gen_input[0] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Default file name");
+	gen_input[1] = new Fl_Input(2*WB, 2*WB+6*BH, IW, BH, "Temporary file");
+	gen_input[2] = new Fl_Input(2*WB, 2*WB+7*BH, IW, BH, "Error file");
+	gen_input[3] = new Fl_Input(2*WB, 2*WB+8*BH, IW, BH, "Option file");
+	for(i=0 ; i<4 ; i++){
+	  gen_input[i]->labelsize(CTX.fontsize);
+	  gen_input[i]->textsize(CTX.fontsize);
+	  gen_input[i]->align(FL_ALIGN_RIGHT);
+	}
+        o->end();
+      }
       { 
 	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Projection");
 	o->labelsize(CTX.fontsize);
         o->hide();
-        gen_butt[6] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Orthographic");
-        gen_butt[7] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Perspective");
-	for(i=6 ; i<8 ; i++){
+        gen_butt[9] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Orthographic");
+        gen_butt[10] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Perspective");
+	for(i=9 ; i<11 ; i++){
 	  gen_butt[i]->type(FL_RADIO_BUTTON);
 	  gen_butt[i]->labelsize(CTX.fontsize);
 	  gen_butt[i]->selection_color(FL_YELLOW);
@@ -878,17 +904,43 @@ void GUI::create_general_options_window(){
         o->end();
       }
       { 
-	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Light and color");
+	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
 	o->labelsize(CTX.fontsize);
         o->hide();
         gen_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme");
 	gen_value[0]->minimum(0); 
 	gen_value[0]->maximum(2); 
 	gen_value[0]->step(1);
-	gen_value[1] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Material shininess");
+	gen_value[0]->labelsize(CTX.fontsize);
+	gen_value[0]->textsize(CTX.fontsize);
+	gen_value[0]->type(FL_HORIZONTAL);
+	gen_value[0]->align(FL_ALIGN_RIGHT);
+	gen_value[0]->callback(opt_general_color_scheme_cb);
+
+	Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH);
+	i = 0;
+	while(GeneralOptions_Color[i].str){
+	  gen_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeneralOptions_Color[i].str);
+	  gen_col[i]->callback(color_cb, (void*)GeneralOptions_Color[i].function) ;
+	  gen_col[i]->labelsize(CTX.fontsize);
+	  i++;
+	}
+	s->end();
+	o->end();
+      }
+      { 
+	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Light");
+	o->labelsize(CTX.fontsize);
+        o->hide();
+	gen_value[1] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Material shininess");
 	gen_value[1]->minimum(0); 
 	gen_value[1]->maximum(10);
 	gen_value[1]->step(0.1);
+        gen_butt[11] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Moving light");
+	gen_butt[11]->type(FL_TOGGLE_BUTTON);
+	gen_butt[11]->down_box(FL_DOWN_BOX);
+	gen_butt[11]->labelsize(CTX.fontsize);
+	gen_butt[11]->selection_color(FL_YELLOW);
         gen_value[2] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Light position X");
 	gen_value[2]->minimum(-1); 
 	gen_value[2]->maximum(1);
@@ -901,15 +953,15 @@ void GUI::create_general_options_window(){
 	gen_value[4]->minimum(-1); 
 	gen_value[4]->maximum(1); 
 	gen_value[4]->step(0.01);
-	for(i=0 ; i<5 ; i++){
+	for(i=1 ; i<5 ; i++){
 	  gen_value[i]->labelsize(CTX.fontsize);
+	  gen_value[i]->textsize(CTX.fontsize);
 	  gen_value[i]->type(FL_HORIZONTAL);
 	  gen_value[i]->align(FL_ALIGN_RIGHT);
 	}
         o->end();
       }
       o->end();
-
     }
 
     { 
@@ -925,7 +977,7 @@ void GUI::create_general_options_window(){
 
     if(CTX.center_windows)
       gen_window->position(m_window->x()+m_window->w()/2-width/2,
-			   m_window->y()+2*MH);
+			   m_window->y()+9*BH-height/2);
     gen_window->end();
   }
   else{
@@ -946,11 +998,11 @@ void GUI::create_geometry_options_window(){
   if(!init_geometry_options_window){
     init_geometry_options_window = 1 ;
 
-    int width = 24*CTX.fontsize;
+    int width = 25*CTX.fontsize;
     int height = 5*WB+9*BH ;
     
     geo_window = new Fl_Window(width,height);
-    geo_window->box(FL_THIN_UP_BOX);
+    geo_window->box(WINDOW_BOX);
     geo_window->label("Geometry Options");
     { 
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
@@ -974,6 +1026,7 @@ void GUI::create_geometry_options_window(){
 
         geo_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity number");
 	geo_input->labelsize(CTX.fontsize);
+	geo_input->textsize(CTX.fontsize);
 	geo_input->align(FL_ALIGN_RIGHT);
 	geo_input->callback(opt_geometry_show_by_entity_num_cb);
 	geo_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED);
@@ -988,12 +1041,37 @@ void GUI::create_geometry_options_window(){
 	geo_value[1]->step(0.1);
 	for(i=0 ; i<2 ; i++){
 	  geo_value[i]->labelsize(CTX.fontsize);
+	  geo_value[i]->textsize(CTX.fontsize);
 	  geo_value[i]->type(FL_HORIZONTAL);
 	  geo_value[i]->align(FL_ALIGN_RIGHT);
 	}
-
         o->end();
       }
+      { 
+	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
+	o->labelsize(CTX.fontsize);
+        o->hide();
+        geo_value[2] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme");
+	geo_value[2]->minimum(0); 
+	geo_value[2]->maximum(2); 
+	geo_value[2]->step(1);
+	geo_value[2]->labelsize(CTX.fontsize);
+	geo_value[2]->textsize(CTX.fontsize);
+	geo_value[2]->type(FL_HORIZONTAL);
+	geo_value[2]->align(FL_ALIGN_RIGHT);
+	geo_value[2]->callback(opt_geometry_color_scheme_cb);
+
+	Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH);
+	i = 0;
+	while(GeometryOptions_Color[i].str){
+	  geo_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeometryOptions_Color[i].str);
+	  geo_col[i]->callback(color_cb, (void*)GeometryOptions_Color[i].function) ;
+	  geo_col[i]->labelsize(CTX.fontsize);
+	  i++;
+	}
+	s->end();
+	o->end();
+      }
       o->end();
     }
 
@@ -1010,7 +1088,7 @@ void GUI::create_geometry_options_window(){
 
     if(CTX.center_windows)
       geo_window->position(m_window->x()+m_window->w()/2-width/2,
-			   m_window->y()+2*MH);
+			   m_window->y()+9*BH-height/2);
     geo_window->end();
   }
   else{
@@ -1035,7 +1113,7 @@ void GUI::create_mesh_options_window(){
     int height = 5*WB+9*BH ;
     
     mesh_window = new Fl_Window(width,height);
-    mesh_window->box(FL_THIN_UP_BOX);
+    mesh_window->box(WINDOW_BOX);
     mesh_window->label("Mesh Options");
     { 
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
@@ -1057,12 +1135,12 @@ void GUI::create_mesh_options_window(){
 	mesh_value[0]->maximum(100); 
 	mesh_value[0]->step(1);
         mesh_value[1] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Mesh scaling factor");
-	mesh_value[1]->minimum(0);
-	mesh_value[1]->maximum(100); 
+	mesh_value[1]->minimum(0.001);
+	mesh_value[1]->maximum(1000); 
 	mesh_value[1]->step(0.001);
         mesh_value[2] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Characteristic length scaling factor");
-	mesh_value[2]->minimum(0);
-	mesh_value[2]->maximum(100); 
+	mesh_value[2]->minimum(0.001);
+	mesh_value[2]->maximum(1000); 
 	mesh_value[2]->step(0.001);
         mesh_value[3] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Random perturbation factor");
 	mesh_value[3]->minimum(1.e-6);
@@ -1070,6 +1148,7 @@ void GUI::create_mesh_options_window(){
 	mesh_value[3]->step(1.e-6);
 	for(i = 0 ; i<4 ; i++){
 	  mesh_value[i]->labelsize(CTX.fontsize);
+	  mesh_value[i]->textsize(CTX.fontsize);
 	  mesh_value[i]->type(FL_HORIZONTAL);
 	  mesh_value[i]->align(FL_ALIGN_RIGHT);
 	}
@@ -1094,6 +1173,7 @@ void GUI::create_mesh_options_window(){
 	}
         mesh_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity Number");
 	mesh_input->labelsize(CTX.fontsize);
+	mesh_input->textsize(CTX.fontsize);
 	mesh_input->align(FL_ALIGN_RIGHT);
 	mesh_input->callback(opt_mesh_show_by_entity_num_cb);
 	mesh_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED);
@@ -1108,6 +1188,7 @@ void GUI::create_mesh_options_window(){
 	mesh_value[5]->step(1);
 	for(i=4 ; i<6 ; i++){
 	  mesh_value[i]->labelsize(CTX.fontsize);
+	  mesh_value[i]->textsize(CTX.fontsize);
 	  mesh_value[i]->type(FL_HORIZONTAL);
 	  mesh_value[i]->align(FL_ALIGN_RIGHT);
 	}
@@ -1131,10 +1212,42 @@ void GUI::create_mesh_options_window(){
 	mesh_value[6]->maximum(1);
 	mesh_value[6]->step(0.01);
 	mesh_value[6]->labelsize(CTX.fontsize);
+	mesh_value[6]->textsize(CTX.fontsize);
 	mesh_value[6]->type(FL_HORIZONTAL);
 	mesh_value[6]->align(FL_ALIGN_RIGHT);
         o->end();
       }
+      { 
+	Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
+	o->labelsize(CTX.fontsize);
+        o->hide();
+        mesh_butt[14] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Switch color by geometrical entity");
+	mesh_butt[14]->type(FL_TOGGLE_BUTTON);
+	mesh_butt[14]->down_box(FL_DOWN_BOX);
+	mesh_butt[14]->labelsize(CTX.fontsize);
+	mesh_butt[14]->selection_color(FL_YELLOW);
+	
+        mesh_value[7] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Predefined color scheme");
+	mesh_value[7]->minimum(0); 
+	mesh_value[7]->maximum(2); 
+	mesh_value[7]->step(1);
+	mesh_value[7]->labelsize(CTX.fontsize);
+	mesh_value[7]->textsize(CTX.fontsize);
+	mesh_value[7]->type(FL_HORIZONTAL);
+	mesh_value[7]->align(FL_ALIGN_RIGHT);
+	mesh_value[7]->callback(opt_mesh_color_scheme_cb);
+
+	Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+3*BH, IW+20, height-3*WB-5*BH);
+	i = 0;
+	while(MeshOptions_Color[i].str){
+	  mesh_col[i] = new Fl_Button(2*WB, 3*WB+(3+i)*BH, IW, BH, MeshOptions_Color[i].str);
+	  mesh_col[i]->callback(color_cb, (void*)MeshOptions_Color[i].function) ;
+	  mesh_col[i]->labelsize(CTX.fontsize);
+	  i++;
+	}
+	s->end();
+	o->end();
+      }
       o->end();
     }
 
@@ -1151,7 +1264,7 @@ void GUI::create_mesh_options_window(){
 
     if(CTX.center_windows)
       mesh_window->position(m_window->x()+m_window->w()/2-width/2,
-			    m_window->y()+2*MH);
+			    m_window->y()+9*BH-height/2);
     mesh_window->end();
   }
   else{
@@ -1177,7 +1290,7 @@ void GUI::create_post_options_window(){
     int height = 5*WB+5*BH ;
     
     post_window = new Fl_Window(width,height);
-    post_window->box(FL_THIN_UP_BOX);
+    post_window->box(WINDOW_BOX);
     post_window->label("Post Processing Options");
     { 
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
@@ -1213,6 +1326,7 @@ void GUI::create_post_options_window(){
 	post_value[0]->maximum(10); 
 	post_value[0]->step(0.01);
 	post_value[0]->labelsize(CTX.fontsize);
+	post_value[0]->textsize(CTX.fontsize);
 	post_value[0]->type(FL_HORIZONTAL);
 	post_value[0]->align(FL_ALIGN_RIGHT);
 	o->end();
@@ -1233,7 +1347,7 @@ void GUI::create_post_options_window(){
 
     if(CTX.center_windows)
       post_window->position(m_window->x()+m_window->w()/2-width/2,
-			    m_window->y()+2*MH);
+			    m_window->y()+9*BH-height/2);
     post_window->end();
   }
   else{
@@ -1258,7 +1372,7 @@ void GUI::create_statistics_window(){
     int height = 5*WB+16*BH ;
     
     stat_window = new Fl_Window(width,height);
-    stat_window->box(FL_THIN_UP_BOX);
+    stat_window->box(WINDOW_BOX);
     stat_window->label("Statistics");
     {
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
@@ -1307,6 +1421,7 @@ void GUI::create_statistics_window(){
 
     for(i=0 ; i<23 ; i++){
       stat_value[i]->labelsize(CTX.fontsize);
+      stat_value[i]->textsize(CTX.fontsize);
       stat_value[i]->type(FL_HORIZONTAL);
       stat_value[i]->align(FL_ALIGN_LEFT);
       stat_value[i]->value(0);
@@ -1325,7 +1440,7 @@ void GUI::create_statistics_window(){
 
     if(CTX.center_windows)
       stat_window->position(m_window->x()+m_window->w()/2-width/2,
-			    m_window->y()+2*MH);
+			    m_window->y()+9*BH-height/2);
     stat_window->end();
     set_statistics();
     stat_window->show();
@@ -1364,11 +1479,9 @@ void GUI::set_statistics(){
   sprintf(label[9], "%g", s[9]); stat_value[9]->value(label[9]);
   sprintf(label[10], "%g", s[10]); stat_value[10]->value(label[10]);
   sprintf(label[11], "%g", s[11]); stat_value[11]->value(label[11]);
-
   sprintf(label[12], "%g", s[12]); stat_value[12]->value(label[12]);
   sprintf(label[13], "%g", s[13]); stat_value[13]->value(label[13]);
   sprintf(label[14], "%g", s[14]); stat_value[14]->value(label[14]);
-
   sprintf(label[15], "%.4g (%.4g->%.4g)", s[17], s[19], s[18]); 
   stat_value[15]->value(label[15]);
   sprintf(label[16], "%.4g (%.4g->%.4g)", s[20], s[22], s[21]); 
@@ -1377,10 +1490,8 @@ void GUI::set_statistics(){
   stat_value[17]->value(label[17]);
 
   // post
-  
   s[15] = List_Nbr(Post_ViewList) ;
   sprintf(label[18], "%g", s[15]);   stat_value[18]->value(label[18]);
-
   s[16] = s[17] = s[18] = s[19] = 0 ;
   for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){
     Post_View *v = (Post_View*)List_Pointer(Post_ViewList, i);
@@ -1408,11 +1519,11 @@ void GUI::create_message_window(){
   if(!init_message_window){
     init_message_window = 1 ;
 
-    int width = 35*CTX.fontsize;
-    int height = 35*CTX.fontsize;
+    int width = CTX.msg_size[0];
+    int height = CTX.msg_size[1];
     
     msg_window = new Fl_Window(width,height);
-    msg_window->box(FL_THIN_UP_BOX);
+    msg_window->box(WINDOW_BOX);
     msg_window->label("Messages");
     
     msg_browser = new Fl_Browser(WB, WB, width-2*WB, height-3*WB-BH);
@@ -1420,10 +1531,15 @@ void GUI::create_message_window(){
     msg_browser->textsize(CTX.fontsize);
 
     { 
-      Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "save");
+      Fl_Return_Button* o = new Fl_Return_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "save");
       o->labelsize(CTX.fontsize);
       o->callback(opt_message_save_cb);
     }
+    { 
+      Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "clear");
+      o->labelsize(CTX.fontsize);
+      o->callback(opt_message_clear_cb);
+    }
     { 
       Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
       o->labelsize(CTX.fontsize);
@@ -1432,9 +1548,7 @@ void GUI::create_message_window(){
 
     msg_window->resizable(msg_browser);
 
-    if(CTX.center_windows)
-      msg_window->position(m_window->x()+m_window->w()/2-width/2,
-			   m_window->y()+2*MH);
+    msg_window->position(CTX.msg_position[0], CTX.msg_position[1]);
     msg_window->end();
   }
   else{
@@ -1451,6 +1565,13 @@ void GUI::add_message(char *msg){
   msg_browser->bottomline(msg_browser->size());
 }
 
+void GUI::clear_message(){
+  for(int i =msg_browser->size() ; i > 0; i--)
+    msg_browser->remove(i);
+  msg_browser->bottomline(msg_browser->size());
+  msg_browser->redraw();
+}
+
 void GUI::save_message(char *name){
   FILE *fp;
 
@@ -1465,94 +1586,62 @@ void GUI::save_message(char *name){
   }
 
   Msg(INFO, "Log Creation Complete '%s'", name);
-  Msg(STATUS2, "Wrote File '%s'", name);
+  Msg(STATUS2, "Wrote '%s'", name);
   fclose(fp);
 }
 
-//***************************** Create the short help window ***************************
-
-#include "Help.h"
-
-void GUI::create_help_window(){
-
-  if(!init_help_window){
-    init_help_window = 1 ;
-
-    int width = 38*CTX.fontsize;
-    int height = 34*CTX.fontsize ;
-    
-    help_window = new Fl_Window(width,height);
-    help_window->box(FL_THIN_UP_BOX);
-    help_window->label("Short Help");
-
-    Fl_Scroll*o = new Fl_Scroll(WB, WB, width-2*WB, height-3*WB-BH);
-    {
-      Fl_Multiline_Output* o = new Fl_Multiline_Output(WB, WB, 2*width, 3*height);
-      o->value(txt_help);
-      o->textfont(FL_COURIER);
-      o->textsize(CTX.fontsize);
-    }
-    o->end();
-    
-    { 
-      Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
-      o->labelsize(CTX.fontsize);
-      o->callback(cancel_cb, (void*)help_window);
-    }
-
-    help_window->resizable(o);
-
-    if(CTX.center_windows)
-      help_window->position(m_window->x()+m_window->w()/2-width/2,
-			    m_window->y()+2*MH);
-    help_window->end();
-  }
-  else{
-    if(help_window->shown())
-      help_window->redraw();
-    else
-      help_window->show();
-    
-  }
-
-}
-
 //******************************* Create the about window ******************************
 
 void GUI::create_about_window(){
+  char buffer[1024];
 
   if(!init_about_window){
     init_about_window = 1 ;
 
     int width = 40*CTX.fontsize;
-    int height = 20*CTX.fontsize;
-    
+    int height = 3*WB+10*BH ;
+
     about_window = new Fl_Window(width,height);
-    about_window->box(FL_THIN_UP_BOX);
+    about_window->box(WINDOW_BOX);
     about_window->label("About Gmsh");
 
-    Fl_Box *o = new Fl_Box(2*WB, WB, about_width, height-2*WB);
-    about_bmp = new Fl_Bitmap(about_bits,about_width,about_height);
-    about_bmp->label(o);
-
-    Fl_Button *o2 = new Fl_Button(WB+80, WB, width-2*WB-80, height-2*WB);
-    static char buffer[1024];
-    sprintf(buffer, "%s\n\n%s%.2f\n%s\n%sFLTK %d.%d.%d\n%s\n%s\n%s\n%s\n%s\n\n%s"
-	    "\n\nType 'gmsh -help' for command line options",
-	    gmsh_progname, gmsh_version, GMSH_VERSION, gmsh_os, 
-	    gmsh_gui, FL_MAJOR_VERSION, FL_MINOR_VERSION, FL_PATCH_VERSION, 
-	    gmsh_date, gmsh_host, gmsh_packager, 
-	    gmsh_url, gmsh_email, gmsh_copyright);
-    o2->label(buffer);
-    o2->box(FL_FLAT_BOX);
-    o2->labelsize(CTX.fontsize);
-    o2->labelfont(FL_COURIER);
-    o2->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
-    o2->callback(cancel_cb, (void*)about_window);
+    {
+      Fl_Box *o = new Fl_Box(2*WB, WB, about_width, height-3*WB-BH);
+      about_bmp = new Fl_Bitmap(about_bits,about_width,about_height);
+      about_bmp->label(o);
+    }
+
+    {
+      Fl_Browser *o = new Fl_Browser(WB+80, WB, width-2*WB-80, height-3*WB-BH);
+      o->add("");
+      o->add("@c@b@.Gmsh");
+      o->add("@c@.A three-dimensional finite element mesh generator");
+      o->add("@c@.with built-in pre- and post-processing facilities");
+      o->add("");
+      o->add("@c@.Copyright (c) 1997-2001");
+      o->add("@c@.Christophe Geuzaine and Jean-Fran�ois Remacle");
+      o->add("");
+      sprintf(buffer, "@c@.Version: %.2f", GMSH_VERSION); o->add(buffer);
+      sprintf(buffer, "@c@.Build date: %s", GMSH_DATE); o->add(buffer);
+      sprintf(buffer, "@c@.Operating system: %s", GMSH_OS); o->add(buffer);
+      sprintf(buffer, "@c@.Graphical user interface toolkit: FLTK %d.%d.%d",
+	      FL_MAJOR_VERSION, FL_MINOR_VERSION, FL_PATCH_VERSION); o->add(buffer);
+      sprintf(buffer, "@c@.Build host: %s", GMSH_HOST); o->add(buffer);
+      sprintf(buffer, "@c@.Packaged by: %s", GMSH_PACKAGER); o->add(buffer);
+      o->add("");
+      o->add("@c@.Please visit http://www.geuz.org/gmsh/ for more info");
+      o->textsize(CTX.fontsize);
+    }
+
+    { 
+      Fl_Return_Button* o = new Fl_Return_Button(width-BB-WB, height-BH-WB, BB, BH, "OK");
+      o->labelsize(CTX.fontsize);
+      o->callback(cancel_cb, (void*)about_window);
+    }
 
     if(CTX.center_windows)
       about_window->position(m_window->x()+m_window->w()/2-width/2,
-			     m_window->y()+2*MH);
+			     m_window->y()+9*BH-height/2);
     about_window->end();
   }
   else{
@@ -1572,103 +1661,97 @@ void GUI::create_view_options_window(int num){
   if(!init_view_window){
     init_view_window = 1 ;
 
-    int width = 34*CTX.fontsize;
-    int height = 5*WB+7*BH + 7*CTX.fontsize;
+    int width = 32*CTX.fontsize;
+    int height = 5*WB+10*BH;
     
     view_window = new Fl_Window(width,height);
-    view_window->box(FL_THIN_UP_BOX);
+    view_window->box(WINDOW_BOX);
 
     { 
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
-      // Colors
+      // General
       { 
-	view_colors = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
-	view_colors->labelsize(CTX.fontsize);
-        view_colors->hide();
-	view_colorbar_window = new Colorbar_Window(2*WB, 2*WB+1*BH,
-						   width-4*WB, height-5*WB-2*BH);
-	view_colorbar_window->end();
-        view_colors->end();
-      }
-      // Color bar
-      { 
-	view_colorbar = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Color bar");
-	view_colorbar->labelsize(CTX.fontsize);
-        view_colorbar->hide();
-        view_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Show color bar");
-        view_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Display time");
-        view_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Transparent bar");
-	for(i=0 ; i<3 ; i++){
+	Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General");
+	o->labelsize(CTX.fontsize);
+        o->hide();
+        view_butt[13] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Show elements");
+        view_butt[14] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Show color bar");
+        view_butt[15] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Display time");
+        view_butt[16] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Transparent color bar");
+	view_butt[17] = new Fl_Check_Button(2*WB, 2*WB+5*BH, IW, BH, "Enable Lighting");
+	for(i=13 ; i<18 ; i++){
 	  view_butt[i]->type(FL_TOGGLE_BUTTON);
 	  view_butt[i]->down_box(FL_DOWN_BOX);
 	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(FL_YELLOW);
 	}
-	view_input[0] = new Fl_Input(2*WB, 2*WB+4*BH, IW, BH, "Name");
-	view_input[1] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Format");
+	view_input[0] = new Fl_Input(2*WB, 2*WB+6*BH, IW, BH, "Name");
+	view_input[1] = new Fl_Input(2*WB, 2*WB+7*BH, IW, BH, "Format");
 	for(i=0 ; i<2 ; i++){
 	  view_input[i]->labelsize(CTX.fontsize);
+	  view_input[i]->textsize(CTX.fontsize);
 	  view_input[i]->align(FL_ALIGN_RIGHT);
 	}
-        view_colorbar->end();
+        o->end();
       }
       // Range
       { 
-	view_range = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Range");
-	view_range->labelsize(CTX.fontsize);
-	view_range->hide();
-        view_butt[3] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Custom Range");
-	view_butt[3]->type(FL_TOGGLE_BUTTON);
-	view_butt[3]->down_box(FL_DOWN_BOX);
-	view_butt[3]->labelsize(CTX.fontsize);
-	view_butt[3]->selection_color(FL_YELLOW);
-	view_butt[3]->callback(view_options_custom_cb);
+	Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Range");
+	o->labelsize(CTX.fontsize);
+	o->hide();
+        view_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Custom Range");
+	view_butt[0]->type(FL_TOGGLE_BUTTON);
+	view_butt[0]->down_box(FL_DOWN_BOX);
+	view_butt[0]->labelsize(CTX.fontsize);
+	view_butt[0]->selection_color(FL_YELLOW);
 
         view_value[0] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Minimum");
         view_value[1] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Maximum");
 	for(i=0 ; i<2 ; i++){
 	  view_value[i]->labelsize(CTX.fontsize);
+	  view_value[i]->textsize(CTX.fontsize);
 	  view_value[i]->type(FL_HORIZONTAL);
 	  view_value[i]->align(FL_ALIGN_RIGHT);
 	}
-	view_butt[4] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Linear");
-	view_butt[5] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Logarithmic");
-	for(i=4 ; i<6 ; i++){
+	view_butt[1] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Linear");
+	view_butt[2] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Logarithmic");
+	for(i=1 ; i<3 ; i++){
 	  view_butt[i]->type(FL_RADIO_BUTTON);
 	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(FL_YELLOW);
 	}
-	view_range->end();
+	o->end();
       }
       // Intervals
       {
-	view_intervals = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Intervals");
-	view_intervals->labelsize(CTX.fontsize);
+	Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Intervals");
+	o->labelsize(CTX.fontsize);
 	//view_intervals->hide();
 	view_value[2] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Number of intervals");
 	view_value[2]->labelsize(CTX.fontsize);
+	view_value[2]->textsize(CTX.fontsize);
 	view_value[2]->type(FL_HORIZONTAL);
 	view_value[2]->align(FL_ALIGN_RIGHT);
 	view_value[2]->minimum(1); 
 	view_value[2]->maximum(256); 
 	view_value[2]->step(1);
 
-	view_butt[6] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Iso-values");
-	view_butt[7] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Filled iso-values");
-	view_butt[8] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Continuous map");
-	view_butt[9] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Numeric values");
-	for(i=6 ; i<10 ; i++){
+	view_butt[3] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Iso-values");
+	view_butt[4] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Filled iso-values");
+	view_butt[5] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Continuous map");
+	view_butt[6] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Numeric values");
+	for(i=3 ; i<7 ; i++){
 	  view_butt[i]->type(FL_RADIO_BUTTON);
 	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(FL_YELLOW);
 	}
-        view_intervals->end();
+        o->end();
       }
       // Offset and Raise
       { 
-	view_offsetraise = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Offset");
-	view_offsetraise->labelsize(CTX.fontsize);
-        view_offsetraise->hide();
+	Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Offset");
+	o->labelsize(CTX.fontsize);
+        o->hide();
 	view_value[3] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "X offset");
         view_value[4] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Y offset");
 	view_value[5] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Z offset");
@@ -1677,10 +1760,11 @@ void GUI::create_view_options_window(int num){
 	view_value[8] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Z raise");
 	for(i=3 ; i<9 ; i++){
 	  view_value[i]->labelsize(CTX.fontsize);
+	  view_value[i]->textsize(CTX.fontsize);
 	  view_value[i]->type(FL_HORIZONTAL);
 	  view_value[i]->align(FL_ALIGN_RIGHT);
 	}	
-	view_offsetraise->end();
+	o->end();
       }
       // Time step
       { 
@@ -1689,6 +1773,7 @@ void GUI::create_view_options_window(int num){
         view_timestep->hide();
 	view_value[9] = new Fl_Value_Input(2*WB, 2*WB+BH, IW, BH, "Time step number");
 	view_value[9]->labelsize(CTX.fontsize);
+	view_value[9]->textsize(CTX.fontsize);
 	view_value[9]->type(FL_HORIZONTAL);
 	view_value[9]->align(FL_ALIGN_RIGHT);
 	view_value[9]->minimum(0); 
@@ -1704,48 +1789,53 @@ void GUI::create_view_options_window(int num){
 
 	{
 	  Fl_Group *o = new Fl_Group(2*WB, WB+BH, width-4*WB, 2*BH, 0);
-	  view_butt[10] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Line");
-	  view_butt[11] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Arrow");
-	  view_butt[12] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Cone");
-	  view_butt[13] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Displacement");
-	  for(i=10 ; i<14 ; i++){
+	  view_butt[7] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Line");
+	  view_butt[8] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Arrow");
+	  view_butt[9] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Cone");
+	  view_butt[10] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Displacement");
+	  for(i=7 ; i<11 ; i++){
 	    view_butt[i]->type(FL_RADIO_BUTTON);
 	    view_butt[i]->labelsize(CTX.fontsize);
 	    view_butt[i]->selection_color(FL_YELLOW);
 	  }
 	  o->end();
 	}
-
 	{
 	  Fl_Group *o = new Fl_Group(2*WB, WB+3*BH, width-4*WB, 2*BH, 0);
-	  view_butt[14] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Cell centered");
-	  view_butt[15] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Vertex centered");
-	  for(i=14 ; i<16 ; i++){
+	  view_butt[11] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Cell centered");
+	  view_butt[12] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Vertex centered");
+	  for(i=11 ; i<13 ; i++){
 	    view_butt[i]->type(FL_RADIO_BUTTON);
 	    view_butt[i]->labelsize(CTX.fontsize);
 	    view_butt[i]->selection_color(FL_YELLOW);
 	  }
 	  o->end();
 	}
-
 	view_value[10] = new Fl_Value_Input(2*WB, 2*WB+ 5*BH, IW, BH, "Vector scale");
 	view_value[10]->labelsize(CTX.fontsize);
+	view_value[10]->textsize(CTX.fontsize);
 	view_value[10]->type(FL_HORIZONTAL);
 	view_value[10]->align(FL_ALIGN_RIGHT);
 	view_value[10]->minimum(0); 
 	view_value[10]->maximum(100000); 
 	view_value[10]->step(1);
-
 	view_vector->end();
       }
+      // Colors
+      { 
+	Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
+	o->labelsize(CTX.fontsize);
+        o->hide();
+	view_colorbar_window = new Colorbar_Window(2*WB, 2*WB+1*BH,
+						   width-4*WB, height-5*WB-2*BH);
+	view_colorbar_window->end();
+        o->end();
+      }
       o->end();
     }
 
-    { 
-      Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-      o->labelsize(CTX.fontsize);
-      printf("num = %d\n",num);
-      o->callback(view_options_ok_cb,(void*)num);
+    { view_ok = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
+      view_ok->labelsize(CTX.fontsize);
     }
     { 
       Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "cancel");
@@ -1755,9 +1845,9 @@ void GUI::create_view_options_window(int num){
 
     if(CTX.center_windows)
       view_window->position(m_window->x()+m_window->w()/2-width/2,
-			    m_window->y()+2*MH);
+			    m_window->y()+9*BH-height/2);
 
-    view_window->resizable(view_colorbar_window);
+    //view_window->resizable(view_colorbar_window);
     view_window->end();
   }
   else{
@@ -1781,16 +1871,17 @@ void GUI::update_view_window(int num){
   sprintf(buffer, "Options for \"%s\" (\"%s\")", v->Name, v->FileName);
   view_window->label(buffer);
 
-  // colobar
+  // general
+  opt_view_show_element(num, GMSH_GUI, 0);
   opt_view_show_scale(num, GMSH_GUI, 0);
   opt_view_show_time(num, GMSH_GUI, 0);
   opt_view_transparent_scale(num, GMSH_GUI, 0);
   opt_view_name(num, GMSH_GUI, NULL);
   opt_view_format(num, GMSH_GUI, NULL);
-  view_colorbar_window->update(v->Name, v->Min, v->Max, &v->CT, &v->Changed);
 
   // range
   opt_view_range_type(num, GMSH_GUI, 0);
+  view_butt[0]->callback(view_options_custom_cb, (void*)num);
   view_options_custom_cb(0,0);
   opt_view_custom_min(num, GMSH_GUI, 0);
   opt_view_custom_max(num, GMSH_GUI, 0);
@@ -1833,6 +1924,15 @@ void GUI::update_view_window(int num){
   opt_view_arrow_scale(num, GMSH_GUI, 0);
   opt_view_arrow_location(num, GMSH_GUI, 0);
 
+  // colors
+  view_colorbar_window->update(v->Name, v->Min, v->Max, &v->CT, &v->Changed);
+
+  // light
+  opt_view_light(num, GMSH_GUI, 0);
+
+  // OK
+  view_ok->callback(view_options_ok_cb, (void*)num);
+
 }
 
 //*************** Create the window for geometry context dependant definitions *********
@@ -1848,7 +1948,7 @@ void GUI::create_geometry_context_window(int num){
     int height = 5*WB+9*BH ;
     
     context_geometry_window = new Fl_Window(width,height);
-    context_geometry_window->box(FL_THIN_UP_BOX);
+    context_geometry_window->box(WINDOW_BOX);
     context_geometry_window->label("Contextual Geometry Definitions");
     { 
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
@@ -1860,6 +1960,7 @@ void GUI::create_geometry_context_window(int num){
 	context_geometry_input[1] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Value");
 	for(i=0 ; i<2 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
+	  context_geometry_input[i]->textsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
 	}
 	{ 
@@ -1879,6 +1980,7 @@ void GUI::create_geometry_context_window(int num){
 	context_geometry_input[5] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Characteristic length");
 	for(i=2 ; i<6 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
+	  context_geometry_input[i]->textsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
 	}
 	{ 
@@ -1897,6 +1999,7 @@ void GUI::create_geometry_context_window(int num){
 	context_geometry_input[8] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component");
 	for(i=6 ; i<9 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
+	  context_geometry_input[i]->textsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
 	}
 	{ 
@@ -1919,6 +2022,7 @@ void GUI::create_geometry_context_window(int num){
 	context_geometry_input[15] = new Fl_Input (2*WB, 2*WB+7*BH, IW, BH, "Angle in radians");
 	for(i=9 ; i<16 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
+	  context_geometry_input[i]->textsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
 	}
 	{ 
@@ -1938,6 +2042,7 @@ void GUI::create_geometry_context_window(int num){
 	context_geometry_input[19] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Factor");
 	for(i=16 ; i<20 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
+	  context_geometry_input[i]->textsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
 	}
 	{ 
@@ -1957,6 +2062,7 @@ void GUI::create_geometry_context_window(int num){
 	context_geometry_input[23] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "4th plane equation coefficient");
 	for(i=20 ; i<24 ; i++){
 	  context_geometry_input[i]->labelsize(CTX.fontsize);
+	  context_geometry_input[i]->textsize(CTX.fontsize);
 	  context_geometry_input[i]->align(FL_ALIGN_RIGHT);
 	}
 	{ 
@@ -1980,7 +2086,7 @@ void GUI::create_geometry_context_window(int num){
 
     if(CTX.center_windows)
       context_geometry_window->position(m_window->x()+m_window->w()/2-width/2,
-					m_window->y()+2*MH);
+					m_window->y()+9*BH-height/2);
     context_geometry_window->end();
     context_geometry_window->show();
   }
@@ -1999,31 +2105,6 @@ void GUI::create_geometry_context_window(int num){
 
 }
 
-char *GUI::get_geometry_parameter(int num){//name, val
-  return (char*)context_geometry_input[num]->value();
-}
-
-char *GUI::get_geometry_point(int num){//x, y, z, l
-  return (char*)context_geometry_input[num+2]->value();
-}
-
-char *GUI::get_geometry_translation(int num){//x, y, z
-  return (char*)context_geometry_input[num+6]->value();
-}
-
-char *GUI::get_geometry_rotation(int num){//px, py, pz, ax, ay, az, ang
-  return (char*)context_geometry_input[num+9]->value();
-}
-
-char *GUI::get_geometry_scale(int num){//x, y, z, f
-  return (char*)context_geometry_input[num+16]->value();
-}
-
-char *GUI::get_geometry_symmetry(int num){//a, b, c, d
-  return (char*)context_geometry_input[num+20]->value();
-}
-
-
 //************** Create the window for mesh context dependant definitions **************
 
 void GUI::create_mesh_context_window(int num){
@@ -2037,7 +2118,7 @@ void GUI::create_mesh_context_window(int num){
     int height = 5*WB+5*BH ;
     
     context_mesh_window = new Fl_Window(width,height);
-    context_mesh_window->box(FL_THIN_UP_BOX);
+    context_mesh_window->box(WINDOW_BOX);
     context_mesh_window->label("Contextual Mesh Definitions");
     { 
       Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH);
@@ -2047,6 +2128,7 @@ void GUI::create_mesh_context_window(int num){
 	g[0]->labelsize(CTX.fontsize);
 	context_mesh_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Value");
 	context_mesh_input[0]->labelsize(CTX.fontsize);
+	context_mesh_input[0]->textsize(CTX.fontsize);
 	context_mesh_input[0]->align(FL_ALIGN_RIGHT);
 	{ 
 	  Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "set");
@@ -2063,6 +2145,7 @@ void GUI::create_mesh_context_window(int num){
 	context_mesh_input[2] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Distribution");
 	for(i=1 ; i<3 ; i++){
 	  context_mesh_input[i]->labelsize(CTX.fontsize);
+	  context_mesh_input[i]->textsize(CTX.fontsize);
 	  context_mesh_input[i]->align(FL_ALIGN_RIGHT);
 	}
 	{ 
@@ -2078,6 +2161,7 @@ void GUI::create_mesh_context_window(int num){
 	g[2]->labelsize(CTX.fontsize);
 	context_mesh_input[3] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Volume number");
 	context_mesh_input[3]->labelsize(CTX.fontsize);
+	context_mesh_input[3]->textsize(CTX.fontsize);
 	context_mesh_input[3]->align(FL_ALIGN_RIGHT);
 	{ 
 	  Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "set");
@@ -2100,7 +2184,7 @@ void GUI::create_mesh_context_window(int num){
 
     if(CTX.center_windows)
       context_mesh_window->position(m_window->x()+m_window->w()/2-width/2,
-				    m_window->y()+2*MH);
+				    m_window->y()+9*BH-height/2);
     context_mesh_window->end();
     context_mesh_window->show();
   }
@@ -2118,15 +2202,3 @@ void GUI::create_mesh_context_window(int num){
   }
 }
 
-char *GUI::get_mesh_length(){//val
-  return (char*)context_mesh_input[0]->value();
-}
-
-char *GUI::get_mesh_transfinite_line(int num){//pts, distrib
-  return (char*)context_mesh_input[num+1]->value();
-}
-
-char *GUI::get_mesh_transfinite_volume(){//numvol
-  return (char*)context_mesh_input[3]->value();
-}
-
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index f4092b89cb42db9b923232b40708b5c5b0a729d7..1528a37efba95e8322da5bec23c7355f937a4edc 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -22,6 +22,7 @@
 #include <FL/Fl_Bitmap.H>
 #include <FL/Fl_Browser.H>
 #include <FL/x.H>
+#include <FL/Fl_Color_Chooser.H>
 
 #include "Opengl_Window.h"
 #include "Colorbar_Window.h"
@@ -100,8 +101,10 @@ public:
   // general options window
   int init_general_options_window;
   Fl_Window        *gen_window ;
-  Fl_Check_Button  *gen_butt[10] ;
+  Fl_Check_Button  *gen_butt[20] ;
   Fl_Value_Input   *gen_value[10] ;
+  Fl_Button        *gen_col[50] ;
+  Fl_Input         *gen_input[10] ;
 
   // geometry options window
   int init_geometry_options_window;
@@ -109,6 +112,7 @@ public:
   Fl_Check_Button  *geo_butt[10] ;
   Fl_Input         *geo_input ;
   Fl_Value_Input   *geo_value[10] ;
+  Fl_Button        *geo_col[50] ;
   
   // mesh options window
   int init_mesh_options_window;
@@ -116,6 +120,7 @@ public:
   Fl_Check_Button  *mesh_butt[20] ;
   Fl_Input         *mesh_input ;
   Fl_Value_Input   *mesh_value[20] ;
+  Fl_Button        *mesh_col[50] ;
 
   // post-processing options window
   int init_post_options_window;
@@ -133,10 +138,6 @@ public:
   Fl_Window        *msg_window ;
   Fl_Browser       *msg_browser ;
 
-  // help window
-  int init_help_window;
-  Fl_Window        *help_window ;
-    
   // about window
   int init_about_window;
   Fl_Window        *about_window ;
@@ -144,12 +145,12 @@ public:
   // view options window
   int init_view_window, view_number ;
   Fl_Window        *view_window ;
-  Fl_Group         *view_colors, *view_colorbar, *view_range, *view_intervals ;
-  Fl_Group         *view_offsetraise, *view_timestep, *view_vector ;
+  Fl_Group         *view_timestep, *view_vector ;
   Fl_Check_Button  *view_butt[20] ;
   Fl_Value_Input   *view_value[20] ;
   Fl_Input         *view_input[20] ;
   Colorbar_Window  *view_colorbar_window ;
+  Fl_Return_Button *view_ok ;
   
   // geometry context window
   int init_geometry_context_window;
@@ -175,7 +176,6 @@ public:
   void create_view_options_window(int numview);
   void create_statistics_window();
   void create_message_window();
-  void create_help_window();
   void create_about_window();
   void create_geometry_context_window(int num);
   void create_mesh_context_window(int num);
@@ -190,12 +190,12 @@ public:
   void redraw_overlay();
   void set_size(int w, int h);
   void set_menu_size(int nb_butt);
-  void get_position(int m[2], int g[2]);
   void set_context(Context_Item menu[], int flag);
   int  get_context();
   void set_anim(int mode);
   void set_status(char *msg, int num);
   void add_message(char *msg);
+  void clear_message();
   void save_message(char *filename);
   void set_statistics();
   void update_view_window(int numview);
@@ -204,20 +204,6 @@ public:
   int  global_shortcuts(int event);
   int  try_selection, quit_selection, end_selection;
 
-  // geometry contexts queries
-  char *get_geometry_parameter(int num);
-  char *get_geometry_point(int num);
-  char *get_geometry_translation(int num);
-  char *get_geometry_rotation(int num);
-  char *get_geometry_scale(int num);
-  char *get_geometry_symmetry(int num);
-
-  // mesh contexts queries
-  char *get_mesh_length();
-  char *get_mesh_transfinite_line(int num);
-  char *get_mesh_transfinite_volume();
-
-
 };
 
 
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index c1dce00915f9ea952c168323fd7e4b43a175769a..66065a496cf4b356837f0d85b180e2a886e4afc6 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.16 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: Main.cpp,v 1.17 2001-02-17 22:02:17 geuzaine Exp $
 
 #include <signal.h>
 
@@ -27,13 +27,19 @@ int main(int argc, char *argv[]){
   
   Init_Context(0);
 
+  // Configuration files and command line options
+
+  Get_Options(argc, argv, &nbf);
+
   // This does not work with FLTK right now...
+
   CTX.overlay = 0 ;
   CTX.geom.highlight = 0 ;
 
-  // Configuration file and command line options
+  // Always print info on terminal for non-interactive execution
 
-  Get_Options(argc, argv, &nbf);
+  if(CTX.interactive)
+    CTX.terminal = 1;
 
   if(CTX.verbosity && CTX.terminal)
     fprintf(stderr, "%s, Version %.2f\n", gmsh_progname, GMSH_VERSION);
@@ -65,9 +71,7 @@ int main(int argc, char *argv[]){
     if(yyerrorstate)
       exit(1);
     else {
-      if(nbf > 1){
-        for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]);
-      }
+      for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]);
       if(TheBgmFileName){
         MergeProblem(TheBgmFileName);
         if(List_Nbr(Post_ViewList))
@@ -94,9 +98,9 @@ int main(int argc, char *argv[]){
   
   WID = new GUI(argc, argv);
 
-  // Set all options in the GUI
+  // Set all previously defined options in the GUI
 
-  UpdateGUI_Context(0);
+  Init_Context_GUI(0);
 
   // The GUI is ready
   CTX.interactive = 0 ; 
@@ -106,10 +110,12 @@ int main(int argc, char *argv[]){
   Msg(STATUS3N, "Ready");
   Msg(STATUS1, "Gmsh %.2f", GMSH_VERSION);
 
+  Msg(LOG_INFO, "-------------------------------------------------------");
   Msg(LOG_INFO, gmsh_os);
   Msg(LOG_INFO, gmsh_date);
   Msg(LOG_INFO, gmsh_host);
   Msg(LOG_INFO, gmsh_packager);
+  Msg(LOG_INFO, "-------------------------------------------------------");
 
   // Display the GUI to have a quick "a la Windows" launch time
 
@@ -119,15 +125,16 @@ int main(int argc, char *argv[]){
 
   OpenProblem(CTX.filename);
 
-  // Merge all Input Files, then init first context (geometry or post)
+  // Merge all Input Files
+
+  for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]);
+  
+  // Init first context (geometry or post)
 
-  if(nbf > 1){
-    for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]);
+  if(List_Nbr(Post_ViewList))
     WID->set_context(menu_post, 0);
-  }
-  else {
+  else
     WID->set_context(menu_geometry, 0); 
-  }
 
   // Read background mesh on disk
 
diff --git a/Fltk/Makefile b/Fltk/Makefile
index 5650e00cc9335d7f5706227e06352b6647827968..33adfddaccc33a9aed166b802029944af3632400 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.9 2001-02-12 17:42:20 geuzaine Exp $
+# $Id: Makefile,v 1.10 2001-02-17 22:02:17 geuzaine Exp $
 #
 # Makefile for "libFltk.a"
 #
@@ -74,8 +74,9 @@ Main.o: Main.cpp ../Common/Gmsh.h ../Common/Message.h \
 Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
  ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \
- ../Common/GmshVersion.h ../Common/Context.h ../Common/Const.h GUI.h \
- Opengl_Window.h Colorbar_Window.h ../Common/ColorTable.h
+ ../Common/GmshVersion.h ../Common/Context.h ../Common/Const.h \
+ ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h \
+ ../Common/ColorTable.h
 GUI.o: GUI.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
  ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \
@@ -84,7 +85,7 @@ GUI.o: GUI.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \
  ../Mesh/Metric.h ../Graphics/Draw.h ../Common/Views.h \
  ../Common/ColorTable.h GUI.h Opengl_Window.h Colorbar_Window.h \
- Callbacks.h ../Common/Bitmaps.h ../Common/GetOptions.h Help.h
+ Callbacks.h ../Common/Bitmaps.h ../Common/GetOptions.h
 Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
  ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \
@@ -92,9 +93,9 @@ Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \
  ../Graphics/Draw.h ../Common/Views.h ../Common/Const.h \
  ../Common/ColorTable.h ../Common/Timer.h ../Geo/Visibility.h \
- ../Graphics/CreateFile.h ../Parser/OpenFile.h ../Common/Context.h \
- ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h \
- Callbacks.h
+ ../Graphics/CreateFile.h ../Parser/OpenFile.h ../Common/GetOptions.h \
+ ../Common/Context.h ../Common/Options.h GUI.h Opengl_Window.h \
+ Colorbar_Window.h Callbacks.h
 Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
  ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \
diff --git a/Fltk/Message.cpp b/Fltk/Message.cpp
index a38a18b404001536d6c3071ebc048c565706f6ca..e95a0b21061476ce96a9932d40eff1a905fcf244 100644
--- a/Fltk/Message.cpp
+++ b/Fltk/Message.cpp
@@ -1,4 +1,4 @@
-// $Id: Message.cpp,v 1.12 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: Message.cpp,v 1.13 2001-02-17 22:02:18 geuzaine Exp $
 
 #include <signal.h>
 #ifndef WIN32
@@ -9,6 +9,7 @@
 #include "GmshUI.h"
 #include "GmshVersion.h"
 #include "Context.h"
+#include "Options.h"
 #include "GUI.h"
 
 extern GUI       *WID;
@@ -32,7 +33,8 @@ void Signal (int sig_num){
     Msg(FATAL, "Floating Point Exception (Division by Zero?)"); 
     break;
   case SIGINT :
-    Msg(FATAL, "Interrupt (Generated from Terminal Special Character)"); 
+    Msg(INFO, "Interrupt (Generated from Terminal Special Character)"); 
+    Exit(1);
     break;
   default :
     Msg(FATAL, "Unknown Signal");
@@ -96,7 +98,7 @@ void Msg(int level, char *fmt, ...){
 
   static char buff1[1024], buff2[1024], buff[4][1024];
 
-  if(CTX.interactive || !WID)
+  if(!WID)
     window = -1;
   else 
     WID->check();
@@ -115,7 +117,7 @@ void Msg(int level, char *fmt, ...){
       vsprintf(buff2, fmt, args); 
       strcat(buff1,buff2);
       if(CTX.terminal) fprintf(stderr, "%s\n", &buff1[3]);
-      if(WID && !CTX.interactive){
+      if(WID){
 	if(verb<2)
 	  WID->add_message(buff1);
 	else
@@ -126,8 +128,8 @@ void Msg(int level, char *fmt, ...){
     va_end (args);
   }
 
-  if(WID && abort){
-    WID->save_message(".gmshlog");
+  if(abort){
+    if(WID) WID->save_message(CTX.error_filename);
     Exit(1);
   }
 }
@@ -138,9 +140,20 @@ void Msg(int level, char *fmt, ...){
 /* ------------------------------------------------------------------------ */
 
 void Exit(int level){
-  if(!CTX.interactive){
-    WID->get_position(CTX.position, CTX.gl_position);
-    Print_Configuration(0, CTX.configfilename);
+  if(WID && !CTX.interactive){
+    if(CTX.session_save){
+      CTX.position[0] = WID->m_window->x();
+      CTX.position[1] = WID->m_window->y();
+      CTX.gl_position[0] = WID->g_window->x();
+      CTX.gl_position[1] = WID->g_window->y();
+      CTX.msg_position[0] = WID->msg_window->x();
+      CTX.msg_position[1] = WID->msg_window->y();
+      CTX.msg_size[0] = WID->msg_window->w();
+      CTX.msg_size[1] = WID->msg_window->h();
+      Print_Context(0, GMSH_SESSIONRC, CTX.sessionrc_filename);
+    }
+    if(CTX.options_save)
+      Print_Context(0, GMSH_OPTIONSRC, CTX.optionsrc_filename);
   }
   exit(level);
 }
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 1daeef8012fc3c5dd42ce1749fb084b4e46d5681..a7bde5ebb67bb80d4edf41c75fb11db1e72b989d 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Geo.cpp,v 1.17 2001-01-13 15:41:35 geuzaine Exp $
+// $Id: Geo.cpp,v 1.18 2001-02-17 22:08:55 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -6,6 +6,9 @@
 #include "CAD.h"
 #include "DataBase.h"
 #include "Parser.h"
+#include "Context.h"
+
+extern Context_T CTX ;
 
 #define BUFFSIZE 32000
 
@@ -33,7 +36,7 @@ double evaluate_scalarfunction (char *var, double val, char *funct){
   FILE *tempf;
   tempf = yyin;
   
-  if(!(yyin = fopen(".gmshtmp","w"))){
+  if(!(yyin = fopen(CTX.tmp_filename,"w"))){
     Msg(GERROR, "Unable to Open Temporary File");
     return 0.;
   }
@@ -43,7 +46,7 @@ double evaluate_scalarfunction (char *var, double val, char *funct){
   fprintf(yyin,"%s = %g ;\n",var,val);
   fprintf(yyin,"ValeurTemporaire__ = %s ;\n",funct);
   fclose(yyin);
-  yyin = fopen(".gmshtmp","r");
+  yyin = fopen(CTX.tmp_filename,"r");
   while(!feof(yyin)){
     yyparse();
   }
@@ -63,7 +66,7 @@ double evaluate_scalarfunction (char *var, double val, char *funct){
 void add_infile(char *text, char *fich){
   FILE *file;
 
-  if(!(yyin = fopen(".gmshtmp","w"))){
+  if(!(yyin = fopen(CTX.tmp_filename,"w"))){
     Msg(GERROR, "Unable to Open Temporary File");
     return;
   }
@@ -74,7 +77,7 @@ void add_infile(char *text, char *fich){
   fprintf(yyin,"%s\n",text);
   Msg(STATUS1,"%s",text);
   fclose(yyin);
-  yyin = fopen(".gmshtmp","r");
+  yyin = fopen(CTX.tmp_filename,"r");
   while(!feof(yyin)){
     yyparse();
   }
diff --git a/Geo/Makefile b/Geo/Makefile
index 814e130ead3b6a145db67a55f93823873371f133..28f9a0a6bde890b2f77e4d336a6f58ae3988049f 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.12 2001-02-12 17:42:22 geuzaine Exp $
+# $Id: Makefile,v 1.13 2001-02-17 22:08:55 geuzaine Exp $
 #
 # Makefile for "libGeo.a"
 #
@@ -83,7 +83,8 @@ Geo.o: Geo.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
  ../DataStr/avl.h ../DataStr/Tools.h ../Common/Const.h Geo.h CAD.h \
  ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
- ../Geo/ExtrudeParams.h ../Mesh/Metric.h DataBase.h ../Parser/Parser.h
+ ../Geo/ExtrudeParams.h ../Mesh/Metric.h DataBase.h ../Parser/Parser.h \
+ ../Common/Context.h
 StepGeomDatabase.o: StepGeomDatabase.cpp ../Common/Gmsh.h \
  ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \
  ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \
diff --git a/Geo/Print_Geo.cpp b/Geo/Print_Geo.cpp
index 94d21667fdaa5ed00984889a3e72392aeda67632..c9fab281d07216e9bdaf596bead5f8f9a17a2263 100644
--- a/Geo/Print_Geo.cpp
+++ b/Geo/Print_Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Print_Geo.cpp,v 1.13 2001-01-12 13:28:57 geuzaine Exp $
+// $Id: Print_Geo.cpp,v 1.14 2001-02-17 22:08:55 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Geo.h"
@@ -240,7 +240,7 @@ void Print_Geo(Mesh *M, char *filename){
 
   if(filename){
     Msg(INFO, "Geo Output Complete '%s'", filename);
-    Msg(STATUS2, "Wrote File '%s'", filename);
+    Msg(STATUS2, "Wrote '%s'", filename);
     fclose(FOUT);
   }
 
diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp
index b18e7602831af5508e5ea81ed9114231a9e881a4..26aefea29b437b9539710170356a2acf40d0bd3d 100644
--- a/Graphics/CreateFile.cpp
+++ b/Graphics/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.15 2001-02-09 07:59:50 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.16 2001-02-17 22:08:56 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -103,7 +103,7 @@ void CreateOutputFile (char *name, int format) {
     }
     Window_Dump(XCTX.display, XCTX.scrnum, XtWindow(WID.G.glw), fp);    
     Msg(INFO, "XPM Creation Complete '%s'", name);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
     fclose(fp);
     break;
 #endif
@@ -118,7 +118,7 @@ void CreateOutputFile (char *name, int format) {
 		CTX.viewport[3]-CTX.viewport[1],
 		CTX.print.jpeg_quality);
     Msg(INFO, "JPEG Creation Complete '%s'", name);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
     fclose(fp);
     break;
 
@@ -138,7 +138,7 @@ void CreateOutputFile (char *name, int format) {
 	       UNPACK_GREEN(CTX.color.bg),
 	       UNPACK_BLUE(CTX.color.bg));
     Msg(INFO, "GIF Creation Complete '%s'", name);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
     fclose(fp);
     break;
 
@@ -151,7 +151,7 @@ void CreateOutputFile (char *name, int format) {
     create_ppm(fp, CTX.viewport[2]-CTX.viewport[0],
 	       CTX.viewport[3]-CTX.viewport[1]);
     Msg(INFO, "PPM Creation Complete '%s'", name);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
     fclose(fp);
     break;
 
@@ -164,7 +164,7 @@ void CreateOutputFile (char *name, int format) {
     create_yuv(fp, CTX.viewport[2]-CTX.viewport[0],
 	       CTX.viewport[3]-CTX.viewport[1]);
     Msg(INFO, "YUV Creation Complete '%s'", name);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
     fclose(fp);
     break;
 
@@ -189,7 +189,7 @@ void CreateOutputFile (char *name, int format) {
       system(cmd);
       unlink(tmpFileName);
       Msg(INFO, "Bitmap EPS Creation Complete '%s'", name);
-      Msg(STATUS2, "Wrote File '%s'", name);
+      Msg(STATUS2, "Wrote '%s'", name);
       fclose(fp);
       break;
 #endif
@@ -214,7 +214,7 @@ void CreateOutputFile (char *name, int format) {
 	res = gl2psEndPage();
       }
       Msg(INFO, "EPS Creation Complete '%s'", name);
-      Msg(STATUS2, "Wrote File '%s'", name);
+      Msg(STATUS2, "Wrote '%s'", name);
       fclose(fp);
       CTX.print.gl_fonts = 1;
       break;
diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index 363a2210293940bc773fc0c7dfb7067a85c19fbe..6d054e1c496a41f55ade8050a3f28e79a6130a28 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.20 2001-02-09 14:51:31 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.21 2001-02-17 22:08:56 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -53,7 +53,7 @@ static int DrawVertexSupp ;
 void Draw_Mesh (Mesh *M) {
   int i;
 
-  InitRenderModel();
+  if(!CTX.moving_light) InitRenderModel();
 
   if(CTX.mesh.shade)
     InitShading();
@@ -62,6 +62,8 @@ void Draw_Mesh (Mesh *M) {
 
   InitPosition();
 
+  if(CTX.moving_light) InitRenderModel();
+
   for(i = 0 ; i < 6 ; i++)
     if(CTX.clip[i])
       glClipPlane((GLenum)(GL_CLIP_PLANE0 + i), CTX.clip_plane[i]);
@@ -225,7 +227,10 @@ void Draw_Simplex_Volume (void *a, void *b){
     if((*s)->RhoShapeMeasure() > CTX.mesh.limit_rho) return;
   }
 
-  ColorSwitch((*s)->iEnt+1);
+  if(CTX.mesh.color_carousel)
+    ColorSwitch((*s)->iEnt+1);
+  else
+    glColor4ubv((GLubyte*)&CTX.color.mesh.tetrahedron);    
 
   for (int i=0 ; i<4 ; i++) {
      X[i] = Xc + CTX.mesh.explode * ((*s)->V[i]->Pos.X - Xc);
@@ -454,9 +459,14 @@ void Draw_Simplex_Surfaces (void *a, void *b){
     glNormal3dv(n);
   }
   
-  //  ColorSwitch(abs(iVolume));
-  //  printf("%d\n",(*s)->iEnt);
-  ColorSwitch((*s)->iEnt);
+  if(CTX.mesh.color_carousel)
+    ColorSwitch((*s)->iEnt);
+  else{
+    if(K==3)
+      glColor4ubv((GLubyte*)&CTX.color.mesh.triangle);
+    else
+      glColor4ubv((GLubyte*)&CTX.color.mesh.quadrangle);
+  }
 
   if(CTX.mesh.surfaces_num){
     sprintf(Num,"%d",(*s)->Num);
@@ -556,9 +566,11 @@ void Draw_Hexahedron_Volume (void *a, void *b){
     {
       if(CTX.mesh.evalCutPlane(Xc,Yc,Zc) < 0)return;
     }
-  
-  //glColor4ubv((GLubyte*)&CTX.color.mesh.hexahedron);
-  ColorSwitch((*h)->iEnt+1);
+
+  if(CTX.mesh.color_carousel)
+    ColorSwitch((*h)->iEnt+1);  
+  else
+    glColor4ubv((GLubyte*)&CTX.color.mesh.hexahedron);
 
   for (i=0 ; i<8 ; i++) {
     X[i] = Xc + CTX.mesh.explode * 0.99 * ((*h)->V[i]->Pos.X - Xc);
@@ -648,8 +660,10 @@ void Draw_Prism_Volume (void *a, void *b){
 
   if(!EntiteEstElleVisible((*p)->iEnt)) return;
   
-  //glColor4ubv((GLubyte*)&CTX.color.mesh.prism);
-  ColorSwitch((*p)->iEnt+1);
+  if(CTX.mesh.color_carousel)
+    ColorSwitch((*p)->iEnt+1);
+  else
+    glColor4ubv((GLubyte*)&CTX.color.mesh.prism);
 
   glBegin(GL_LINE_LOOP);
   glVertex3d((*p)->V[0]->Pos.X, (*p)->V[0]->Pos.Y, (*p)->V[0]->Pos.Z);
diff --git a/Makefile b/Makefile
index b664a0ecb8fd3dffec56caddbae72bc07051dcbf..a93a9ced95aa123cdfd8dec4f208c8998383b036 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,9 @@
-# $Id: Makefile,v 1.59 2001-02-12 17:38:02 geuzaine Exp $
+# $Id: Makefile,v 1.60 2001-02-17 22:08:40 geuzaine Exp $
 # ----------------------------------------------------------------------
 #  Makefile for Gmsh  
 # ----------------------------------------------------------------------
 
-         GMSH_RELEASE = 1.13
+         GMSH_RELEASE = 1.14
 
                  MAKE = make
                    CC = c++
@@ -77,6 +77,18 @@ default: initialtag
            "GUI_INCLUDE=$(FLTK_INC)" \
         ); done
 
+win: initialtag
+	@for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \
+           "CC=g++" \
+           "C_FLAGS=-g -Wall -DWIN32" \
+           "OS_FLAGS=-D_LITTLE_ENDIAN" \
+           "VERSION_FLAGS=-D_FLTK" \
+           "GL_INCLUDE=$(OPENGL_INC)" \
+           "GUI_INCLUDE=$(FLTK_INC)" \
+        ); done
+	g++ -Wl,--subsystem,windows -o $(GMSH_BIN_DIR)/gmsh.exe $(GMSH_FLTK_LIB) \
+            $(HOME)/SOURCES/fltk/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm
+
 motif: initialtag
 	@for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \
            "CC=$(CC)" \
@@ -122,7 +134,7 @@ utilities:
 purge:
 	for i in "." $(GMSH_DIR) $(GMSH_LIB_DIR) $(GMSH_ARCHIVE_DIR)\
                      $(GMSH_DEMO_DIR) $(GMSH_TUTOR_DIR) $(GMSH_DOC_DIR) $(GMSH_BOX_DIR); \
-        do (cd $$i && $(RM) $(RMFLAGS) *~ *~~ .gmshrc .gmshtmp .gmshlog gmon.out); \
+        do (cd $$i && $(RM) $(RMFLAGS) *~ *~~ .gmsh-tmp .gmsh-errors gmon.out); \
         done
 
 clean:
@@ -202,7 +214,7 @@ bb: tag
            "GL_INCLUDE=" \
            "GUI_INCLUDE=" \
         ); done
-	$(CC) -o $(GMSH_BIN_DIR)/gmsh-box $(GMSH_BOX_LIB) -lm
+	$(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_BOX_LIB) -lm
 
 bbn: tag
 	@for i in $(GMSH_BOX_DIR) ; do (cd $$i && $(MAKE) \
diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp
index c97581809c8d600be9b8a979cbc8670231ee6f57..b00bc669dc9f57daf74bef850b3327f33172c6dd 100644
--- a/Mesh/2D_Mesh.cpp
+++ b/Mesh/2D_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: 2D_Mesh.cpp,v 1.18 2001-01-24 16:15:31 geuzaine Exp $
+// $Id: 2D_Mesh.cpp,v 1.19 2001-02-17 22:08:58 geuzaine Exp $
 
 /*
    Maillage Delaunay d'une surface (Point insertion Technique)
@@ -526,8 +526,13 @@ int mesh_domain (ContourPeek * ListContours, int numcontours,
 
   (*root) = (*root_w) = (*root_acc) = NULL;
 
-  if (doc->numTriangles == 1)
+  int onlyinit = OnlyTheInitialMesh;
+
+  if (doc->numTriangles == 1){
     doc->delaunay[0].t.position = INTERN;
+    Msg(INFO, "Only 1 triangle in initial mesh: skipping refinement");
+    onlyinit = 1;
+  }
 
   for (i = 0; i < doc->numTriangles; i++){
     if (doc->delaunay[i].t.position != EXTERN){
@@ -569,7 +574,7 @@ int mesh_domain (ContourPeek * ListContours, int numcontours,
   List_Reset(del_L);
   kill_L = List_Create(1000, 1000, sizeof(Delaunay*));
 
-  if (OnlyTheInitialMesh)
+  if (onlyinit)
     conv = 1;
 
   while (conv != 1){
@@ -757,6 +762,8 @@ int mesh_domain (ContourPeek * ListContours, int numcontours,
     
   }
 
+  List_Delete(kill_L);
+
   numtri = 0;
   numtrwait = 0;
 
@@ -798,8 +805,11 @@ int mesh_domain (ContourPeek * ListContours, int numcontours,
 
   /* Tous Les Triangles doivent etre orientes */
 
-  if (!mai->numtriangles)
-    mai->numtriangles = 1;
+  if (!mai->numtriangles){
+    Msg(GERROR, "No triangles in surface mesh");
+    return 0;
+    //mai->numtriangles = 1;
+  }
 
   for (i = 0; i < mai->numtriangles; i++){
     a = mai->listdel[i]->t.a;
@@ -868,9 +878,9 @@ void Maillage_Automatique_VieuxCode (Surface * pS, Mesh * m, int ori){
       cp->oriented_points[j].where.h = v->Pos.X;
       cp->oriented_points[j].where.v = v->Pos.Y;
 
-      cp->perturbations[j].h = CTX.mesh.rand_factor * LC2D * 
+      cp->perturbations[j].h = CTX.mesh.rand_factor /* /(100*v->lc) */  * LC2D * 
 	(double)rand()/(double)RAND_MAX;
-      cp->perturbations[j].v = CTX.mesh.rand_factor * LC2D *
+      cp->perturbations[j].v = CTX.mesh.rand_factor /* /(100.*v->lc) */ * LC2D *
 	(double)rand()/(double)RAND_MAX;
 
       cp->oriented_points[j].numcontour = i;
@@ -1014,9 +1024,6 @@ void ActionEndTheCurve (void *a, void *b){
   End_Curve (c);
 }
 
-int MeshParametricSurface (Surface * s);
-int Extrude_Mesh (Surface * s);
-
 void Maillage_Surface (void *data, void *dum){
   Surface  **pS, *s;
   Tree_T    *tnxe;
diff --git a/Mesh/2D_Mesh_Aniso.cpp b/Mesh/2D_Mesh_Aniso.cpp
index efcbe636721a9a6b0cf585a1a2399ac6af6417a6..a43679c837092b7ec8d57d7567e15651186f0cde 100644
--- a/Mesh/2D_Mesh_Aniso.cpp
+++ b/Mesh/2D_Mesh_Aniso.cpp
@@ -1,4 +1,4 @@
-// $Id: 2D_Mesh_Aniso.cpp,v 1.11 2001-01-12 13:29:00 geuzaine Exp $
+// $Id: 2D_Mesh_Aniso.cpp,v 1.12 2001-02-17 22:08:58 geuzaine Exp $
 
 /*
    Jean-Francois Remacle
@@ -1109,6 +1109,9 @@ int AlgorithmeMaillage2DAnisotropeModeJF (Surface * s){
   }
   List_Delete (List);
 
+  if(!Tree_Nbr(s->Simplexes))
+    Msg(GERROR, "No Triangles in surface %d", s->Num);
+
   /*
      RandomSwapEdges2d(s);
      for(i=0;i<1;i++)IntelligentSwapEdges(s,THEM->Metric);
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 0c5c102156ba4ba66222a29af07c443da5033872..bb5e35f26a78a63a0131c3f13dce2846731b30c0 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-// $Id: Generator.cpp,v 1.9 2001-01-12 13:29:00 geuzaine Exp $
+// $Id: Generator.cpp,v 1.10 2001-02-17 22:08:58 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -40,7 +40,7 @@ void ApplyLcFactor(Mesh *M){
 }
 
 void Maillage_Dimension_0 (Mesh * M){
-  for (int i = 0; i < 20; i++) M->Statistics[i] = 0.0;
+  for (int i = 0; i < 50; i++) M->Statistics[i] = 0.0;
   // This is the default type of BGM (lc associated with 
   // points of the geometry). It can be changed to
   // - ONFILE by loading a view containing a bgmesh
diff --git a/Mesh/Print_Mesh.cpp b/Mesh/Print_Mesh.cpp
index 4dd98bf87889ff85c9d82c275bdbb3195581154e..602990a993e140cba0c3268fc3a0bf46b222b03f 100644
--- a/Mesh/Print_Mesh.cpp
+++ b/Mesh/Print_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Print_Mesh.cpp,v 1.13 2001-02-16 20:16:40 remacle Exp $
+// $Id: Print_Mesh.cpp,v 1.14 2001-02-17 22:08:58 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Const.h"
@@ -1047,7 +1047,7 @@ void Print_Mesh (Mesh * M, char *c, int Type){
     process_msh_elements (M);
     Msg(INFO, "Msh Ouput Complete '%s' (%d Nodes, %d Elements)",
          name, MSH_NODE_NUM, MSH_ELEMENT_NUM - 1);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
     fclose (mshfile);
   }
   else if (Type == FORMAT_UNV){
@@ -1069,7 +1069,7 @@ void Print_Mesh (Mesh * M, char *c, int Type){
     PrintGroups (M);
     fclose (unvfile);
     Msg(INFO, "Unv Ouput Complete '%s'", name);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
   }
   else if (Type == FORMAT_GREF){
     c ? strcpy (name, c) : strcat (name, ".Gref");
@@ -1089,6 +1089,6 @@ void Print_Mesh (Mesh * M, char *c, int Type){
     Tree_Delete (TRE);
     EndConsecutiveNodes (M);
     Msg(INFO, "Gref Ouput Complete '%s'", name);
-    Msg(STATUS2, "Wrote File '%s'", name);
+    Msg(STATUS2, "Wrote '%s'", name);
   }
 }
diff --git a/Motif/CbFile.cpp b/Motif/CbFile.cpp
index 0b3932e51bc7fe92eec05e4d832eda2a6d9e8081..2a2184728663a509997ba610db63c16ca863520a 100644
--- a/Motif/CbFile.cpp
+++ b/Motif/CbFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CbFile.cpp,v 1.5 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: CbFile.cpp,v 1.6 2001-02-17 22:04:05 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -7,6 +7,7 @@
 #include "Draw.h"
 #include "Widgets.h"
 #include "Context.h"
+#include "Options.h"
 #include "CreateFile.h"
 
 #include "CbFile.h"
@@ -62,7 +63,7 @@ void FileCb(Widget w, XtPointer client_data, XtPointer call_data){
   case FILE_LOAD_GEOM       : OpenProblem(c); Draw(); break;
   case FILE_LOAD_POST       : MergeProblem(c); ColorBarRedraw(); Draw(); break;
   case FILE_SAVE_AS         : SaveToDisk(c, WID.ED.saveAsDialog, CreateOutputFile); break;
-  case FILE_SAVE_OPTIONS_AS : Print_Context(0,c); break;
+  case FILE_SAVE_OPTIONS_AS : Print_Context(0,GMSH_FULLRC,c); break;
   default :
     Msg(WARNING, "Unknown event in FileCb : %d", (long int)client_data); 
     break;
diff --git a/Motif/CbInput.cpp b/Motif/CbInput.cpp
index e5da3fa8ff3681d20f2cf6845dac683f3212eb8c..17a80f5206ef237d9caf3a9299ec94b43e4a56ff 100644
--- a/Motif/CbInput.cpp
+++ b/Motif/CbInput.cpp
@@ -1,4 +1,4 @@
-// $Id: CbInput.cpp,v 1.6 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: CbInput.cpp,v 1.7 2001-02-17 22:04:05 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -206,6 +206,8 @@ void KeyboardAccel(XEvent *event){
       break;
     case XK_c : case XK_C :
       opt_general_color_scheme(0,GMSH_SET,opt_general_color_scheme(0,GMSH_GET,0)+1);
+      opt_geometry_color_scheme(0,GMSH_SET,opt_general_color_scheme(0,GMSH_GET,0));
+      opt_mesh_color_scheme(0,GMSH_SET,opt_general_color_scheme(0,GMSH_GET,0));
       XtVaSetValues(WID.OD.miscColorSchemeScale,XmNvalue, CTX.color_scheme, NULL);
       XmUpdateDisplay(WID.OD.miscColorSchemeScale);  
       Draw();
diff --git a/Motif/CbOptions.cpp b/Motif/CbOptions.cpp
index 2cf6b66f6f257123b723fbe71f66610562c2c247..90110735d84ecfe83fea3e9bc72fca79c85c6035 100644
--- a/Motif/CbOptions.cpp
+++ b/Motif/CbOptions.cpp
@@ -1,4 +1,4 @@
-// $Id: CbOptions.cpp,v 1.6 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: CbOptions.cpp,v 1.7 2001-02-17 22:04:05 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -9,6 +9,7 @@
 #include "Widgets.h"
 #include "Pixmaps.h"
 #include "Context.h"
+#include "Options.h"
 #include "XContext.h"
 #include "Register.h"
 #include "Timer.h"
@@ -52,8 +53,9 @@ void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data){
   case OPTIONS_TRACKBALL     : CTX.useTrackball = !CTX.useTrackball; break;
   case OPTIONS_COLOR_SCHEME_SCALE: 
     XmScaleGetValue(WID.OD.miscColorSchemeScale, &e); 
-    CTX.color_scheme=e;
-    Init_Colors(0);
+    opt_general_color_scheme(0,GMSH_SET,e);
+    opt_geometry_color_scheme(0,GMSH_SET,e);
+    opt_mesh_color_scheme(0,GMSH_SET,e);
     Draw();
     break ;
   case OPTIONS_ORTHOGRAPHIC  : CTX.ortho = 1; break;
@@ -118,7 +120,11 @@ void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data){
             CTX.r[0],CTX.r[1],CTX.r[2],
             CTX.t[0],CTX.t[1],CTX.t[2],
             CTX.s[0],CTX.s[1],CTX.s[2]);
+<<<<<<< CbOptions.cpp
+    Print_Context(0, GMSH_FULLRC, NULL);
+=======
     Print_Context(0, NULL);
+>>>>>>> 1.6
     break ;
 
     /* save */
diff --git a/Motif/Makefile b/Motif/Makefile
index 264d67ec88f2e1b75c60d20b129977cf30b90046..dd756e576b7f7062acd58b4bf8c3ab4e681f532b 100644
--- a/Motif/Makefile
+++ b/Motif/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.7 2001-02-12 17:42:26 geuzaine Exp $
+# $Id: Makefile,v 1.8 2001-02-17 22:04:05 geuzaine Exp $
 #
 # Makefile for "libMotif.a"
 #
@@ -159,8 +159,8 @@ CbOptions.o: CbOptions.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \
  ../Graphics/Draw.h ../Common/Views.h ../Common/Const.h \
  ../Common/ColorTable.h Widgets.h Pixmaps.h ../Common/Context.h \
- XContext.h Register.h ../Common/Timer.h ../Geo/Visibility.h \
- CbOptions.h CbGeom.h CbMesh.h CbPost.h
+ ../Common/Options.h XContext.h Register.h ../Common/Timer.h \
+ ../Geo/Visibility.h CbOptions.h CbGeom.h CbMesh.h CbPost.h
 CbFile.o: CbFile.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
  ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \
@@ -168,7 +168,8 @@ CbFile.o: CbFile.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \
  ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \
  ../Common/Views.h ../Common/ColorTable.h Widgets.h \
- ../Common/Context.h ../Graphics/CreateFile.h CbFile.h CbColorbar.h
+ ../Common/Context.h ../Common/Options.h ../Graphics/CreateFile.h \
+ CbFile.h CbColorbar.h
 CbInput.o: CbInput.cpp ../Common/Gmsh.h ../Common/Message.h \
  ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \
  ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Mesh/Mesh.h \
diff --git a/Motif/Message.cpp b/Motif/Message.cpp
index bcc239b2772033141262ba9a9304d3c5ac8aafdd..a36cda5b63618295e038230e458df919445edcdd 100644
--- a/Motif/Message.cpp
+++ b/Motif/Message.cpp
@@ -1,4 +1,4 @@
-// $Id: Message.cpp,v 1.6 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: Message.cpp,v 1.7 2001-02-17 22:04:05 geuzaine Exp $
 
 #include <signal.h>
 #include <sys/resource.h>
@@ -120,7 +120,7 @@ void Msg(int level, char *fmt, ...){
         fprintf(stderr, "\n");
       }
     }
-    else{
+    else if(CTX.expose){
       vsprintf(TextBuffer, fmt, args);
       XtVaSetValues(WID.G.infoLabel, XmNlabelString,
                     XmStringCreateSimple(TextBuffer), NULL);
@@ -136,7 +136,7 @@ void Msg(int level, char *fmt, ...){
         fprintf(stderr, "\n");
       }
     }
-    else{
+    else if(CTX.expose){
       vsprintf(TextBuffer, fmt, args);
       XtVaSetValues(WID.G.selectLabel, XmNlabelString, 
                     XmStringCreateSimple(TextBuffer), NULL);
@@ -152,7 +152,7 @@ void Msg(int level, char *fmt, ...){
         fprintf(stderr, "\n");
       }
     }
-    else{
+    else if(CTX.expose){
       vsprintf(TextBuffer, fmt, args);
       XtVaSetValues(WID.G.statusLabel, XmNlabelString,
                     XmStringCreateSimple(TextBuffer), NULL);
diff --git a/Parser/FunctionManager.cpp b/Parser/FunctionManager.cpp
index 606c015b44854861396b688d71d6be9fb3b6132e..7c93d043d44d7ec01f90f231d46b7f19fd9b93a5 100644
--- a/Parser/FunctionManager.cpp
+++ b/Parser/FunctionManager.cpp
@@ -1,4 +1,4 @@
-// $Id: FunctionManager.cpp,v 1.9 2001-02-16 20:16:40 remacle Exp $
+// $Id: FunctionManager.cpp,v 1.10 2001-02-17 22:09:00 geuzaine Exp $
 
 #include <stdio.h>
 #include <stack>
@@ -30,12 +30,12 @@ class File_Position
 class mystack
 {
 public:
-  std::stack<File_Position> s;
+  stack<File_Position> s;
 };
 class mymap
 {
 public :
-    std::map<char*,File_Position,ltstr> m;
+  map<char*,File_Position,ltstr> m;
 };
 
 FunctionManager *FunctionManager::instance = 0;
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 9eef6f2a8f06564bd0d1b7533bf8ea8d2b790b53..05d56a834a9333d58ae4ec72139cc4f89867684d 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1,175 +1,176 @@
 
 /*  A Bison parser, made from Gmsh.y
-    by GNU Bison version 1.28  */
+ by  GNU Bison version 1.25
+  */
 
 #define YYBISON 1  /* Identify Bison output.  */
 
-#define	tDOUBLE	257
-#define	tSTRING	258
-#define	tBIGSTR	259
-#define	tEND	260
-#define	tAFFECT	261
-#define	tDOTS	262
-#define	tPi	263
-#define	tExp	264
-#define	tLog	265
-#define	tLog10	266
-#define	tSqrt	267
-#define	tSin	268
-#define	tAsin	269
-#define	tCos	270
-#define	tAcos	271
-#define	tTan	272
-#define	tRand	273
-#define	tAtan	274
-#define	tAtan2	275
-#define	tSinh	276
-#define	tCosh	277
-#define	tTanh	278
-#define	tFabs	279
-#define	tFloor	280
-#define	tCeil	281
-#define	tFmod	282
-#define	tModulo	283
-#define	tHypot	284
-#define	tPrintf	285
-#define	tSprintf	286
-#define	tDraw	287
-#define	tPoint	288
-#define	tCircle	289
-#define	tEllipsis	290
-#define	tLine	291
-#define	tSurface	292
-#define	tSpline	293
-#define	tVolume	294
-#define	tCharacteristic	295
-#define	tLength	296
-#define	tParametric	297
-#define	tElliptic	298
-#define	tPlane	299
-#define	tRuled	300
-#define	tTransfinite	301
-#define	tComplex	302
-#define	tPhysical	303
-#define	tUsing	304
-#define	tBump	305
-#define	tProgression	306
-#define	tRotate	307
-#define	tTranslate	308
-#define	tSymmetry	309
-#define	tDilate	310
-#define	tExtrude	311
-#define	tDuplicata	312
-#define	tLoop	313
-#define	tRecombine	314
-#define	tDelete	315
-#define	tCoherence	316
-#define	tIntersect	317
-#define	tAttractor	318
-#define	tLayers	319
-#define	tScalarTetrahedron	320
-#define	tVectorTetrahedron	321
-#define	tTensorTetrahedron	322
-#define	tScalarTriangle	323
-#define	tVectorTriangle	324
-#define	tTensorTriangle	325
-#define	tScalarLine	326
-#define	tVectorLine	327
-#define	tTensorLine	328
-#define	tScalarPoint	329
-#define	tVectorPoint	330
-#define	tTensorPoint	331
-#define	tBSpline	332
-#define	tNurbs	333
-#define	tOrder	334
-#define	tWith	335
-#define	tBounds	336
-#define	tKnots	337
-#define	tColor	338
-#define	tColorTable	339
-#define	tFor	340
-#define	tIn	341
-#define	tEndFor	342
-#define	tIf	343
-#define	tEndIf	344
-#define	tExit	345
-#define	tReturn	346
-#define	tCall	347
-#define	tFunction	348
-#define	tMesh	349
-#define	tB_SPLINE_SURFACE_WITH_KNOTS	350
-#define	tB_SPLINE_CURVE_WITH_KNOTS	351
-#define	tCARTESIAN_POINT	352
-#define	tTRUE	353
-#define	tFALSE	354
-#define	tUNSPECIFIED	355
-#define	tU	356
-#define	tV	357
-#define	tEDGE_CURVE	358
-#define	tVERTEX_POINT	359
-#define	tORIENTED_EDGE	360
-#define	tPLANE	361
-#define	tFACE_OUTER_BOUND	362
-#define	tEDGE_LOOP	363
-#define	tADVANCED_FACE	364
-#define	tVECTOR	365
-#define	tDIRECTION	366
-#define	tAXIS2_PLACEMENT_3D	367
-#define	tISO	368
-#define	tENDISO	369
-#define	tENDSEC	370
-#define	tDATA	371
-#define	tHEADER	372
-#define	tFILE_DESCRIPTION	373
-#define	tFILE_SCHEMA	374
-#define	tFILE_NAME	375
-#define	tMANIFOLD_SOLID_BREP	376
-#define	tCLOSED_SHELL	377
-#define	tADVANCED_BREP_SHAPE_REPRESENTATION	378
-#define	tFACE_BOUND	379
-#define	tCYLINDRICAL_SURFACE	380
-#define	tCONICAL_SURFACE	381
-#define	tCIRCLE	382
-#define	tTRIMMED_CURVE	383
-#define	tGEOMETRIC_SET	384
-#define	tCOMPOSITE_CURVE_SEGMENT	385
-#define	tCONTINUOUS	386
-#define	tCOMPOSITE_CURVE	387
-#define	tTOROIDAL_SURFACE	388
-#define	tPRODUCT_DEFINITION	389
-#define	tPRODUCT_DEFINITION_SHAPE	390
-#define	tSHAPE_DEFINITION_REPRESENTATION	391
-#define	tELLIPSE	392
-#define	tTrimmed	393
-#define	tSolid	394
-#define	tEndSolid	395
-#define	tVertex	396
-#define	tFacet	397
-#define	tNormal	398
-#define	tOuter	399
-#define	tLoopSTL	400
-#define	tEndLoop	401
-#define	tEndFacet	402
-#define	tAFFECTPLUS	403
-#define	tAFFECTMINUS	404
-#define	tAFFECTTIMES	405
-#define	tAFFECTDIVIDE	406
-#define	tOR	407
-#define	tAND	408
-#define	tEQUAL	409
-#define	tNOTEQUAL	410
-#define	tAPPROXEQUAL	411
-#define	tLESSOREQUAL	412
-#define	tGREATEROREQUAL	413
-#define	tCROSSPRODUCT	414
-#define	tPLUSPLUS	415
-#define	tMINUSMINUS	416
-#define	UNARYPREC	417
+#define	tDOUBLE	258
+#define	tSTRING	259
+#define	tBIGSTR	260
+#define	tEND	261
+#define	tAFFECT	262
+#define	tDOTS	263
+#define	tPi	264
+#define	tExp	265
+#define	tLog	266
+#define	tLog10	267
+#define	tSqrt	268
+#define	tSin	269
+#define	tAsin	270
+#define	tCos	271
+#define	tAcos	272
+#define	tTan	273
+#define	tRand	274
+#define	tAtan	275
+#define	tAtan2	276
+#define	tSinh	277
+#define	tCosh	278
+#define	tTanh	279
+#define	tFabs	280
+#define	tFloor	281
+#define	tCeil	282
+#define	tFmod	283
+#define	tModulo	284
+#define	tHypot	285
+#define	tPrintf	286
+#define	tSprintf	287
+#define	tDraw	288
+#define	tPoint	289
+#define	tCircle	290
+#define	tEllipsis	291
+#define	tLine	292
+#define	tSurface	293
+#define	tSpline	294
+#define	tVolume	295
+#define	tCharacteristic	296
+#define	tLength	297
+#define	tParametric	298
+#define	tElliptic	299
+#define	tPlane	300
+#define	tRuled	301
+#define	tTransfinite	302
+#define	tComplex	303
+#define	tPhysical	304
+#define	tUsing	305
+#define	tBump	306
+#define	tProgression	307
+#define	tRotate	308
+#define	tTranslate	309
+#define	tSymmetry	310
+#define	tDilate	311
+#define	tExtrude	312
+#define	tDuplicata	313
+#define	tLoop	314
+#define	tRecombine	315
+#define	tDelete	316
+#define	tCoherence	317
+#define	tIntersect	318
+#define	tAttractor	319
+#define	tLayers	320
+#define	tScalarTetrahedron	321
+#define	tVectorTetrahedron	322
+#define	tTensorTetrahedron	323
+#define	tScalarTriangle	324
+#define	tVectorTriangle	325
+#define	tTensorTriangle	326
+#define	tScalarLine	327
+#define	tVectorLine	328
+#define	tTensorLine	329
+#define	tScalarPoint	330
+#define	tVectorPoint	331
+#define	tTensorPoint	332
+#define	tBSpline	333
+#define	tNurbs	334
+#define	tOrder	335
+#define	tWith	336
+#define	tBounds	337
+#define	tKnots	338
+#define	tColor	339
+#define	tColorTable	340
+#define	tFor	341
+#define	tIn	342
+#define	tEndFor	343
+#define	tIf	344
+#define	tEndIf	345
+#define	tExit	346
+#define	tReturn	347
+#define	tCall	348
+#define	tFunction	349
+#define	tMesh	350
+#define	tB_SPLINE_SURFACE_WITH_KNOTS	351
+#define	tB_SPLINE_CURVE_WITH_KNOTS	352
+#define	tCARTESIAN_POINT	353
+#define	tTRUE	354
+#define	tFALSE	355
+#define	tUNSPECIFIED	356
+#define	tU	357
+#define	tV	358
+#define	tEDGE_CURVE	359
+#define	tVERTEX_POINT	360
+#define	tORIENTED_EDGE	361
+#define	tPLANE	362
+#define	tFACE_OUTER_BOUND	363
+#define	tEDGE_LOOP	364
+#define	tADVANCED_FACE	365
+#define	tVECTOR	366
+#define	tDIRECTION	367
+#define	tAXIS2_PLACEMENT_3D	368
+#define	tISO	369
+#define	tENDISO	370
+#define	tENDSEC	371
+#define	tDATA	372
+#define	tHEADER	373
+#define	tFILE_DESCRIPTION	374
+#define	tFILE_SCHEMA	375
+#define	tFILE_NAME	376
+#define	tMANIFOLD_SOLID_BREP	377
+#define	tCLOSED_SHELL	378
+#define	tADVANCED_BREP_SHAPE_REPRESENTATION	379
+#define	tFACE_BOUND	380
+#define	tCYLINDRICAL_SURFACE	381
+#define	tCONICAL_SURFACE	382
+#define	tCIRCLE	383
+#define	tTRIMMED_CURVE	384
+#define	tGEOMETRIC_SET	385
+#define	tCOMPOSITE_CURVE_SEGMENT	386
+#define	tCONTINUOUS	387
+#define	tCOMPOSITE_CURVE	388
+#define	tTOROIDAL_SURFACE	389
+#define	tPRODUCT_DEFINITION	390
+#define	tPRODUCT_DEFINITION_SHAPE	391
+#define	tSHAPE_DEFINITION_REPRESENTATION	392
+#define	tELLIPSE	393
+#define	tTrimmed	394
+#define	tSolid	395
+#define	tEndSolid	396
+#define	tVertex	397
+#define	tFacet	398
+#define	tNormal	399
+#define	tOuter	400
+#define	tLoopSTL	401
+#define	tEndLoop	402
+#define	tEndFacet	403
+#define	tAFFECTPLUS	404
+#define	tAFFECTMINUS	405
+#define	tAFFECTTIMES	406
+#define	tAFFECTDIVIDE	407
+#define	tOR	408
+#define	tAND	409
+#define	tEQUAL	410
+#define	tNOTEQUAL	411
+#define	tAPPROXEQUAL	412
+#define	tLESSOREQUAL	413
+#define	tGREATEROREQUAL	414
+#define	tCROSSPRODUCT	415
+#define	tPLUSPLUS	416
+#define	tMINUSMINUS	417
+#define	UNARYPREC	418
 
 #line 1 "Gmsh.y"
  
 
-// $Id: Gmsh.tab.cpp,v 1.71 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.72 2001-02-17 22:09:00 geuzaine Exp $
 
 #include <stdarg.h>
 
@@ -254,11 +255,11 @@ typedef union {
 
 
 
-#define	YYFINAL		1487
+#define	YYFINAL		1491
 #define	YYFLAG		-32768
 #define	YYNTBASE	182
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 417 ? yytranslate[x] : 263)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 418 ? yytranslate[x] : 263)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -286,23 +287,23 @@ static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   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,   133,   134,   135,   136,
-   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150,   151,   152,   154,   155,   156,   157,
-   158,   160,   162,   168,   170,   171,   172
+     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   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,   133,   134,   135,
+   136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+   146,   147,   148,   149,   150,   151,   152,   154,   155,   156,
+   157,   158,   160,   162,   168,   170,   171,   172
 };
 
 #if YYDEBUG != 0
@@ -322,24 +323,24 @@ static const short yyprhs[] = {     0,
    837,   869,   871,   875,   876,   908,   910,   914,   915,   947,
    949,   951,   953,   955,   957,   959,   961,   966,   974,   981,
    985,   992,   999,  1009,  1016,  1026,  1032,  1041,  1050,  1062,
-  1072,  1080,  1089,  1102,  1109,  1115,  1123,  1131,  1144,  1152,
-  1162,  1180,  1188,  1197,  1206,  1214,  1226,  1232,  1241,  1254,
-  1263,  1286,  1307,  1316,  1325,  1331,  1340,  1348,  1357,  1363,
-  1375,  1381,  1391,  1393,  1395,  1397,  1398,  1401,  1406,  1411,
-  1418,  1422,  1426,  1430,  1433,  1436,  1443,  1452,  1461,  1472,
-  1474,  1477,  1479,  1483,  1488,  1490,  1499,  1512,  1521,  1534,
-  1543,  1556,  1568,  1584,  1586,  1589,  1599,  1602,  1609,  1619,
-  1629,  1638,  1647,  1656,  1663,  1668,  1671,  1674,  1676,  1679,
-  1681,  1683,  1685,  1687,  1689,  1691,  1695,  1698,  1701,  1704,
-  1708,  1712,  1716,  1720,  1724,  1728,  1732,  1736,  1740,  1744,
-  1748,  1752,  1756,  1760,  1766,  1771,  1776,  1781,  1786,  1791,
-  1796,  1801,  1806,  1811,  1816,  1823,  1828,  1833,  1838,  1843,
-  1848,  1853,  1860,  1867,  1874,  1879,  1881,  1883,  1885,  1890,
-  1893,  1899,  1903,  1910,  1915,  1923,  1927,  1933,  1935,  1938,
-  1941,  1945,  1949,  1961,  1971,  1979,  1987,  1988,  1992,  1994,
-  1998,  1999,  2003,  2007,  2009,  2013,  2014,  2016,  2020,  2024,
-  2026,  2028,  2032,  2036,  2040,  2046,  2056,  2064,  2070,  2072,
-  2078,  2082,  2089,  2091,  2095,  2097,  2102
+  1069,  1079,  1087,  1096,  1109,  1116,  1122,  1130,  1138,  1151,
+  1159,  1169,  1187,  1195,  1204,  1213,  1221,  1233,  1239,  1248,
+  1261,  1270,  1293,  1314,  1323,  1332,  1338,  1347,  1355,  1364,
+  1370,  1382,  1388,  1398,  1400,  1402,  1404,  1405,  1408,  1413,
+  1418,  1425,  1429,  1433,  1437,  1440,  1443,  1450,  1459,  1468,
+  1479,  1481,  1484,  1486,  1490,  1495,  1497,  1506,  1519,  1528,
+  1541,  1550,  1563,  1575,  1591,  1593,  1596,  1606,  1609,  1616,
+  1626,  1636,  1645,  1654,  1663,  1670,  1675,  1678,  1681,  1683,
+  1686,  1688,  1690,  1692,  1694,  1696,  1698,  1702,  1705,  1708,
+  1711,  1715,  1719,  1723,  1727,  1731,  1735,  1739,  1743,  1747,
+  1751,  1755,  1759,  1763,  1767,  1773,  1778,  1783,  1788,  1793,
+  1798,  1803,  1808,  1813,  1818,  1823,  1830,  1835,  1840,  1845,
+  1850,  1855,  1860,  1867,  1874,  1881,  1886,  1888,  1890,  1892,
+  1897,  1900,  1906,  1910,  1917,  1922,  1930,  1934,  1940,  1942,
+  1945,  1948,  1952,  1956,  1968,  1978,  1986,  1994,  1995,  1999,
+  2001,  2005,  2006,  2010,  2014,  2016,  2020,  2021,  2023,  2027,
+  2031,  2033,  2035,  2039,  2043,  2047,  2053,  2063,  2071,  2077,
+  2079,  2085,  2089,  2096,  2098,  2102,  2104,  2109
 };
 
 static const short yyrhs[] = {   184,
@@ -449,111 +450,112 @@ static const short yyrhs[] = {   184,
      0,     4,   176,   248,   177,   178,     4,   231,     6,     0,
      4,   178,    84,   178,     4,     7,   259,     6,     0,     4,
    176,   248,   177,   178,    84,   178,     4,     7,   259,     6,
-     0,     4,   176,   248,   177,   178,    85,     7,   260,     6,
-     0,    34,   174,   248,   175,     7,   251,     6,     0,    49,
-    34,   174,   248,   175,     7,   257,     6,     0,    64,    34,
-   257,     7,   180,   248,   179,   248,   179,   248,   181,     6,
-     0,    41,    42,   257,     7,   248,     6,     0,    34,   180,
-   248,   181,     6,     0,    37,   174,   248,   175,     7,   257,
-     6,     0,    39,   174,   248,   175,     7,   257,     6,     0,
-    64,    37,   257,     7,   180,   248,   179,   248,   179,   248,
-   181,     6,     0,    35,   174,   248,   175,     7,   257,     6,
-     0,    35,   174,   248,   175,     7,   257,    45,   251,     6,
-     0,    43,   174,   248,   175,     7,   180,   248,   179,   248,
-   179,     5,   179,     5,   179,     5,   181,     6,     0,    36,
-   174,   248,   175,     7,   257,     6,     0,    49,    37,   174,
-   248,   175,     7,   257,     6,     0,    37,    59,   174,   248,
-   175,     7,   257,     6,     0,    78,   174,   248,   175,     7,
-   257,     6,     0,    79,   174,   248,   175,     7,   257,    83,
-   257,    80,   248,     6,     0,    37,   180,   248,   181,     6,
-     0,    45,    38,   174,   248,   175,     7,   257,     6,     0,
-   139,    38,   174,   248,   175,     7,   180,   248,   179,   257,
-   181,     6,     0,    46,    38,   174,   248,   175,     7,   257,
-     6,     0,    79,    38,    81,    82,   174,   248,   175,     7,
-   255,    83,   180,   257,   179,   257,   181,    80,   180,   248,
-   179,   248,   181,     6,     0,    79,    38,   174,   248,   175,
-     7,   255,    83,   180,   257,   179,   257,   181,    80,   180,
-   248,   179,   248,   181,     6,     0,    49,    38,   174,   248,
-   175,     7,   257,     6,     0,    38,    59,   174,   248,   175,
-     7,   257,     6,     0,    38,   180,   248,   181,     6,     0,
-    48,    40,   174,   248,   175,     7,   257,     6,     0,    40,
-   174,   248,   175,     7,   257,     6,     0,    49,    40,   174,
-   248,   175,     7,   257,     6,     0,    54,   251,   180,   235,
-   181,     0,    53,   180,   251,   179,   251,   179,   248,   181,
-   180,   235,   181,     0,    55,   251,   180,   235,   181,     0,
-    56,   180,   251,   179,   248,   181,   180,   235,   181,     0,
-   237,     0,   236,     0,   234,     0,     0,   236,   233,     0,
-    58,   180,   236,   181,     0,    61,   180,   236,   181,     0,
-    61,     4,   176,   248,   177,     6,     0,    61,    95,     6,
-     0,     4,   262,     6,     0,     4,   248,     6,     0,    91,
-     6,     0,    33,     6,     0,    86,   174,   248,     8,   248,
-   175,     0,    86,   174,   248,     8,   248,     8,   248,   175,
-     0,    86,     4,    87,   180,   248,     8,   248,   181,     0,
-    86,     4,    87,   180,   248,     8,   248,     8,   248,   181,
-     0,    88,     0,    94,     4,     0,    92,     0,    93,     4,
-     6,     0,    89,   174,   248,   175,     0,    90,     0,    57,
-    34,   180,   248,   179,   251,   181,     6,     0,    57,    34,
-   180,   248,   179,   251,   179,   251,   179,   248,   181,     6,
-     0,    57,    37,   180,   248,   179,   251,   181,     6,     0,
-    57,    37,   180,   248,   179,   251,   179,   251,   179,   248,
-   181,     6,     0,    57,    38,   180,   248,   179,   251,   181,
-     6,     0,    57,    38,   180,   248,   179,   251,   179,   251,
-   179,   248,   181,     6,     0,    57,    38,   180,   248,   179,
-   251,   181,   180,   242,   181,     6,     0,    57,    38,   180,
-   248,   179,   251,   179,   251,   179,   248,   181,   180,   242,
-   181,     6,     0,   243,     0,   242,   243,     0,    65,   180,
-   257,   179,   257,   179,   257,   181,     6,     0,    60,     6,
-     0,    47,    37,   257,     7,   248,     6,     0,    47,    37,
-   257,     7,   248,    50,    52,   248,     6,     0,    47,    37,
-   257,     7,   248,    50,    51,   248,     6,     0,    47,    38,
-   180,   248,   181,     7,   257,     6,     0,    44,    38,   180,
-   248,   181,     7,   257,     6,     0,    47,    40,   180,   248,
-   181,     7,   257,     6,     0,    60,    38,   257,     7,   248,
-     6,     0,    60,    38,   257,     6,     0,    62,     6,     0,
-    63,     6,     0,     3,     0,   164,     3,     0,    99,     0,
-   100,     0,   101,     0,   102,     0,   103,     0,   249,     0,
-   174,   248,   175,     0,   164,   248,     0,   163,   248,     0,
-   169,   248,     0,   248,   164,   248,     0,   248,   163,   248,
-     0,   248,   165,   248,     0,   248,   166,   248,     0,   248,
-   167,   248,     0,   248,   173,   248,     0,   248,   159,   248,
-     0,   248,   161,   248,     0,   248,   160,   248,     0,   248,
-   162,   248,     0,   248,   156,   248,     0,   248,   157,   248,
-     0,   248,   155,   248,     0,   248,   154,   248,     0,   248,
-   153,   248,     8,   248,     0,    10,   174,   248,   175,     0,
-    11,   174,   248,   175,     0,    12,   174,   248,   175,     0,
-    13,   174,   248,   175,     0,    14,   174,   248,   175,     0,
-    15,   174,   248,   175,     0,    16,   174,   248,   175,     0,
-    17,   174,   248,   175,     0,    18,   174,   248,   175,     0,
-    20,   174,   248,   175,     0,    21,   174,   248,   179,   248,
-   175,     0,    22,   174,   248,   175,     0,    23,   174,   248,
-   175,     0,    24,   174,   248,   175,     0,    25,   174,   248,
-   175,     0,    26,   174,   248,   175,     0,    27,   174,   248,
-   175,     0,    28,   174,   248,   179,   248,   175,     0,    29,
-   174,   248,   179,   248,   175,     0,    30,   174,   248,   179,
-   248,   175,     0,    19,   174,   248,   175,     0,     3,     0,
-     9,     0,     4,     0,     4,   176,   248,   177,     0,     4,
-   231,     0,     4,   176,   248,   177,   231,     0,     4,   178,
-     4,     0,     4,   176,   248,   177,   178,     4,     0,     4,
-   178,     4,   231,     0,     4,   176,   248,   177,   178,     4,
-   231,     0,   248,     8,   248,     0,   248,     8,   248,     8,
-   248,     0,   252,     0,   164,   251,     0,   163,   251,     0,
-   251,   164,   251,     0,   251,   163,   251,     0,   180,   248,
-   179,   248,   179,   248,   179,   248,   179,   248,   181,     0,
-   180,   248,   179,   248,   179,   248,   179,   248,   181,     0,
-   180,   248,   179,   248,   179,   248,   181,     0,   174,   248,
-   179,   248,   179,   248,   175,     0,     0,   174,   254,   175,
-     0,     5,     0,   254,   179,     5,     0,     0,   180,   256,
-   181,     0,   174,   256,   175,     0,   257,     0,   256,   179,
-   257,     0,     0,   248,     0,     4,   176,   177,     0,   180,
-   258,   181,     0,   248,     0,   250,     0,     4,   176,   177,
-     0,   258,   179,   248,     0,   258,   179,   250,     0,   258,
-   179,     4,   176,   177,     0,   180,   248,   179,   248,   179,
-   248,   179,   248,   181,     0,   180,   248,   179,   248,   179,
-   248,   181,     0,   180,     4,   179,   248,   181,     0,     4,
-     0,     4,   178,    84,   178,     4,     0,   180,   261,   181,
-     0,     4,   176,   248,   177,   178,    85,     0,   259,     0,
-   261,   179,   259,     0,     5,     0,    32,   174,     5,   175,
-     0,    32,   174,     5,   179,   258,   175,     0
+     0,     4,   178,    85,     7,   260,     6,     0,     4,   176,
+   248,   177,   178,    85,     7,   260,     6,     0,    34,   174,
+   248,   175,     7,   251,     6,     0,    49,    34,   174,   248,
+   175,     7,   257,     6,     0,    64,    34,   257,     7,   180,
+   248,   179,   248,   179,   248,   181,     6,     0,    41,    42,
+   257,     7,   248,     6,     0,    34,   180,   248,   181,     6,
+     0,    37,   174,   248,   175,     7,   257,     6,     0,    39,
+   174,   248,   175,     7,   257,     6,     0,    64,    37,   257,
+     7,   180,   248,   179,   248,   179,   248,   181,     6,     0,
+    35,   174,   248,   175,     7,   257,     6,     0,    35,   174,
+   248,   175,     7,   257,    45,   251,     6,     0,    43,   174,
+   248,   175,     7,   180,   248,   179,   248,   179,     5,   179,
+     5,   179,     5,   181,     6,     0,    36,   174,   248,   175,
+     7,   257,     6,     0,    49,    37,   174,   248,   175,     7,
+   257,     6,     0,    37,    59,   174,   248,   175,     7,   257,
+     6,     0,    78,   174,   248,   175,     7,   257,     6,     0,
+    79,   174,   248,   175,     7,   257,    83,   257,    80,   248,
+     6,     0,    37,   180,   248,   181,     6,     0,    45,    38,
+   174,   248,   175,     7,   257,     6,     0,   139,    38,   174,
+   248,   175,     7,   180,   248,   179,   257,   181,     6,     0,
+    46,    38,   174,   248,   175,     7,   257,     6,     0,    79,
+    38,    81,    82,   174,   248,   175,     7,   255,    83,   180,
+   257,   179,   257,   181,    80,   180,   248,   179,   248,   181,
+     6,     0,    79,    38,   174,   248,   175,     7,   255,    83,
+   180,   257,   179,   257,   181,    80,   180,   248,   179,   248,
+   181,     6,     0,    49,    38,   174,   248,   175,     7,   257,
+     6,     0,    38,    59,   174,   248,   175,     7,   257,     6,
+     0,    38,   180,   248,   181,     6,     0,    48,    40,   174,
+   248,   175,     7,   257,     6,     0,    40,   174,   248,   175,
+     7,   257,     6,     0,    49,    40,   174,   248,   175,     7,
+   257,     6,     0,    54,   251,   180,   235,   181,     0,    53,
+   180,   251,   179,   251,   179,   248,   181,   180,   235,   181,
+     0,    55,   251,   180,   235,   181,     0,    56,   180,   251,
+   179,   248,   181,   180,   235,   181,     0,   237,     0,   236,
+     0,   234,     0,     0,   236,   233,     0,    58,   180,   236,
+   181,     0,    61,   180,   236,   181,     0,    61,     4,   176,
+   248,   177,     6,     0,    61,    95,     6,     0,     4,   262,
+     6,     0,     4,   248,     6,     0,    91,     6,     0,    33,
+     6,     0,    86,   174,   248,     8,   248,   175,     0,    86,
+   174,   248,     8,   248,     8,   248,   175,     0,    86,     4,
+    87,   180,   248,     8,   248,   181,     0,    86,     4,    87,
+   180,   248,     8,   248,     8,   248,   181,     0,    88,     0,
+    94,     4,     0,    92,     0,    93,     4,     6,     0,    89,
+   174,   248,   175,     0,    90,     0,    57,    34,   180,   248,
+   179,   251,   181,     6,     0,    57,    34,   180,   248,   179,
+   251,   179,   251,   179,   248,   181,     6,     0,    57,    37,
+   180,   248,   179,   251,   181,     6,     0,    57,    37,   180,
+   248,   179,   251,   179,   251,   179,   248,   181,     6,     0,
+    57,    38,   180,   248,   179,   251,   181,     6,     0,    57,
+    38,   180,   248,   179,   251,   179,   251,   179,   248,   181,
+     6,     0,    57,    38,   180,   248,   179,   251,   181,   180,
+   242,   181,     6,     0,    57,    38,   180,   248,   179,   251,
+   179,   251,   179,   248,   181,   180,   242,   181,     6,     0,
+   243,     0,   242,   243,     0,    65,   180,   257,   179,   257,
+   179,   257,   181,     6,     0,    60,     6,     0,    47,    37,
+   257,     7,   248,     6,     0,    47,    37,   257,     7,   248,
+    50,    52,   248,     6,     0,    47,    37,   257,     7,   248,
+    50,    51,   248,     6,     0,    47,    38,   180,   248,   181,
+     7,   257,     6,     0,    44,    38,   180,   248,   181,     7,
+   257,     6,     0,    47,    40,   180,   248,   181,     7,   257,
+     6,     0,    60,    38,   257,     7,   248,     6,     0,    60,
+    38,   257,     6,     0,    62,     6,     0,    63,     6,     0,
+     3,     0,   164,     3,     0,    99,     0,   100,     0,   101,
+     0,   102,     0,   103,     0,   249,     0,   174,   248,   175,
+     0,   164,   248,     0,   163,   248,     0,   169,   248,     0,
+   248,   164,   248,     0,   248,   163,   248,     0,   248,   165,
+   248,     0,   248,   166,   248,     0,   248,   167,   248,     0,
+   248,   173,   248,     0,   248,   159,   248,     0,   248,   161,
+   248,     0,   248,   160,   248,     0,   248,   162,   248,     0,
+   248,   156,   248,     0,   248,   157,   248,     0,   248,   155,
+   248,     0,   248,   154,   248,     0,   248,   153,   248,     8,
+   248,     0,    10,   174,   248,   175,     0,    11,   174,   248,
+   175,     0,    12,   174,   248,   175,     0,    13,   174,   248,
+   175,     0,    14,   174,   248,   175,     0,    15,   174,   248,
+   175,     0,    16,   174,   248,   175,     0,    17,   174,   248,
+   175,     0,    18,   174,   248,   175,     0,    20,   174,   248,
+   175,     0,    21,   174,   248,   179,   248,   175,     0,    22,
+   174,   248,   175,     0,    23,   174,   248,   175,     0,    24,
+   174,   248,   175,     0,    25,   174,   248,   175,     0,    26,
+   174,   248,   175,     0,    27,   174,   248,   175,     0,    28,
+   174,   248,   179,   248,   175,     0,    29,   174,   248,   179,
+   248,   175,     0,    30,   174,   248,   179,   248,   175,     0,
+    19,   174,   248,   175,     0,     3,     0,     9,     0,     4,
+     0,     4,   176,   248,   177,     0,     4,   231,     0,     4,
+   176,   248,   177,   231,     0,     4,   178,     4,     0,     4,
+   176,   248,   177,   178,     4,     0,     4,   178,     4,   231,
+     0,     4,   176,   248,   177,   178,     4,   231,     0,   248,
+     8,   248,     0,   248,     8,   248,     8,   248,     0,   252,
+     0,   164,   251,     0,   163,   251,     0,   251,   164,   251,
+     0,   251,   163,   251,     0,   180,   248,   179,   248,   179,
+   248,   179,   248,   179,   248,   181,     0,   180,   248,   179,
+   248,   179,   248,   179,   248,   181,     0,   180,   248,   179,
+   248,   179,   248,   181,     0,   174,   248,   179,   248,   179,
+   248,   175,     0,     0,   174,   254,   175,     0,     5,     0,
+   254,   179,     5,     0,     0,   180,   256,   181,     0,   174,
+   256,   175,     0,   257,     0,   256,   179,   257,     0,     0,
+   248,     0,     4,   176,   177,     0,   180,   258,   181,     0,
+   248,     0,   250,     0,     4,   176,   177,     0,   258,   179,
+   248,     0,   258,   179,   250,     0,   258,   179,     4,   176,
+   177,     0,   180,   248,   179,   248,   179,   248,   179,   248,
+   181,     0,   180,   248,   179,   248,   179,   248,   181,     0,
+   180,     4,   179,   248,   181,     0,     4,     0,     4,   178,
+    84,   178,     4,     0,   180,   261,   181,     0,     4,   176,
+   248,   177,   178,    85,     0,   259,     0,   261,   179,   259,
+     0,     5,     0,    32,   174,     5,   175,     0,    32,   174,
+     5,   179,   258,   175,     0
 };
 
 #endif
@@ -574,25 +576,25 @@ static const short yyrline[] = { 0,
    605,   609,   621,   627,   630,   634,   646,   652,   655,   659,
    672,   678,   681,   685,   698,   704,   707,   711,   724,   736,
    738,   739,   740,   741,   743,   745,   747,   778,   812,   826,
-   835,   850,   862,   876,   899,   923,   935,   949,   961,   973,
-   994,  1005,  1011,  1030,  1041,  1049,  1055,  1061,  1080,  1086,
-  1102,  1109,  1115,  1121,  1127,  1133,  1152,  1164,  1170,  1189,
-  1210,  1218,  1224,  1230,  1236,  1248,  1254,  1260,  1272,  1278,
-  1283,  1288,  1295,  1297,  1298,  1301,  1306,  1317,  1335,  1343,
-  1348,  1359,  1414,  1433,  1437,  1457,  1473,  1487,  1512,  1537,
-  1563,  1569,  1574,  1579,  1583,  1593,  1599,  1605,  1609,  1613,
-  1617,  1621,  1626,  1633,  1637,  1642,  1660,  1670,  1688,  1705,
-  1722,  1743,  1763,  1783,  1800,  1824,  1829,  1840,  1842,  1845,
-  1847,  1848,  1849,  1850,  1853,  1855,  1856,  1857,  1858,  1859,
-  1860,  1861,  1862,  1869,  1870,  1871,  1872,  1873,  1874,  1875,
-  1876,  1877,  1878,  1879,  1880,  1881,  1882,  1883,  1884,  1885,
-  1886,  1887,  1888,  1889,  1890,  1891,  1892,  1893,  1894,  1895,
-  1896,  1897,  1898,  1899,  1900,  1905,  1910,  1914,  1925,  1942,
-  1953,  1972,  1988,  2004,  2020,  2037,  2044,  2057,  2062,  2066,
-  2070,  2074,  2079,  2084,  2088,  2092,  2098,  2102,  2107,  2111,
-  2116,  2120,  2124,  2130,  2136,  2142,  2146,  2152,  2167,  2174,
-  2180,  2189,  2201,  2205,  2213,  2226,  2231,  2235,  2240,  2245,
-  2263,  2268,  2285,  2294,  2300,  2305,  2309
+   835,   850,   862,   876,   899,   923,   935,   949,   961,   975,
+   990,  1011,  1022,  1028,  1047,  1058,  1066,  1072,  1078,  1097,
+  1103,  1119,  1126,  1132,  1138,  1144,  1150,  1169,  1181,  1187,
+  1206,  1227,  1235,  1241,  1247,  1253,  1265,  1271,  1277,  1289,
+  1295,  1300,  1305,  1312,  1314,  1315,  1318,  1323,  1334,  1352,
+  1360,  1365,  1376,  1431,  1450,  1454,  1474,  1490,  1504,  1529,
+  1554,  1580,  1586,  1591,  1596,  1600,  1610,  1616,  1622,  1626,
+  1630,  1634,  1638,  1643,  1650,  1654,  1659,  1677,  1687,  1705,
+  1722,  1739,  1760,  1780,  1800,  1817,  1841,  1846,  1857,  1859,
+  1862,  1864,  1865,  1866,  1867,  1870,  1872,  1873,  1874,  1875,
+  1876,  1877,  1878,  1879,  1886,  1887,  1888,  1889,  1890,  1891,
+  1892,  1893,  1894,  1895,  1896,  1897,  1898,  1899,  1900,  1901,
+  1902,  1903,  1904,  1905,  1906,  1907,  1908,  1909,  1910,  1911,
+  1912,  1913,  1914,  1915,  1916,  1917,  1922,  1927,  1931,  1942,
+  1959,  1970,  1989,  2005,  2021,  2037,  2054,  2061,  2074,  2079,
+  2083,  2087,  2091,  2096,  2101,  2105,  2109,  2115,  2119,  2124,
+  2128,  2133,  2137,  2141,  2147,  2153,  2159,  2163,  2169,  2184,
+  2191,  2197,  2206,  2218,  2222,  2230,  2243,  2248,  2252,  2257,
+  2262,  2280,  2285,  2302,  2311,  2317,  2322,  2326
 };
 #endif
 
@@ -659,24 +661,24 @@ static const short yyr1[] = {     0,
    222,   224,   224,   226,   225,   227,   227,   229,   228,   230,
    230,   230,   230,   230,   231,   231,   232,   232,   232,   232,
    232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+   232,   233,   233,   233,   233,   233,   233,   233,   233,   233,
    233,   233,   233,   233,   233,   233,   233,   233,   233,   233,
-   233,   233,   233,   233,   233,   233,   233,   233,   233,   233,
-   233,   233,   233,   233,   233,   233,   233,   233,   234,   234,
-   234,   234,   235,   235,   235,   236,   236,   237,   238,   238,
-   238,   239,   239,   239,   239,   240,   240,   240,   240,   240,
-   240,   240,   240,   240,   240,   241,   241,   241,   241,   241,
-   241,   241,   241,   242,   242,   243,   243,   244,   244,   244,
-   244,   244,   244,   244,   244,   245,   245,   246,   246,   247,
-   247,   247,   247,   247,   248,   248,   248,   248,   248,   248,
+   233,   233,   233,   233,   233,   233,   233,   233,   233,   234,
+   234,   234,   234,   235,   235,   235,   236,   236,   237,   238,
+   238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
+   240,   240,   240,   240,   240,   240,   241,   241,   241,   241,
+   241,   241,   241,   241,   242,   242,   243,   243,   244,   244,
+   244,   244,   244,   244,   244,   244,   245,   245,   246,   246,
+   247,   247,   247,   247,   247,   248,   248,   248,   248,   248,
    248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
    248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
    248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
-   248,   248,   248,   248,   248,   249,   249,   249,   249,   249,
-   249,   249,   249,   249,   249,   250,   250,   251,   251,   251,
-   251,   251,   252,   252,   252,   252,   253,   253,   254,   254,
-   255,   255,   255,   256,   256,   257,   257,   257,   257,   258,
-   258,   258,   258,   258,   258,   259,   259,   259,   259,   259,
-   260,   260,   261,   261,   262,   262,   262
+   248,   248,   248,   248,   248,   248,   249,   249,   249,   249,
+   249,   249,   249,   249,   249,   249,   250,   250,   251,   251,
+   251,   251,   251,   252,   252,   252,   252,   253,   253,   254,
+   254,   255,   255,   255,   256,   256,   257,   257,   257,   257,
+   258,   258,   258,   258,   258,   258,   259,   259,   259,   259,
+   259,   260,   260,   261,   261,   262,   262,   262
 };
 
 static const short yyr2[] = {     0,
@@ -694,25 +696,25 @@ static const short yyr2[] = {     0,
      3,     0,    25,     1,     3,     0,    25,     1,     3,     0,
     31,     1,     3,     0,    31,     1,     3,     0,    31,     1,
      1,     1,     1,     1,     1,     1,     4,     7,     6,     3,
-     6,     6,     9,     6,     9,     5,     8,     8,    11,     9,
-     7,     8,    12,     6,     5,     7,     7,    12,     7,     9,
-    17,     7,     8,     8,     7,    11,     5,     8,    12,     8,
-    22,    20,     8,     8,     5,     8,     7,     8,     5,    11,
-     5,     9,     1,     1,     1,     0,     2,     4,     4,     6,
-     3,     3,     3,     2,     2,     6,     8,     8,    10,     1,
-     2,     1,     3,     4,     1,     8,    12,     8,    12,     8,
-    12,    11,    15,     1,     2,     9,     2,     6,     9,     9,
-     8,     8,     8,     6,     4,     2,     2,     1,     2,     1,
-     1,     1,     1,     1,     1,     3,     2,     2,     2,     3,
+     6,     6,     9,     6,     9,     5,     8,     8,    11,     6,
+     9,     7,     8,    12,     6,     5,     7,     7,    12,     7,
+     9,    17,     7,     8,     8,     7,    11,     5,     8,    12,
+     8,    22,    20,     8,     8,     5,     8,     7,     8,     5,
+    11,     5,     9,     1,     1,     1,     0,     2,     4,     4,
+     6,     3,     3,     3,     2,     2,     6,     8,     8,    10,
+     1,     2,     1,     3,     4,     1,     8,    12,     8,    12,
+     8,    12,    11,    15,     1,     2,     9,     2,     6,     9,
+     9,     8,     8,     8,     6,     4,     2,     2,     1,     2,
+     1,     1,     1,     1,     1,     1,     3,     2,     2,     2,
      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     5,     4,     4,     4,     4,     4,     4,
-     4,     4,     4,     4,     6,     4,     4,     4,     4,     4,
-     4,     6,     6,     6,     4,     1,     1,     1,     4,     2,
-     5,     3,     6,     4,     7,     3,     5,     1,     2,     2,
-     3,     3,    11,     9,     7,     7,     0,     3,     1,     3,
-     0,     3,     3,     1,     3,     0,     1,     3,     3,     1,
-     1,     3,     3,     3,     5,     9,     7,     5,     1,     5,
-     3,     6,     1,     3,     1,     4,     6
+     3,     3,     3,     3,     5,     4,     4,     4,     4,     4,
+     4,     4,     4,     4,     4,     6,     4,     4,     4,     4,
+     4,     4,     6,     6,     6,     4,     1,     1,     1,     4,
+     2,     5,     3,     6,     4,     7,     3,     5,     1,     2,
+     2,     3,     3,    11,     9,     7,     7,     0,     3,     1,
+     3,     0,     3,     3,     1,     3,     0,     1,     3,     3,
+     1,     1,     3,     3,     3,     5,     9,     7,     5,     1,
+     5,     3,     6,     1,     3,     1,     4,     6
 };
 
 static const short yydefact[] = {     0,
@@ -721,1227 +723,1204 @@ static const short yydefact[] = {     0,
     12,    11,     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,   200,     0,   205,     0,   202,     0,
+     0,     0,     0,     0,   201,     0,   206,     0,   203,     0,
      0,     0,    52,    54,    53,    55,    56,    57,    58,    59,
-    64,    63,    60,    61,    62,   228,     0,     0,     0,    13,
-    14,    16,    15,    17,   297,   297,     0,   276,   278,   325,
-   130,   277,     0,     0,     0,     0,     0,     0,     0,     0,
+    64,    63,    60,    61,    62,   229,     0,     0,     0,    13,
+    14,    16,    15,    17,   298,   298,     0,   277,   279,   326,
+   130,   278,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   131,   132,   133,   134,     0,     0,
-     0,   135,   136,     0,     0,     0,     0,     0,     0,   235,
-     0,     0,   195,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   306,     0,     0,     0,     0,   306,
+     0,   135,   136,     0,     0,     0,     0,     0,     0,   236,
+     0,     0,   196,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   307,     0,     0,     0,     0,   307,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   288,     0,     0,     0,     0,     0,   186,
-   306,     0,     0,   186,   226,   227,   306,   306,     0,     0,
-     0,     0,     0,     0,   194,     0,   201,     0,   229,     0,
+     0,     0,     0,   289,     0,     0,     0,     0,     0,   187,
+   307,     0,     0,   187,   227,   228,   307,   307,     0,     0,
+     0,     0,     0,     0,   195,     0,   202,     0,   230,     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,   280,     0,    69,     0,
+     0,     0,     0,     0,     0,     0,   281,     0,    69,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   238,   237,   239,     0,     0,     0,     0,     0,     0,
-   140,   193,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   192,     0,     0,
+     0,   239,   238,   240,     0,     0,     0,     0,     0,     0,
+     0,   140,   194,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   193,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   278,     0,   307,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   290,   289,     0,
-     0,     0,     0,   186,   186,     0,     0,     0,     0,     0,
-     0,     0,   191,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   203,     0,     0,     0,     0,     0,     0,
+     0,   279,     0,   308,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   291,   290,
+     0,     0,     0,     0,   187,   187,     0,     0,     0,     0,
+     0,     0,     0,   192,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   204,     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,   299,     0,     0,     0,
-     0,     0,   282,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   300,     0,     0,
+     0,     0,     0,   283,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   236,   306,     0,
-   130,     0,     0,     0,   137,     0,   253,   252,   250,   251,
-   246,   248,   247,   249,   241,   240,   242,   243,   244,   245,
+     0,     0,     0,     0,     0,     0,     0,     0,   237,   307,
+     0,   130,     0,     0,     0,     0,   137,     0,   254,   253,
+   251,   252,   247,   249,   248,   250,   242,   241,   243,   244,
+   245,   246,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   279,   311,   312,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   278,   310,   311,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   293,   292,   186,     0,
+   185,   184,     0,     0,     0,     0,     0,   189,   188,   226,
+     0,     0,   190,     0,     0,     0,     0,     0,     0,     0,
+     0,   205,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   292,   291,   185,     0,   184,   183,
-     0,     0,     0,     0,     0,   188,   187,   225,     0,     0,
-   189,     0,     0,     0,     0,     0,     0,     0,     0,   204,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   299,     0,     0,    19,     0,   280,
+   285,    69,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,   256,   257,   258,
+   259,   260,   261,   262,   263,   264,   276,   265,     0,   267,
+   268,   269,   270,   271,   272,     0,     0,     0,   327,     0,
+     0,     0,     0,     0,     0,     0,   146,     0,     0,     0,
+     0,     0,    65,     0,     0,   156,   307,   307,     0,   307,
+   168,     0,   176,   307,   307,   309,     0,     0,     0,   310,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   180,   182,     0,     0,
+     0,     0,     0,     0,     0,     0,   307,     0,     0,   307,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   298,     0,     0,    19,     0,   279,   284,    69,
+     0,     0,     0,   307,   307,     0,     0,     0,     0,   307,
+   307,     0,     0,     0,     0,     0,   307,     0,   307,     0,
+     0,     0,     0,     0,   301,     0,   298,     0,   282,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,   255,   256,   257,   258,   259,
-   260,   261,   262,   263,   275,   264,     0,   266,   267,   268,
-   269,   270,   271,     0,     0,     0,   326,     0,     0,     0,
-     0,     0,     0,     0,   146,     0,     0,    65,     0,     0,
-   155,   306,   306,     0,   306,   167,     0,   175,   306,   306,
-   308,     0,     0,     0,   309,     0,     0,     0,     0,     0,
+     0,     0,    67,     0,     0,     0,     0,     0,   139,     0,
+     0,     0,     0,   141,   142,   144,     0,     0,   320,     0,
+   324,     0,   150,   255,     0,     0,     0,     0,   307,     0,
+   307,     0,     0,   313,   287,   279,   314,   315,   155,     0,
+   307,   307,   307,   219,     0,   307,   307,   307,   307,   307,
+   307,   307,     0,     0,     0,     0,     0,     0,     0,   225,
+   191,     0,     0,     0,     0,   302,     0,     0,     0,   197,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   179,   181,     0,     0,     0,     0,     0,     0,     0,
-     0,   306,     0,     0,   306,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   306,   306,
-     0,     0,     0,     0,   306,   306,     0,     0,     0,     0,
-     0,   306,     0,   306,     0,     0,     0,     0,     0,   300,
-     0,   297,     0,   281,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    67,     0,     0,
-     0,     0,     0,   139,     0,     0,     0,     0,   141,   142,
-   144,     0,   254,     0,     0,     0,     0,   306,     0,   306,
-     0,     0,   312,   286,   278,   313,   314,   154,     0,   306,
-   306,   306,   218,     0,   306,   306,   306,   306,   306,   306,
-   306,     0,     0,     0,     0,     0,     0,     0,   224,   190,
-     0,     0,     0,     0,   301,     0,     0,     0,   196,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   231,   232,   233,   234,   235,
+     0,     0,     0,     0,     0,     0,     0,    18,     0,   284,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   230,   231,   232,   233,   234,     0,
-     0,     0,     0,     0,     0,     0,    18,     0,   283,     0,
+     0,     0,     0,   266,   273,   274,   275,   328,   130,     0,
+     0,     0,     0,   138,     0,     0,     0,   279,     0,     0,
+   322,    66,   152,   160,     0,   163,     0,   157,     0,   158,
+   178,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   187,
+     0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
+   307,   307,     0,   307,     0,     0,     0,     0,     0,     0,
+   307,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   307,
+     0,     0,     0,     0,     0,     0,     0,     0,   298,   286,
+    68,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   147,     0,     0,   148,     0,
+     0,     0,     0,   325,     0,   165,   175,   288,   316,     0,
+   223,   169,   171,     0,     0,   222,   224,   177,   153,   164,
+   174,   179,     0,   297,     0,   296,     0,     0,   207,     0,
+   209,     0,   211,     0,     0,     0,   302,     0,   305,     0,
+     0,     0,     0,   199,   198,     0,     0,     0,     0,     0,
+    21,     0,    30,     0,    34,     0,    28,     0,     0,    33,
+     0,    38,    36,     0,     0,     0,     0,     0,     0,    45,
+     0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   265,   272,   273,   274,   327,   130,     0,     0,
-     0,     0,   138,   319,     0,     0,    66,   151,   159,     0,
-   162,     0,   156,     0,   157,   177,     0,     0,     0,     0,
+   143,   145,     0,   151,     0,     0,     0,     0,   161,     0,
+   221,   220,   187,     0,   183,     0,     0,     0,     0,     0,
+     0,   215,     0,     0,     0,   304,   307,   303,   307,     0,
+     0,   307,     0,     0,   302,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   307,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   186,     0,     0,     0,     0,     0,
-     0,     0,     0,   165,     0,   306,   306,     0,   306,     0,
-     0,     0,     0,     0,     0,   306,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   323,   321,
+   319,     0,     0,     0,     0,   295,     0,     0,     0,   218,
+   307,     0,   216,     0,     0,     0,   306,     0,     0,   200,
+     0,     0,    35,     0,     0,     0,     0,    25,     0,    31,
+     0,    37,    26,    39,     0,    42,     0,    46,    47,     0,
+     0,    49,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   149,     0,     0,   181,
+     0,     0,     0,     0,     0,   213,     0,     0,   307,   307,
+   167,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   306,     0,     0,     0,     0,     0,
-     0,     0,     0,   297,   285,    68,     0,     0,     0,     0,
+     0,     0,     0,     0,    84,    88,    92,     0,   318,     0,
+   294,   208,   210,   212,     0,   307,   154,   159,     0,     0,
+   170,     0,     0,     0,     0,     0,    29,    32,    40,     0,
+    41,    48,    43,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   147,     0,     0,     0,     0,     0,   278,     0,   148,     0,
-   164,   174,   287,   315,     0,   222,   168,   170,     0,     0,
-   221,   223,   176,   152,   163,   173,   178,     0,   296,     0,
-   295,     0,     0,   206,     0,   208,     0,   210,     0,     0,
-     0,   301,     0,   304,     0,     0,     0,     0,   198,   197,
-     0,     0,     0,     0,     0,    21,     0,    30,     0,    34,
-     0,    28,     0,     0,    33,     0,    38,    36,     0,     0,
-     0,     0,     0,     0,    45,     0,     0,     0,     0,     0,
-    50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   143,   145,     0,     0,   323,
-     0,   150,     0,     0,     0,   160,     0,   220,   219,   186,
-     0,   182,     0,     0,     0,     0,     0,     0,   214,     0,
-     0,     0,   303,   306,   302,   306,     0,     0,   306,     0,
-     0,   301,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   306,     0,     0,     0,     0,     0,
+   307,     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,   321,     0,     0,
-     0,     0,     0,     0,   294,     0,     0,     0,   217,   306,
-     0,   215,     0,     0,     0,   305,     0,     0,   199,     0,
-     0,    35,     0,     0,     0,     0,    25,     0,    31,     0,
-    37,    26,    39,     0,    42,     0,    46,    47,     0,     0,
-    49,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   149,     0,   324,   320,   318,
-     0,     0,   180,     0,     0,     0,     0,     0,   212,     0,
-     0,   306,   306,   166,     0,     0,     0,     0,     0,     0,
+     0,   317,     0,     0,   307,     0,     0,     0,     0,     0,
+    24,    27,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    82,     0,    86,     0,    90,     0,
+   214,     0,     0,     0,     0,     0,   307,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    84,    88,    92,
-     0,     0,     0,   293,   207,   209,   211,     0,   306,   153,
-   158,     0,     0,   169,     0,     0,     0,     0,     0,    29,
-    32,    40,     0,    41,    48,    43,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   322,
-     0,   317,     0,     0,     0,   306,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   306,
-     0,     0,     0,     0,     0,    24,    27,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    82,
-     0,    86,     0,    90,   316,     0,   213,     0,     0,     0,
-     0,     0,   306,     0,     0,     0,     0,     0,     0,     0,
+     0,    44,    20,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    83,    85,    87,    89,    91,    93,   162,   217,
+     0,     0,     0,     0,   307,     0,     0,     0,     0,     0,
+     0,    96,   100,   104,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    44,    20,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    83,    85,
-    87,    89,    91,    93,   161,   216,     0,     0,     0,     0,
-   306,     0,     0,     0,     0,     0,     0,    96,   100,   104,
+     6,   307,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   173,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    94,     0,    98,     0,   102,     0,   307,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     6,   306,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    94,
-     0,    98,     0,   102,     0,   306,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   171,
-     0,    22,     0,     0,     0,     0,     0,     0,    95,    97,
-    99,   101,   103,   105,   306,     0,     0,     0,   108,   112,
-   116,     0,     0,     0,     0,     0,     0,     0,   306,     0,
+     0,     0,     0,   172,     0,    22,     0,     0,     0,     0,
+     0,     0,    95,    97,    99,   101,   103,   105,   307,     0,
+     0,     0,   108,   112,   116,     0,     0,     0,     0,     0,
+     0,     0,   307,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   106,     0,   110,     0,   114,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   106,     0,   110,     0,   114,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   107,
-   109,   111,   113,   115,   117,     0,   120,   124,   128,    23,
-     0,     0,     0,     0,     0,     0,     0,   118,     0,   122,
-     0,   126,     0,     0,     0,     0,     0,     0,   119,   121,
-   123,   125,   127,   129,     0,     0,     0
+     0,     0,     0,   107,   109,   111,   113,   115,   117,     0,
+   120,   124,   128,    23,     0,     0,     0,     0,     0,     0,
+     0,   118,     0,   122,     0,   126,     0,     0,     0,     0,
+     0,     0,   119,   121,   123,   125,   127,   129,     0,     0,
+     0
 };
 
-static const short yydefgoto[] = {  1485,
+static const short yydefgoto[] = {  1489,
      5,     6,    19,    20,    21,    22,     7,    63,    64,    65,
-   375,  1259,   534,  1207,  1261,   535,  1208,  1263,   536,  1209,
-  1369,   537,  1342,  1371,   538,  1343,  1373,   539,  1344,  1430,
-   540,  1416,  1432,   541,  1417,  1434,   542,  1418,  1467,   543,
-  1461,  1469,   544,  1462,  1471,   545,  1463,   127,   227,    66,
-   467,   457,   458,   459,   460,    70,    71,    72,    73,  1018,
-  1019,    74,    75,    78,   770,   293,   130,   437,   163,   164,
-   222,   368,   848,   943,   944,   438,   806,   905,  1001,   131
+   376,  1264,   536,  1214,  1266,   537,  1215,  1268,   538,  1216,
+  1373,   539,  1346,  1375,   540,  1347,  1377,   541,  1348,  1434,
+   542,  1420,  1436,   543,  1421,  1438,   544,  1422,  1471,   545,
+  1465,  1473,   546,  1466,  1475,   547,  1467,   127,   227,    66,
+   469,   459,   460,   461,   462,    70,    71,    72,    73,  1031,
+  1032,    74,    75,    78,   781,   294,   130,   439,   163,   164,
+   222,   369,   863,   958,   959,   440,   701,   581,   702,   131
 };
 
-static const short yypact[] = {  2025,
-    67,-32768,-32768,  -112,-32768,   235,  2171,-32768,     8,   111,
-   124,   134,   183,   200,   225,   102,   114,   139,-32768,-32768,
--32768,-32768,   311,   145,   249,   -15,   194,   195,   -39,   -37,
-   201,   204,   343,   221,   229,   260,   369,   117,   384,   512,
-   265,   -32,   -32,   274,   199,   296,   403,     4,   444,   447,
-    73,   284,   -24,     6,-32768,   309,-32768,   478,-32768,   511,
-   531,   498,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   536,     8,  2193,-32768,
--32768,-32768,-32768,-32768,   370,   370,   542,-32768,   187,     2,
--32768,-32768,   394,   398,   402,   407,   414,   421,   425,   427,
-   428,   429,   432,   433,   436,   437,   438,   439,   442,   443,
-   445,   468,   482,   483,-32768,-32768,-32768,-32768,    65,    65,
-    65,-32768,-32768,    65,   611,    19,    65,   552,   508,-32768,
-   612,   653,-32768,    65,    65,    65,    65,   485,    65,    65,
-   486,    65,    65,    65,    24,    65,   496,   503,   504,    24,
-   499,   500,   510,   513,   514,   515,   516,   -32,   -32,   -32,
-    65,    65,   -36,-32768,   -11,   -32,   502,   505,   518,-32768,
-    24,   517,   685,-32768,-32768,-32768,    24,    24,    65,   -52,
-    65,   605,    65,    65,-32768,   688,-32768,   521,-32768,     8,
-   522,   528,   529,   530,   532,   533,   534,   535,   538,   539,
-   543,   546,   547,   548,   549,   580,   592,   593,   594,   598,
-   607,   609,   610,   613,   616,   617,   618,   619,   622,   623,
-   700,   537,   595,   600,    65,   706,-32768,   -32,-32768,    65,
+static const short yypact[] = {  1875,
+   140,-32768,-32768,   -29,-32768,   253,  1993,-32768,    12,   166,
+   172,   176,   191,   260,   296,    29,    32,    61,-32768,-32768,
+-32768,-32768,   317,   131,   302,   -52,   151,   190,   -37,    -9,
+   213,   255,   194,   256,   320,   377,   386,   126,   391,   413,
+   269,    97,    97,   283,   230,   290,   401,     8,   450,   465,
+    73,   308,   -15,    10,-32768,   324,-32768,   483,-32768,   501,
+   510,   486,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   522,    12,  2015,-32768,
+-32768,-32768,-32768,-32768,   352,   352,   525,-32768,    23,     6,
+-32768,-32768,   353,   358,   359,   364,   365,   366,   368,   372,
+   374,   375,   381,   382,   383,   384,   387,   388,   389,   394,
+   395,   396,   403,   404,-32768,-32768,-32768,-32768,    65,    65,
+    65,-32768,-32768,    65,   608,    48,    65,   554,   578,-32768,
+   573,   526,-32768,    65,    65,    65,    65,   406,    65,    65,
+   407,    65,    65,    65,    16,    65,   408,   409,   417,    16,
+   421,   424,   434,   435,   436,   441,   442,    97,    97,    97,
+    65,    65,    11,-32768,   109,    97,   427,   459,   460,-32768,
+    16,   411,   635,-32768,-32768,-32768,    16,    16,    65,   -30,
+    65,   555,    65,    65,-32768,   637,-32768,   471,-32768,    12,
+   472,   473,   487,   488,   489,   490,   491,   492,   493,   494,
+   495,   498,   499,   500,   502,   504,   505,   507,   513,   524,
+   527,   531,   532,   533,   534,   535,   539,   541,   542,   543,
+   655,   520,   528,   521,    65,   714,-32768,    97,-32768,    65,
     65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
     65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
-   781,   625,   625,   625,  4940,   800,  4840,   252,   639,   649,
--32768,-32768,    65,    65,    65,    65,    65,    65,    65,    65,
-    65,    65,    65,    65,    65,    65,    65,-32768,   -50,  4963,
-  1638,  4986,  5009,    65,  5032,  2179,    65,  2202,  5055,  5078,
-   362,   715,  6412,   811,  5101,    65,    65,    65,   814,    65,
-    65,    65,    65,    65,    65,    65,   129,-32768,-32768,  2593,
-  2614,   -32,   -32,   141,   141,   198,    65,    65,    65,  1864,
-    60,    65,-32768,  1910,   816,   817,  5124,   743,    65,  5147,
-   646,   757,  5170,-32768,    65,   682,   823,   838,   839,   840,
-   841,   843,   847,   848,   849,   850,   852,   853,   854,   856,
-   857,   858,   871,   875,   876,   877,   878,   880,   881,   755,
-   883,   885,   886,   900,   903,   904,-32768,    26,   910,   902,
-   921,  4865,   115,   107,   424,  5193,  5216,  5239,  5262,  5285,
-  5308,  5331,  5354,  5377,  5400,  5423,  2635,  5446,  5469,  5492,
-  5515,  5538,  5561,  2656,  2677,  2698,    93,-32768,    24,   196,
-   922,    65,   925,   924,-32768,  1661,   400,   674,   305,   305,
-   340,   340,   340,   340,   144,   144,   625,   625,   625,   625,
-   926,   715,   928,   927,   944,   945,  5584,   946,   948,  5607,
-   951,   952,   953,  1063,   404,  1682,-32768,   -13,    65,   956,
-  2225,  5630,  5653,    65,  2248,  2271,  5676,  5699,  5722,  5745,
-  5768,   -32,    65,    65,-32768,-32768,-32768,   777,  1956,-32768,
-   785,    65,  2719,  2740,  2761,-32768,-32768,-32768,    65,  4890,
--32768,   788,   790,   965,   791,  5791,   966,    65,    65,-32768,
-  5814,   828,   796,   798,   799,   801,   804,   805,   806,   807,
-   808,   809,   810,   815,   821,   822,   824,   826,   830,   831,
-   832,   834,   835,   836,   842,   844,   845,   863,   864,   865,
-   866,   867,-32768,   974,   818,-32768,   868,  -107,-32768,-32768,
-   833,   855,   874,   879,   882,   884,   887,   888,   889,   890,
-   891,   894,   989,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   715,   546,   546,   546,  4772,   716,  4672,   402,   544,   717,
+   638,-32768,-32768,    65,    65,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,    65,    65,    65,-32768,   -48,
+  4795,  2030,  4818,  4841,    65,  4864,  2053,    65,  2076,  4887,
+  4910,   227,  1536,  6244,   720,  4933,    65,    65,    65,   721,
+    65,    65,    65,    65,    65,    65,    65,  -107,-32768,-32768,
+  1276,  1846,    97,    97,   420,   420,   -22,    65,    65,    65,
+  1806,    60,    65,-32768,  1823,   722,   729,  4956,   639,    65,
+  4979,   566,  1156,  5002,-32768,    65,   602,   743,   744,   745,
+   747,   748,   749,   750,   751,   768,   769,   770,   771,   773,
+   774,   775,   776,   778,   779,   781,   783,   784,   785,   801,
+   675,   803,   807,   808,   812,   820,   828,-32768,    -7,   831,
+   834,   832,  4697,   207,   130,   692,  5025,  5048,  5071,  5094,
+  5117,  5140,  5163,  5186,  5209,  5232,  5255,  2467,  5278,  5301,
+  5324,  5347,  5370,  5393,  2488,  2509,  2530,    84,-32768,    16,
+   294,   836,    65,   837,   835,     7,-32768,  1559,   833,   689,
+   433,   433,  -102,  -102,  -102,  -102,   150,   150,   546,   546,
+   546,   546,   852,  1536,   853,   857,   860,   861,  5416,   862,
+   864,  5439,   866,   867,   869,   945,   241,  1595,-32768,    19,
+    65,   870,  2099,  5462,  5485,    65,  2122,  2145,  5508,  5531,
+  5554,  5577,  5600,    97,    65,    65,-32768,-32768,-32768,   661,
+  1057,-32768,   678,    65,  2551,  2572,  2593,-32768,-32768,-32768,
+    65,  4722,-32768,   698,   711,   885,   719,  5623,   887,    65,
+    65,-32768,  5646,   755,   723,   724,   725,   726,   727,   730,
+   731,   732,   733,   734,   736,   737,   738,   739,   740,   741,
+   742,   757,   758,   759,   760,   762,   763,   764,   767,   797,
+   798,   799,   800,   802,-32768,   903,   805,-32768,   804,    62,
+-32768,-32768,   811,   817,   839,   841,   844,   845,   846,   847,
+   848,   849,   850,   854,   944,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,    65,-32768,-32768,-32768,
--32768,-32768,-32768,    65,    65,    65,-32768,   715,   990,    52,
-    65,   996,  1000,   783,-32768,  1010,    65,-32768,   185,   -32,
--32768,    24,    24,  1011,    24,-32768,  1012,-32768,    24,    24,
--32768,  1503,    65,  1559,-32768,   958,   846,  1015,  1020,  1042,
-   364,  1043,  1045,  1047,  1048,  1050,  1052,  1053,   233,  2782,
-  2803,-32768,-32768,  2294,   -32,   -32,   -32,   993,  1064,    65,
-    65,    24,    65,  1062,    24,  1706,   596,  1087,   954,  1092,
-    65,    65,   -32,  1094,  1095,   934,  1097,  1098,    24,    24,
-  1099,   -32,  1100,  1101,    24,    24,  1102,  1103,  1104,  1106,
-  1113,    24,   409,    24,  1124,  1123,  1125,  1126,  1129,-32768,
-  1127,   370,  1130,-32768,   827,    65,    65,    65,    65,    65,
-    65,    65,    65,    65,    65,    65,    65,-32768,  5837,  5860,
-  5883,  5906,   230,-32768,   277,   957,  1138,  1120,-32768,-32768,
--32768,     3,  6412,  1145,     7,    20,  1155,    24,  1156,    24,
-  1157,  1158,-32768,  1721,   408,  1682,-32768,-32768,    65,    24,
-    24,    24,-32768,   253,    24,    24,    24,    24,    24,    24,
-    24,    65,    65,    65,   985,   -55,   -30,     0,-32768,-32768,
-  2824,  2845,  1161,  5929,    -7,  1086,    65,    65,-32768,   991,
-     8,   994,  2866,  2887,  -105,   995,   997,   998,  1001,   999,
-  1004,  1002,  1003,  -103,  1005,  1014,  1016,  1006,  1007,  1008,
-  1013,  1018,  1019,  1024,-32768,-32768,-32768,-32768,-32768,  1021,
-  1022,  1035,  1036,  1037,  1044,  1038,-32768,  1039,   115,  1164,
-  2908,  2929,  2950,  2971,  2992,  3013,  3034,  3055,  3076,  3097,
-  3118,  3139,-32768,-32768,-32768,-32768,-32768,  1170,    65,  1174,
-  1186,     5,-32768,  1017,  1587,  1187,-32768,-32768,-32768,   -32,
--32768,  1188,-32768,  1215,-32768,-32768,    65,  1531,  3160,  1216,
-  1217,  1218,    65,    65,  1219,  1222,  1223,  1224,  1225,  1227,
-  1228,  2317,  5952,  1581,   141,   -32,  1229,   -32,  1230,   -32,
-    11,    65,    65,-32768,  1231,    24,    24,  1159,    24,   227,
-  5975,    65,     8,  1236,    65,    24,  1235,  1240,  1238,  1080,
-  1242,   409,  1243,  1247,    65,  1245,  1249,  1257,  1259,  1264,
-   409,    65,    65,    65,    24,  1262,  1266,   409,    65,  1267,
-  1268,  1272,    65,   370,-32768,-32768,    65,    65,    65,    65,
-    65,    65,    65,    65,    65,    65,    65,    65,  1282,  1302,
--32768,  1239,  1096,     3,  1283,  1206,    87,  3181,-32768,    13,
--32768,-32768,  6412,-32768,    65,-32768,-32768,-32768,  1465,  1491,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  1111,-32768,    65,
--32768,  1115,   254,-32768,   256,-32768,   273,-32768,    40,  3202,
-  3223,    -7,   231,-32768,    51,  1112,  1226,    65,-32768,-32768,
-  3244,     8,  1122,  3265,  1119,-32768,  1128,-32768,  1131,-32768,
-  1134,-32768,  1132,  5998,-32768,  1133,-32768,-32768,  1139,  1140,
-  6021,  3286,  6044,  1137,-32768,  1142,  1143,  3307,  1141,  1144,
--32768,  3328,  1146,  3349,  3370,  3391,  3412,  3433,  3454,  3475,
-  3496,  3517,  3538,  3559,  3580,-32768,-32768,     3,    65,-32768,
-    81,-32768,  1135,    65,    65,-32768,  3601,-32768,-32768,   141,
-  2017,-32768,    65,    65,    65,  1299,  1160,   -35,-32768,    65,
-    65,  1241,-32768,    24,-32768,    24,    65,  2340,    24,  1179,
-  1317,    -7,   409,  1323,    65,  1330,   409,  1331,  1335,  1333,
-  1336,  1337,    65,  1338,    24,  1339,  1340,    65,  1344,  1342,
-    65,  1345,    65,    65,    65,    65,    65,    65,    65,    65,
-    65,    65,    65,    65,  1343,  4915,     3,-32768,  1347,  2363,
-  3622,  1348,  1171,    65,-32768,  2386,  2409,  2432,-32768,    24,
-  1356,-32768,  2455,  2478,  1184,-32768,  1162,  1617,-32768,  1173,
-     8,-32768,  1189,  1191,  1192,  3643,-32768,  1197,-32768,  1200,
--32768,-32768,-32768,  6067,-32768,  1198,-32768,-32768,  6090,  1201,
--32768,  6113,  1199,  3664,  3685,  3706,  3727,  3748,  3769,  3790,
-  3811,  3832,  6136,  6159,  6182,-32768,  1202,-32768,-32768,-32768,
-    65,  1203,-32768,  2501,  1373,  1375,    12,  1207,-32768,  1381,
-  1382,    24,    24,-32768,  1383,     8,   409,   409,   409,   409,
-  1384,  1385,  1386,   409,  1387,  1388,  1389,  1391,    65,    65,
-    65,    65,    65,    65,    65,    65,    65,-32768,-32768,-32768,
-  1318,  2113,  1399,-32768,-32768,-32768,-32768,    40,    24,-32768,
--32768,  1232,  1237,-32768,     8,  1233,  1234,  1250,  1251,-32768,
--32768,-32768,  1248,-32768,-32768,-32768,  1252,  3853,  3874,  3895,
-  3916,  3937,  3958,  3979,  4000,  4021,  1253,  1254,  1255,-32768,
-    65,-32768,  1258,    -3,  1260,    24,  1325,  1265,   409,   409,
-  1402,  1404,   409,  1415,    65,    65,    65,    65,    65,    65,
-    65,    65,    65,    65,    65,    65,  2524,  1417,  1422,    24,
-  1263,  1269,     8,  1261,  1274,-32768,-32768,  1270,  1271,  4042,
-  4063,  4084,  4105,  4126,  4147,  4168,  4189,  4210,   163,  6412,
-   234,  6412,   261,  6412,-32768,  1279,-32768,  1289,  1352,    65,
-     8,   409,    24,  1441,  1442,    65,    65,    65,    65,    65,
-    65,    65,    65,    65,    65,  1445,    65,  1466,    65,  1467,
-  1468,  1470,  1297,  4231,     8,  1300,  1301,-32768,-32768,  4252,
-  4273,  4294,  4315,  4336,  4357,  6205,  6228,  6251,  6412,-32768,
-  6412,-32768,  6412,-32768,-32768,-32768,    65,    65,  1334,   409,
-    24,    65,    65,    65,    65,    65,    65,-32768,-32768,-32768,
-  4378,  2547,  1341,  1304,  1306,  4399,  4420,  4441,  4462,  4483,
-  4504,  1298,  1307,  1308,    65,  1480,-32768,    24,   409,    65,
-    65,    65,    65,    65,    65,    65,    65,    65,  2570,-32768,
-  1311,  1316,  4525,  4546,  4567,  4588,  4609,  4630,   270,  6412,
-   278,  6412,   298,  6412,  1486,    24,  1487,    65,    65,    65,
-    65,    65,    65,    65,  1492,    65,  1502,    65,  1504,-32768,
-  1332,-32768,  4651,  4672,  4693,  6274,  6297,  6320,  6412,-32768,
-  6412,-32768,  6412,-32768,    24,    65,    65,    65,-32768,-32768,
--32768,  1357,  4714,  4735,  4756,  1329,  1358,  1359,    24,    65,
-    65,    65,    65,    65,    65,  1413,  4777,  4798,  4819,   307,
-  6412,   372,  6412,   406,  6412,   409,    65,    65,    65,    65,
-  1558,    65,  1560,    65,  1561,  1362,  6343,  6366,  6389,  6412,
--32768,  6412,-32768,  6412,-32768,  1588,-32768,-32768,-32768,-32768,
-  1454,  1455,  1456,    65,    65,    65,   411,  6412,   412,  6412,
-   415,  6412,    65,  1589,    65,  1631,    65,  1633,  6412,-32768,
-  6412,-32768,  6412,-32768,  1565,  1593,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    65,-32768,
+-32768,-32768,-32768,-32768,-32768,    65,    65,    65,-32768,  1536,
+   947,    51,    65,   976,   980,   665,-32768,  1002,   851,     9,
+  1020,    65,-32768,   173,    97,-32768,    16,    16,  1022,    16,
+-32768,  1024,-32768,    16,    16,-32768,  1456,    65,  1570,-32768,
+  1006,   855,  1025,  1029,  1030,   356,  1033,  1035,  1048,  1049,
+  1050,  1051,  1053,   127,  2614,  2635,-32768,-32768,  2168,    97,
+    97,    97,  1028,  1055,    65,    65,    16,    65,  1056,    16,
+  1651,   529,  1058,   922,  1064,    65,    65,    97,  1066,  1067,
+   906,  1069,  1070,    16,    16,  1071,    97,  1072,  1073,    16,
+    16,  1074,  1087,  1096,  1101,  1104,    16,    52,    16,  1107,
+  1106,  1108,  1109,  1112,-32768,  1110,   352,  1113,-32768,   858,
+    65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+    65,    65,-32768,  5669,  5692,  5715,  5738,   178,-32768,   415,
+   940,  1116,  1076,-32768,-32768,-32768,     9,    65,   948,  1628,
+-32768,   184,-32768,  6244,  1119,    41,    54,  1122,    16,  1124,
+    16,  1126,  1127,-32768,  1666,   250,  1595,-32768,-32768,    65,
+    16,    16,    16,-32768,   348,    16,    16,    16,    16,    16,
+    16,    16,    65,    65,    65,   954,   -55,   -34,   -14,-32768,
+-32768,  2656,  2677,  1131,  5761,   -40,  1059,    65,    65,-32768,
+   958,    12,   960,  2698,  2719,  -105,   961,   966,   973,   978,
+   975,   981,   979,   995,    94,   996,   982,  1003,   998,  1001,
+  1007,  1018,  1019,  1021,  1027,-32768,-32768,-32768,-32768,-32768,
+  1026,  1040,  1041,  1043,  1045,  1031,  1046,-32768,  1047,   207,
+  1193,  2740,  2761,  2782,  2803,  2824,  2845,  2866,  2887,  2908,
+  2929,  2950,  2971,-32768,-32768,-32768,-32768,-32768,  1199,    65,
+  1228,  1240,     7,-32768,  1239,  4747,  1162,   133,  2992,     9,
+-32768,-32768,-32768,-32768,    97,-32768,  1242,-32768,  1244,-32768,
+-32768,    65,  1499,  3013,  1246,  1247,  1248,    65,    65,  1249,
+  1250,  1261,  1263,  1270,  1280,  1281,  2191,  5784,  1622,   420,
+    97,  1282,    97,  1283,    97,     3,    65,    65,-32768,  1285,
+    16,    16,  1207,    16,   229,  5807,    65,    12,  1290,    65,
+    16,  1288,  1292,  1291,  1135,  1295,    52,  1296,  1293,    65,
+  1308,  1321,  1319,  1322,  1324,    52,    65,    65,    65,    16,
+  1334,  1327,    52,    65,  1338,  1339,  1337,    65,   352,-32768,
+-32768,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+    65,    65,    65,  1340,  1118,-32768,  1341,  1343,-32768,  1166,
+  1167,    65,    65,-32768,    67,-32768,-32768,  6244,-32768,    65,
+-32768,-32768,-32768,  1217,  1451,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1170,-32768,    65,-32768,  1171,   135,-32768,   187,
+-32768,   197,-32768,    40,  3034,  3055,   -40,   200,-32768,   235,
+  1173,  1267,    65,-32768,-32768,  3076,    12,  1176,  3097,  1175,
+-32768,  1177,-32768,  1178,-32768,  1180,-32768,  1179,  5830,-32768,
+  1187,-32768,-32768,  1200,  1210,  5853,  3118,  5876,  1189,-32768,
+  1211,  1216,  3139,  1213,  1218,-32768,  3160,  1219,  3181,  3202,
+  3223,  3244,  3265,  3286,  3307,  3328,  3349,  3370,  3391,  3412,
+-32768,-32768,     9,-32768,  1310,  1393,  2214,  3433,-32768,  3454,
+-32768,-32768,   420,  1935,-32768,    65,    65,    65,  1394,  1227,
+   -12,-32768,    65,    65,  1325,-32768,    16,-32768,    16,    65,
+  2237,    16,  1268,  1403,   -40,    52,  1408,    65,  1406,    52,
+  1407,  1411,  1410,  1416,  1418,    65,  1420,    16,  1421,  1422,
+    65,  1414,  1428,    65,  1439,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,    65,    65,    65,  1444,-32768,-32768,
+-32768,    65,  1446,  1271,    65,-32768,  2260,  2283,  2306,-32768,
+    16,  1447,-32768,  2329,  2352,  1284,-32768,  1309,  1524,-32768,
+  1306,    12,-32768,  1311,  1312,  1313,  3475,-32768,  1286,-32768,
+  1287,-32768,-32768,-32768,  5899,-32768,  1314,-32768,-32768,  5922,
+  1320,-32768,  5945,  1315,  3496,  3517,  3538,  3559,  3580,  3601,
+  3622,  3643,  3664,  5968,  5991,  6014,-32768,  2001,  1317,-32768,
+  2375,  1457,  1483,    15,  1318,-32768,  1492,  1493,    16,    16,
+-32768,  1494,    12,    52,    52,    52,    52,  1495,  1498,  1525,
+    52,  1526,  1527,  1528,  1500,    65,    65,    65,    65,    65,
+    65,    65,    65,    65,-32768,-32768,-32768,    65,-32768,  1530,
+-32768,-32768,-32768,-32768,    40,    16,-32768,-32768,  1357,  1356,
+-32768,    12,  1359,  1362,  1367,  1369,-32768,-32768,-32768,  1389,
+-32768,-32768,-32768,  1390,  3685,  3706,  3727,  3748,  3769,  3790,
+  3811,  3832,  3853,  1391,  1392,  1395,  2398,  1397,   -11,  1398,
+    16,  1490,  1459,    52,    52,  1603,  1615,    52,  1617,    65,
+    65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+    65,-32768,  1618,  1620,    16,  1448,  1455,    12,  1449,  1481,
+-32768,-32768,  1452,  1461,  3874,  3895,  3916,  3937,  3958,  3979,
+  4000,  4021,  4042,   246,  6244,   259,  6244,   273,  6244,  1480,
+-32768,  1484,  1584,    65,    12,    52,    16,  1660,  1661,    65,
+    65,    65,    65,    65,    65,    65,    65,    65,    65,  1663,
+    65,  1664,    65,  1665,  1669,  1686,  1513,  4063,    12,  1515,
+  1516,-32768,-32768,  4084,  4105,  4126,  4147,  4168,  4189,  6037,
+  6060,  6083,  6244,-32768,  6244,-32768,  6244,-32768,-32768,-32768,
+    65,    65,  1549,    52,    16,    65,    65,    65,    65,    65,
+    65,-32768,-32768,-32768,  4210,  2421,  1550,  1522,  1523,  4231,
+  4252,  4273,  4294,  4315,  4336,  1531,  1537,  1547,    65,  1697,
+-32768,    16,    52,    65,    65,    65,    65,    65,    65,    65,
+    65,    65,  2444,-32768,  1529,  1497,  4357,  4378,  4399,  4420,
+  4441,  4462,   280,  6244,   281,  6244,   298,  6244,  1698,    16,
+  1700,    65,    65,    65,    65,    65,    65,    65,  1701,    65,
+  1722,    65,  1723,-32768,  1551,-32768,  4483,  4504,  4525,  6106,
+  6129,  6152,  6244,-32768,  6244,-32768,  6244,-32768,    16,    65,
+    65,    65,-32768,-32768,-32768,  1552,  4546,  4567,  4588,  1555,
+  1556,  1558,    16,    65,    65,    65,    65,    65,    65,  1561,
+  4609,  4630,  4651,   304,  6244,   311,  6244,   315,  6244,    52,
+    65,    65,    65,    65,  1735,    65,  1736,    65,  1737,  1571,
+  6175,  6198,  6221,  6244,-32768,  6244,-32768,  6244,-32768,  1739,
+-32768,-32768,-32768,-32768,  1567,  1573,  1583,    65,    65,    65,
+   318,  6244,   322,  6244,   327,  6244,    65,  1758,    65,  1759,
+    65,  1761,  6244,-32768,  6244,-32768,  6244,-32768,  1769,  1770,
+-32768
 };
 
 static const short yypgoto[] = {-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-  1121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+  1251,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  -253,    -2,-32768,
-  1635,  1636,  -313,   264,  1642,-32768,-32768,-32768,-32768,   484,
- -1014,-32768,-32768,   -75,  -847,   -23,-32768,  1066,   131,-32768,
-   -85,-32768,  -887,   829,   784,  -406,  -892,-32768,-32768,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -253,   -20,-32768,
+  1764,  1765,  -309,   234,  1767,-32768,-32768,-32768,-32768,   605,
+ -1027,-32768,-32768,   -72,  -869,   -23,-32768,  1194,   276,-32768,
+   -85,-32768,  -939,   932,   357,  -408,  -695,   983,-32768,-32768
 };
 
 
-#define	YYLAST		6585
+#define	YYLAST		6417
 
 
 static const short yytable[] = {   129,
-   223,   461,   190,  1082,   402,   228,   804,   172,   903,   182,
-    76,  1000,   808,   180,   961,   579,   938,  1177,  1006,   138,
-   128,   141,   258,   970,  1016,   809,    88,   291,   328,  1017,
-   977,     9,    92,    93,    94,    95,    96,    97,    98,    99,
-   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-   110,   111,   112,   113,  1022,   685,  1016,   312,   313,   312,
-   313,  1017,   122,   123,   810,   468,   469,    88,    89,   857,
-   663,   866,     8,    92,    93,    94,    95,    96,    97,    98,
+   223,   815,   128,  1093,   403,   190,   463,   976,   953,   228,
+   579,   172,   699,   182,    76,   584,   985,  1035,    88,   292,
+  1184,   138,   180,   992,    92,    93,    94,    95,    96,    97,
+    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+   108,   109,   110,   111,   112,   113,   823,  1029,  1029,   141,
+   329,   258,  1030,  1030,   690,   313,   314,   313,   314,   824,
+   273,   274,   275,   276,   277,   470,   471,    88,    89,   872,
+   278,   454,  1019,    92,    93,    94,    95,    96,    97,    98,
     99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   252,   253,   254,   173,  1016,
-   255,   257,   259,   260,  1017,  1065,   177,   312,   313,   178,
-   280,   281,   282,   283,   336,   285,   286,    79,   288,   289,
-   290,   329,   295,   836,   421,   837,   312,   313,   422,    80,
-   159,   160,   312,   313,   139,   686,   687,   310,   311,    81,
-   140,   161,   142,   314,  1093,  1081,   571,   162,   838,   181,
-   839,   312,   313,   150,   151,   327,   152,   330,   134,   332,
-   333,   683,   312,   313,   135,   594,   846,   595,   315,   312,
-   313,    77,   847,   165,  1128,   312,   313,  1239,   840,   183,
-   841,   229,   805,   174,   904,  1094,   119,   120,    82,  1098,
-   939,  1178,   121,    41,    42,    43,    44,   124,    46,  1082,
-   513,   372,    91,   292,   514,    83,   376,   377,   378,   379,
-   380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-   390,   391,   392,   393,   394,   395,   396,   119,   120,  1024,
-    84,  1025,   167,   121,   948,   168,   169,    10,   124,   406,
-   407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
-   417,   418,   419,   420,   133,   403,   122,   123,   401,  1067,
-   427,  1068,   225,   430,   226,  1004,   147,   567,   436,   312,
-   313,   568,   441,   442,   443,    85,   445,   446,   447,   448,
-   449,   450,   451,   798,   122,   123,   520,    86,   307,   308,
-   309,   312,   313,   463,   464,   465,   316,   148,   470,  1186,
-  1187,  1188,  1189,   823,   824,   476,  1193,   452,   274,   275,
-   276,   481,    87,    88,    89,    90,   277,    91,   132,    92,
-    93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,  1285,   114,  1286,   115,   116,   117,   118,    11,    12,
-    13,    14,    15,    16,    17,    18,   122,   123,   374,   694,
-   312,   313,   225,   594,   226,   122,   123,   136,   137,   713,
-   519,  1244,  1245,   570,   143,  1248,   462,   144,   574,   263,
-   264,   265,   266,   267,   145,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,   146,   312,   313,   572,   436,   277,
-   115,   116,   117,   118,   797,  1023,   149,   949,   594,  1024,
-   372,   722,  1287,   714,  1288,   596,   312,   313,   312,   313,
-   601,   122,   123,   153,  1296,   115,   116,   117,   118,   610,
-   611,   799,  1013,   320,  1014,   312,   313,   324,   614,  1289,
-   171,  1290,   455,   456,   158,   618,   122,   123,  1384,   175,
-  1385,  1015,   176,   166,   626,   627,  1386,   179,  1387,   115,
-   116,   117,   118,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,  1334,   119,   120,   170,  1388,   277,  1389,   121,
-   122,   123,   184,   185,   124,  1440,   125,  1441,   126,   521,
-   522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-   532,  1362,   272,   273,   274,   275,   276,   765,   766,   767,
-   768,   769,   277,   262,   186,   664,   263,   264,   265,   266,
-   267,   932,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,   122,   123,   679,   187,   188,   277,   434,   189,   226,
-   680,   681,   682,   221,   436,   154,   224,   688,   155,   156,
-  1442,   157,  1443,   693,   265,   266,   267,   261,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,   230,   372,   704,
-   706,   231,   277,   122,   123,   232,   778,   122,   123,   592,
-   233,   226,   609,   818,  1444,   226,  1445,   234,  1446,  1473,
-  1475,  1474,  1476,  1477,   235,  1478,   731,   732,   236,   734,
-   237,   238,   239,   738,   533,   240,   241,   743,   744,   242,
-   243,   244,   245,    88,    89,   246,   247,   278,   248,    92,
-    93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,   249,   781,   782,   783,   784,   785,   786,   787,   788,
-   789,   790,   791,   792,   405,   250,   251,   279,   284,   287,
-   263,   264,   265,   266,   267,   853,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,   296,   297,   298,   300,   301,
-   277,   317,   800,   302,   318,   819,   303,   304,   305,   306,
-   323,   331,   322,   334,   335,   337,  1073,   319,   832,   833,
-   834,   338,   339,   340,   367,   341,   342,   343,   344,   373,
-   695,   345,   346,   850,   851,   369,   347,    88,   435,   348,
-   349,   350,   351,    92,    93,    94,    95,    96,    97,    98,
+   109,   110,   111,   112,   113,   252,   253,   254,   825,  1029,
+   255,   257,   173,   261,  1030,  1104,   177,   313,   314,   178,
+   281,   282,   283,   284,     9,   286,   287,   337,   289,   290,
+   291,   134,   296,   851,   924,   852,   423,   135,   313,   314,
+   424,   259,   260,   861,   691,   692,   139,   311,   312,   862,
+   313,   314,   140,   330,   853,     8,   854,   573,   313,   314,
+   776,   777,   778,   779,   780,   328,   464,   331,   181,   333,
+   334,   688,   150,   151,   855,   152,   856,   515,  1092,  1244,
+   142,   516,    79,   313,   314,    77,  1105,    80,   119,   120,
+  1109,    81,   954,   183,   121,   229,   580,   174,   700,   124,
+   315,  1093,   122,   123,  1185,   293,    82,   599,   225,   600,
+   226,   373,    85,   313,   314,    86,   377,   378,   379,   380,
+   381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
+   391,   392,   393,   394,   395,   396,   397,   119,   120,   313,
+   314,   122,   123,   121,    87,   145,   963,   404,   124,   668,
+   408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
+   418,   419,   420,   421,   422,    10,   313,   314,   569,   159,
+   160,   429,   570,   167,   432,    83,   168,   169,   881,   438,
+   161,   313,   314,   443,   444,   445,   162,   447,   448,   449,
+   450,   451,   452,   453,  1193,  1194,  1195,  1196,   316,   313,
+   314,  1200,   313,   314,   465,   466,   467,   313,   314,   472,
+    91,    84,   122,   123,   132,   733,   478,   133,   225,   522,
+   226,   922,   483,  1026,   275,   276,   277,  1078,   165,    88,
+    89,    90,   278,    91,   136,    92,    93,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   705,   114,   313,
+   314,   599,   808,   521,  1249,  1250,   599,   147,  1253,   313,
+   314,   724,   820,   137,   821,  1027,    11,    12,    13,    14,
+    15,    16,    17,    18,  1036,  1028,   122,   123,  1037,   576,
+   574,   264,   265,   266,   267,   268,   143,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,   122,   123,   838,   839,
+   438,   278,   436,   321,   226,   725,  1300,   325,   402,   964,
+   122,   123,   373,  1037,   148,  1038,   597,   601,   226,   122,
+   123,   809,   606,   149,  1289,   833,  1290,   226,   144,   146,
+   153,   615,   616,   308,   309,   310,   810,  1291,   171,  1292,
+   619,   317,   115,   116,   117,   118,   154,   623,   158,   155,
+   156,  1293,   157,  1294,  1338,   175,   631,   632,  1388,  1390,
+  1389,  1391,   166,   122,   123,   115,   116,   117,   118,   170,
+   176,   572,    41,    42,    43,    44,  1392,    46,  1393,   119,
+   120,   179,  1444,  1366,  1445,   121,   122,   123,   185,  1446,
+   124,  1447,   125,  1448,   126,  1449,  1477,   184,  1478,   669,
+  1479,   295,  1480,   375,   186,  1481,   300,  1482,   264,   265,
+   266,   267,   268,   187,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,   188,   189,   221,   230,   322,   278,   224,
+   280,   231,   232,   326,   327,   684,   749,   233,   234,   235,
+   947,   236,   685,   686,   687,   237,   438,   238,   239,   693,
+   115,   116,   117,   118,   240,   241,   242,   243,   704,   262,
+   244,   245,   246,   115,   116,   117,   118,   247,   248,   249,
+  1450,   122,   123,   373,   715,   717,   250,   251,   279,   285,
+   288,   789,   298,   263,   122,   123,   323,   297,   457,   458,
+   299,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+   301,   742,   743,   302,   745,   278,   318,   303,   304,   305,
+    88,    89,   754,   755,   306,   307,    92,    93,    94,    95,
+    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   319,   320,
+   324,   332,   335,   407,   336,   338,   339,   792,   793,   794,
+   795,   796,   797,   798,   799,   800,   801,   802,   803,   368,
+   340,   341,   342,   343,   344,   345,   346,   347,   348,   811,
+   696,   349,   350,   351,   816,   352,   819,   353,   354,   868,
+   355,   264,   265,   266,   267,   268,   356,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,   834,   357,   370,   372,
+   358,   278,   371,   750,   359,   360,   361,   362,   363,   847,
+   848,   849,   364,  1084,   365,   366,   367,   374,   278,   398,
+   477,   405,   400,   406,   865,   866,   441,   446,   474,   614,
+   264,   265,   266,   267,   268,   475,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,   480,   484,   485,   486,   487,
+   278,   488,   489,   490,   491,   492,   571,   523,   524,   525,
+   526,   527,   528,   529,   530,   531,   532,   533,   534,   900,
+   119,   120,   493,   494,   495,   496,   121,   497,   498,   499,
+   500,   124,   501,   502,   256,   503,   915,   504,   505,   506,
+   264,   265,   266,   267,   268,   967,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,   507,   508,   509,   928,   373,
+   278,   510,   511,   998,   934,   935,   512,   264,   265,   266,
+   267,   268,   513,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,   514,   955,   956,   517,   519,   278,   578,   518,
+   575,   617,   577,   966,   267,   268,   969,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,   979,   583,   618,   585,
+   706,   278,   586,   986,   987,   988,   587,   588,   590,   591,
+   993,   593,   535,   594,   997,   595,   602,   625,   999,  1000,
+  1001,  1002,  1003,  1004,  1005,  1006,  1007,  1008,  1009,  1010,
+   626,   627,   628,   630,  1043,   737,   738,   739,  1017,  1018,
+   634,   635,   636,   637,   638,   639,  1020,   665,   640,   641,
+   642,   643,   644,   756,   645,   646,   647,   648,   649,   650,
+   651,  1024,   765,   523,   524,   525,   526,   527,   528,   529,
+   530,   531,   532,   533,   534,   652,   653,   654,   655,  1041,
+   656,   657,   658,   707,   708,   659,   710,    88,    89,   683,
+   712,   713,   689,    92,    93,    94,    95,    96,    97,    98,
     99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-   109,   110,   111,   112,   113,   726,   727,   728,   263,   264,
-   265,   266,   267,   352,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   745,   479,   353,   354,   355,   277,   370,
-   739,   356,   754,   119,   120,   900,   885,   952,   371,   121,
-   357,   908,   358,   359,   124,   397,   360,   256,   691,   361,
-   362,   363,   364,   913,   372,   365,   366,   277,   983,   919,
-   920,   263,   264,   265,   266,   267,   399,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,   404,   439,   940,   941,
-   444,   277,   472,   473,   475,   478,   482,   483,   951,   266,
-   267,   954,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,   964,   484,   485,   486,   487,   277,   488,   971,   972,
-   973,   489,   490,   491,   492,   978,   493,   494,   495,   982,
-   496,   497,   498,   984,   985,   986,   987,   988,   989,   990,
-   991,   992,   993,   994,   995,   499,  1030,   119,   120,   500,
-   501,   502,   503,   121,   504,   505,   506,   507,   124,   508,
-   509,  1007,   521,   522,   523,   524,   525,   526,   527,   528,
-   529,   530,   531,   532,   510,   511,  1011,   516,   512,   263,
-   264,   265,   266,   267,   515,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,  1028,   517,   573,   576,   294,   277,
-   575,   578,   581,   299,   580,   263,   264,   265,   266,   267,
-   910,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-   582,   583,   585,   586,   321,   277,   588,   612,   589,   590,
-   325,   326,   597,   708,   623,   613,   933,   620,   935,   621,
-   937,   622,   625,   629,   630,  1066,   631,   632,   660,   633,
-  1070,  1071,   634,   635,   636,   637,   638,   639,   640,  1076,
-  1077,  1078,   661,   641,   678,   684,  1083,  1084,   729,   642,
-   643,   689,   644,  1088,   645,   690,   666,   780,   646,   647,
-   648,  1096,   649,   650,   651,  1146,   692,   698,   700,  1104,
-   652,   710,   653,   654,  1109,   709,   711,  1112,   667,  1114,
-  1115,  1116,  1117,  1118,  1119,  1120,  1121,  1122,  1123,  1124,
-  1125,   655,   656,   657,   658,   659,   662,   668,   712,   715,
-  1134,   716,   669,   717,   718,   670,   719,   671,   720,   721,
-   672,   673,   674,   675,   676,    88,    89,   677,   735,   730,
-  1185,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-   101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-   111,   112,   113,   740,   742,   741,   746,   747,   748,   749,
-   750,   753,   755,   756,   759,   760,   761,  1172,   762,  1218,
-   263,   264,   265,   266,   267,   763,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,   803,   772,   773,   775,   774,
-   277,   776,   777,   779,   801,  1198,  1199,  1200,  1201,  1202,
-  1203,  1204,  1205,  1206,   802,   263,   264,   265,   266,   267,
-   807,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-   811,   813,   815,   816,   835,   277,   844,  1271,   849,   886,
-   852,   859,   854,   858,   899,   861,   860,   862,   863,   901,
-   864,   865,   569,   867,   870,   871,   872,  1237,   868,   902,
-   869,   873,   909,   911,   906,  1295,   874,   875,   876,   877,
-   878,  1250,  1251,  1252,  1253,  1254,  1255,  1256,  1257,  1258,
-  1260,  1262,  1264,   879,   880,   881,   883,   884,   882,  1319,
-   912,   916,   917,   918,   921,   119,   120,   922,   923,   924,
-   925,   121,   926,   927,   934,   936,   124,   942,   953,   591,
-   956,   946,   957,   958,   959,   998,  1294,   960,   962,   963,
-   965,   966,  1300,  1301,  1302,  1303,  1304,  1305,  1306,  1307,
-  1308,  1309,   967,  1311,   968,  1313,   969,   975,   976,   979,
-   980,   999,   263,   264,   265,   266,   267,   981,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,   996,  1002,  1003,
-  1010,  1026,   277,  1331,  1332,  1012,  1031,  1033,  1336,  1337,
-  1338,  1339,  1340,  1341,  1079,  1027,  1034,   997,  1036,  1035,
-  1037,  1039,  1069,  1040,  1041,  1045,  1046,  1047,  1050,  1049,
-  1091,  1359,  1092,  1085,  1052,  1095,  1363,  1364,  1365,  1366,
-  1367,  1368,  1370,  1372,  1374,  1097,  1099,  1100,  1101,  1080,
-  1143,  1102,  1103,  1105,  1107,  1108,  1110,  1111,  1126,  1113,
-  1129,  1133,  1132,  1145,  1393,  1394,  1395,  1396,  1397,  1398,
-  1399,  1139,  1401,  1142,  1403,   696,   697,  1147,   699,  1148,
-  1149,  1151,   701,   702,  1152,  1156,  1154,  1158,  1175,  1171,
-  1176,  1173,  1413,  1414,  1415,  1179,  1180,  1181,  1184,  1190,
-  1191,  1192,  1194,  1195,  1196,  1197,  1427,  1428,  1429,  1431,
-  1433,  1435,  1210,  1213,  1242,   733,  1243,  1246,   736,  1247,
-  1216,  1219,  1220,  1447,  1448,  1449,  1450,  1217,  1452,  1249,
-  1454,  1266,   751,   752,  1221,  1222,  1223,  1267,   757,   758,
-  1224,  1293,  1234,  1235,  1236,   764,  1238,   771,  1240,  1272,
-  1468,  1470,  1472,  1269,  1274,  1275,  1298,  1299,  1270,  1479,
-  1310,  1481,  1273,  1483,   263,   264,   265,   266,   267,  1291,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,  1292,
-  1008,  1312,  1314,  1315,   277,  1316,  1317,  1356,  1320,  1321,
-  1333,   812,  1348,   814,  1349,  1360,  1357,  1358,  1347,  1376,
-  1377,  1390,  1392,   820,   821,   822,  1009,  1400,   825,   826,
-   827,   828,   829,   830,   831,    88,    89,  1402,  1423,  1404,
-  1405,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-   101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-   111,   112,   113,    88,    89,  1419,  1456,  1424,  1425,    92,
-    93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-   113,    88,   705,  1451,  1486,  1453,  1455,    92,    93,    94,
+   109,   110,   111,   112,   113,   660,   661,   662,   663,   666,
+   664,   694,   667,   744,   671,   695,   747,   266,   267,   268,
+   672,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+   762,   763,  1087,  1088,  1089,   278,   768,   769,   697,  1094,
+  1095,   719,   673,   775,   674,   782,  1099,   675,   676,   677,
+   678,   679,   680,   681,  1107,   703,   698,   682,   709,  1153,
+   711,   721,  1115,   740,   720,   722,   723,  1120,   791,   726,
+  1123,   727,  1125,  1126,  1127,  1128,  1129,  1130,  1131,  1132,
+  1133,  1134,  1135,  1136,   728,   729,   730,   731,  1138,   732,
+   741,  1141,   746,   752,   751,   827,   753,   829,   757,   758,
+   759,   760,   761,   764,   766,   767,   770,   835,   836,   837,
+  1192,   814,   840,   841,   842,   843,   844,   845,   846,   771,
+    26,    27,    28,    29,    30,    31,    32,    33,   772,    34,
+   925,    36,    37,   773,    39,    40,   774,   119,   120,   783,
+   784,   786,   785,   121,   787,   788,   790,   812,   124,  1223,
+    51,   596,   813,  1012,   822,   817,   948,   826,   950,   828,
+   952,   830,   831,   850,    52,    53,   859,   867,   869,   873,
+   874,   864,  1205,  1206,  1207,  1208,  1209,  1210,  1211,  1212,
+  1213,   875,   876,   877,  1217,   878,   883,   879,   264,   265,
+   266,   267,   268,   481,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,   880,   882,  1275,   885,   884,   278,   886,
+   264,   265,   266,   267,   268,   887,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,    62,   888,   889,   901,   890,
+   278,   891,  1299,   914,   892,   897,  1255,  1256,  1257,  1258,
+  1259,  1260,  1261,  1262,  1263,  1265,  1267,  1269,   893,   894,
+   962,   895,  1021,   896,   898,   899,  1323,   970,   264,   265,
+   266,   267,   268,   916,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,   917,   919,   921,   989,   926,   278,   927,
+  1298,   931,   932,   933,   936,   937,  1304,  1305,  1306,  1307,
+  1308,  1309,  1310,  1311,  1312,  1313,   938,  1315,   939,  1317,
+   264,   265,   266,   267,   268,   940,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,   941,   942,   949,   951,   961,
+   278,   957,   968,   971,   972,   978,   973,  1335,  1336,   974,
+   975,   977,  1340,  1341,  1342,  1343,  1344,  1345,   264,   265,
+   266,   267,   268,   980,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,   981,   982,  1363,   984,   983,   278,   991,
+  1367,  1368,  1369,  1370,  1371,  1372,  1374,  1376,  1378,   990,
+   994,   995,   996,  1015,  1016,  1011,  1040,  1013,  1014,  1023,
+  1044,  1025,  1039,  1046,  1049,  1047,  1048,  1050,  1397,  1398,
+  1399,  1400,  1401,  1402,  1403,  1052,  1405,  1058,  1407,   264,
+   265,   266,   267,   268,  1053,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,  1054,  1059,  1417,  1418,  1419,   278,
+  1060,  1062,  1063,  1097,  1079,  1098,  1080,  1065,  1101,  1090,
+  1431,  1432,  1433,  1435,  1437,  1439,  1091,  1096,  1103,  1102,
+  1106,  1108,  1110,  1111,  1117,  1112,  1121,  1451,  1452,  1453,
+  1454,  1113,  1456,  1114,  1458,  1116,  1118,  1119,   264,   265,
+   266,   267,   268,  1122,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,  1124,  1472,  1474,  1476,  1145,   278,  1137,
+  1139,  1140,  1146,  1483,   455,  1485,  1022,  1487,    88,    89,
+  1158,  1159,  1182,  1149,    92,    93,    94,    95,    96,    97,
+    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+   108,   109,   110,   111,   112,   113,  1152,  1150,  1183,  1154,
+  1155,  1156,  1161,  1165,  1163,  1180,  1186,  1187,  1188,  1191,
+  1197,    88,    89,  1198,  1204,  1189,  1190,    92,    93,    94,
     95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-   105,   106,   107,   108,   109,   110,   111,   112,   113,    88,
-   907,  1436,  1487,  1460,  1480,    92,    93,    94,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   263,   264,   265,
-   266,   267,  1144,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,   947,  1464,  1465,  1466,  1482,   277,  1484,   955,
-   665,    67,    68,   263,   264,   265,   266,   267,    69,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,   974,   707,
-     0,  1214,     0,   277,     0,   119,   120,     0,   577,     0,
-     0,   121,     0,     0,     0,   945,   124,     0,     0,   703,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   593,
-     0,     0,     0,   119,   120,     0,     0,     0,     0,   121,
-     0,     0,     0,     0,   124,     0,     0,   914,     0,     0,
-     0,     0,     0,   737,     0,     0,     0,     0,     0,     0,
-     0,   119,   120,     0,     0,     0,     0,   121,   817,     0,
-     0,     0,   124,   263,   264,   265,   266,   267,     0,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,   119,
-   120,     0,     0,   277,     0,   121,     0,     0,     0,   930,
-   124,   931,     0,     0,     0,     0,     0,     0,     0,   263,
-   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,  1086,     0,  1087,
-   277,     0,  1090,   263,   264,   265,   266,   267,   424,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,  1106,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,     0,     0,   263,   264,
-   265,   266,   267,  1138,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   263,   264,   265,   266,   267,   277,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,     0,     0,    26,    27,    28,
-    29,    30,    31,    32,    33,     0,    34,     0,    36,    37,
-     0,    39,    40,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,  1182,  1183,    51,     0,     0,
+   105,   106,   107,   108,   109,   110,   111,   112,   113,  1151,
+  1199,  1201,  1202,  1203,  1218,  1221,  1222,  1224,    88,   437,
+  1225,  1226,  1220,  1227,    92,    93,    94,    95,    96,    97,
+    98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+   108,   109,   110,   111,   112,   113,   582,  1228,  1229,  1247,
+  1239,  1240,    88,   716,  1241,  1243,  1245,  1246,    92,    93,
+    94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+  1248,  1272,   598,   264,   265,   266,   267,   268,  1251,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,   119,   120,
+  1252,  1254,  1270,   278,   121,  1271,  1278,  1276,  1273,   124,
+    88,   818,   714,  1301,  1274,  1279,    92,    93,    94,    95,
+    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,   748,  1277,
+  1295,   119,   120,  1297,  1296,  1302,  1303,   121,  1314,  1316,
+  1318,  1381,   124,   832,  1319,   929,   264,   265,   266,   267,
+   268,  1339,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,  1320,  1321,  1324,  1325,  1337,   278,  1351,   119,   120,
+  1352,  1353,  1364,  1394,   121,  1396,  1404,  1380,  1365,   124,
+  1360,   264,   265,   266,   267,   268,  1361,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,  1362,  1406,  1408,  1409,
+  1423,   278,   119,   120,  1427,  1428,  1395,  1429,   121,  1440,
+  1455,  1457,  1459,   124,  1464,  1460,  1468,   264,   265,   266,
+   267,   268,  1469,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,  1470,  1484,  1486,  1416,  1488,   278,  1490,  1491,
+    67,    68,   670,    69,   264,   265,   266,   267,   268,  1430,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,  1219,
+   119,   120,   718,   960,   278,   918,   121,     0,     0,     0,
+   945,   124,   946,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,   264,   265,
+   266,   267,   268,   278,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,    26,
+    27,    28,    29,    30,    31,    32,    33,     0,    34,     0,
+    36,    37,     0,    39,    40,     0,    26,    27,    28,    29,
+    30,    31,    32,    33,     0,    34,     0,    36,    37,    51,
+    39,    40,     0,     0,    -8,     1,     0,    -8,   -51,     0,
+     0,     0,     0,    52,    53,     0,    51,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    52,    53,    26,    27,    28,    29,    30,    31,    32,
-    33,     0,    34,     0,    36,    37,     0,    39,    40,     0,
-     0,     0,  1215,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    51,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    52,    53,    26,
-    27,    28,    29,    30,    31,    32,    33,     0,    34,  1241,
-    36,    37,    62,    39,    40,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-     0,     0,     0,  1268,    -8,     1,     0,    -8,   -51,     0,
-     0,     0,     0,    52,    53,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   466,     0,     0,     0,    62,     0,
-     0,     0,     0,     0,     0,   -51,  1297,   -51,   -51,   -51,
+    52,    53,     0,     0,     0,   -51,     0,   -51,   -51,   -51,
    -51,   -51,   -51,   -51,   -51,   -51,     0,   -51,   -51,   -51,
    -51,   -51,   -51,   -51,     0,     0,     0,   -51,   -51,   -51,
    -51,   -51,   -51,     0,   -51,   -51,   -51,   -51,   -51,     0,
-   471,     0,     0,     0,    62,     0,     0,     0,     0,     0,
-     0,     0,   -51,   -51,  1335,     0,     0,     0,     0,     0,
-   -51,     0,   -51,   -51,   -51,   -51,   -51,   -51,   -51,     0,
+     0,     0,     0,     0,    62,     0,     0,     0,     0,     0,
+     0,     0,   -51,   -51,     0,     0,     0,     0,     0,     0,
+   -51,    62,   -51,   -51,   -51,   -51,   -51,   -51,   -51,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   468,     0,    -8,    -8,
+    -8,    -8,    -8,    -8,    -8,    -8,    23,     0,   264,   265,
+   266,   267,   268,   473,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,   -51,     2,     3,     0,     4,   278,     0,
+     0,     0,     0,    24,   456,    25,    26,    27,    28,    29,
+    30,    31,    32,    33,     0,    34,    35,    36,    37,    38,
+    39,    40,     0,     0,     0,    41,    42,    43,    44,    45,
+    46,   191,    47,    48,    49,    50,    51,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,  1361,     0,     0,     0,     0,     0,     0,    -8,    -8,
-    -8,    -8,    -8,    -8,    -8,    -8,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1391,
-     0,     0,     0,   -51,     2,     3,     0,     4,     0,   263,
-   264,   265,   266,   267,    23,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,  1412,   277,
-     0,     0,     0,     0,     0,  1074,     0,  1075,     0,     0,
-     0,    24,  1426,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,     0,    34,    35,    36,    37,    38,    39,    40,
-     0,     0,     0,    41,    42,    43,    44,    45,    46,   191,
-    47,    48,    49,    50,    51,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    52,    53,
-     0,     0,     0,     0,     0,     0,    54,     0,    55,    56,
-    57,    58,    59,    60,    61,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,     0,   192,   193,
-   194,  1211,     0,  1212,     0,     0,   195,   196,   197,   198,
-   199,   200,   201,   202,   203,   204,     0,     0,     0,    62,
-     0,     0,     0,     0,   205,   206,   207,   208,   209,   210,
-   211,   212,   213,   214,     0,   215,   216,   217,   218,   219,
-   220,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,     0,   263,   264,   265,   266,   267,   429,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,     0,   263,   264,   265,
-   266,   267,   431,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
-   263,   264,   265,   266,   267,   598,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,     0,   263,   264,   265,   266,   267,   602,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,     0,   263,   264,   265,   266,
-   267,   603,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,     0,   263,
-   264,   265,   266,   267,   725,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,     0,   263,   264,   265,   266,   267,   928,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,     0,   263,   264,   265,   266,   267,
-  1089,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,     0,   263,   264,
-   265,   266,   267,  1130,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-     0,   263,   264,   265,   266,   267,  1135,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,     0,   263,   264,   265,   266,   267,  1136,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,     0,   263,   264,   265,
-   266,   267,  1137,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
-   263,   264,   265,   266,   267,  1140,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,     0,   263,   264,   265,   266,   267,  1141,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,     0,   263,   264,   265,   266,
-   267,  1174,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,     0,   263,
-   264,   265,   266,   267,  1265,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,     0,   263,   264,   265,   266,   267,  1346,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,     0,   263,   264,   265,   266,   267,
-  1375,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,   453,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,   454,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,   557,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,   564,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,   565,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,   566,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,   615,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,   616,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,   617,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-   723,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,   724,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,   842,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,   843,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,   855,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,   856,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,   887,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,   888,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,   889,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,   890,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-   891,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,   892,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,   893,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,   894,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,   895,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,   896,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,   897,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,   898,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,   915,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1005,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1020,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1021,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1029,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1032,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1043,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1048,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1051,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1053,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,  1054,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1055,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1056,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1057,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1058,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1059,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1060,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1061,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1062,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1063,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,  1064,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1072,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1131,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1150,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1159,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1160,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1161,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1162,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1163,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1164,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,  1165,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1166,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1167,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1225,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1226,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1227,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1228,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1229,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1230,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1231,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,  1232,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1233,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1276,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1277,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1278,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1279,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1280,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1281,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1282,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1283,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,  1284,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1318,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1322,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1323,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1324,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1325,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1326,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1327,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1345,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1350,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,  1351,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1352,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1353,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1354,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1355,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1378,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1379,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1380,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1381,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1382,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,   263,   264,   265,   266,   267,  1383,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,   263,   264,   265,   266,   267,  1406,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,   263,   264,   265,   266,   267,
-  1407,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,   263,   264,   265,   266,
-   267,  1408,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,   263,   264,   265,
-   266,   267,  1420,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,   263,   264,
-   265,   266,   267,  1421,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,   263,
-   264,   265,   266,   267,  1422,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-   263,   264,   265,   266,   267,  1437,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,   263,   264,   265,   266,   267,  1438,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,   263,   264,   265,   266,   267,  1439,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,     0,     0,   400,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
-     0,   518,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,     0,     0,   619,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,     0,
-     0,  1127,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,   398,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,   423,   263,   264,
-   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-   425,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,   426,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,   428,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,   432,
-   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,   433,   263,   264,   265,   266,   267,     0,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,   440,   263,   264,   265,   266,
-   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,   474,   263,
-   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,   477,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,   480,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,   546,   263,   264,
-   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-   547,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,   548,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,   549,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,   550,
-   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,   551,   263,   264,   265,   266,   267,     0,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,   552,   263,   264,   265,   266,
-   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,   553,   263,
-   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,   554,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,   555,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,   556,   263,   264,
-   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-   558,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,   559,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,   560,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,   561,
-   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,   562,   263,   264,   265,   266,   267,     0,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,   563,   263,   264,   265,   266,
-   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,   584,   263,
-   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,   587,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,   599,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,   600,   263,   264,
-   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-   604,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,   605,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,   606,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,   607,
-   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,   608,   263,   264,   265,   266,   267,     0,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,   624,   263,   264,   265,   266,
-   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,   628,   263,
-   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,   793,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,   794,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,   795,   263,   264,
-   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-   796,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,   845,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,   929,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,   950,
-   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,  1038,   263,   264,   265,   266,   267,     0,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,  1042,   263,   264,   265,   266,
-   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,  1044,   263,
-   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,  1153,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,  1155,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,  1157,   263,   264,
-   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-  1168,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,  1169,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277,     0,  1170,   263,   264,   265,
-   266,   267,     0,   268,   269,   270,   271,   272,   273,   274,
-   275,   276,     0,     0,     0,     0,     0,   277,     0,  1328,
-   263,   264,   265,   266,   267,     0,   268,   269,   270,   271,
-   272,   273,   274,   275,   276,     0,     0,     0,     0,     0,
-   277,     0,  1329,   263,   264,   265,   266,   267,     0,   268,
-   269,   270,   271,   272,   273,   274,   275,   276,     0,     0,
-     0,     0,     0,   277,     0,  1330,   263,   264,   265,   266,
-   267,     0,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,     0,     0,     0,     0,     0,   277,     0,  1409,   263,
-   264,   265,   266,   267,     0,   268,   269,   270,   271,   272,
-   273,   274,   275,   276,     0,     0,     0,     0,     0,   277,
-     0,  1410,   263,   264,   265,   266,   267,     0,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,     0,     0,     0,
-     0,     0,   277,     0,  1411,   263,   264,   265,   266,   267,
-     0,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     0,     0,     0,     0,     0,   277,     0,  1457,   263,   264,
-   265,   266,   267,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,     0,     0,     0,     0,     0,   277,     0,
-  1458,   263,   264,   265,   266,   267,     0,   268,   269,   270,
-   271,   272,   273,   274,   275,   276,     0,     0,     0,     0,
-     0,   277,     0,  1459,   263,   264,   265,   266,   267,     0,
-   268,   269,   270,   271,   272,   273,   274,   275,   276,     0,
-     0,     0,     0,     0,   277
+    52,    53,     0,     0,     0,     0,     0,     0,    54,     0,
+    55,    56,    57,    58,    59,    60,    61,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,     0,
+   192,   193,   194,  1085,     0,  1086,     0,     0,   195,   196,
+   197,   198,   199,   200,   201,   202,   203,   204,     0,     0,
+     0,    62,     0,     0,     0,     0,   205,   206,   207,   208,
+   209,   210,   211,   212,   213,   214,     0,   215,   216,   217,
+   218,   219,   220,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,     0,     0,     0,     0,  1178,
+     0,  1179,   264,   265,   266,   267,   268,     0,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,     0,   264,   265,   266,   267,   268,
+   426,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,     0,   264,   265,
+   266,   267,   268,   431,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+     0,   264,   265,   266,   267,   268,   433,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,     0,   264,   265,   266,   267,   268,   603,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,     0,   264,   265,   266,
+   267,   268,   607,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,     0,
+   264,   265,   266,   267,   268,   608,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,     0,   264,   265,   266,   267,   268,   736,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,     0,   264,   265,   266,   267,
+   268,   943,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,     0,   264,
+   265,   266,   267,   268,  1081,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,     0,   264,   265,   266,   267,   268,  1100,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,     0,   264,   265,   266,   267,   268,
+  1142,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,     0,   264,   265,
+   266,   267,   268,  1143,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+     0,   264,   265,   266,   267,   268,  1144,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,     0,   264,   265,   266,   267,   268,  1147,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,     0,   264,   265,   266,
+   267,   268,  1148,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,     0,
+   264,   265,   266,   267,   268,  1181,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,     0,   264,   265,   266,   267,   268,  1242,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,     0,   264,   265,   266,   267,
+   268,  1350,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,     0,   264,
+   265,   266,   267,   268,  1379,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,   559,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,   566,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,   567,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,   568,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,   620,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+   621,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,   622,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,   734,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,   735,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,   857,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,   858,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,   870,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,   871,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,   902,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,   903,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+   904,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,   905,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,   906,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,   907,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,   908,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,   909,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,   910,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,   911,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,   912,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,   913,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+   923,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,   930,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1033,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1034,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1042,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1045,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1056,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1061,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1064,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1066,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+  1067,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,  1068,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1069,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1070,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1071,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1072,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1073,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1074,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1075,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1076,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+  1077,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,  1082,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1083,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1157,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1166,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1167,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1168,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1169,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1170,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1171,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+  1172,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,  1173,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1174,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1230,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1231,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1232,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1233,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1234,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1235,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1236,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+  1237,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,  1238,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1280,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1281,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1282,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1283,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1284,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1285,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1286,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1287,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+  1288,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,  1322,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1326,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1327,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1328,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1329,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1330,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1331,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1349,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1354,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+  1355,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,  1356,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1357,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1358,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1359,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1382,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1383,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1384,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1385,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1386,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,   264,   265,   266,   267,   268,
+  1387,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,   264,   265,   266,   267,
+   268,  1410,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,   264,   265,   266,
+   267,   268,  1411,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,   264,   265,
+   266,   267,   268,  1412,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,   264,
+   265,   266,   267,   268,  1424,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+   264,   265,   266,   267,   268,  1425,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,   264,   265,   266,   267,   268,  1426,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,   264,   265,   266,   267,   268,  1441,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,   264,   265,   266,   267,   268,  1442,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,   264,   265,   266,   267,   268,  1443,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,     0,     0,   401,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,     0,     0,   520,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,     0,     0,   624,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,     0,     0,   920,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,   399,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,   425,
+   264,   265,   266,   267,   268,     0,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,   427,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,   428,   264,   265,   266,   267,
+   268,     0,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,   430,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,   434,   264,   265,   266,   267,   268,     0,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,   435,   264,   265,   266,   267,   268,
+     0,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,   442,   264,   265,
+   266,   267,   268,     0,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+   476,   264,   265,   266,   267,   268,     0,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,   479,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,   482,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,   548,
+   264,   265,   266,   267,   268,     0,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,   549,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,   550,   264,   265,   266,   267,
+   268,     0,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,   551,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,   552,   264,   265,   266,   267,   268,     0,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,   553,   264,   265,   266,   267,   268,
+     0,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,   554,   264,   265,
+   266,   267,   268,     0,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+   555,   264,   265,   266,   267,   268,     0,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,   556,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,   557,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,   558,
+   264,   265,   266,   267,   268,     0,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,   560,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,   561,   264,   265,   266,   267,
+   268,     0,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,   562,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,   563,   264,   265,   266,   267,   268,     0,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,   564,   264,   265,   266,   267,   268,
+     0,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,   565,   264,   265,
+   266,   267,   268,     0,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+   589,   264,   265,   266,   267,   268,     0,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,   592,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,   604,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,   605,
+   264,   265,   266,   267,   268,     0,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,   609,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,   610,   264,   265,   266,   267,
+   268,     0,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,   611,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,   612,   264,   265,   266,   267,   268,     0,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,   613,   264,   265,   266,   267,   268,
+     0,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,   629,   264,   265,
+   266,   267,   268,     0,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+   633,   264,   265,   266,   267,   268,     0,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,   804,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,   805,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,   806,
+   264,   265,   266,   267,   268,     0,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,   807,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,   860,   264,   265,   266,   267,
+   268,     0,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,   944,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,   965,   264,   265,   266,   267,   268,     0,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,  1051,   264,   265,   266,   267,   268,
+     0,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,  1055,   264,   265,
+   266,   267,   268,     0,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+  1057,   264,   265,   266,   267,   268,     0,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,  1160,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,  1162,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,  1164,
+   264,   265,   266,   267,   268,     0,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,  1175,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,  1176,   264,   265,   266,   267,
+   268,     0,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278,     0,  1177,   264,
+   265,   266,   267,   268,     0,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,     0,     0,     0,     0,     0,   278,
+     0,  1332,   264,   265,   266,   267,   268,     0,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,     0,     0,     0,
+     0,     0,   278,     0,  1333,   264,   265,   266,   267,   268,
+     0,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     0,     0,     0,     0,     0,   278,     0,  1334,   264,   265,
+   266,   267,   268,     0,   269,   270,   271,   272,   273,   274,
+   275,   276,   277,     0,     0,     0,     0,     0,   278,     0,
+  1413,   264,   265,   266,   267,   268,     0,   269,   270,   271,
+   272,   273,   274,   275,   276,   277,     0,     0,     0,     0,
+     0,   278,     0,  1414,   264,   265,   266,   267,   268,     0,
+   269,   270,   271,   272,   273,   274,   275,   276,   277,     0,
+     0,     0,     0,     0,   278,     0,  1415,   264,   265,   266,
+   267,   268,     0,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,     0,     0,     0,     0,     0,   278,     0,  1461,
+   264,   265,   266,   267,   268,     0,   269,   270,   271,   272,
+   273,   274,   275,   276,   277,     0,     0,     0,     0,     0,
+   278,     0,  1462,   264,   265,   266,   267,   268,     0,   269,
+   270,   271,   272,   273,   274,   275,   276,   277,     0,     0,
+     0,     0,     0,   278,     0,  1463,   264,   265,   266,   267,
+   268,     0,   269,   270,   271,   272,   273,   274,   275,   276,
+   277,     0,     0,     0,     0,     0,   278
 };
 
 static const short yycheck[] = {    23,
-    86,   315,    78,  1018,   258,     4,     4,     4,     4,     4,
-     3,   904,     6,    38,   862,   422,     6,     6,     6,    59,
-    23,    59,     4,   871,    60,     6,     3,     4,    81,    65,
-   878,   144,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,   942,     4,    60,   163,   164,   163,
-   164,    65,   170,   171,    45,     6,     7,     3,     4,   175,
-   178,   175,     6,     9,    10,    11,    12,    13,    14,    15,
+    86,   697,    23,  1031,   258,    78,   316,   877,     6,     4,
+     4,     4,     4,     4,     3,   424,   886,   957,     3,     4,
+     6,    59,    38,   893,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,    30,     6,    60,    60,    59,
+    81,     4,    65,    65,     4,   163,   164,   163,   164,     6,
+   163,   164,   165,   166,   167,     6,     7,     3,     4,   175,
+   173,   179,     6,     9,    10,    11,    12,    13,    14,    15,
     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,   119,   120,   121,    95,    60,
-   124,   125,    84,   127,    65,   998,    34,   163,   164,    37,
-   134,   135,   136,   137,   190,   139,   140,     7,   142,   143,
-   144,   174,   146,   179,   175,   181,   163,   164,   179,     6,
-   163,   164,   163,   164,   174,    84,    85,   161,   162,     6,
-   180,   174,   180,   180,  1032,   181,   400,   180,   179,   174,
-   181,   163,   164,    37,    38,   179,    40,   181,   174,   183,
-   184,   568,   163,   164,   180,   179,   174,   181,   180,   163,
-   164,   164,   180,    43,  1067,   163,   164,   181,   179,   174,
-   181,   180,   180,   180,   180,  1033,   163,   164,     6,  1037,
-   180,   180,   169,    53,    54,    55,    56,   174,    58,  1214,
-   175,   225,     7,   180,   179,     6,   230,   231,   232,   233,
+    26,    27,    28,    29,    30,   119,   120,   121,    45,    60,
+   124,   125,    95,   127,    65,  1045,    34,   163,   164,    37,
+   134,   135,   136,   137,   144,   139,   140,   190,   142,   143,
+   144,   174,   146,   179,   820,   181,   175,   180,   163,   164,
+   179,    84,    85,   174,    84,    85,   174,   161,   162,   180,
+   163,   164,   180,   174,   179,     6,   181,   401,   163,   164,
+    99,   100,   101,   102,   103,   179,   179,   181,   174,   183,
+   184,   570,    37,    38,   179,    40,   181,   175,   181,   181,
+   180,   179,     7,   163,   164,   164,  1046,     6,   163,   164,
+  1050,     6,   180,   174,   169,   180,   180,   180,   180,   174,
+   180,  1219,   170,   171,   180,   180,     6,   179,   176,   181,
+   178,   225,   174,   163,   164,   174,   230,   231,   232,   233,
    234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-   244,   245,   246,   247,   248,   249,   250,   163,   164,   179,
-     6,   181,    34,   169,     8,    37,    38,     3,   174,   263,
+   244,   245,   246,   247,   248,   249,   250,   163,   164,   163,
+   164,   170,   171,   169,   174,    42,     8,   258,   174,   178,
    264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   277,     6,   258,   170,   171,     7,   179,
-   284,   181,   176,   287,   178,   179,    38,   175,   292,   163,
-   164,   179,   296,   297,   298,   174,   300,   301,   302,   303,
-   304,   305,   306,     7,   170,   171,   180,   174,   158,   159,
-   160,   163,   164,   317,   318,   319,   166,    38,   322,  1147,
-  1148,  1149,  1150,    51,    52,   329,  1154,   179,   165,   166,
-   167,   335,   174,     3,     4,     5,   173,     7,   174,     9,
-    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,   179,    32,   181,   149,   150,   151,   152,   114,   115,
-   116,   117,   118,   119,   120,   121,   170,   171,   228,   175,
-   163,   164,   176,   179,   178,   170,   171,   174,   174,     6,
-   373,  1219,  1220,   178,   174,  1223,   179,   174,   402,   153,
-   154,   155,   156,   157,    42,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   174,   163,   164,   400,   422,   173,
-   149,   150,   151,   152,   175,   175,    38,   181,   179,   179,
-   434,   179,   179,    50,   181,   439,   163,   164,   163,   164,
-   444,   170,   171,    40,  1272,   149,   150,   151,   152,   453,
-   454,   685,   179,   170,   179,   163,   164,   174,   462,   179,
-    38,   181,   312,   313,   180,   469,   170,   171,   179,     6,
-   181,   179,     6,   180,   478,   479,   179,   174,   181,   149,
-   150,   151,   152,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,  1320,   163,   164,   180,   179,   173,   181,   169,
-   170,   171,   174,     6,   174,   179,   176,   181,   178,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,  1349,   163,   164,   165,   166,   167,    99,   100,   101,
-   102,   103,   173,     6,     4,   518,   153,   154,   155,   156,
-   157,   835,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   170,   171,   557,     4,    38,   173,   176,     3,   178,
-   564,   565,   566,   174,   568,    34,     5,   571,    37,    38,
-   179,    40,   181,   577,   155,   156,   157,     6,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   174,   592,   593,
-   594,   174,   173,   170,   171,   174,   662,   170,   171,   176,
-   174,   178,   452,   176,   179,   178,   181,   174,  1436,   179,
-   179,   181,   181,   179,   174,   181,   620,   621,   174,   623,
-   174,   174,   174,     8,   181,   174,   174,   631,   632,   174,
-   174,   174,   174,     3,     4,   174,   174,     6,   174,     9,
-    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,   174,   666,   667,   668,   669,   670,   671,   672,   673,
-   674,   675,   676,   677,     6,   174,   174,     5,   174,   174,
-   153,   154,   155,   156,   157,   741,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   180,   174,   174,   180,   180,
-   173,   180,   685,   174,   180,   709,   174,   174,   174,   174,
-     6,    87,   176,     6,   174,   174,  1010,   180,   722,   723,
-   724,   174,   174,   174,     5,   174,   174,   174,   174,     4,
-   580,   174,   174,   737,   738,   179,   174,     3,     4,   174,
-   174,   174,   174,     9,    10,    11,    12,    13,    14,    15,
+   274,   275,   276,   277,   278,     3,   163,   164,   175,   163,
+   164,   285,   179,    34,   288,     6,    37,    38,   175,   293,
+   174,   163,   164,   297,   298,   299,   180,   301,   302,   303,
+   304,   305,   306,   307,  1154,  1155,  1156,  1157,   180,   163,
+   164,  1161,   163,   164,   318,   319,   320,   163,   164,   323,
+     7,     6,   170,   171,   174,   179,   330,     6,   176,   180,
+   178,   179,   336,   179,   165,   166,   167,  1013,    43,     3,
+     4,     5,   173,     7,   174,     9,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,    27,    28,    29,    30,   175,    32,   163,
+   164,   179,   175,   374,  1224,  1225,   179,    38,  1228,   163,
+   164,     6,   179,   174,   181,   179,   114,   115,   116,   117,
+   118,   119,   120,   121,   175,   179,   170,   171,   179,   403,
+   401,   153,   154,   155,   156,   157,   174,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   170,   171,    51,    52,
+   424,   173,   176,   170,   178,    50,  1276,   174,     7,   181,
+   170,   171,   436,   179,    38,   181,   176,   441,   178,   170,
+   171,     7,   446,    38,   179,   176,   181,   178,   174,   174,
+    40,   455,   456,   158,   159,   160,   690,   179,    38,   181,
+   464,   166,   149,   150,   151,   152,    34,   471,   180,    37,
+    38,   179,    40,   181,  1324,     6,   480,   481,   179,   179,
+   181,   181,   180,   170,   171,   149,   150,   151,   152,   180,
+     6,   178,    53,    54,    55,    56,   179,    58,   181,   163,
+   164,   174,   179,  1353,   181,   169,   170,   171,     6,   179,
+   174,   181,   176,   179,   178,   181,   179,   174,   181,   520,
+   179,   145,   181,   228,     4,   179,   150,   181,   153,   154,
+   155,   156,   157,     4,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    38,     3,   174,   174,   171,   173,     5,
+     5,   174,   174,   177,   178,   559,     8,   174,   174,   174,
+   850,   174,   566,   567,   568,   174,   570,   174,   174,   573,
+   149,   150,   151,   152,   174,   174,   174,   174,   582,     6,
+   174,   174,   174,   149,   150,   151,   152,   174,   174,   174,
+  1440,   170,   171,   597,   598,   599,   174,   174,     6,   174,
+   174,   667,   174,     6,   170,   171,   176,   180,   313,   314,
+   174,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+   180,   625,   626,   180,   628,   173,   180,   174,   174,   174,
+     3,     4,   636,   637,   174,   174,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,    30,   180,   180,
+     6,    87,     6,     6,   174,   174,   174,   671,   672,   673,
+   674,   675,   676,   677,   678,   679,   680,   681,   682,     5,
+   174,   174,   174,   174,   174,   174,   174,   174,   174,   690,
+     6,   174,   174,   174,   698,   174,   700,   174,   174,   752,
+   174,   153,   154,   155,   156,   157,   174,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   720,   174,   179,   179,
+   174,   173,   175,   175,   174,   174,   174,   174,   174,   733,
+   734,   735,   174,  1023,   174,   174,   174,     4,   173,     5,
+    82,   178,     7,     7,   748,   749,     7,     7,     7,   454,
+   153,   154,   155,   156,   157,     7,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   180,   145,     5,     5,     5,
+   173,     5,     5,     5,     5,     5,   400,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,   790,
+   163,   164,     5,     5,     5,     5,   169,     5,     5,     5,
+     5,   174,     5,     5,   177,     5,   810,     5,     5,     5,
+   153,   154,   155,   156,   157,   868,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,     5,   132,     5,   832,   833,
+   173,     5,     5,   899,   838,   839,     5,   153,   154,   155,
+   156,   157,     3,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,     5,   857,   858,     5,     5,   173,     4,     6,
+     5,   181,     6,   867,   156,   157,   870,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   880,     6,   181,     7,
+   585,   173,     6,   887,   888,   889,     7,     7,     7,     6,
+   894,     6,   181,     7,   898,     7,     7,   180,   902,   903,
+   904,   905,   906,   907,   908,   909,   910,   911,   912,   913,
+   180,     7,   174,     7,   967,   620,   621,   622,   922,   923,
+   146,   179,   179,   179,   179,   179,   930,     5,   179,   179,
+   179,   179,   179,   638,   179,   179,   179,   179,   179,   179,
+   179,   945,   647,    66,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,   179,   179,   179,   179,   963,
+   179,   179,   179,   587,   588,   179,   590,     3,     4,     6,
+   594,   595,     6,     9,    10,    11,    12,    13,    14,    15,
     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,   615,   616,   617,   153,   154,
-   155,   156,   157,   174,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,   633,     8,   174,   174,   174,   173,   175,
-   175,   174,   642,   163,   164,   799,   779,   853,   179,   169,
-   174,   805,   174,   174,   174,     5,   174,   177,     6,   174,
-   174,   174,   174,   817,   818,   174,   174,   173,   884,   823,
-   824,   153,   154,   155,   156,   157,     7,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   178,     7,   842,   843,
-     7,   173,     7,     7,    82,   180,   145,     5,   852,   156,
-   157,   855,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   865,     5,     5,     5,     5,   173,     5,   872,   873,
-   874,     5,     5,     5,     5,   879,     5,     5,     5,   883,
-     5,     5,     5,   887,   888,   889,   890,   891,   892,   893,
-   894,   895,   896,   897,   898,     5,   952,   163,   164,     5,
-     5,     5,     5,   169,     5,     5,   132,     5,   174,     5,
-     5,   915,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,     5,     3,   930,     6,     5,   153,
-   154,   155,   156,   157,     5,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   948,     5,     5,     4,   145,   173,
-     6,     6,     6,   150,     7,   153,   154,   155,   156,   157,
-   810,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     7,     7,     7,     6,   171,   173,     6,   181,     7,     7,
-   177,   178,     7,     6,   174,   181,   836,   180,   838,   180,
-   840,     7,     7,   146,   179,   999,   179,   179,     5,   179,
-  1004,  1005,   179,   179,   179,   179,   179,   179,   179,  1013,
-  1014,  1015,   175,   179,     6,     6,  1020,  1021,     6,   179,
-   179,     6,   179,  1027,   179,     6,   174,   181,   179,   179,
-   179,  1035,   179,   179,   179,  1091,     7,     7,     7,  1043,
-   179,     7,   179,   179,  1048,   180,     7,  1051,   174,  1053,
-  1054,  1055,  1056,  1057,  1058,  1059,  1060,  1061,  1062,  1063,
-  1064,   179,   179,   179,   179,   179,   179,   174,     7,     7,
-  1074,     7,   174,     7,     7,   174,     7,   174,     7,     7,
-   174,   174,   174,   174,   174,     3,     4,   174,     7,     6,
-  1146,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,    30,     7,     3,   142,     3,     3,   165,     3,
-     3,     3,     3,     3,     3,     3,     3,  1131,     3,  1185,
-   153,   154,   155,   156,   157,     3,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,     6,     3,     5,     3,     5,
-   173,     3,     6,     4,   178,  1159,  1160,  1161,  1162,  1163,
-  1164,  1165,  1166,  1167,     7,   153,   154,   155,   156,   157,
-     6,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     6,     6,     6,     6,   180,   173,     6,  1243,    83,     6,
-   180,   175,   179,   179,     5,   175,   179,   179,   175,     6,
-   179,   179,   399,   179,   179,   179,   179,  1211,   175,     4,
-   175,   179,     6,     6,   178,  1271,   179,   179,   175,   179,
-   179,  1225,  1226,  1227,  1228,  1229,  1230,  1231,  1232,  1233,
-  1234,  1235,  1236,   179,   179,   179,   179,   179,   175,  1295,
-     6,     6,     6,     6,     6,   163,   164,     6,     6,     6,
-     6,   169,     6,     6,     6,     6,   174,     7,     3,   177,
-     6,    83,     3,     6,   165,     7,  1270,     6,     6,     3,
-     6,     3,  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,
-  1284,  1285,     6,  1287,     6,  1289,     3,     6,     3,     3,
-     3,   176,   153,   154,   155,   156,   157,     6,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,     6,     6,    84,
-   180,   180,   173,  1317,  1318,   181,   175,   179,  1322,  1323,
-  1324,  1325,  1326,  1327,     6,    80,   179,     6,   175,   179,
-   179,   179,   178,   175,   175,   179,   175,   175,   175,   179,
-   142,  1345,     6,    83,   179,     3,  1350,  1351,  1352,  1353,
-  1354,  1355,  1356,  1357,  1358,     6,     6,     3,     6,   180,
-   179,     6,     6,     6,     6,     6,     3,     6,     6,     5,
-     4,   181,     5,   181,  1378,  1379,  1380,  1381,  1382,  1383,
-  1384,     6,  1386,   180,  1388,   582,   583,   179,   585,   179,
-   179,   175,   589,   590,   175,   175,   179,   179,     6,   178,
-     6,   179,  1406,  1407,  1408,   179,     6,     6,     6,     6,
-     6,     6,     6,     6,     6,     5,  1420,  1421,  1422,  1423,
-  1424,  1425,    85,     5,    80,   622,   142,     6,   625,     6,
-   179,   179,   179,  1437,  1438,  1439,  1440,   181,  1442,     5,
-  1444,     5,   639,   640,   175,   175,   179,     6,   645,   646,
-   179,    80,   180,   180,   180,   652,   179,   654,   179,   179,
-  1464,  1465,  1466,   181,   175,   175,     6,     6,   180,  1473,
-     6,  1475,   179,  1477,   153,   154,   155,   156,   157,   181,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,   181,
-     6,     6,     6,     6,   173,     6,   180,   180,   179,   179,
-   147,   698,   179,   700,   179,     6,   180,   180,   148,   179,
-   175,     6,     6,   710,   711,   712,     6,     6,   715,   716,
-   717,   718,   719,   720,   721,     3,     4,     6,   180,     6,
-   179,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,    30,     3,     4,   179,   175,   180,   180,     9,
-    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,     3,     4,     6,     0,     6,     6,     9,    10,    11,
+    26,    27,    28,    29,    30,   179,   179,   179,   179,   175,
+   179,     6,   179,   627,   174,     6,   630,   155,   156,   157,
+   174,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+   644,   645,  1026,  1027,  1028,   173,   650,   651,     7,  1033,
+  1034,     6,   174,   657,   174,   659,  1040,   174,   174,   174,
+   174,   174,   174,   174,  1048,     6,   176,   174,     7,  1102,
+     7,     7,  1056,     6,   180,     7,     7,  1061,   181,     7,
+  1064,     7,  1066,  1067,  1068,  1069,  1070,  1071,  1072,  1073,
+  1074,  1075,  1076,  1077,     7,     7,     7,     7,  1082,     7,
+     6,  1085,     7,   142,     7,   709,     3,   711,     3,     3,
+   165,     3,     3,     3,     3,     3,     3,   721,   722,   723,
+  1153,     6,   726,   727,   728,   729,   730,   731,   732,     3,
+    34,    35,    36,    37,    38,    39,    40,    41,     3,    43,
+   825,    45,    46,     3,    48,    49,     3,   163,   164,     3,
+     5,     3,     5,   169,     3,     6,     4,   178,   174,  1192,
+    64,   177,     7,     6,     6,   178,   851,     6,   853,     6,
+   855,     6,     6,   180,    78,    79,     6,   180,   179,   179,
+   175,    83,  1166,  1167,  1168,  1169,  1170,  1171,  1172,  1173,
+  1174,   179,   175,   179,  1178,   175,   175,   179,   153,   154,
+   155,   156,   157,     8,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   179,   179,  1248,   179,   175,   173,   179,
+   153,   154,   155,   156,   157,   179,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   139,   179,   179,     6,   179,
+   173,   175,  1275,     5,   179,   175,  1230,  1231,  1232,  1233,
+  1234,  1235,  1236,  1237,  1238,  1239,  1240,  1241,   179,   179,
+   864,   179,     6,   179,   179,   179,  1299,   871,   153,   154,
+   155,   156,   157,     6,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,     4,     6,    84,   890,     6,   173,     6,
+  1274,     6,     6,     6,     6,     6,  1280,  1281,  1282,  1283,
+  1284,  1285,  1286,  1287,  1288,  1289,     6,  1291,     6,  1293,
+   153,   154,   155,   156,   157,     6,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,     6,     6,     6,     6,    83,
+   173,     7,     3,     6,     3,     3,     6,  1321,  1322,   165,
+     6,     6,  1326,  1327,  1328,  1329,  1330,  1331,   153,   154,
+   155,   156,   157,     6,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,     3,     6,  1349,     3,     6,   173,     3,
+  1354,  1355,  1356,  1357,  1358,  1359,  1360,  1361,  1362,     6,
+     3,     3,     6,   178,   178,     6,    80,     7,     6,   180,
+   175,   181,   180,   179,   175,   179,   179,   179,  1382,  1383,
+  1384,  1385,  1386,  1387,  1388,   179,  1390,   179,  1392,   153,
+   154,   155,   156,   157,   175,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   175,   175,  1410,  1411,  1412,   173,
+   175,   179,   175,  1037,    85,  1039,     4,   179,  1042,     6,
+  1424,  1425,  1426,  1427,  1428,  1429,   180,    83,     6,   142,
+     3,     6,     6,     3,  1058,     6,     3,  1441,  1442,  1443,
+  1444,     6,  1446,     6,  1448,     6,     6,     6,   153,   154,
+   155,   156,   157,     6,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,     5,  1468,  1469,  1470,  1091,   173,     6,
+     5,   181,     6,  1477,   179,  1479,     6,  1481,     3,     4,
+   175,   175,     6,   180,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,    30,   181,   179,     6,   179,
+   179,   179,   179,   179,   175,   179,   179,     6,     6,     6,
+     6,     3,     4,     6,     5,  1149,  1150,     9,    10,    11,
     12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,     3,
-     4,   179,     0,     6,     6,     9,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,   153,   154,   155,
-   156,   157,     6,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,   849,   180,   180,   180,     6,   173,     6,   856,
-   520,     7,     7,   153,   154,   155,   156,   157,     7,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   875,   594,
-    -1,  1178,    -1,   173,    -1,   163,   164,    -1,     8,    -1,
-    -1,   169,    -1,    -1,    -1,   847,   174,    -1,    -1,   177,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
-    -1,    -1,    -1,   163,   164,    -1,    -1,    -1,    -1,   169,
-    -1,    -1,    -1,    -1,   174,    -1,    -1,   177,    -1,    -1,
-    -1,    -1,    -1,     8,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   163,   164,    -1,    -1,    -1,    -1,   169,     8,    -1,
-    -1,    -1,   174,   153,   154,   155,   156,   157,    -1,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,   163,
-   164,    -1,    -1,   173,    -1,   169,    -1,    -1,    -1,   179,
-   174,   181,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,
-   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-   153,   154,   155,   156,   157,    -1,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,    -1,    -1,  1024,    -1,  1026,
-   173,    -1,  1029,   153,   154,   155,   156,   157,   181,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,  1045,    -1,
-    -1,    -1,    -1,   173,   153,   154,   155,   156,   157,    -1,
-   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   153,   154,
-   155,   156,   157,  1080,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,   153,   154,   155,   156,   157,   173,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
-    -1,    -1,    -1,   173,    -1,    -1,    -1,    34,    35,    36,
-    37,    38,    39,    40,    41,    -1,    43,    -1,    45,    46,
-    -1,    48,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,  1142,  1143,    64,    -1,    -1,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,     6,
+     6,     6,     6,     6,     5,   179,   181,   179,     3,     4,
+   179,   175,  1186,   175,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,    30,     8,   179,   179,    80,
+   180,   180,     3,     4,   180,   179,   179,  1221,     9,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+   142,  1245,     8,   153,   154,   155,   156,   157,     6,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   163,   164,
+     6,     5,     5,   173,   169,     6,   175,   179,   181,   174,
+     3,     4,   177,  1277,   180,   175,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,    30,     8,   179,
+   181,   163,   164,    80,   181,     6,     6,   169,     6,     6,
+     6,   175,   174,     8,     6,   177,   153,   154,   155,   156,
+   157,  1325,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,     6,   180,   179,   179,   147,   173,   148,   163,   164,
+   179,   179,     6,     6,   169,     6,     6,   179,  1352,   174,
+   180,   153,   154,   155,   156,   157,   180,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   180,     6,     6,   179,
+   179,   173,   163,   164,   180,   180,  1380,   180,   169,   179,
+     6,     6,     6,   174,     6,   175,   180,   153,   154,   155,
+   156,   157,   180,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,   180,     6,     6,  1409,     6,   173,     0,     0,
+     7,     7,   522,     7,   153,   154,   155,   156,   157,  1423,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,  1185,
+   163,   164,   599,   862,   173,   813,   169,    -1,    -1,    -1,
+   179,   174,   181,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   153,   154,
+   155,   156,   157,   173,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    34,
+    35,    36,    37,    38,    39,    40,    41,    -1,    43,    -1,
+    45,    46,    -1,    48,    49,    -1,    34,    35,    36,    37,
+    38,    39,    40,    41,    -1,    43,    -1,    45,    46,    64,
+    48,    49,    -1,    -1,     0,     1,    -1,     3,     4,    -1,
+    -1,    -1,    -1,    78,    79,    -1,    64,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    34,    35,    36,    37,    38,    39,    40,
-    41,    -1,    43,    -1,    45,    46,    -1,    48,    49,    -1,
-    -1,    -1,  1179,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    34,
-    35,    36,    37,    38,    39,    40,    41,    -1,    43,  1216,
-    45,    46,   139,    48,    49,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,
-    -1,    -1,    -1,  1240,     0,     1,    -1,     3,     4,    -1,
-    -1,    -1,    -1,    78,    79,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   181,    -1,    -1,    -1,   139,    -1,
-    -1,    -1,    -1,    -1,    -1,    31,  1273,    33,    34,    35,
+    78,    79,    -1,    -1,    -1,    31,    -1,    33,    34,    35,
     36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
     46,    47,    48,    49,    -1,    -1,    -1,    53,    54,    55,
     56,    57,    58,    -1,    60,    61,    62,    63,    64,    -1,
-   181,    -1,    -1,    -1,   139,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,  1321,    -1,    -1,    -1,    -1,    -1,
-    86,    -1,    88,    89,    90,    91,    92,    93,    94,    -1,
+    -1,    -1,    -1,    -1,   139,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+    86,   139,    88,    89,    90,    91,    92,    93,    94,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,  1348,    -1,    -1,    -1,    -1,    -1,    -1,   114,   115,
-   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1376,
-    -1,    -1,    -1,   139,   140,   141,    -1,   143,    -1,   153,
-   154,   155,   156,   157,     4,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,  1405,   173,
-    -1,    -1,    -1,    -1,    -1,   179,    -1,   181,    -1,    -1,
-    -1,    31,  1419,    33,    34,    35,    36,    37,    38,    39,
-    40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-    -1,    -1,    -1,    53,    54,    55,    56,    57,    58,    37,
-    60,    61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    88,    89,
-    90,    91,    92,    93,    94,   153,   154,   155,   156,   157,
-    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,    96,    97,
-    98,   179,    -1,   181,    -1,    -1,   104,   105,   106,   107,
-   108,   109,   110,   111,   112,   113,    -1,    -1,    -1,   139,
-    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
-   128,   129,   130,   131,    -1,   133,   134,   135,   136,   137,
-   138,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
+    -1,    -1,    -1,    -1,    -1,    -1,   181,    -1,   114,   115,
+   116,   117,   118,   119,   120,   121,     4,    -1,   153,   154,
+   155,   156,   157,   181,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   139,   140,   141,    -1,   143,   173,    -1,
+    -1,    -1,    -1,    31,   179,    33,    34,    35,    36,    37,
+    38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+    48,    49,    -1,    -1,    -1,    53,    54,    55,    56,    57,
+    58,    37,    60,    61,    62,    63,    64,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
+    88,    89,    90,    91,    92,    93,    94,   153,   154,   155,
+   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
+    96,    97,    98,   179,    -1,   181,    -1,    -1,   104,   105,
+   106,   107,   108,   109,   110,   111,   112,   113,    -1,    -1,
+    -1,   139,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
+   126,   127,   128,   129,   130,   131,    -1,   133,   134,   135,
+   136,   137,   138,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,    -1,    -1,    -1,    -1,   179,
+    -1,   181,   153,   154,   155,   156,   157,    -1,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
+    -1,    -1,   173,    -1,    -1,   153,   154,   155,   156,   157,
+   181,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,   153,   154,
+   155,   156,   157,   181,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
+    -1,   153,   154,   155,   156,   157,   181,   159,   160,   161,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
     -1,   173,    -1,    -1,   153,   154,   155,   156,   157,   181,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
@@ -1979,19 +1958,6 @@ static const short yycheck[] = {    23,
    157,   181,   159,   160,   161,   162,   163,   164,   165,   166,
    167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,   153,
    154,   155,   156,   157,   181,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
-    -1,    -1,   153,   154,   155,   156,   157,   181,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,    -1,   173,    -1,    -1,   153,   154,   155,   156,   157,
-   181,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,   153,   154,   155,   156,
-   157,   179,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,    -1,    -1,    -1,    -1,    -1,   173,   153,   154,   155,
-   156,   157,   179,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,   153,   154,
-   155,   156,   157,   179,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,   153,
-   154,   155,   156,   157,   179,   159,   160,   161,   162,   163,
    164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
    153,   154,   155,   156,   157,   179,   159,   160,   161,   162,
    163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
@@ -2209,24 +2175,19 @@ static const short yycheck[] = {    23,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
     -1,   173,   153,   154,   155,   156,   157,   179,   159,   160,
    161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,   155,
-   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
-    -1,   177,   153,   154,   155,   156,   157,    -1,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,    -1,   173,    -1,    -1,    -1,   177,   153,   154,   155,
-   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,    -1,
-    -1,   177,   153,   154,   155,   156,   157,    -1,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,
-    -1,    -1,   173,    -1,   175,   153,   154,   155,   156,   157,
-    -1,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-    -1,    -1,    -1,    -1,    -1,   173,    -1,   175,   153,   154,
-   155,   156,   157,    -1,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,
-   175,   153,   154,   155,   156,   157,    -1,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
-    -1,   173,    -1,   175,   153,   154,   155,   156,   157,    -1,
+    -1,    -1,   173,   153,   154,   155,   156,   157,   179,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,   153,   154,   155,   156,   157,   179,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
+   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
+    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
+    -1,    -1,    -1,    -1,   173,    -1,    -1,    -1,   177,   153,
+   154,   155,   156,   157,    -1,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,   173,
+    -1,    -1,    -1,   177,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
     -1,    -1,    -1,    -1,   173,    -1,   175,   153,   154,   155,
    156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
@@ -2366,11 +2327,19 @@ static const short yycheck[] = {    23,
    162,   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,
     -1,   173,    -1,   175,   153,   154,   155,   156,   157,    -1,
    159,   160,   161,   162,   163,   164,   165,   166,   167,    -1,
-    -1,    -1,    -1,    -1,   173
+    -1,    -1,    -1,    -1,   173,    -1,   175,   153,   154,   155,
+   156,   157,    -1,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,    -1,    -1,    -1,    -1,    -1,   173,    -1,   175,
+   153,   154,   155,   156,   157,    -1,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,    -1,    -1,    -1,    -1,    -1,
+   173,    -1,   175,   153,   154,   155,   156,   157,    -1,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,    -1,    -1,
+    -1,    -1,    -1,   173,    -1,   175,   153,   154,   155,   156,
+   157,    -1,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,    -1,    -1,    -1,    -1,    -1,   173
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/lib/bison.simple"
-/* This file comes from bison-1.28.  */
+#line 3 "/usr/local/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -2387,66 +2356,46 @@ static const short yycheck[] = {    23,
 
    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.  */
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* As a special exception, when this file is copied by Bison into a
    Bison output file, you may use that output file without restriction.
    This special exception was added by the Free Software Foundation
    in version 1.24 of Bison.  */
 
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-#ifndef YYSTACK_USE_ALLOCA
-#ifdef alloca
-#define YYSTACK_USE_ALLOCA
-#else /* alloca not defined */
+#ifndef alloca
 #ifdef __GNUC__
-#define YYSTACK_USE_ALLOCA
 #define alloca __builtin_alloca
 #else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-#define YYSTACK_USE_ALLOCA
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
 #include <alloca.h>
 #else /* not sparc */
-/* We think this test detects Watcom and Microsoft C.  */
-/* This used to test MSDOS, but that is a bad idea
-   since that symbol is in the user namespace.  */
-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-#if 0 /* No need for malloc.h, which pollutes the namespace;
-	 instead, just don't use alloca.  */
+#if defined (MSDOS) && !defined (__TURBOC__)
 #include <malloc.h>
-#endif
 #else /* not MSDOS, or __TURBOC__ */
 #if defined(_AIX)
-/* I don't know what this was needed for, but it pollutes the namespace.
-   So I turned it off.   rms, 2 May 1997.  */
-/* #include <malloc.h>  */
+#include <malloc.h>
  #pragma alloca
-#define YYSTACK_USE_ALLOCA
-#else /* not MSDOS, or __TURBOC__, or _AIX */
-#if 0
-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
-		 and on HPUX 10.  Eventually we can turn this on.  */
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
+#else /* not MSDOS, __TURBOC__, or _AIX */
+#ifdef __hpux
+#ifdef __cplusplus
+extern "C" {
+void *alloca (unsigned int);
+};
+#else /* not __cplusplus */
+void *alloca ();
+#endif /* not __cplusplus */
 #endif /* __hpux */
-#endif
 #endif /* not _AIX */
 #endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc */
-#endif /* not GNU C */
-#endif /* alloca not defined */
-#endif /* YYSTACK_USE_ALLOCA not defined */
+#endif /* not sparc.  */
+#endif /* not GNU C.  */
+#endif /* alloca not defined.  */
 
-#ifdef YYSTACK_USE_ALLOCA
-#define YYSTACK_ALLOC alloca
-#else
-#define YYSTACK_ALLOC malloc
-#endif
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
 
 /* Note: there must be only one dollar sign in this file.
    It is replaced by the list of actions, each action
@@ -2456,8 +2405,8 @@ static const short yycheck[] = {    23,
 #define yyclearin	(yychar = YYEMPTY)
 #define YYEMPTY		-2
 #define YYEOF		0
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT 	goto yyabortlab
+#define YYACCEPT	return(0)
+#define YYABORT 	return(1)
 #define YYERROR		goto yyerrlab1
 /* Like YYERROR except do call yyerror.
    This remains here temporarily to ease the
@@ -2538,12 +2487,12 @@ int yydebug;			/*  nonzero means print parse trace	*/
 #ifndef YYMAXDEPTH
 #define YYMAXDEPTH 10000
 #endif
-
-/* Define __yy_memcpy.  Note that the size argument
-   should be passed with type unsigned int, because that is what the non-GCC
-   definitions require.  With GCC, __builtin_memcpy takes an arg
-   of type size_t, but it can handle unsigned int.  */
 
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+int yyparse (void);
+#endif
+
 #if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
 #define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
 #else				/* not GNU C or C++ */
@@ -2555,7 +2504,7 @@ static void
 __yy_memcpy (to, from, count)
      char *to;
      char *from;
-     unsigned int count;
+     int count;
 {
   register char *f = from;
   register char *t = to;
@@ -2570,10 +2519,10 @@ __yy_memcpy (to, from, count)
 /* This is the most reliable way to avoid incompatibilities
    in available built-in functions on various systems.  */
 static void
-__yy_memcpy (char *to, char *from, unsigned int count)
+__yy_memcpy (char *to, char *from, int count)
 {
-  register char *t = to;
   register char *f = from;
+  register char *t = to;
   register int i = count;
 
   while (i-- > 0)
@@ -2583,7 +2532,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #endif
 #endif
 
-#line 217 "/usr/lib/bison.simple"
+#line 196 "/usr/local/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -2604,15 +2553,6 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #define YYPARSE_PARAM_DECL
 #endif /* not YYPARSE_PARAM */
 
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int yyparse (void *);
-#else
-int yyparse (void);
-#endif
-#endif
-
 int
 yyparse(YYPARSE_PARAM_ARG)
      YYPARSE_PARAM_DECL
@@ -2641,7 +2581,6 @@ yyparse(YYPARSE_PARAM_ARG)
 #endif
 
   int yystacksize = YYINITDEPTH;
-  int yyfree_stacks = 0;
 
 #ifdef YYPURE
   int yychar;
@@ -2726,32 +2665,18 @@ yynewstate:
       if (yystacksize >= YYMAXDEPTH)
 	{
 	  yyerror("parser stack overflow");
-	  if (yyfree_stacks)
-	    {
-	      free (yyss);
-	      free (yyvs);
-#ifdef YYLSP_NEEDED
-	      free (yyls);
-#endif
-	    }
 	  return 2;
 	}
       yystacksize *= 2;
       if (yystacksize > YYMAXDEPTH)
 	yystacksize = YYMAXDEPTH;
-#ifndef YYSTACK_USE_ALLOCA
-      yyfree_stacks = 1;
-#endif
-      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss, (char *)yyss1,
-		   size * (unsigned int) sizeof (*yyssp));
-      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
-		   size * (unsigned int) sizeof (*yyvsp));
+      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
+      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
 #ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls, (char *)yyls1,
-		   size * (unsigned int) sizeof (*yylsp));
+      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
 #endif
 #endif /* no yyoverflow */
 
@@ -3802,7 +3727,23 @@ case 149:
     ;
     break;}
 case 150:
-#line 974 "Gmsh.y"
+#line 976 "Gmsh.y"
+{
+      ColorTable *ct = Get_ColorTable(0);
+      if(!ct)
+	vyyerror("View[%d] does not exist", 0);
+      else{
+	ct->size = List_Nbr(yyvsp[-1].l);
+	if(ct->size > COLORTABLE_NBMAX_COLOR)
+	  vyyerror("Too Many (%d>%d) Colors in View[%d].ColorTable", 
+		   ct->size, COLORTABLE_NBMAX_COLOR, 0);
+	else
+	  for(i=0 ; i<ct->size ; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]);
+      }
+    ;
+    break;}
+case 151:
+#line 991 "Gmsh.y"
 {
       ColorTable *ct = Get_ColorTable((int)yyvsp[-6].d);
       if(!ct)
@@ -3817,24 +3758,24 @@ case 150:
       }
     ;
     break;}
-case 151:
-#line 999 "Gmsh.y"
+case 152:
+#line 1016 "Gmsh.y"
 {
       Cdbpts101((int)yyvsp[-4].d,yyvsp[-1].v[0],yyvsp[-1].v[1],yyvsp[-1].v[2],yyvsp[-1].v[3],yyvsp[-1].v[4]);
       yyval.s.Type = MSH_POINT;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 152:
-#line 1006 "Gmsh.y"
+case 153:
+#line 1023 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_POINT,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_POINT;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 153:
-#line 1012 "Gmsh.y"
+case 154:
+#line 1029 "Gmsh.y"
 {
       Vertex *v;
       Attractor *a;
@@ -3854,8 +3795,8 @@ case 153:
       }
     ;
     break;}
-case 154:
-#line 1031 "Gmsh.y"
+case 155:
+#line 1048 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
 	List_Read(yyvsp[-3].l,i,&d);
@@ -3867,31 +3808,31 @@ case 154:
       }
     ;
     break;}
-case 155:
-#line 1042 "Gmsh.y"
+case 156:
+#line 1059 "Gmsh.y"
 {
       yyval.s.Type = MSH_POINT;
       yyval.s.Num  = (int)yyvsp[-2].d;
     ;
     break;}
-case 156:
-#line 1050 "Gmsh.y"
+case 157:
+#line 1067 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_LINE,1,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_LINE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 157:
-#line 1056 "Gmsh.y"
+case 158:
+#line 1073 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_SPLN,3,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_SPLN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 158:
-#line 1062 "Gmsh.y"
+case 159:
+#line 1079 "Gmsh.y"
 {
       Curve *c;
       Attractor *a;
@@ -3911,16 +3852,16 @@ case 158:
       }
     ;
     break;}
-case 159:
-#line 1081 "Gmsh.y"
+case 160:
+#line 1098 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_CIRC,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_CIRC ;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 160:
-#line 1087 "Gmsh.y"
+case 161:
+#line 1104 "Gmsh.y"
 {
       List_T *temp;
       int i,j;
@@ -3937,48 +3878,48 @@ case 160:
       yyval.s.Num  = (int)yyvsp[-6].d;
     ;
     break;}
-case 161:
-#line 1104 "Gmsh.y"
+case 162:
+#line 1121 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c);
       yyval.s.Type = MSH_SEGM_PARAMETRIC ;
       yyval.s.Num  = (int)yyvsp[-14].d;
     ;
     break;}
-case 162:
-#line 1110 "Gmsh.y"
+case 163:
+#line 1127 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_ELLI ;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 163:
-#line 1116 "Gmsh.y"
+case 164:
+#line 1133 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_LINE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 164:
-#line 1122 "Gmsh.y"
+case 165:
+#line 1139 "Gmsh.y"
 {
       yyval.s.Type = MSH_SEGM_LOOP;
       Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Num = (int)yyvsp[-4].d;
     ;
     break;}
-case 165:
-#line 1128 "Gmsh.y"
+case 166:
+#line 1145 "Gmsh.y"
 {
       Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL);
       yyval.s.Type = MSH_SEGM_BSPLN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 166:
-#line 1134 "Gmsh.y"
+case 167:
+#line 1151 "Gmsh.y"
 {
       List_T *Temp;
       int i;
@@ -3998,8 +3939,8 @@ case 166:
       List_Delete(Temp);
     ;
     break;}
-case 167:
-#line 1153 "Gmsh.y"
+case 168:
+#line 1170 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Curve *c = FindCurve(yyval.s.Num,THEM);
@@ -4009,16 +3950,16 @@ case 167:
 	yyval.s.Type = c->Typ;
     ;
     break;}
-case 168:
-#line 1165 "Gmsh.y"
+case 169:
+#line 1182 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_PLAN;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 169:
-#line 1171 "Gmsh.y"
+case 170:
+#line 1188 "Gmsh.y"
 {
       Surface *s,*support;
       support = FindSurface((int)yyvsp[-4].d,THEM);
@@ -4038,8 +3979,8 @@ case 169:
       }
     ;
     break;}
-case 170:
-#line 1190 "Gmsh.y"
+case 171:
+#line 1207 "Gmsh.y"
 {
       List_Read(yyvsp[-1].l,0,&d);
       i = (int)d;
@@ -4061,38 +4002,38 @@ case 170:
       }
     ;
     break;}
-case 171:
-#line 1213 "Gmsh.y"
+case 172:
+#line 1230 "Gmsh.y"
 {
       CreateNurbsSurface ( (int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d  , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
       yyval.s.Type  = MSH_SURF_NURBS;
       yyval.s.Num = (int)yyvsp[-16].d;
     ;
     break;}
-case 172:
-#line 1221 "Gmsh.y"
+case 173:
+#line 1238 "Gmsh.y"
 {
       CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l);
     ;
     break;}
-case 173:
-#line 1225 "Gmsh.y"
+case 174:
+#line 1242 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_SURFACE;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 174:
-#line 1231 "Gmsh.y"
+case 175:
+#line 1248 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_SURF_LOOP,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_SURF_LOOP;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 175:
-#line 1237 "Gmsh.y"
+case 176:
+#line 1254 "Gmsh.y"
 {
       yyval.s.Num = (int)yyvsp[-2].d;
       Surface *s = FindSurface(yyval.s.Num,THEM);
@@ -4102,85 +4043,85 @@ case 175:
 	yyval.s.Type = s->Typ;
      ;
     break;}
-case 176:
-#line 1249 "Gmsh.y"
+case 177:
+#line 1266 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;      
     ;
     break;}
-case 177:
-#line 1255 "Gmsh.y"
+case 178:
+#line 1272 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 178:
-#line 1261 "Gmsh.y"
+case 179:
+#line 1278 "Gmsh.y"
 {
       Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL);
       yyval.s.Type = MSH_PHYSICAL_VOLUME;
       yyval.s.Num  = (int)yyvsp[-4].d;
     ;
     break;}
-case 179:
-#line 1274 "Gmsh.y"
+case 180:
+#line 1291 "Gmsh.y"
 {
       TranslateShapes (yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 180:
-#line 1279 "Gmsh.y"
+case 181:
+#line 1296 "Gmsh.y"
 {
       RotateShapes(yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 181:
-#line 1284 "Gmsh.y"
+case 182:
+#line 1301 "Gmsh.y"
 {
       SymmetryShapes(yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-3].v[3],yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 182:
-#line 1289 "Gmsh.y"
+case 183:
+#line 1306 "Gmsh.y"
 {
       DilatShapes(yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l,1);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 183:
-#line 1296 "Gmsh.y"
-{ yyval.l = yyvsp[0].l; ;
-    break;}
 case 184:
-#line 1297 "Gmsh.y"
+#line 1313 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 185:
-#line 1298 "Gmsh.y"
+#line 1314 "Gmsh.y"
 { yyval.l = yyvsp[0].l; ;
     break;}
 case 186:
-#line 1303 "Gmsh.y"
+#line 1315 "Gmsh.y"
+{ yyval.l = yyvsp[0].l; ;
+    break;}
+case 187:
+#line 1320 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
     ;
     break;}
-case 187:
-#line 1307 "Gmsh.y"
+case 188:
+#line 1324 "Gmsh.y"
 {
       List_Add(yyval.l,&yyvsp[0].s);
       yyval.l = yyvsp[-1].l;
     ;
     break;}
-case 188:
-#line 1319 "Gmsh.y"
+case 189:
+#line 1336 "Gmsh.y"
 {
       yyval.l = List_Create(3,3,sizeof(Shape));
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -4191,8 +4132,8 @@ case 188:
       }
     ;
     break;}
-case 189:
-#line 1337 "Gmsh.y"
+case 190:
+#line 1354 "Gmsh.y"
 {
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
 	List_Read (yyvsp[-1].l,i,&TheShape);
@@ -4200,21 +4141,21 @@ case 189:
       }
     ;
     break;}
-case 190:
-#line 1344 "Gmsh.y"
+case 191:
+#line 1361 "Gmsh.y"
 {
 	if(!strcmp(yyvsp[-4].c, "View"))
 	  FreeView((int)yyvsp[-2].d);
       ;
     break;}
-case 191:
-#line 1349 "Gmsh.y"
+case 192:
+#line 1366 "Gmsh.y"
 {
       Init_Mesh(THEM, 1);
     ;
     break;}
-case 192:
-#line 1361 "Gmsh.y"
+case 193:
+#line 1378 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Include")){
 
@@ -4269,8 +4210,8 @@ case 192:
 	vyyerror("Unknown Command '%s'", yyvsp[-2].c);
     ;
     break;}
-case 193:
-#line 1415 "Gmsh.y"
+case 194:
+#line 1432 "Gmsh.y"
 {
       if(!strcmp(yyvsp[-2].c, "Sleep")){
 
@@ -4290,14 +4231,14 @@ case 193:
 	vyyerror("Unknown Command '%s'", yyvsp[-2].c);
     ;
     break;}
-case 194:
-#line 1434 "Gmsh.y"
+case 195:
+#line 1451 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
-case 195:
-#line 1438 "Gmsh.y"
+case 196:
+#line 1455 "Gmsh.y"
 {
       if(!CTX.interactive){ // we're in interactive mode
 	if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){
@@ -4312,8 +4253,8 @@ case 195:
       }
     ;
     break;}
-case 196:
-#line 1460 "Gmsh.y"
+case 197:
+#line 1477 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4328,8 +4269,8 @@ case 196:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 197:
-#line 1474 "Gmsh.y"
+case 198:
+#line 1491 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4344,8 +4285,8 @@ case 197:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 198:
-#line 1488 "Gmsh.y"
+case 199:
+#line 1505 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4371,8 +4312,8 @@ case 198:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 199:
-#line 1513 "Gmsh.y"
+case 200:
+#line 1530 "Gmsh.y"
 {
       FILE* ff;
       if(RecursionLevel)
@@ -4398,8 +4339,8 @@ case 199:
       fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]);
     ;
     break;}
-case 200:
-#line 1538 "Gmsh.y"
+case 201:
+#line 1555 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
@@ -4426,104 +4367,104 @@ case 200:
       }
     ;
     break;}
-case 201:
-#line 1564 "Gmsh.y"
+case 202:
+#line 1581 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yylineno))
 	vyyerror("Redefinition of function %s",yyvsp[0].c);
       skip_until(NULL, "Return");
     ;
     break;}
-case 202:
-#line 1570 "Gmsh.y"
+case 203:
+#line 1587 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin,yylineno))
 	vyyerror("Error while exiting function");
     ;
     break;}
-case 203:
-#line 1575 "Gmsh.y"
+case 204:
+#line 1592 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yylineno))
 	vyyerror("Unknown Function %s",yyvsp[-1].c);
     ;
     break;}
-case 204:
-#line 1580 "Gmsh.y"
+case 205:
+#line 1597 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
-case 205:
-#line 1584 "Gmsh.y"
+case 206:
+#line 1601 "Gmsh.y"
 {
     ;
     break;}
-case 206:
-#line 1595 "Gmsh.y"
+case 207:
+#line 1612 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,&pc,&prc,NULL);
     ;
     break;}
-case 207:
-#line 1600 "Gmsh.y"
+case 208:
+#line 1617 "Gmsh.y"
 {
       Curve *pc, *prc;
       Extrude_ProtudePoint(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,
 			   &pc,&prc,NULL);
     ;
     break;}
-case 208:
-#line 1606 "Gmsh.y"
+case 209:
+#line 1623 "Gmsh.y"
 {
       Extrude_ProtudeCurve(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,NULL);
     ;
     break;}
-case 209:
-#line 1610 "Gmsh.y"
+case 210:
+#line 1627 "Gmsh.y"
 {
       Extrude_ProtudeCurve(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL);
     ;
     break;}
-case 210:
-#line 1614 "Gmsh.y"
+case 211:
+#line 1631 "Gmsh.y"
 {
       Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL);
     ;
     break;}
-case 211:
-#line 1618 "Gmsh.y"
+case 212:
+#line 1635 "Gmsh.y"
 {
       Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL);
     ;
     break;}
-case 212:
-#line 1622 "Gmsh.y"
+case 213:
+#line 1639 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(1,(int)yyvsp[-7].d,yyvsp[-5].v[0],yyvsp[-5].v[1],yyvsp[-5].v[2],0.,0.,0.,0.,vol,&extr);
   ;
     break;}
-case 213:
-#line 1627 "Gmsh.y"
+case 214:
+#line 1644 "Gmsh.y"
 {
     int vol = NEWREG();
     Extrude_ProtudeSurface(0,(int)yyvsp[-11].d,yyvsp[-9].v[0],yyvsp[-9].v[1],yyvsp[-9].v[2],yyvsp[-7].v[0],yyvsp[-7].v[1],yyvsp[-7].v[2],yyvsp[-5].d,vol,&extr);
   ;
     break;}
-case 214:
-#line 1635 "Gmsh.y"
+case 215:
+#line 1652 "Gmsh.y"
 {
     ;
     break;}
-case 215:
-#line 1638 "Gmsh.y"
+case 216:
+#line 1655 "Gmsh.y"
 {
     ;
     break;}
-case 216:
-#line 1644 "Gmsh.y"
+case 217:
+#line 1661 "Gmsh.y"
 {
       double d;
       int j;
@@ -4541,14 +4482,14 @@ case 216:
       }
     ;
     break;}
-case 217:
-#line 1661 "Gmsh.y"
+case 218:
+#line 1678 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
-case 218:
-#line 1672 "Gmsh.y"
+case 219:
+#line 1689 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -4566,8 +4507,8 @@ case 218:
       }
     ;
     break;}
-case 219:
-#line 1689 "Gmsh.y"
+case 220:
+#line 1706 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -4585,8 +4526,8 @@ case 219:
       }
     ;
     break;}
-case 220:
-#line 1706 "Gmsh.y"
+case 221:
+#line 1723 "Gmsh.y"
 {
       Curve *c;
       for(i=0;i<List_Nbr(yyvsp[-6].l);i++){
@@ -4604,8 +4545,8 @@ case 220:
       }
     ;
     break;}
-case 221:
-#line 1723 "Gmsh.y"
+case 222:
+#line 1740 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -4627,8 +4568,8 @@ case 221:
       }
     ;
     break;}
-case 222:
-#line 1744 "Gmsh.y"
+case 223:
+#line 1761 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d,THEM);
       if(!s)
@@ -4649,8 +4590,8 @@ case 222:
       }
     ;
     break;}
-case 223:
-#line 1764 "Gmsh.y"
+case 224:
+#line 1781 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d,THEM);
       if(!v)
@@ -4671,8 +4612,8 @@ case 223:
       }
     ;
     break;}
-case 224:
-#line 1784 "Gmsh.y"
+case 225:
+#line 1801 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-3].l);i++){
@@ -4690,8 +4631,8 @@ case 224:
       }
     ;
     break;}
-case 225:
-#line 1801 "Gmsh.y"
+case 226:
+#line 1818 "Gmsh.y"
 {
       Surface *s;
       for(i=0;i<List_Nbr(yyvsp[-1].l);i++){
@@ -4709,80 +4650,80 @@ case 225:
       }
     ;
     break;}
-case 226:
-#line 1826 "Gmsh.y"
+case 227:
+#line 1843 "Gmsh.y"
 { 
       Coherence_PS();
     ;
     break;}
-case 227:
-#line 1830 "Gmsh.y"
+case 228:
+#line 1847 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
-case 228:
-#line 1841 "Gmsh.y"
-{ yyval.d = yyvsp[0].d; ;
-    break;}
 case 229:
-#line 1842 "Gmsh.y"
-{ yyval.d = -yyvsp[0].d; ;
+#line 1858 "Gmsh.y"
+{ yyval.d = yyvsp[0].d; ;
     break;}
 case 230:
-#line 1846 "Gmsh.y"
-{yyval.i = 1;;
+#line 1859 "Gmsh.y"
+{ yyval.d = -yyvsp[0].d; ;
     break;}
 case 231:
-#line 1847 "Gmsh.y"
-{yyval.i = 0;;
+#line 1863 "Gmsh.y"
+{yyval.i = 1;;
     break;}
 case 232:
-#line 1848 "Gmsh.y"
-{yyval.i = -1;;
+#line 1864 "Gmsh.y"
+{yyval.i = 0;;
     break;}
 case 233:
-#line 1849 "Gmsh.y"
+#line 1865 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 234:
-#line 1850 "Gmsh.y"
+#line 1866 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 235:
-#line 1854 "Gmsh.y"
-{ yyval.d = yyvsp[0].d;           ;
+#line 1867 "Gmsh.y"
+{yyval.i = -1;;
     break;}
 case 236:
-#line 1855 "Gmsh.y"
-{ yyval.d = yyvsp[-1].d ;          ;
+#line 1871 "Gmsh.y"
+{ yyval.d = yyvsp[0].d;           ;
     break;}
 case 237:
-#line 1856 "Gmsh.y"
-{ yyval.d = -yyvsp[0].d ;         ;
+#line 1872 "Gmsh.y"
+{ yyval.d = yyvsp[-1].d ;          ;
     break;}
 case 238:
-#line 1857 "Gmsh.y"
-{ yyval.d = yyvsp[0].d;           ;
+#line 1873 "Gmsh.y"
+{ yyval.d = -yyvsp[0].d ;         ;
     break;}
 case 239:
-#line 1858 "Gmsh.y"
-{ yyval.d = !yyvsp[0].d ;         ;
+#line 1874 "Gmsh.y"
+{ yyval.d = yyvsp[0].d;           ;
     break;}
 case 240:
-#line 1859 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
+#line 1875 "Gmsh.y"
+{ yyval.d = !yyvsp[0].d ;         ;
     break;}
 case 241:
-#line 1860 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
+#line 1876 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d - yyvsp[0].d ;     ;
     break;}
 case 242:
-#line 1861 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
+#line 1877 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d + yyvsp[0].d ;     ;
     break;}
 case 243:
-#line 1863 "Gmsh.y"
+#line 1878 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d * yyvsp[0].d ;     ;
+    break;}
+case 244:
+#line 1880 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	vyyerror("Division by Zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -4790,144 +4731,144 @@ case 243:
 	yyval.d = yyvsp[-2].d / yyvsp[0].d ;     
     ;
     break;}
-case 244:
-#line 1869 "Gmsh.y"
-{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
-    break;}
 case 245:
-#line 1870 "Gmsh.y"
-{ yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
+#line 1886 "Gmsh.y"
+{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ;  ;
     break;}
 case 246:
-#line 1871 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
+#line 1887 "Gmsh.y"
+{ yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ;  ;
     break;}
 case 247:
-#line 1872 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
+#line 1888 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d < yyvsp[0].d ;     ;
     break;}
 case 248:
-#line 1873 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
+#line 1889 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d > yyvsp[0].d ;     ;
     break;}
 case 249:
-#line 1874 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
+#line 1890 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d <= yyvsp[0].d ;    ;
     break;}
 case 250:
-#line 1875 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
+#line 1891 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d >= yyvsp[0].d ;    ;
     break;}
 case 251:
-#line 1876 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
+#line 1892 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d == yyvsp[0].d ;    ;
     break;}
 case 252:
-#line 1877 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
+#line 1893 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d != yyvsp[0].d ;    ;
     break;}
 case 253:
-#line 1878 "Gmsh.y"
-{ yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
+#line 1894 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d && yyvsp[0].d ;    ;
     break;}
 case 254:
-#line 1879 "Gmsh.y"
-{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
+#line 1895 "Gmsh.y"
+{ yyval.d = yyvsp[-2].d || yyvsp[0].d ;    ;
     break;}
 case 255:
-#line 1880 "Gmsh.y"
-{ yyval.d = exp(yyvsp[-1].d);      ;
+#line 1896 "Gmsh.y"
+{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ;
     break;}
 case 256:
-#line 1881 "Gmsh.y"
-{ yyval.d = log(yyvsp[-1].d);      ;
+#line 1897 "Gmsh.y"
+{ yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 257:
-#line 1882 "Gmsh.y"
-{ yyval.d = log10(yyvsp[-1].d);    ;
+#line 1898 "Gmsh.y"
+{ yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 258:
-#line 1883 "Gmsh.y"
-{ yyval.d = sqrt(yyvsp[-1].d);     ;
+#line 1899 "Gmsh.y"
+{ yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 259:
-#line 1884 "Gmsh.y"
-{ yyval.d = sin(yyvsp[-1].d);      ;
+#line 1900 "Gmsh.y"
+{ yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 260:
-#line 1885 "Gmsh.y"
-{ yyval.d = asin(yyvsp[-1].d);     ;
+#line 1901 "Gmsh.y"
+{ yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 261:
-#line 1886 "Gmsh.y"
-{ yyval.d = cos(yyvsp[-1].d);      ;
+#line 1902 "Gmsh.y"
+{ yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 262:
-#line 1887 "Gmsh.y"
-{ yyval.d = acos(yyvsp[-1].d);     ;
+#line 1903 "Gmsh.y"
+{ yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 263:
-#line 1888 "Gmsh.y"
-{ yyval.d = tan(yyvsp[-1].d);      ;
+#line 1904 "Gmsh.y"
+{ yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 264:
-#line 1889 "Gmsh.y"
-{ yyval.d = atan(yyvsp[-1].d);     ;
+#line 1905 "Gmsh.y"
+{ yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 265:
-#line 1890 "Gmsh.y"
-{ yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
+#line 1906 "Gmsh.y"
+{ yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 266:
-#line 1891 "Gmsh.y"
-{ yyval.d = sinh(yyvsp[-1].d);     ;
+#line 1907 "Gmsh.y"
+{ yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ;
     break;}
 case 267:
-#line 1892 "Gmsh.y"
-{ yyval.d = cosh(yyvsp[-1].d);     ;
+#line 1908 "Gmsh.y"
+{ yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 268:
-#line 1893 "Gmsh.y"
-{ yyval.d = tanh(yyvsp[-1].d);     ;
+#line 1909 "Gmsh.y"
+{ yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 269:
-#line 1894 "Gmsh.y"
-{ yyval.d = fabs(yyvsp[-1].d);     ;
+#line 1910 "Gmsh.y"
+{ yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 270:
-#line 1895 "Gmsh.y"
-{ yyval.d = floor(yyvsp[-1].d);    ;
+#line 1911 "Gmsh.y"
+{ yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 271:
-#line 1896 "Gmsh.y"
-{ yyval.d = ceil(yyvsp[-1].d);     ;
+#line 1912 "Gmsh.y"
+{ yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 272:
-#line 1897 "Gmsh.y"
-{ yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
+#line 1913 "Gmsh.y"
+{ yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 273:
-#line 1898 "Gmsh.y"
+#line 1914 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 274:
-#line 1899 "Gmsh.y"
-{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
+#line 1915 "Gmsh.y"
+{ yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d);  ;
     break;}
 case 275:
-#line 1900 "Gmsh.y"
-{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
+#line 1916 "Gmsh.y"
+{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 276:
-#line 1909 "Gmsh.y"
-{ yyval.d = yyvsp[0].d; ;
+#line 1917 "Gmsh.y"
+{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 277:
-#line 1910 "Gmsh.y"
-{ yyval.d = 3.141592653589793; ;
+#line 1926 "Gmsh.y"
+{ yyval.d = yyvsp[0].d; ;
     break;}
 case 278:
-#line 1915 "Gmsh.y"
+#line 1927 "Gmsh.y"
+{ yyval.d = 3.141592653589793; ;
+    break;}
+case 279:
+#line 1932 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[0].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -4938,8 +4879,8 @@ case 278:
 	yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0) ;
     ;
     break;}
-case 279:
-#line 1926 "Gmsh.y"
+case 280:
+#line 1943 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-3].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -4956,8 +4897,8 @@ case 279:
       }
     ;
     break;}
-case 280:
-#line 1943 "Gmsh.y"
+case 281:
+#line 1960 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-1].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -4968,8 +4909,8 @@ case 280:
 	yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i) ;
     ;
     break;}
-case 281:
-#line 1954 "Gmsh.y"
+case 282:
+#line 1971 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-4].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -4986,8 +4927,8 @@ case 281:
       }
     ;
     break;}
-case 282:
-#line 1973 "Gmsh.y"
+case 283:
+#line 1990 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){
 	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-2].c);
@@ -5003,8 +4944,8 @@ case 282:
       }
     ;
     break;}
-case 283:
-#line 1989 "Gmsh.y"
+case 284:
+#line 2006 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){
 	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-5].c);
@@ -5020,8 +4961,8 @@ case 283:
       }
     ;
     break;}
-case 284:
-#line 2005 "Gmsh.y"
+case 285:
+#line 2022 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){
 	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-3].c);
@@ -5037,8 +4978,8 @@ case 284:
       }
     ;
     break;}
-case 285:
-#line 2021 "Gmsh.y"
+case 286:
+#line 2038 "Gmsh.y"
 {
       if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){
 	vyyerror("Unknown Numeric Option Class '%s'", yyvsp[-6].c);
@@ -5054,16 +4995,16 @@ case 285:
       }
     ;
     break;}
-case 286:
-#line 2039 "Gmsh.y"
+case 287:
+#line 2056 "Gmsh.y"
 { 
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) 
 	List_Add(ListOfDouble2_L, &d) ;
     ;
     break;}
-case 287:
-#line 2045 "Gmsh.y"
+case 288:
+#line 2062 "Gmsh.y"
 {
       ListOfDouble2_L = List_Create(2,1,sizeof(double)) ; 
       if(!yyvsp[0].d || (yyvsp[-4].d<yyvsp[-2].d && yyvsp[0].d<0) || (yyvsp[-4].d>yyvsp[-2].d && yyvsp[0].d>0)){
@@ -5075,125 +5016,125 @@ case 287:
 	  List_Add(ListOfDouble2_L, &d) ;
    ;
     break;}
-case 288:
-#line 2059 "Gmsh.y"
+case 289:
+#line 2076 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ;
     ;
     break;}
-case 289:
-#line 2063 "Gmsh.y"
+case 290:
+#line 2080 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ;
     ;
     break;}
-case 290:
-#line 2067 "Gmsh.y"
+case 291:
+#line 2084 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
-case 291:
-#line 2071 "Gmsh.y"
+case 292:
+#line 2088 "Gmsh.y"
 { 
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ;
     ;
     break;}
-case 292:
-#line 2075 "Gmsh.y"
+case 293:
+#line 2092 "Gmsh.y"
 {
       for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ;
     ;
     break;}
-case 293:
-#line 2081 "Gmsh.y"
+case 294:
+#line 2098 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-9].d;  yyval.v[1]=yyvsp[-7].d;  yyval.v[2]=yyvsp[-5].d;  yyval.v[3]=yyvsp[-3].d; yyval.v[4]=yyvsp[-1].d;
     ;
     break;}
-case 294:
-#line 2085 "Gmsh.y"
+case 295:
+#line 2102 "Gmsh.y"
 { 
       yyval.v[0]=yyvsp[-7].d;  yyval.v[1]=yyvsp[-5].d;  yyval.v[2]=yyvsp[-3].d;  yyval.v[3]=yyvsp[-1].d; yyval.v[4]=1.0;
     ;
     break;}
-case 295:
-#line 2089 "Gmsh.y"
-{
-      yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
-    ;
-    break;}
 case 296:
-#line 2093 "Gmsh.y"
+#line 2106 "Gmsh.y"
 {
       yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
 case 297:
-#line 2100 "Gmsh.y"
+#line 2110 "Gmsh.y"
 {
+      yyval.v[0]=yyvsp[-5].d;  yyval.v[1]=yyvsp[-3].d;  yyval.v[2]=yyvsp[-1].d;  yyval.v[3]=0.0; yyval.v[4]=1.0;
     ;
     break;}
 case 298:
-#line 2103 "Gmsh.y"
+#line 2117 "Gmsh.y"
 {
     ;
     break;}
 case 299:
-#line 2109 "Gmsh.y"
+#line 2120 "Gmsh.y"
 {
     ;
     break;}
 case 300:
-#line 2112 "Gmsh.y"
+#line 2126 "Gmsh.y"
 {
     ;
     break;}
 case 301:
-#line 2118 "Gmsh.y"
+#line 2129 "Gmsh.y"
 {
     ;
     break;}
 case 302:
-#line 2121 "Gmsh.y"
+#line 2135 "Gmsh.y"
 {
-       yyval.l=ListOfListOfDouble_L;
     ;
     break;}
 case 303:
-#line 2125 "Gmsh.y"
+#line 2138 "Gmsh.y"
 {
        yyval.l=ListOfListOfDouble_L;
     ;
     break;}
 case 304:
-#line 2132 "Gmsh.y"
+#line 2142 "Gmsh.y"
 {
-      ListOfListOfDouble_L = List_Create(2,1,sizeof(List_T*)) ;
-      List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
+       yyval.l=ListOfListOfDouble_L;
     ;
     break;}
 case 305:
-#line 2137 "Gmsh.y"
+#line 2149 "Gmsh.y"
 {
+      ListOfListOfDouble_L = List_Create(2,1,sizeof(List_T*)) ;
       List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
 case 306:
-#line 2144 "Gmsh.y"
+#line 2154 "Gmsh.y"
 {
+      List_Add(ListOfListOfDouble_L, &(yyvsp[0].l)) ;
     ;
     break;}
 case 307:
-#line 2147 "Gmsh.y"
+#line 2161 "Gmsh.y"
+{
+    ;
+    break;}
+case 308:
+#line 2164 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 308:
-#line 2153 "Gmsh.y"
+case 309:
+#line 2170 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5209,21 +5150,21 @@ case 308:
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 309:
-#line 2168 "Gmsh.y"
+case 310:
+#line 2185 "Gmsh.y"
 {
       yyval.l=ListOfDouble_L;
     ;
     break;}
-case 310:
-#line 2176 "Gmsh.y"
+case 311:
+#line 2193 "Gmsh.y"
 {
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 311:
-#line 2181 "Gmsh.y"
+case 312:
+#line 2198 "Gmsh.y"
 { 
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
@@ -5233,8 +5174,8 @@ case 311:
       List_Delete(ListOfDouble2_L);
     ;
     break;}
-case 312:
-#line 2190 "Gmsh.y"
+case 313:
+#line 2207 "Gmsh.y"
 { 
       ListOfDouble_L = List_Create(2,1,sizeof(double)) ;
       TheSymbol.Name = yyvsp[-2].c ;
@@ -5247,14 +5188,14 @@ case 312:
       }
     ;
     break;}
-case 313:
-#line 2202 "Gmsh.y"
+case 314:
+#line 2219 "Gmsh.y"
 {
       List_Add(ListOfDouble_L, &(yyvsp[0].d)) ;
     ;
     break;}
-case 314:
-#line 2206 "Gmsh.y"
+case 315:
+#line 2223 "Gmsh.y"
 {
       for(i=0 ; i<List_Nbr(ListOfDouble2_L) ; i++){
 	List_Read(ListOfDouble2_L, i, &d) ;
@@ -5263,8 +5204,8 @@ case 314:
       List_Delete(ListOfDouble2_L);
     ;
     break;}
-case 315:
-#line 2214 "Gmsh.y"
+case 316:
+#line 2231 "Gmsh.y"
 {
       TheSymbol.Name = yyvsp[-2].c ;
       if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) {
@@ -5276,34 +5217,34 @@ case 315:
       }
     ;
     break;}
-case 316:
-#line 2228 "Gmsh.y"
+case 317:
+#line 2245 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
-case 317:
-#line 2232 "Gmsh.y"
+case 318:
+#line 2249 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
-case 318:
-#line 2236 "Gmsh.y"
+case 319:
+#line 2253 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, (int)yyvsp[-1].d, yyvsp[-3].c, &flag);
       if(flag) vyyerror("Unknown Color '%s'", yyvsp[-3].c);
     ;
     break;}
-case 319:
-#line 2241 "Gmsh.y"
+case 320:
+#line 2258 "Gmsh.y"
 {
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
       if(flag) vyyerror("Unknown Color '%s'", yyvsp[0].c);
     ;
     break;}
-case 320:
-#line 2246 "Gmsh.y"
+case 321:
+#line 2263 "Gmsh.y"
 {
       if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){
 	vyyerror("Unknown Color Option Class '%s'", yyvsp[-4].c);
@@ -5320,14 +5261,14 @@ case 320:
       }
     ;
     break;}
-case 321:
-#line 2265 "Gmsh.y"
+case 322:
+#line 2282 "Gmsh.y"
 {
       yyval.l = ListOfColor_L;
     ;
     break;}
-case 322:
-#line 2269 "Gmsh.y"
+case 323:
+#line 2286 "Gmsh.y"
 {
       if(!ListOfColor_L)
 	ListOfColor_L = List_Create(256,10,sizeof(unsigned int)) ;
@@ -5343,8 +5284,8 @@ case 322:
       yyval.l = ListOfColor_L;
     ;
     break;}
-case 323:
-#line 2287 "Gmsh.y"
+case 324:
+#line 2304 "Gmsh.y"
 {
       if(!ListOfColor_L)
 	ListOfColor_L = List_Create(256,10,sizeof(unsigned int)) ;
@@ -5353,26 +5294,26 @@ case 323:
       List_Add(ListOfColor_L, &(yyvsp[0].u)) ;
     ;
     break;}
-case 324:
-#line 2295 "Gmsh.y"
+case 325:
+#line 2312 "Gmsh.y"
 {
       List_Add(ListOfColor_L, &(yyvsp[0].u)) ;
     ;
     break;}
-case 325:
-#line 2302 "Gmsh.y"
+case 326:
+#line 2319 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
-case 326:
-#line 2306 "Gmsh.y"
+case 327:
+#line 2323 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
-case 327:
-#line 2310 "Gmsh.y"
+case 328:
+#line 2327 "Gmsh.y"
 {
       for(i = 0 ; i<List_Nbr(ListOfDouble_L) ; i++){
 	if(!i){
@@ -5398,7 +5339,7 @@ case 327:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/lib/bison.simple"
+#line 498 "/usr/local/share/bison.simple"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -5593,32 +5534,8 @@ yyerrhandle:
 
   yystate = yyn;
   goto yynewstate;
-
- yyacceptlab:
-  /* YYACCEPT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
-#endif
-    }
-  return 0;
-
- yyabortlab:
-  /* YYABORT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
-#endif
-    }
-  return 1;
 }
-#line 2334 "Gmsh.y"
+#line 2351 "Gmsh.y"
 
 
 void InitSymbols(void){
diff --git a/Parser/Gmsh.tab.cpp.h b/Parser/Gmsh.tab.cpp.h
index 45db0a28c48c659082cf67d45d1e8af116bd2d98..7c20f6b17be6286320be45f50ba0ea1d00e2253b 100644
--- a/Parser/Gmsh.tab.cpp.h
+++ b/Parser/Gmsh.tab.cpp.h
@@ -7,167 +7,167 @@ typedef union {
   Shape    s;
   List_T  *l;
 } YYSTYPE;
-#define	tDOUBLE	257
-#define	tSTRING	258
-#define	tBIGSTR	259
-#define	tEND	260
-#define	tAFFECT	261
-#define	tDOTS	262
-#define	tPi	263
-#define	tExp	264
-#define	tLog	265
-#define	tLog10	266
-#define	tSqrt	267
-#define	tSin	268
-#define	tAsin	269
-#define	tCos	270
-#define	tAcos	271
-#define	tTan	272
-#define	tRand	273
-#define	tAtan	274
-#define	tAtan2	275
-#define	tSinh	276
-#define	tCosh	277
-#define	tTanh	278
-#define	tFabs	279
-#define	tFloor	280
-#define	tCeil	281
-#define	tFmod	282
-#define	tModulo	283
-#define	tHypot	284
-#define	tPrintf	285
-#define	tSprintf	286
-#define	tDraw	287
-#define	tPoint	288
-#define	tCircle	289
-#define	tEllipsis	290
-#define	tLine	291
-#define	tSurface	292
-#define	tSpline	293
-#define	tVolume	294
-#define	tCharacteristic	295
-#define	tLength	296
-#define	tParametric	297
-#define	tElliptic	298
-#define	tPlane	299
-#define	tRuled	300
-#define	tTransfinite	301
-#define	tComplex	302
-#define	tPhysical	303
-#define	tUsing	304
-#define	tBump	305
-#define	tProgression	306
-#define	tRotate	307
-#define	tTranslate	308
-#define	tSymmetry	309
-#define	tDilate	310
-#define	tExtrude	311
-#define	tDuplicata	312
-#define	tLoop	313
-#define	tRecombine	314
-#define	tDelete	315
-#define	tCoherence	316
-#define	tIntersect	317
-#define	tAttractor	318
-#define	tLayers	319
-#define	tScalarTetrahedron	320
-#define	tVectorTetrahedron	321
-#define	tTensorTetrahedron	322
-#define	tScalarTriangle	323
-#define	tVectorTriangle	324
-#define	tTensorTriangle	325
-#define	tScalarLine	326
-#define	tVectorLine	327
-#define	tTensorLine	328
-#define	tScalarPoint	329
-#define	tVectorPoint	330
-#define	tTensorPoint	331
-#define	tBSpline	332
-#define	tNurbs	333
-#define	tOrder	334
-#define	tWith	335
-#define	tBounds	336
-#define	tKnots	337
-#define	tColor	338
-#define	tColorTable	339
-#define	tFor	340
-#define	tIn	341
-#define	tEndFor	342
-#define	tIf	343
-#define	tEndIf	344
-#define	tExit	345
-#define	tReturn	346
-#define	tCall	347
-#define	tFunction	348
-#define	tMesh	349
-#define	tB_SPLINE_SURFACE_WITH_KNOTS	350
-#define	tB_SPLINE_CURVE_WITH_KNOTS	351
-#define	tCARTESIAN_POINT	352
-#define	tTRUE	353
-#define	tFALSE	354
-#define	tUNSPECIFIED	355
-#define	tU	356
-#define	tV	357
-#define	tEDGE_CURVE	358
-#define	tVERTEX_POINT	359
-#define	tORIENTED_EDGE	360
-#define	tPLANE	361
-#define	tFACE_OUTER_BOUND	362
-#define	tEDGE_LOOP	363
-#define	tADVANCED_FACE	364
-#define	tVECTOR	365
-#define	tDIRECTION	366
-#define	tAXIS2_PLACEMENT_3D	367
-#define	tISO	368
-#define	tENDISO	369
-#define	tENDSEC	370
-#define	tDATA	371
-#define	tHEADER	372
-#define	tFILE_DESCRIPTION	373
-#define	tFILE_SCHEMA	374
-#define	tFILE_NAME	375
-#define	tMANIFOLD_SOLID_BREP	376
-#define	tCLOSED_SHELL	377
-#define	tADVANCED_BREP_SHAPE_REPRESENTATION	378
-#define	tFACE_BOUND	379
-#define	tCYLINDRICAL_SURFACE	380
-#define	tCONICAL_SURFACE	381
-#define	tCIRCLE	382
-#define	tTRIMMED_CURVE	383
-#define	tGEOMETRIC_SET	384
-#define	tCOMPOSITE_CURVE_SEGMENT	385
-#define	tCONTINUOUS	386
-#define	tCOMPOSITE_CURVE	387
-#define	tTOROIDAL_SURFACE	388
-#define	tPRODUCT_DEFINITION	389
-#define	tPRODUCT_DEFINITION_SHAPE	390
-#define	tSHAPE_DEFINITION_REPRESENTATION	391
-#define	tELLIPSE	392
-#define	tTrimmed	393
-#define	tSolid	394
-#define	tEndSolid	395
-#define	tVertex	396
-#define	tFacet	397
-#define	tNormal	398
-#define	tOuter	399
-#define	tLoopSTL	400
-#define	tEndLoop	401
-#define	tEndFacet	402
-#define	tAFFECTPLUS	403
-#define	tAFFECTMINUS	404
-#define	tAFFECTTIMES	405
-#define	tAFFECTDIVIDE	406
-#define	tOR	407
-#define	tAND	408
-#define	tEQUAL	409
-#define	tNOTEQUAL	410
-#define	tAPPROXEQUAL	411
-#define	tLESSOREQUAL	412
-#define	tGREATEROREQUAL	413
-#define	tCROSSPRODUCT	414
-#define	tPLUSPLUS	415
-#define	tMINUSMINUS	416
-#define	UNARYPREC	417
+#define	tDOUBLE	258
+#define	tSTRING	259
+#define	tBIGSTR	260
+#define	tEND	261
+#define	tAFFECT	262
+#define	tDOTS	263
+#define	tPi	264
+#define	tExp	265
+#define	tLog	266
+#define	tLog10	267
+#define	tSqrt	268
+#define	tSin	269
+#define	tAsin	270
+#define	tCos	271
+#define	tAcos	272
+#define	tTan	273
+#define	tRand	274
+#define	tAtan	275
+#define	tAtan2	276
+#define	tSinh	277
+#define	tCosh	278
+#define	tTanh	279
+#define	tFabs	280
+#define	tFloor	281
+#define	tCeil	282
+#define	tFmod	283
+#define	tModulo	284
+#define	tHypot	285
+#define	tPrintf	286
+#define	tSprintf	287
+#define	tDraw	288
+#define	tPoint	289
+#define	tCircle	290
+#define	tEllipsis	291
+#define	tLine	292
+#define	tSurface	293
+#define	tSpline	294
+#define	tVolume	295
+#define	tCharacteristic	296
+#define	tLength	297
+#define	tParametric	298
+#define	tElliptic	299
+#define	tPlane	300
+#define	tRuled	301
+#define	tTransfinite	302
+#define	tComplex	303
+#define	tPhysical	304
+#define	tUsing	305
+#define	tBump	306
+#define	tProgression	307
+#define	tRotate	308
+#define	tTranslate	309
+#define	tSymmetry	310
+#define	tDilate	311
+#define	tExtrude	312
+#define	tDuplicata	313
+#define	tLoop	314
+#define	tRecombine	315
+#define	tDelete	316
+#define	tCoherence	317
+#define	tIntersect	318
+#define	tAttractor	319
+#define	tLayers	320
+#define	tScalarTetrahedron	321
+#define	tVectorTetrahedron	322
+#define	tTensorTetrahedron	323
+#define	tScalarTriangle	324
+#define	tVectorTriangle	325
+#define	tTensorTriangle	326
+#define	tScalarLine	327
+#define	tVectorLine	328
+#define	tTensorLine	329
+#define	tScalarPoint	330
+#define	tVectorPoint	331
+#define	tTensorPoint	332
+#define	tBSpline	333
+#define	tNurbs	334
+#define	tOrder	335
+#define	tWith	336
+#define	tBounds	337
+#define	tKnots	338
+#define	tColor	339
+#define	tColorTable	340
+#define	tFor	341
+#define	tIn	342
+#define	tEndFor	343
+#define	tIf	344
+#define	tEndIf	345
+#define	tExit	346
+#define	tReturn	347
+#define	tCall	348
+#define	tFunction	349
+#define	tMesh	350
+#define	tB_SPLINE_SURFACE_WITH_KNOTS	351
+#define	tB_SPLINE_CURVE_WITH_KNOTS	352
+#define	tCARTESIAN_POINT	353
+#define	tTRUE	354
+#define	tFALSE	355
+#define	tUNSPECIFIED	356
+#define	tU	357
+#define	tV	358
+#define	tEDGE_CURVE	359
+#define	tVERTEX_POINT	360
+#define	tORIENTED_EDGE	361
+#define	tPLANE	362
+#define	tFACE_OUTER_BOUND	363
+#define	tEDGE_LOOP	364
+#define	tADVANCED_FACE	365
+#define	tVECTOR	366
+#define	tDIRECTION	367
+#define	tAXIS2_PLACEMENT_3D	368
+#define	tISO	369
+#define	tENDISO	370
+#define	tENDSEC	371
+#define	tDATA	372
+#define	tHEADER	373
+#define	tFILE_DESCRIPTION	374
+#define	tFILE_SCHEMA	375
+#define	tFILE_NAME	376
+#define	tMANIFOLD_SOLID_BREP	377
+#define	tCLOSED_SHELL	378
+#define	tADVANCED_BREP_SHAPE_REPRESENTATION	379
+#define	tFACE_BOUND	380
+#define	tCYLINDRICAL_SURFACE	381
+#define	tCONICAL_SURFACE	382
+#define	tCIRCLE	383
+#define	tTRIMMED_CURVE	384
+#define	tGEOMETRIC_SET	385
+#define	tCOMPOSITE_CURVE_SEGMENT	386
+#define	tCONTINUOUS	387
+#define	tCOMPOSITE_CURVE	388
+#define	tTOROIDAL_SURFACE	389
+#define	tPRODUCT_DEFINITION	390
+#define	tPRODUCT_DEFINITION_SHAPE	391
+#define	tSHAPE_DEFINITION_REPRESENTATION	392
+#define	tELLIPSE	393
+#define	tTrimmed	394
+#define	tSolid	395
+#define	tEndSolid	396
+#define	tVertex	397
+#define	tFacet	398
+#define	tNormal	399
+#define	tOuter	400
+#define	tLoopSTL	401
+#define	tEndLoop	402
+#define	tEndFacet	403
+#define	tAFFECTPLUS	404
+#define	tAFFECTMINUS	405
+#define	tAFFECTTIMES	406
+#define	tAFFECTDIVIDE	407
+#define	tOR	408
+#define	tAND	409
+#define	tEQUAL	410
+#define	tNOTEQUAL	411
+#define	tAPPROXEQUAL	412
+#define	tLESSOREQUAL	413
+#define	tGREATEROREQUAL	414
+#define	tCROSSPRODUCT	415
+#define	tPLUSPLUS	416
+#define	tMINUSMINUS	417
+#define	UNARYPREC	418
 
 
 extern YYSTYPE yylval;
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 82d8f6c3877d6ddd35181e78b3645408c15773e1..e67fe760cd50165ba41ff415a59ce38e09c54f40 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,6 +1,6 @@
 %{ 
 
-// $Id: Gmsh.y,v 1.63 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: Gmsh.y,v 1.64 2001-02-17 22:09:00 geuzaine Exp $
 
 #include <stdarg.h>
 
@@ -970,6 +970,23 @@ Affectation :
       }
     }
 
+  /* -------- ColorTable -------- */ 
+
+  | tSTRING '.' tColorTable tAFFECT ListOfColor tEND 
+    {
+      ColorTable *ct = Get_ColorTable(0);
+      if(!ct)
+	vyyerror("View[%d] does not exist", 0);
+      else{
+	ct->size = List_Nbr($5);
+	if(ct->size > COLORTABLE_NBMAX_COLOR)
+	  vyyerror("Too Many (%d>%d) Colors in View[%d].ColorTable", 
+		   ct->size, COLORTABLE_NBMAX_COLOR, 0);
+	else
+	  for(i=0 ; i<ct->size ; i++) List_Read($5, i, &ct->table[i]);
+      }
+    }
+
   | tSTRING '[' FExpr ']' '.' tColorTable tAFFECT ListOfColor tEND 
     {
       ColorTable *ct = Get_ColorTable((int)$3);
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 740343c59b0ef58ab2a8bb726b820ce1b2c281c2..b44fde36a1ab1bfd0afe86373d33147418ea7dd7 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.71 2001-02-12 17:38:03 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.72 2001-02-17 22:09:00 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -978,7 +978,7 @@ char *yytext;
 #define INITIAL 0
 #line 2 "Gmsh.l"
 
-// $Id: Gmsh.yy.cpp,v 1.71 2001-02-12 17:38:03 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.72 2001-02-17 22:09:00 geuzaine Exp $
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -1169,7 +1169,7 @@ YY_MALLOC_DECL
 YY_DECL
 	{
 	register yy_state_type yy_current_state;
-	register char *yy_cp = NULL, *yy_bp = NULL;
+	register char *yy_cp, *yy_bp;
 	register int yy_act;
 
 #line 63 "Gmsh.l"
diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp
index 41fdd53f0a2790394f7d81647998b7bd6396fc4b..ee5a385c41d01460bd3084cee5b4729430d24f7e 100644
--- a/Parser/OpenFile.cpp
+++ b/Parser/OpenFile.cpp
@@ -1,4 +1,4 @@
-// $Id: OpenFile.cpp,v 1.5 2001-01-12 13:29:04 geuzaine Exp $
+// $Id: OpenFile.cpp,v 1.6 2001-02-17 22:09:00 geuzaine Exp $
 #include "Gmsh.h"
 #include "Const.h"
 #include "Context.h"
@@ -33,11 +33,11 @@ void ParseFile(char *f){
   yyerrorstate=0;
   yylineno=1;
 
-  if(!(yyin = fopen(yyname,"r"))){
-    //Msg(STATUS2, "File '%s' Does not Exist", f);
+  if(!(yyin = fopen(yyname,"r")))
     return;
-  }
   
+  Msg(STATUS2, "Loading '%s'", yyname); 
+
   fpos_t position;
   fgetpos(yyin, &position);
   fgets(String, sizeof(String), yyin) ; 
@@ -57,10 +57,11 @@ void ParseFile(char *f){
     while(!feof(yyin)) yyparse();
   }
   fclose(yyin);
+
+  Msg(STATUS2, "Loaded '%s'", yyname); 
 }
 
 void MergeProblem(char *name){
-  Msg(INFO, "Merging '%s'",name); 
 
   ParseFile(name);  
   if (yyerrorstate) return;
@@ -106,8 +107,6 @@ void OpenProblem(char *name){
 #endif
   }
 
-  Msg(INFO, "Opening '%s'", CTX.filename); 
-
   ParseFile(CTX.filename);  
 
   ApplyLcFactor(THEM);
diff --git a/README.bugs b/README.bugs
new file mode 100644
index 0000000000000000000000000000000000000000..ac9ac9ebbf37294f3dccdf770384be99d2af9a01
--- /dev/null
+++ b/README.bugs
@@ -0,0 +1,16 @@
+$Id: README.bugs,v 1.1 2001-02-17 22:08:40 geuzaine Exp $
+
+* gmsh demos/piece.geo
+mailler en 2D
+mailler en 1D
+crash
+
+--> probleme d'initialisation: Curve *c->Extrude n'est pas NULL dans
+Extrude_Mesh alors qu'il devrait
+
+* Si la coherence des surfaces n'est pas recouvree en une etape, et
+qu'on fait une seconde passe qui marche, les volumes ne sont pas
+retrouves-< pas de maillage final.
+
+* il faudrait initialiser les statistiques qd on loade un maillage
+avec Read_Mesh.
diff --git a/README.cvs b/README.cvs
new file mode 100644
index 0000000000000000000000000000000000000000..c32be6c9c762596bba6276a6efcbe9420b105057
--- /dev/null
+++ b/README.cvs
@@ -0,0 +1,17 @@
+
+To download the latset full source by CVS, type
+
+cvs -d :pserver:YOUR_NAME@elap57.montefiore.ulg.ac.be:/usr/users57/cvs-master COMMAND
+
+where YOUR_NAME is your username on elap57.montefiore.ulg.ac.be, and where COMMAND is
+first 'login' (you will be prompted for a password), and then 'checkout gmsh'. When
+this is done, you can use 'logout' to exit.
+
+To update your local version, type
+
+cvs update -d
+
+To submit your changes, type
+
+cvs commit
+
diff --git a/README.devel b/README.devel
new file mode 100644
index 0000000000000000000000000000000000000000..2bd33bb815225cca5edac643fc91429de5892960
--- /dev/null
+++ b/README.devel
@@ -0,0 +1,28 @@
+
+Some easy rules to make the code easy to read/debug/maintain:
+
+- please enable full warnings for your compiler (e.g. gcc -Wall)
+- always use Msg() to print information/errors/etc.
+- indent your files and, if working on Windows, suppress the tabs (untabify)
+
+
+How to add an option in the graphical user interface?
+
+1) Create the option in the Context_T class (Common/Context.h) if it's
+a classical option, or in the View class (Common/View.h) if it's a
+post-processing view-dependent option.
+
+2) In Common/DefaultOptions.h, give a name (for the parser to be able
+to access it), a reference to a handling routine (i.e. opt_XXX) and a
+default value for this option.
+
+3) Create the handling routine opt_XXX in Common/Options.cpp.
+
+4) Create the associated widget in Fltk/GUI.cpp
+
+5) If no special callback is to be associated to the widget, add the
+handling routine opt_XXX to the OK callback for the corresponding
+option panel (in Fltk/Callbacks.cpp).
+
+6) That's it!
+
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..65e9784eb115fe57febe01df52b839237d5401c2
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,27 @@
+$Id: README.txt,v 1.1 2001-02-17 22:08:41 geuzaine Exp $
+
+For Windows versions of Gmsh only:
+==================================
+
+1) About cygwin1.dll:
+
+If you plan to use other programs than Gmsh which depend on the
+cygwin1.dll library, please move the library from this directory to
+the Windows system directory (usually C:\Windows\System\). Failing to
+do so will result in incorrect behaviour of all applications sharing
+the library.
+
+2) About opengl32.dll:
+
+If a version of the OpenGL library opengl32.dll is already installed
+on your system, you can remove the version shipped with Gmsh.
+
+3) About configuration files:
+
+Gmsh saves session information and default options on disk. The
+directory in which these files are saved is (in that order) $HOME (if
+the HOME variable is defined, e.g. in your autoexec.bat file), $TEMP
+(if TEMP is defined) or $TMP (if TMP is defined). If none of these
+variables are defined, Gmsh will try to save/load its configuration
+files from the current working directory.
+
diff --git a/benchmarks/2d/Square-01.geo b/benchmarks/2d/Square-01.geo
index f480020abebfa68dff488b163d3d59b42019fee4..4f234fc01ac972173fc7c9de2e23a2e7923c3d25 100644
--- a/benchmarks/2d/Square-01.geo
+++ b/benchmarks/2d/Square-01.geo
@@ -12,4 +12,5 @@ Line(3) = {1,4};
 Line(4) = {4,3};       
 Line Loop(5) = {1,2,3,4};       
 Plane Surface(6) = {5};       
-Attractor Point(0.05,0.05,2) = {2};                
+Attractor Point{2} = {0.05,0.05,2};
+Mesh.Algorithm = 2;
diff --git a/benchmarks/2d/Square-Attr1.geo b/benchmarks/2d/Square-Attr1.geo
index 9f4e6aa1d3281cec1970fbe2665f7cfa07f2c428..60882900118181db67f1223df2559234fca66282 100644
--- a/benchmarks/2d/Square-Attr1.geo
+++ b/benchmarks/2d/Square-Attr1.geo
@@ -16,3 +16,4 @@ Point(11) = {0.5,0.5,-1,lc};
 Point(22) = {0.5,0.5,1,lc};                    
 Line(5) = {11,22};                    
 Attractor Line{5} = {1,0.1,7};                             
+Mesh.Algorithm = 2;
diff --git a/benchmarks/2d/Square-Attr2.geo b/benchmarks/2d/Square-Attr2.geo
index 1ce0dea44120c9a9d61b2304cb591847027de2c8..31609c461c19c30080a3bb81cfa868be10f2d811 100644
--- a/benchmarks/2d/Square-Attr2.geo
+++ b/benchmarks/2d/Square-Attr2.geo
@@ -33,3 +33,4 @@ Line(13) = {17,18};
 Line(14) = {18,19};         
 Line(15) = {19,20};         
 Attractor Line{7,8,9,10,11,12,13,14,15} = {.1,0.01,10} ; 
+Mesh.Algorithm = 2;
diff --git a/benchmarks/2d/Square-Attr3.geo b/benchmarks/2d/Square-Attr3.geo
index f389baf461fb1272a120a6899fdc695d99bfb72f..a71a2146de840f5100ad4377cfe075bdb53cdfaf 100644
--- a/benchmarks/2d/Square-Attr3.geo
+++ b/benchmarks/2d/Square-Attr3.geo
@@ -14,3 +14,5 @@ Line Loop(5) = {1,2,3,4};
 Plane Surface(6) = {5};      
 Line(5) = {3,1};                    
 Attractor Line{5} = {1,0.01,3};                             
+Mesh.Algorithm = 2;
+
diff --git a/benchmarks/2d/Square-Attr4.geo b/benchmarks/2d/Square-Attr4.geo
index 309e44088edf6783b4d5bcf101fce0b76403692f..e15277cc7318b8a048b6929fcc5ee66e98b9ab63 100644
--- a/benchmarks/2d/Square-Attr4.geo
+++ b/benchmarks/2d/Square-Attr4.geo
@@ -14,3 +14,5 @@ Point(55) = {0.2,.5,0,lc};
 Line Loop(5) = {1,2,3,4};                
 Plane Surface(6) = {5};                
 Attractor Point {55} = {.01,.1,3.0};       
+Mesh.Algorithm = 2;
+
diff --git a/doc/Changelog b/doc/Changelog
index ccc013ade521ce1c865b166f8c6eea7fc2f4892d..762651fb24703a69d9bdf0e2a1e666542a49029b 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,3 +1,13 @@
+New in 1.14: Corrected a few bugs in the GUI (most of them were
+introduced in 1.13); Added interactive color selection; Made the
+option database bidirectional (i.e. scripts now correctly update the
+GUI); Default options can now be saved and automatically reloaded at
+startup; Made some changes to the scripting syntax
+(PostProcessing.View[n] becomes View[n]; Offset0 becomes OffsetX,
+etc.); Corrected the handling of simple triangular surfaces with large
+characteristic lengths in the 2D isotropic algorithm; Added an ascii
+to binary view converter (gmsh -convert file file);
+
 New in 1.13: Added jpeg output on Windows;
 
 New in 1.12: Corrected vector lines in the post-processing parsed
@@ -30,32 +40,26 @@ in 2D mesh when meshing in the mean plane;
 New in 0.996: Arrays of variables; Enhanced Printf and Sprintf;
 Simplified options (suppression of option arrays).
 
-New in 0.995:
-* Totally rewritten geometrical database (performance has been
-drastically improved for all geometrical transformations, and most
-notably for extrusion). <font color=red> As a consequence, the
-internal numbering of geometrical entities has changed: this will
-cause incompatibilities with old .geo files, and will require a
-partial rewrite of your old .geo files if these files made use of
-geometrical transformations</font>. The syntax of the .geo file has
-also been clarified. Many additions for scripting purposes.
-* New extrusion mesh generator. Preliminary version of the coupling between
-extruded and Delaunay meshes.
-* New option and procedural database. All interactive operations can be
-scripted in the input files. See the last example in the tutorial for
-an example.
-* Many stability enhancements in the 2D and 3D mesh
-algorithms. Performance boost of the 3D algorithm. Gmsh is still slow,
-but the performance becomes acceptable. An average 1000
-tetrahedra/second is obtained on a 600Mhz computer for a mesh of
-one million tetrahedra.
-* New anisotropic 2D mesh algorithm.
-* New (ascii and binary) post-processing file format and clarified mesh
-file format.
-* New handling for interactive rotations (trackball mode).
-* New didactic interactive mesh construction (watch the Delaunay
-algorithm in real time on complex geometries: that's exciting ;-)
-* And many, many bug fixes and cleanings...
+New in 0.995: Totally rewritten geometrical database (performance has
+been drastically improved for all geometrical transformations, and
+most notably for extrusion). As a consequence, the internal numbering
+of geometrical entities has changed: this will cause incompatibilities
+with old .geo files, and will require a partial rewrite of your old
+.geo files if these files made use of geometrical transformations. The
+syntax of the .geo file has also been clarified. Many additions for
+scripting purposes. New extrusion mesh generator. Preliminary version
+of the coupling between extruded and Delaunay meshes. New option and
+procedural database. All interactive operations can be scripted in the
+input files. See the last example in the tutorial for an example. Many
+stability enhancements in the 2D and 3D mesh algorithms. Performance
+boost of the 3D algorithm. Gmsh is still slow, but the performance
+becomes acceptable. An average 1000 tetrahedra/second is obtained on a
+600Mhz computer for a mesh of one million tetrahedra. New anisotropic
+2D mesh algorithm. New (ascii and binary) post-processing file format
+and clarified mesh file format. New handling for interactive rotations
+(trackball mode). New didactic interactive mesh construction (watch
+the Delaunay algorithm in real time on complex geometries: that's
+exciting ;-). And many, many bug fixes and cleanings...
 
 New in 0.992: corrected recombined extrusion; corrected ellipses; added
 simple automatic animation of post-processing maps; fixed various bugs.
diff --git a/tutorial/t3.geo b/tutorial/t3.geo
index 010054d769add13f04d0e095d9c5f0e103db322d..b92810d866b154f91774226c6ac248f2a3ef13a2 100644
--- a/tutorial/t3.geo
+++ b/tutorial/t3.geo
@@ -43,9 +43,9 @@ Geometry.Color.Points = Orange;
 General.Axes = 0;
 
 General.Trackball = 0;
-General.Rotation0 = 10;
-General.Rotation1 = 70;
-General.Translation0 = -0.1;
+General.RotationX = 10;
+General.RotationY = 70;
+General.TranslationX = -0.1;
 
 // Note: all colors can be defined literally or numerically, i.e.
 // 'General.Color.Background = Red' is equivalent to
diff --git a/tutorial/t8.geo b/tutorial/t8.geo
index 55ff55bd02ee1aef0766ce91e4ad0d726031a4c0..47298d647245497dd8feed6186213c8f8d83290d 100644
--- a/tutorial/t8.geo
+++ b/tutorial/t8.geo
@@ -19,9 +19,9 @@ Include "view1.pos" ;
 // 'File->Save_Options_as')...
 
 General.Trackball = 0 ;
-General.Rotation0 = 0 ;
-General.Rotation1 = 0 ;
-General.Rotation2 = 0 ;
+General.RotationX = 0 ;
+General.RotationY = 0 ;
+General.RotationZ = 0 ;
 General.Color.Background = White ;
 General.Color.Text = Black ;
 General.Orthographic = 0 ;
@@ -31,8 +31,8 @@ General.Axes = 0 ;
 
 View[0].Name = "This is a very stupid demonstration..." ;
 View[0].IntervalsType = 2 ;
-View[0].Offset2 = 0.05 ;
-View[0].Raise2 = 0 ;
+View[0].OffsetZ = 0.05 ;
+View[0].RaiseZ = 0 ;
 View[0].Light = 1 ;
 
 View[1].Name = "...of Gmsh's scripting capabilities" ;
@@ -54,22 +54,22 @@ For num In {1:255}
 
   t = (View[0].TimeStep < View[0].NbTimeStep-1) ? t+1 : 0 ;
   
-  View[0].Raise2 += 0.001*t ;
+  View[0].RaiseZ += 0.001*t ;
 
   If (num == 3)
     // We want to use mpeg_encode to create a nice 320x240 animation
     // for all frames when num==3:
-    General.Viewport2 = 320 ; 
-    General.Viewport3 = 240 ;
+    General.GraphicsWidth = 320 ; 
+    General.GraphicsHeight = 240 ;
   EndIf
 
   // It is possible to nest loops:
 
   For num2 In {1:50}
 
-    General.Rotation0 += 10 ;
-    General.Rotation1 = General.Rotation0 / 3 ;
-    General.Rotation2 += 0.1 ;
+    General.RotationX += 10 ;
+    General.RotationY = General.RotationX / 3 ;
+    General.RotationZ += 0.1 ;
  
     Sleep 0.01; // sleep for 0.01 second
     Draw; // draw the scene
diff --git a/utils/tut2html b/utils/tut2html
index b67e85a9df4414a05e62f3ccbb26a5ffc012a884..f436a3dcfdf4c858c493244cf17fdbb53390a579 100644
--- a/utils/tut2html
+++ b/utils/tut2html
@@ -6,7 +6,7 @@
 #fi
 
 #enscript -Ecpp --color -Whtml --toc -pt.html $*
-enscript -Ecpp --color -Whtml --toc -pt.html README *.geo
+enscript -Ecpp --color -Whtml --toc -pt.html README.txt *.geo
 
 cat t.html | \
 sed "s/<FONT COLOR=\"#BC8F8F\"><B>//g" | \