diff --git a/Common/Context.h b/Common/Context.h index 1815a994ba2712d4b1dbe6c4347a40f66b66a078..721763b4765c9a007987d90197969d7ff2c4d7c1 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -153,6 +153,7 @@ public : double scaling_factor; int color_scheme ; int auto_coherence; + int stl_create_elementary, stl_create_physical; } geom; // mesh options diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index c50477675587bee31a054cfa6531fc791d3dd758..c739c49a170e30a4f0874024fde54aa714d655ca 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -682,6 +682,10 @@ StringXNumber GeometryOptions_Number[] = { { F|O, "ScalingFactor" , opt_geometry_scaling_factor , 1.0 , "Global geometry scaling factor" }, + { F|O, "StlCreateElementary" , opt_geometry_stl_create_elementary , 1. , + "Treat each STL input face as a new geometrical surface" }, + { F|O, "StlCreatePhysical" , opt_geometry_stl_create_physical , 1. , + "Automatically create physical entities when importing STL faces as geometrical surfaces" }, { F|O, "Surfaces" , opt_geometry_surfaces , 0. , "Display geometry surfaces?" }, { F|O, "SurfacesNumbers" , opt_geometry_surfaces_num , 0. , @@ -707,7 +711,7 @@ StringXNumber MeshOptions_Number[] = { { F|O, "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 , "Factor applied to all characteristic lengths (and background meshes)" }, { F|O, "ColorCarousel" , opt_mesh_color_carousel , 1. , - "Use a `color by region' coloring scheme (0=no, 1=by geometrical entity, 2=by partition)" }, + "Color mesh by region? (0=no, 1=by elementary entity, 2=by physical entity, 3=by partition)" }, { F|O, "ColorScheme" , opt_mesh_color_scheme , 0. , "Default mesh color scheme (0, 1 or 2)" }, { F|O, "ConstrainedBackgroundMesh" , opt_mesh_constrained_bgmesh, 0. , diff --git a/Common/GmshUI.h b/Common/GmshUI.h index f81225abd0130d1634095355c9e67071adcdb8d9..0e501fc37ffd78e831988b42b51175fb891003d6 100644 --- a/Common/GmshUI.h +++ b/Common/GmshUI.h @@ -20,12 +20,6 @@ // // Please report all bugs and problems to <gmsh@geuz.org>. -#if defined(WIN32) -# include <windows.h> -# include <GL/gl.h> -# include <GL/glu.h> -#endif - #if defined(HAVE_FLTK) # include <FL/Fl.H> # include <FL/gl.h> diff --git a/Common/Makefile b/Common/Makefile index ec6dabe09ce90307595b80827ba6f3d80497363d..479bec04e075069c2bd0153ed55820a9c54ce610 100644 --- a/Common/Makefile +++ b/Common/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.48 2004-02-07 01:40:17 geuzaine Exp $ +# $Id: Makefile,v 1.49 2004-02-28 00:48:47 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -90,8 +90,7 @@ Visibility.o: Visibility.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h ../Geo/DataBase.h ../Parser/Parser.h \ - Visibility.h + ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h Visibility.h Trackball.o: Trackball.cpp Trackball.h License.o: License.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h diff --git a/Common/Options.cpp b/Common/Options.cpp index 7d9f69554cc3207615c2d729b734498cfdf84b49..7d77277f0a7cfff6234beb9938368a8f2173a62f 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.135 2004-02-20 17:57:59 geuzaine Exp $ +// $Id: Options.cpp,v 1.136 2004-02-28 00:48:47 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -2989,6 +2989,19 @@ double opt_geometry_color_scheme(OPT_ARGS_NUM) return CTX.geom.color_scheme; } +double opt_geometry_stl_create_elementary(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) + CTX.geom.stl_create_elementary = (int)val; + return CTX.geom.stl_create_elementary; +} + +double opt_geometry_stl_create_physical(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) + CTX.geom.stl_create_physical = (int)val; + return CTX.geom.stl_create_physical; +} double opt_mesh_quality(OPT_ARGS_NUM) { @@ -3490,6 +3503,7 @@ double opt_mesh_color_carousel(OPT_ARGS_NUM) WID->mesh_butt[17]->value(CTX.mesh.color_carousel==0); WID->mesh_butt[18]->value(CTX.mesh.color_carousel==1); WID->mesh_butt[19]->value(CTX.mesh.color_carousel==2); + WID->mesh_butt[20]->value(CTX.mesh.color_carousel==3); } #endif return CTX.mesh.color_carousel; @@ -3564,7 +3578,6 @@ double opt_mesh_display_lists(OPT_ARGS_NUM) return CTX.mesh.display_lists; } - double opt_solver_client_server(OPT_ARGS_NUM) { #if defined(HAVE_FLTK) diff --git a/Common/Options.h b/Common/Options.h index f5941bd458f9e05f5e2d07835d13fbfaf07efa50..4b730fd3076a0886aedafd51278ced715a8673af 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -336,6 +336,8 @@ double opt_geometry_circle_warning(OPT_ARGS_NUM); double opt_geometry_extrude_spline_points(OPT_ARGS_NUM); double opt_geometry_scaling_factor(OPT_ARGS_NUM); double opt_geometry_color_scheme(OPT_ARGS_NUM); +double opt_geometry_stl_create_elementary(OPT_ARGS_NUM); +double opt_geometry_stl_create_physical(OPT_ARGS_NUM); double opt_mesh_quality(OPT_ARGS_NUM); double opt_mesh_normals(OPT_ARGS_NUM); double opt_mesh_tangents(OPT_ARGS_NUM); diff --git a/Common/Visibility.cpp b/Common/Visibility.cpp index f68bbd2c6f95cabc0b1263631cb121d760e7b855..13668d6de1cc8919c29853dd8762e1b1659040e3 100644 --- a/Common/Visibility.cpp +++ b/Common/Visibility.cpp @@ -1,4 +1,4 @@ -// $Id: Visibility.cpp,v 1.6 2004-02-20 19:28:25 geuzaine Exp $ +// $Id: Visibility.cpp,v 1.7 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Geo.h" #include "CAD.h" #include "Mesh.h" -#include "DataBase.h" #include "Parser.h" #include "Visibility.h" diff --git a/DataStr/Tools.cpp b/DataStr/Tools.cpp index 1930aad3b6c17973de496b574e74eed036b7799e..6e7fbe74d07f558251a1db4a5814aa2e56182a64 100644 --- a/DataStr/Tools.cpp +++ b/DataStr/Tools.cpp @@ -1,4 +1,4 @@ -// $Id: Tools.cpp,v 1.11 2004-02-07 01:40:17 geuzaine Exp $ +// $Id: Tools.cpp,v 1.12 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -48,6 +48,21 @@ int fcmp_double(const void *a, const void *b) return 0; } +// List utilities + +List_T *ListOfDouble2ListOfInt(List_T *dList) +{ + int n = List_Nbr(dList); + List_T *iList = List_Create(n, n, sizeof(int)); + for(int i = 0; i < n; i++){ + double d; + List_Read(dList, i, &d); + int j = (int)d; + List_Add(iList, &j); + } + return iList; +} + // Tree -> List transfer List_T *pListeTransfert; diff --git a/DataStr/Tools.h b/DataStr/Tools.h index 4af70add57b1f634cd97bf8ec402c878f4e86bfc..8cfe053c83c2230e3c35cbdfc5422a9d98d9ef9c 100644 --- a/DataStr/Tools.h +++ b/DataStr/Tools.h @@ -27,15 +27,16 @@ int fcmp_int(const void *a, const void *b); int fcmp_absint(const void *a, const void *b); int fcmp_double(const void *a, const void *b); -List_T *Tree2List(Tree_T *pTree) ; +List_T *ListOfDouble2ListOfInt(List_T *dList); +List_T *Tree2List(Tree_T *pTree); -Tree_T *Tree_Duplique(Tree_T *pTree) ; -Tree_T *Tree_Union (Tree_T *pTreeA, Tree_T *pTreeB) ; -Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB) ; -Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB) ; +Tree_T *Tree_Duplique(Tree_T *pTree); +Tree_T *Tree_Union(Tree_T *pTreeA, Tree_T *pTreeB); +Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB); +Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB); -void Tree_Unit (Tree_T *pTreeA, Tree_T *pTreeB) ; -void Tree_Soustrait (Tree_T *pTreeA, Tree_T *pTreeB) ; -void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB) ; +void Tree_Unit(Tree_T *pTreeA, Tree_T *pTreeB); +void Tree_Soustrait(Tree_T *pTreeA, Tree_T *pTreeB); +void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB); #endif diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index b166fc927f7570870617eaed2c26f3ad5fd12cfa..e6dc9a1069c19b0342c888a430599018b5e0297b 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.205 2004-02-20 23:22:36 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.206 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -29,7 +29,7 @@ #include "GmshUI.h" #include "Geo.h" #include "CAD.h" -#include "Verif.h" +#include "ExtractContour.h" #include "Mesh.h" #include "Draw.h" #include "Views.h" @@ -1073,7 +1073,9 @@ void mesh_options_ok_cb(CALLBACK_ARGS) opt_mesh_light(0, GMSH_SET, WID->mesh_butt[15]->value()); opt_mesh_color_carousel(0, GMSH_SET, WID->mesh_butt[17]->value()? 0 : - WID->mesh_butt[18]->value()? 1 : 2); + WID->mesh_butt[18]->value()? 1 : + WID->mesh_butt[19]->value()? 2 : + 3); opt_mesh_nb_smoothing(0, GMSH_SET, WID->mesh_value[0]->value()); opt_mesh_scaling_factor(0, GMSH_SET, WID->mesh_value[1]->value()); diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 68f3d06a880da94698b038e45beba11e4a504f3b..569df52fbf6f2149d25dbea17da44d47a3ec307f 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.273 2004-02-22 20:13:36 geuzaine Exp $ +// $Id: GUI.cpp,v 1.274 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -1880,25 +1880,26 @@ void GUI::create_option_window() Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Colors"); o->hide(); mesh_butt[17] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Color by element type"); - mesh_butt[18] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Color by geometrical entity"); - mesh_butt[19] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Color by partition"); - for(i = 17; i < 20; i++) { + mesh_butt[18] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Color by elementary entity"); + mesh_butt[19] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Color by physical entity"); + mesh_butt[20] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Color by partition"); + for(i = 17; i < 21; i++) { mesh_butt[i]->type(FL_RADIO_BUTTON); mesh_butt[i]->down_box(RADIO_BOX); mesh_butt[i]->selection_color(RADIO_COLOR); } - mesh_value[12] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Predefined color scheme"); + mesh_value[12] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Predefined color scheme"); mesh_value[12]->minimum(0); mesh_value[12]->maximum(2); mesh_value[12]->step(1); mesh_value[12]->align(FL_ALIGN_RIGHT); mesh_value[12]->callback(mesh_options_color_scheme_cb); - Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 5 * BH, IW + 20, height - 5 * WB - 5 * BH); + Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 6 * BH, IW + 20, height - 6 * WB - 6 * BH); i = 0; while(MeshOptions_Color[i].str) { - mesh_col[i] = new Fl_Button(2 * WB, 3 * WB + (5 + i) * BH, IW, BH, MeshOptions_Color[i].str); + mesh_col[i] = new Fl_Button(2 * WB, 3 * WB + (6 + i) * BH, IW, BH, MeshOptions_Color[i].str); mesh_col[i]->callback(color_cb, (void *)MeshOptions_Color[i].function); i++; } diff --git a/Fltk/GUI.h b/Fltk/GUI.h index 09ea9f3a9fea50b29455ea6012d854a371b656a8..ee9736795649ae6ab78c4a3b8989010146bbc91d 100644 --- a/Fltk/GUI.h +++ b/Fltk/GUI.h @@ -171,7 +171,7 @@ public: // mesh options Fl_Window *mesh_window ; - Fl_Check_Button *mesh_butt[20] ; + Fl_Check_Button *mesh_butt[50] ; Fl_Input *mesh_input[20] ; Fl_Value_Input *mesh_value[20] ; Fl_Button *mesh_col[50] ; diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp index 1fe165d4190ded4e74adb861acd70f5cec71f4ca..8aa5f5c8f0a4657f2579a1ae7da6b5e4fe40627b 100644 --- a/Fltk/Main.cpp +++ b/Fltk/Main.cpp @@ -1,4 +1,4 @@ -// $Id: Main.cpp,v 1.56 2004-02-07 01:40:17 geuzaine Exp $ +// $Id: Main.cpp,v 1.57 2004-02-28 00:48:48 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -28,7 +28,6 @@ #include "GmshVersion.h" #include "Geo.h" -#include "Verif.h" #include "Mesh.h" #include "Draw.h" #include "Context.h" diff --git a/Fltk/Makefile b/Fltk/Makefile index 703cedfc348ece4529514cbaa3a0d46be4360012..b5751e919173d702017ac6877d336d94c7f4474f 100644 --- a/Fltk/Makefile +++ b/Fltk/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.49 2004-02-07 01:40:17 geuzaine Exp $ +# $Id: Makefile,v 1.50 2004-02-28 00:48:48 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -68,12 +68,11 @@ Main.o: Main.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/ColorTable.h ../DataStr/List.h ../Common/Gmsh.h \ ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ ../DataStr/Tools.h ../Common/GmshUI.h ../Common/GmshVersion.h \ - ../Geo/Geo.h ../Geo/Verif.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h ../Graphics/Draw.h \ - ../Common/Context.h ../Parser/Parser.h GUI.h Opengl_Window.h \ - Colorbar_Window.h ../Parser/OpenFile.h ../Common/CommandLine.h \ - ../Numeric/Numeric.h + ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ + ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ + ../Mesh/Matrix.h ../Graphics/Draw.h ../Common/Context.h \ + ../Parser/Parser.h GUI.h Opengl_Window.h Colorbar_Window.h \ + ../Parser/OpenFile.h ../Common/CommandLine.h ../Numeric/Numeric.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 \ @@ -95,11 +94,12 @@ Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h ../Geo/Verif.h ../Graphics/Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Timer.h ../Graphics/CreateFile.h \ - ../Parser/OpenFile.h ../Common/CommandLine.h ../Common/Context.h \ - ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h Callbacks.h \ - ../Plugin/Plugin.h ../Common/Visibility.h Solvers.h + ../Mesh/Matrix.h ../Geo/ExtractContour.h ../Graphics/Draw.h \ + ../Common/Views.h ../Common/ColorTable.h ../Common/Timer.h \ + ../Graphics/CreateFile.h ../Parser/OpenFile.h ../Common/CommandLine.h \ + ../Common/Context.h ../Common/Options.h GUI.h Opengl_Window.h \ + Colorbar_Window.h Callbacks.h ../Plugin/Plugin.h ../Common/Visibility.h \ + Solvers.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/Geo/CAD.cpp b/Geo/CAD.cpp index f8b6a2063011231bca96d8b734b35b49bdf8ddf4..901d20afdefbf66a5caccd28d5b1ee23730294dc 100644 --- a/Geo/CAD.cpp +++ b/Geo/CAD.cpp @@ -1,4 +1,4 @@ -// $Id: CAD.cpp,v 1.70 2004-02-07 01:40:18 geuzaine Exp $ +// $Id: CAD.cpp,v 1.71 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Numeric.h" #include "Geo.h" #include "Mesh.h" -#include "DataBase.h" #include "Interpolation.h" #include "Create.h" #include "CAD.h" @@ -157,7 +156,6 @@ void dist_ddg(double x1, double y1, double z1, *z = d * z4 + z3 * (1. - d); } - Vertex *FindPoint(int inum, Mesh * M) { Vertex C, *pc; @@ -235,6 +233,19 @@ SurfaceLoop *FindSurfaceLoop(int inum, Mesh * M) return NULL; } +PhysicalGroup *FindPhysicalGroup(int num, int type, Mesh * M) +{ + PhysicalGroup P, *pp, **ppp; + pp = &P; + pp->Num = num; + pp->Typ = type; + if((ppp = (PhysicalGroup **) List_PQuery(M->PhysicalGroups, &pp, + comparePhysicalGroup))) { + return *ppp; + } + return NULL; +} + void CopyVertex(Vertex * v, Vertex * vv) { vv->lc = v->lc; @@ -279,6 +290,11 @@ void CopyCurve(Curve * c, Curve * cc) cc->Control_Points = List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex *)); List_Copy(c->Control_Points, cc->Control_Points); + if(c->Typ == MSH_SEGM_PARAMETRIC){ + strcpy(cc->functu, c->functu); + strcpy(cc->functv, c->functv); + strcpy(cc->functw, c->functw); + } End_Curve(cc); Tree_Insert(THEM->Curves, &cc); } @@ -383,6 +399,7 @@ void CopyShape(int Type, int Num, int *New) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: if(!(c = FindCurve(Num, THEM))) { Msg(GERROR, "Unknown Curve %d", Num); return; @@ -482,6 +499,7 @@ void DeleteShape(int Type, int Num) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: DeleteCurve(Num); break; case MSH_SURF_NURBS: @@ -535,6 +553,7 @@ void ColorShape(int Type, int Num, unsigned int Color) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: ColorCurve(Num, Color); break; case MSH_SURF_NURBS: @@ -564,6 +583,7 @@ void VisibilityShape(int Type, int Num, int Mode) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: SetVisibilityByNumber(Num, 3, Mode); break; case MSH_SURF_NURBS: @@ -629,13 +649,13 @@ Curve *CreateReversedCurve(Mesh * M, Curve * c) Curve **pc; if((pc = (Curve **) Tree_PQuery(M->Curves, &newc))) { - Free_Curve(&newc, 0); + Free_Curve(&newc, NULL); return *pc; } - else - Tree_Insert(M->Curves, &newc); - - return newc; + else{ + Tree_Add(M->Curves, &newc); + return newc; + } } void ModifyLcPoint(int ip, double lc) @@ -961,6 +981,7 @@ void ApplicationOnShapes(double matrix[4][4], List_T * ListShapes) case MSH_SEGM_CIRC: case MSH_SEGM_ELLI: case MSH_SEGM_NURBS: + case MSH_SEGM_PARAMETRIC: c = FindCurve(O.Num, THEM); if(c) ApplyTransformationToCurve(matrix, c); diff --git a/Geo/CAD.h b/Geo/CAD.h index 338d343d5a34a59723a1ba376870a351159342f4..a2f66f7af01711f892efd7fbd2b1bd0a229350d0 100644 --- a/Geo/CAD.h +++ b/Geo/CAD.h @@ -42,6 +42,7 @@ Surface *FindSurface(int inum, Mesh *M); Volume *FindVolume(int inum, Mesh *M); EdgeLoop *FindEdgeLoop(int inum, Mesh *M); SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M); +PhysicalGroup *FindPhysicalGroup(int inum, int type, Mesh * M); Curve * CreateReversedCurve (Mesh *M,Curve *c); diff --git a/Geo/DataBase.cpp b/Geo/DataBase.cpp deleted file mode 100644 index c6ffc7eded88d5833ec618813433b8871ef7238f..0000000000000000000000000000000000000000 --- a/Geo/DataBase.cpp +++ /dev/null @@ -1,631 +0,0 @@ -// $Id: DataBase.cpp,v 1.27 2004-02-07 01:40:18 geuzaine Exp $ -// -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA. -// -// Please report all bugs and problems to <gmsh@geuz.org>. - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "CAD.h" -#include "STL.h" -#include "Create.h" -#include "Verif.h" -#include "Context.h" - -extern Context_T CTX; -extern Mesh *THEM; - -// Points - -void Cdbpts101(int ip, double x, double y, double z, double l, double w) -{ - Vertex *v; - v = Create_Vertex(ip, - CTX.geom.scaling_factor * x, - CTX.geom.scaling_factor * y, - CTX.geom.scaling_factor * z, - CTX.geom.scaling_factor * l, 0.0); - v->w = w; - Tree_Insert(THEM->Points, &v); -} - -// Curves - -void AddCurveInDataBase(int NumCurve, int TypCurve, int Order, - List_T * ControlPoints, List_T * Knots, - int VertexBeg, int VertexEnd, - double uBeg, double uEnd) -{ - Curve *c; - - if(NumCurve < 0) - return; /* Negative Curves are reversed from positive ones */ - - c = Create_Curve(NumCurve, TypCurve, Order, ControlPoints, Knots, - VertexBeg, VertexEnd, uBeg, uEnd); - - // curve in reverse direction - - Curve *rc = CreateReversedCurve(THEM, c); - Tree_Insert(THEM->Curves, &c); - Tree_Insert(THEM->Curves, &rc); -} - -void AddCircleInDataBase(int NumCurve, int TypCurve, List_T * ControlPoints, - double n[3]) -{ - Curve *c; - - if(NumCurve < 0) - return; /* Negative Curves are reversed from positive ones */ - - c = - Create_Curve(NumCurve, TypCurve, 2, ControlPoints, NULL, -1, -1, 0., 1.); - - c->Circle.n[0] = n[0]; - c->Circle.n[1] = n[1]; - c->Circle.n[2] = n[2]; - - End_Curve(c); - - // curve in reverse direction - - Curve *rc = CreateReversedCurve(THEM, c); - - rc->Circle.n[0] = n[0]; - rc->Circle.n[1] = n[1]; - rc->Circle.n[2] = n[2]; - End_Curve(rc); - - Tree_Insert(THEM->Curves, &c); - Tree_Insert(THEM->Curves, &rc); -} - -void Cdbseg101(int iseg, int typseg, int degre, List_T * liste, - List_T * listint, int i1, int i2, double u1, double u2, - char *c1, char *c2, char *c3) -{ - int i, j; - double d; - List_T *Temp; - if(listint) { - AddCurveInDataBase(iseg, typseg, degre, listint, NULL, i1, i2, u1, u2); - } - else { - Temp = List_Create(List_Nbr(liste), 1, sizeof(int)); - for(i = 0; i < List_Nbr(liste); i++) { - List_Read(liste, i, &d); - j = (int)d; - List_Add(Temp, &j); - } - AddCurveInDataBase(iseg, typseg, degre, Temp, NULL, i1, i2, u1, u2); - List_Delete(Temp); - } - -} - - -// Surfaces and volumes - -void AddQuadricSurfaceInDataBase(int Typ, int NumQuadric, double zaxis[3], - double xaxis[3], double center[3], - double radius1, double radius2, - List_T * loops) -{ - int ic, i, j, NbLoop, iLoop; - Surface *s; - Curve *c; - EdgeLoop *el; - - s = Create_Surface(NumQuadric, Typ); - s->Method = LIBRE; - for(i = 0; i < 3; i++) - s->Cyl.xaxis[i] = xaxis[i]; - for(i = 0; i < 3; i++) - s->Cyl.zaxis[i] = zaxis[i]; - for(i = 0; i < 3; i++) - s->Cyl.center[i] = center[i]; - s->Cyl.radius1 = radius1; - s->Cyl.radius2 = radius2; - s->Generatrices = List_Create(4, 1, sizeof(Curve *)); - - NbLoop = List_Nbr(loops); - s->Generatrices = List_Create(4, 1, sizeof(Curve *)); - for(i = 0; i < NbLoop; i++) { - List_Read(loops, i, &iLoop); - if(!(el = FindEdgeLoop(iLoop, THEM))) { - Msg(GERROR, "Unknown Line Loop %d", iLoop); - List_Delete(s->Generatrices); - Free(s); - return; - } - else { - for(j = 0; j < List_Nbr(el->Curves); j++) { - List_Read(el->Curves, j, &ic); - if(!(c = FindCurve(ic, THEM))) { - Msg(GERROR, "Unknown Curve %d", ic); - List_Delete(s->Generatrices); - Free(s); - return; - } - else - List_Add(s->Generatrices, &c); - } - } - } - s->Support = s; - End_Surface(s); - Tree_Insert(THEM->Surfaces, &s); -} - -void CreateSurfaceFromOldCrappyDatabase(int izon, int typzon, int o1, int o2, - int nbu, int nbv, int sup, - List_T * liste, List_T * loops, - Mesh * M) -{ - int ic, i, j, l, NbLoop, iLoop; - Surface *s, *pS; - Curve *c; - Vertex V, *v; - EdgeLoop *el; - - s = Create_Surface(izon, typzon); - s->Method = LIBRE; - - NbLoop = List_Nbr(loops); - s->Generatrices = List_Create(4, 1, sizeof(Curve *)); - for(i = 0; i < NbLoop; i++) { - List_Read(loops, i, &iLoop); - if(!(el = FindEdgeLoop(iLoop, THEM))) { - Msg(GERROR, "Unknown Line Loop %d", iLoop); - List_Delete(s->Generatrices); - Free(s); - return; - } - else { - for(j = 0; j < List_Nbr(el->Curves); j++) { - List_Read(el->Curves, j, &ic); - if(!(c = FindCurve(ic, THEM))) { - Msg(GERROR, "Unknown Curve %d", ic); - List_Delete(s->Generatrices); - Free(s); - return; - } - else - List_Add(s->Generatrices, &c); - } - } - } - - if((pS = FindSurface(sup, THEM))) { - s->Support = pS; - } - else { - s->Support = s; - } - - if(typzon == MSH_SURF_NURBS && !pS) { - s->Control_Points = List_Create(4, 1, sizeof(Vertex *)); - s->OrderU = o1; - s->OrderV = o2; - s->Nu = nbu; - s->Nv = nbv; - for(l = 0; l < List_Nbr(liste); l++) { - List_Read(liste, l, &iLoop); - v = &V; - v->Num = iLoop; - List_Add(s->Control_Points, Tree_PQuery(M->Points, &v)); - } - } - - End_Surface(s); - Tree_Insert(M->Surfaces, &s); -} - -void CreateVolumeFromOldCrappyDatabase(int izon, List_T * loops, Mesh * M) -{ - SurfaceLoop *sl; - int i, j, iLoop, is; - Surface *s; - Volume *v; - - v = Create_Volume(izon, MSH_VOLUME); - v->Surfaces = List_Create(4, 1, sizeof(Surface *)); - for(i = 0; i < List_Nbr(loops); i++) { - List_Read(loops, i, &iLoop); - if(!(sl = FindSurfaceLoop(iLoop, THEM))) { - Msg(GERROR, "Unknown Surface Loop %d", iLoop); - List_Delete(v->Surfaces); - Free(v); - return; - } - else { - for(j = 0; j < List_Nbr(sl->Surfaces); j++) { - List_Read(sl->Surfaces, j, &is); - if(!(s = FindSurface(abs(is), THEM))) { - Msg(GERROR, "Unknown Surface %d", is); - List_Delete(v->Surfaces); - Free(v); - return; - } - else - List_Add(v->Surfaces, &s); - } - } - } - Tree_Add(M->Volumes, &v); -} - - -void Cdbz101(int izon, int typzon, int o1, int o2, int nbu, int nbv, - int support, List_T * ListCP, List_T * liste, List_T * intlist) -{ - - int i, j; - double f; - List_T *templist = NULL; - Curve *c, *c0, *c1, *c2; - - if(liste) { - templist = List_Create(List_Nbr(liste), 1, sizeof(int)); - for(i = 0; i < List_Nbr(liste); i++) { - List_Read(liste, i, &f); - j = (int)f; - List_Add(templist, &j); - } - } - else if(intlist) { - templist = intlist; - } - - if(typzon == MSH_SURF_REGL || typzon == MSH_SURF_TRIC || - typzon == MSH_SURF_PLAN || typzon == MSH_SURF_TRIMMED || - typzon == MSH_SURF_NURBS) { - CreateSurfaceFromOldCrappyDatabase(izon, typzon, o1, o2, nbu, nbv, - support, ListCP, templist, THEM); - } - else if(typzon == MSH_SURF_LOOP) { - Add_SurfaceLoop(izon, templist, THEM); - } - else if(typzon == MSH_SEGM_LOOP) { - - // We sort the lines in the line loops. Without this sort, it very - // difficult to write general scriptable surface generation in - // complex cases. - - int NbCurves = List_Nbr(templist); - List_T *curves = List_Create(NbCurves, 1, sizeof(Curve *)); - for(i = 0; i < NbCurves; i++) { - if((c = FindCurve(*(int *)List_Pointer(templist, i), THEM))) - List_Add(curves, &c); - else - Msg(GERROR, "Unknown Curve %d in Line Loop %d", - *(int *)List_Pointer(templist, i), izon); - } - List_Reset(templist); - - int j = 0, k = 0; - c0 = c1 = *(Curve **) List_Pointer(curves, 0); - List_Add(templist, &c1->Num); - List_PSuppress(curves, 0); - while(List_Nbr(templist) < NbCurves) { - for(i = 0; i < List_Nbr(curves); i++) { - c2 = *(Curve **) List_Pointer(curves, i); - if(c1->end == c2->beg) { - List_Add(templist, &c2->Num); - List_PSuppress(curves, i); - c1 = c2; - if(c2->end == c0->beg) { - if(List_Nbr(curves)) { - Msg(INFO, - "Starting subloop %d in Line Loop %d (are you sure about this?)", - ++k, izon); - c0 = c1 = *(Curve **) List_Pointer(curves, 0); - List_Add(templist, &c1->Num); - List_PSuppress(curves, 0); - } - } - break; - } - } - if(j++ > NbCurves) { - Msg(GERROR, "Line Loop %d is wrong", izon); - break; - } - } - List_Delete(curves); - - /* - printf("Line Loop %d = {", izon); - for(i=0 ; i<List_Nbr(templist); i++){ - printf(" %d", *(int*)List_Pointer(templist, i)); - } - printf("}\n"); - */ - Add_EdgeLoop(izon, templist, THEM); - } - else if(typzon == MSH_VOLUME) { - CreateVolumeFromOldCrappyDatabase(izon, templist, THEM); - } - else { - Add_PhysicalGroup(izon, typzon, templist, THEM); - } - - if(liste) - List_Delete(templist); - - -} - -void CreateNurbsSurfaceSupport(int Num, int Order1, int Order2, - List_T * List, List_T * ku, List_T * kv) -{ - List_T *ListOfDouble_L; - List_T *ListCP; - int i, j, Nv, Nu, N; - Surface *s; - double d; - float f; - ListCP = List_Create(2, 2, sizeof(int)); - - for(j = 0; j < List_Nbr(List); j++) { - List_Read(List, j, &ListOfDouble_L); - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - N = (int)d; - List_Add(ListCP, &N); - } - } - List_Read(List, 0, &ListOfDouble_L); - Nu = List_Nbr(List); - Nv = List_Nbr(ListOfDouble_L); - Cdbz101(Num, MSH_SURF_NURBS, Order1, Order2, Nv, Nu, 0, ListCP, NULL, NULL); - - if(!(s = FindSurface(Num, THEM))) { - Msg(GERROR, "Unknown Surface Loop %d", Num); - return; - } - else { - s->ku = (float *)malloc(List_Nbr(ku) * sizeof(float)); - s->kv = (float *)malloc(List_Nbr(kv) * sizeof(float)); - s->Support = NULL; - - double kumin = 0., kumax = 1.; - double kvmin = 0., kvmax = 1.; - /* - List_Read(ku,0,&kumin); - List_Read(ku,List_Nbr(ku)-1,&kumax); - List_Read(kv,0,&kvmin); - List_Read(kv,List_Nbr(kv)-1,&kvmax); - */ - - for(i = 0; i < List_Nbr(ku); i++) { - List_Read(ku, i, &d); - f = (float)((d - kumin) / (kumax - kumin)); - s->ku[i] = f; - } - for(i = 0; i < List_Nbr(kv); i++) { - List_Read(kv, i, &d); - f = (float)((d - kvmin) / (kvmax - kvmin)); - s->kv[i] = f; - } - } - - List_Delete(ListCP); -} - -void CreateNurbsSurface(int Num, int Order1, int Order2, List_T * List, - List_T * ku, List_T * kv) -{ - List_T *ListOfDouble_L; - List_T *Listint, *ListCP; - int i, j, Loop[4], N, Nu, Nv; - double d; - int TypLine = MSH_SEGM_NURBS; - Curve *cc; - - Listint = List_Create(2, 2, sizeof(int)); - ListCP = List_Create(2, 2, sizeof(int)); - - double kumin, kumax; - List_Read(ku, 0, &kumin); - List_Read(ku, List_Nbr(ku) - 1, &kumax); - double kvmin, kvmax; - List_Read(kv, 0, &kvmin); - List_Read(kv, List_Nbr(kv) - 1, &kvmax); - for(j = 0; j < List_Nbr(List); j++) { - List_Read(List, j, &ListOfDouble_L); - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - N = (int)d; - List_Add(ListCP, &N); - } - } - - List_Read(List, 0, &ListOfDouble_L); - Nu = List_Nbr(List); - Nv = List_Nbr(ListOfDouble_L); - - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[0])) { - } - else { - Loop[0] = NEWREG(); - Cdbseg101(Loop[0], TypLine, Order1, ListOfDouble_L, NULL, -1, -1, kumin, - kumax, NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[0], THEM))) { - Msg(GERROR, "Unknown Curve %d", Loop[0]); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else { - cc->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); - for(i = 0; i < List_Nbr(ku); i++) { - List_Read(ku, i, &d); - cc->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; - } - } - } - List_Reset(Listint); - - List_Read(List, List_Nbr(List) - 1, &ListOfDouble_L); - for(i = 0; i < List_Nbr(ListOfDouble_L); i++) { - List_Read(ListOfDouble_L, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[2])) { - } - else { - Loop[2] = NEWREG(); - Cdbseg101(Loop[2], TypLine, Order1, ListOfDouble_L, NULL, -1, -1, kumin, - kumax, NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[2], THEM))) { - Msg(GERROR, "Unknown Curve %d", Loop[2]); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else { - cc->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); - for(i = 0; i < List_Nbr(ku); i++) { - List_Read(ku, i, &d); - cc->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; - } - } - } - List_Reset(Listint); - - List_T *List1 = List_Create(List_Nbr(List), 1, sizeof(double)); - List_T *List2 = List_Create(List_Nbr(List), 1, sizeof(double)); - - for(i = 0; i < List_Nbr(List); i++) { - List_Read(List, i, &ListOfDouble_L); - List_Add(List1, List_Pointer(ListOfDouble_L, 0)); - List_Add(List2, - List_Pointer(ListOfDouble_L, List_Nbr(ListOfDouble_L) - 1)); - } - - for(i = 0; i < List_Nbr(List1); i++) { - List_Read(List1, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[1])) { - } - else { - Loop[1] = NEWREG(); - Cdbseg101(Loop[1], TypLine, Order2, List1, NULL, -1, -1, kvmin, kvmax, - NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[1], THEM))) { - Msg(GERROR, "Unknown Curve %d", Loop[1]); - List_Delete(List1); - List_Delete(List2); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else { - cc->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); - for(i = 0; i < List_Nbr(kv); i++) { - List_Read(kv, i, &d); - cc->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; - } - } - } - List_Reset(Listint); - - for(i = 0; i < List_Nbr(List2); i++) { - List_Read(List2, i, &d); - j = (int)d; - List_Add(Listint, &j); - } - if(recognize_seg(TypLine, Listint, &Loop[3])) { - } - else { - Loop[3] = NEWREG(); - Cdbseg101(Loop[3], TypLine, Order2, List2, NULL, -1, -1, kvmin, kvmax, - NULL, NULL, NULL); - if(!(cc = FindCurve(Loop[3], THEM))) - Msg(GERROR, "Unknown Curve %d", Loop[3]); - else { - cc->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); - for(i = 0; i < List_Nbr(kv); i++) { - List_Read(kv, i, &d); - cc->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; - } - } - } - - List_Reset(Listint); - List_Delete(List1); - List_Reset(List2); - double f = (double)-Loop[0]; - List_Add(List2, &f); - f = (double)Loop[1]; - List_Add(List2, &f); - f = (double)Loop[2]; - List_Add(List2, &f); - f = (double)-Loop[3]; - List_Add(List2, &f); - - int topnew = NEWREG(); - CreateNurbsSurfaceSupport(topnew, Order1, Order2, List, ku, kv); - j = NEWREG(); - Cdbz101(j, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, List2, NULL); - List_Delete(List2); - List_Add(Listint, &j); - j = NEWREG(); - Cdbz101(j, MSH_SURF_TRIMMED, Order1, Order2, Nv, Nu, topnew, ListCP, NULL, - Listint); - List_Delete(Listint); - List_Delete(ListCP); -} - - -// This function takes a surfaces defined by edge loops that may -// be initially planar or anything else and adds a triangulation -// to in in order to represent the shape of the surface. This -// triangulation may be a STL triangulation (polygons are triangle) -// but anything else is okay. Solid modelers like parasolid or proE -// are able to provide such representations. I have written a translator -// from ideas to gmsh that does that. -void AddTriangulationToSurface (int iSurface, int iNbPnt, int iNbrPolygons, - List_T *points, List_T *polygons) -{ - Surface * s = FindSurface(iSurface, THEM); - - POLY_rep *rep = new POLY_rep (points,polygons); - - if (!s) - { - Msg(GERROR, "Unknown Surface %d", iSurface); - delete rep; - return; - } - - s->thePolyRep = rep; - -} diff --git a/Geo/DataBase.h b/Geo/DataBase.h deleted file mode 100644 index 8aeeceed16613a9519daaee44672ad1fb0ae66ee..0000000000000000000000000000000000000000 --- a/Geo/DataBase.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef _DATABASE_H_ -#define _DATABASE_H_ - -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA. -// -// Please report all bugs and problems to <gmsh@geuz.org>. - -void Cdbpts101 (int ip, double x, double y, double z, double l, double w); -void Cdbpts105 (int ip, double x, double y, double z, double l, double w); -void Cdbseg102 (int iseg, int ip, int newp); -void Cdbz102 (int izon, int ip, int newp, int oldp); -void Cdbseg101 (int iseg, int typseg, int degre, List_T * liste, List_T * listint, - int, int, double, double, char *, char *, char *); -void Cdbpts201 (int ip); -void Cdbseg201 (int ip); -void Cdbz201 (int ip); -void Cdbz101 (int izon, int typzon, int o1, int o2, int nbu, int nbv, - int support, List_T * ListCP, List_T * liste, List_T * intlist); -void CreateNurbsSurface (int Num, int Order1, int Order2, List_T *, List_T *, List_T *); -void CreateNurbsSurfaceSupport (int Num, int Order2, int Order1, - List_T * List, List_T *, List_T *); -void Cdbseg301 (int ip); -void Cdbz301 (int ip); -void Cdbn101 (int in, double X, double Y, double Z); -void Cdbe101 (int nElm, int iEnt, int nnoe[4]); - -void AddCurveInDataBase (int NumCurve, int TypCurve, int Order, List_T * ControlPoints, - List_T * Knots, int VertexBeg, int VertexEnd, double uBeg, - double uEnd); -void AddCircleInDataBase (int NumCurve, int TypCurve, List_T * ControlPoints, - double n[3]); -void AddQuadricSurfaceInDataBase (int Typ, int NumCyl, double zaxis[3], - double xaxis[3], double center[3], - double radius1, double radius2, - List_T * loops); -void AddTriangulationToSurface (int iSurface, int iNbPnt, int iNbrPolygons, - List_T *points, List_T *polygons); - -#endif diff --git a/Geo/Verif.cpp b/Geo/ExtractContour.cpp similarity index 98% rename from Geo/Verif.cpp rename to Geo/ExtractContour.cpp index cde7eb02d0482ca0ada8da8a9532085a653bad52..2465ffa7b512925ec5dacd33c9805604e4fb7c41 100644 --- a/Geo/Verif.cpp +++ b/Geo/ExtractContour.cpp @@ -1,4 +1,4 @@ -// $Id: Verif.cpp,v 1.16 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: ExtractContour.cpp,v 1.1 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Geo.h" #include "CAD.h" #include "Mesh.h" -#include "DataBase.h" extern Mesh *THEM; diff --git a/Geo/Verif.h b/Geo/ExtractContour.h similarity index 83% rename from Geo/Verif.h rename to Geo/ExtractContour.h index beb6f74815060ea9bd582f3dae981113c1887eae..c226ee74aa679eac29c35558231fd7fe416b199f 100644 --- a/Geo/Verif.h +++ b/Geo/ExtractContour.h @@ -1,5 +1,5 @@ -#ifndef _VERIF_H_ -#define _VERIF_H_ +#ifndef _EXTRACT_CONTOUR_H_ +#define _EXTRACT_CONTOUR_H_ // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -22,7 +22,7 @@ #include "List.h" -int alledgeslinked (int ed, List_T * Liste, List_T * old); -int allfaceslinked (int iz, List_T * Liste, List_T * old); +int alledgeslinked(int ed, List_T * Liste, List_T * old); +int allfaceslinked(int iz, List_T * Liste, List_T * old); #endif diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp index 5e6799ed2f01853eb30c38afa953af519e78a169..2dc0c61ff800b77a89cceec4f0816e75e3f35ef4 100644 --- a/Geo/Geo.cpp +++ b/Geo/Geo.cpp @@ -1,4 +1,4 @@ -// $Id: Geo.cpp,v 1.38 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: Geo.cpp,v 1.39 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -23,7 +23,6 @@ #include "Numeric.h" #include "Geo.h" #include "CAD.h" -#include "DataBase.h" #include "Parser.h" #include "Context.h" diff --git a/Geo/GeoUtils.cpp b/Geo/GeoUtils.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a065a41fff0de8d767054e1902deb964b93cdb6d --- /dev/null +++ b/Geo/GeoUtils.cpp @@ -0,0 +1,143 @@ +// $Id: GeoUtils.cpp,v 1.1 2004-02-28 00:48:49 geuzaine Exp $ +// +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "Gmsh.h" +#include "Geo.h" +#include "CAD.h" +#include "Mesh.h" + +extern Mesh *THEM; + +// A small function to sort the edges in an EdgeLoop. Without this +// sort, it is very difficult to write general scriptable surface +// generation in complex cases + +void sortEdgesInLoop(int num, List_T *edges) +{ + Curve *c, *c0, *c1, *c2; + int nbEdges = List_Nbr(edges); + List_T *temp = List_Create(nbEdges, 1, sizeof(Curve *)); + + for(int i = 0; i < nbEdges; i++) { + int j; + List_Read(edges, i, &j); + if((c = FindCurve(j, THEM))) + List_Add(temp, &c); + else + Msg(GERROR, "Unknown Curve %d in Line Loop %d", j, num); + } + List_Reset(edges); + + int j = 0, k = 0; + c0 = c1 = *(Curve **) List_Pointer(temp, 0); + List_Add(edges, &c1->Num); + List_PSuppress(temp, 0); + while(List_Nbr(edges) < nbEdges) { + for(int i = 0; i < List_Nbr(temp); i++) { + c2 = *(Curve **) List_Pointer(temp, i); + if(c1->end == c2->beg) { + List_Add(edges, &c2->Num); + List_PSuppress(temp, i); + c1 = c2; + if(c2->end == c0->beg) { + if(List_Nbr(temp)) { + Msg(INFO, "Starting subloop %d in Line Loop %d (are you sure about this?)", + ++k, num); + c0 = c1 = *(Curve **) List_Pointer(temp, 0); + List_Add(edges, &c1->Num); + List_PSuppress(temp, 0); + } + } + break; + } + } + if(j++ > nbEdges) { + Msg(GERROR, "Line Loop %d is wrong", num); + break; + } + } + List_Delete(temp); +} + +// Fills in the generatrices for a given surface, given the indices of +// edge loops + +void setSurfaceGeneratrices(Surface *s, List_T *loops) +{ + int nbLoop = List_Nbr(loops); + s->Generatrices = List_Create(4, 4, sizeof(Curve *)); + for(int i = 0; i < nbLoop; i++) { + int iLoop; + List_Read(loops, i, &iLoop); + EdgeLoop *el; + if(!(el = FindEdgeLoop(iLoop, THEM))) { + Msg(GERROR, "Unknown Line Loop %d", iLoop); + List_Delete(s->Generatrices); + return; + } + else { + for(int j = 0; j < List_Nbr(el->Curves); j++) { + int ic; + List_Read(el->Curves, j, &ic); + Curve *c; + if(!(c = FindCurve(ic, THEM))) { + Msg(GERROR, "Unknown Curve %d", ic); + List_Delete(s->Generatrices); + return; + } + else + List_Add(s->Generatrices, &c); + } + } + } +} + +// Fills in the boundary of a volume, given the indices of surface +// loops + +void setVolumeSurfaces(Volume *v, List_T * loops) +{ + v->Surfaces = List_Create(4, 1, sizeof(Surface *)); + for(int i = 0; i < List_Nbr(loops); i++) { + int il; + List_Read(loops, i, &il); + SurfaceLoop *sl; + if(!(sl = FindSurfaceLoop(il, THEM))) { + Msg(GERROR, "Unknown Surface Loop %d", il); + List_Delete(v->Surfaces); + return; + } + else { + for(int j = 0; j < List_Nbr(sl->Surfaces); j++) { + int is; + List_Read(sl->Surfaces, j, &is); + Surface *s; + if(!(s = FindSurface(abs(is), THEM))) { + Msg(GERROR, "Unknown Surface %d", is); + List_Delete(v->Surfaces); + return; + } + else + List_Add(v->Surfaces, &s); + } + } + } +} diff --git a/Geo/GeoUtils.h b/Geo/GeoUtils.h new file mode 100644 index 0000000000000000000000000000000000000000..351a79ca573936732c76191311a19e4d8e6d2831 --- /dev/null +++ b/Geo/GeoUtils.h @@ -0,0 +1,30 @@ +#ifndef _GEO_UTILS_H_ +#define _GEO_UTILS_H_ + +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "Mesh.h" +#include "List.h" + +void sortEdgesInLoop(int num, List_T *edges); +void setSurfaceGeneratrices(Surface *s, List_T *loops); +void setVolumeSurfaces(Volume *v, List_T * loops); + +#endif diff --git a/Geo/Makefile b/Geo/Makefile index ad962cd671e83d8b319dad3edf3ade2c1524ff4a..ef503ce456aaf5c9aad2d8b5b8b99c9bf2431803 100644 --- a/Geo/Makefile +++ b/Geo/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.42 2004-02-07 01:40:19 geuzaine Exp $ +# $Id: Makefile,v 1.43 2004-02-28 00:48:49 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -27,12 +27,12 @@ INCLUDE = -I../Common -I../DataStr -I../Geo -I../Mesh -I../Numeric -I../NR\ CFLAGS = ${OPTIM} ${FLAGS} ${INCLUDE} SRC = CAD.cpp \ - DataBase.cpp \ MinMax.cpp \ ExtrudeParams.cpp \ Geo.cpp \ + GeoUtils.cpp \ StepGeomDatabase.cpp \ - Verif.cpp \ + ExtractContour.cpp \ Print_Geo.cpp OBJ = ${SRC:.cpp=.o} @@ -62,14 +62,8 @@ CAD.o: CAD.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Numeric/Numeric.h Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h DataBase.h ../Mesh/Interpolation.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Interpolation.h \ ../Mesh/Create.h CAD.h ../Common/Visibility.h ../Common/Context.h -DataBase.o: DataBase.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - CAD.h ../Mesh/Create.h Verif.h ../Common/Context.h MinMax.o: MinMax.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \ @@ -83,19 +77,25 @@ 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 \ ../Numeric/Numeric.h Geo.h CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h DataBase.h ../Parser/Parser.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Parser/Parser.h \ ../Common/Context.h +GeoUtils.o: GeoUtils.cpp ../Common/Gmsh.h ../Common/Message.h \ + ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ + ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ + ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.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 \ - ../Numeric/Numeric.h Geo.h StepGeomDatabase.h DataBase.h \ - ../Common/Context.h -Verif.o: Verif.cpp ../Common/Gmsh.h ../Common/Message.h \ + ../Numeric/Numeric.h Geo.h GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ + ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h CAD.h \ + StepGeomDatabase.h ../Mesh/Create.h ../Common/Context.h +ExtractContour.o: ExtractContour.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ - DataBase.h + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h Print_Geo.o: Print_Geo.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h Geo.h ../Mesh/Mesh.h \ diff --git a/Geo/StepGeomDatabase.cpp b/Geo/StepGeomDatabase.cpp index 768491da51646e4cfde71a1ed383910c2e9427e0..b6138977e7ac26965e549b8255827fef6ec541b1 100644 --- a/Geo/StepGeomDatabase.cpp +++ b/Geo/StepGeomDatabase.cpp @@ -1,4 +1,4 @@ -// $Id: StepGeomDatabase.cpp,v 1.15 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: StepGeomDatabase.cpp,v 1.16 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -22,15 +22,21 @@ #include "Gmsh.h" #include "Numeric.h" #include "Geo.h" +#include "GeoUtils.h" +#include "Nurbs.h" +#include "CAD.h" #include "StepGeomDatabase.h" -#include "DataBase.h" +#include "Create.h" #include "Context.h" +// WARNING: NOT FUNCTIONAL AT THE MOMENT -- NEEDS TO BE PORTED TO THE NEW +// GEO CREATION INTERFACES (SEE "TODO"s) + extern Context_T CTX; +extern Mesh *THEM; static Step_Solid_BRep_t *BREP = NULL; - Step_Solid_BRep_t *Create_Step_Solid_BRep(void) { Step_Solid_BRep_t *NEWBREP; @@ -632,14 +638,14 @@ void Resolve_BREP(void) // resolving cartesian_points for(i = 0; i < List_Nbr(BREP->AllCartesian_Points); i++) { List_Read(BREP->AllCartesian_Points, i, &cp); - Cdbpts101(cp.Num, cp.Pos.X, cp.Pos.Y, cp.Pos.Z, L * .01, 1); + //TODO Cdbpts101(cp.Num, cp.Pos.X, cp.Pos.Y, cp.Pos.Z, L * .01, 1); } // resolving vertex_points for(i = 0; i < List_Nbr(BREP->AllVertex_Points); i++) { List_Read(BREP->AllVertex_Points, i, &vp); if((pcp = Get_Cartesian_Point(vp.Cartesian_Point))) { - Cdbpts101(vp.Num, pcp->Pos.X, pcp->Pos.Y, pcp->Pos.Z, L * .01, 1); + //TODO Cdbpts101(vp.Num, pcp->Pos.X, pcp->Pos.Y, pcp->Pos.Z, L * .01, 1); } } @@ -650,21 +656,22 @@ void Resolve_BREP(void) if(pc->Typ == STEP_LINE) { List_Add(ListInt, &ec.Step_Vertex_Point_Begin); List_Add(ListInt, &ec.Step_Vertex_Point_End); - Cdbseg101(ec.Num, MSH_SEGM_LINE, 1, NULL, ListInt, -1, -1, 0., 1., - NULL, NULL, NULL); + //TODO Cdbseg101(ec.Num, MSH_SEGM_LINE, 1, NULL, ListInt, -1, -1, 0., 1., + // NULL, NULL, NULL); List_Reset(ListInt); } else if(pc->Typ == STEP_BSPL) { List_Read(pc->Curve.BSpline.ListOf_Knots, 0, &ubeg); List_Read(pc->Curve.BSpline.ListOf_Knots, List_Nbr(pc->Curve.BSpline.ListOf_Knots) - 1, &uend); - AddCurveInDataBase(ec.Num, - MSH_SEGM_NURBS, - pc->Curve.BSpline.Order, - pc->Curve.BSpline.ListOf_Cartesian_Points, - pc->Curve.BSpline.ListOf_Knots, - ec.Step_Vertex_Point_Begin, - ec.Step_Vertex_Point_End, ubeg, uend); + // TODO + //AddCurveInDataBase(ec.Num, + // MSH_SEGM_NURBS, + // pc->Curve.BSpline.Order, + // pc->Curve.BSpline.ListOf_Cartesian_Points, + // pc->Curve.BSpline.ListOf_Knots, + // ec.Step_Vertex_Point_Begin, + // ec.Step_Vertex_Point_End, ubeg, uend); } else if(pc->Typ == STEP_CIRC || pc->Typ == STEP_ELLP) { axs = Get_Axis2_Placement3D(pc->Curve.Circle.Step_Axis2_Placement3D); @@ -678,9 +685,7 @@ void Resolve_BREP(void) List_Add(ListInt, &ec.Step_Vertex_Point_Begin); List_Add(ListInt, &pcp->Num); List_Add(ListInt, &ec.Step_Vertex_Point_End); - AddCircleInDataBase(ec.Num, MSH_SEGM_CIRC, ListInt, n); - // Cdbseg101(ec.Num,MSH_SEGM_CIRC,1,NULL, - // ListInt,-1,-1,0.,1.,NULL,NULL,NULL); + //AddCircleInDataBase(ec.Num, MSH_SEGM_CIRC, ListInt, n); List_Reset(ListInt); } } @@ -727,8 +732,7 @@ void Resolve_BREP(void) else err = 1; if(!err) { - Cdbz101(pfab->Num, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, NULL, - ListInt); + //TODO Cdbz101(pfab->Num, MSH_SEGM_LOOP, 0, 0, 0, 0, 0, NULL, NULL, ListInt); List_Add(ListIntBis, &pfab->Num); } List_Reset(ListInt); @@ -738,7 +742,7 @@ void Resolve_BREP(void) } if(!err && (ps = Get_Surface(af.Step_Surface))) { if(ps->Typ == STEP_PLAN) { - Cdbz101(af.Num, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, NULL, ListIntBis); + //TODO Cdbz101(af.Num, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, NULL, ListIntBis); } else if(ps->Typ == STEP_CYLD || ps->Typ == STEP_CONE /*|| ps->Typ == STEP_TORD || ps->Typ == STEP_CONE */ ) { @@ -768,18 +772,28 @@ void Resolve_BREP(void) typ = MSH_SURF_CONE; break; } - AddQuadricSurfaceInDataBase(typ, - af.Num, - n, t, p, - ps->Surface.Quadric.Radius1, - ps->Surface.Quadric.Radius2, ListIntBis); - - //Cdbz101(af.Num,MSH_SURF_REGL,0,0,0,0,0,NULL,NULL,ListIntBis); + if(FindSurface(af.Num, THEM)){ + Msg(GERROR, "Surface %d already exists", af.Num); + } + else{ + Surface *s = Create_Surface(af.Num, typ); + for(int i = 0; i < 3; i++) + s->Cyl.xaxis[i] = t[i]; + for(int i = 0; i < 3; i++) + s->Cyl.zaxis[i] = n[i]; + for(int i = 0; i < 3; i++) + s->Cyl.center[i] = p[i]; + s->Cyl.radius1 = ps->Surface.Quadric.Radius1; + s->Cyl.radius2 = ps->Surface.Quadric.Radius2; + setSurfaceGeneratrices(s, ListIntBis); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } } - else if(ps->Typ == STEP_BSPL) { - Cdbz101(af.Num, MSH_SURF_TRIMMED, 0, 0, 0, 0, af.Step_Surface, NULL, - NULL, ListIntBis); + //TODO Cdbz101(af.Num, MSH_SURF_TRIMMED, 0, 0, 0, 0, af.Step_Surface, NULL, + // NULL, ListIntBis); } } List_Reset(ListIntBis); @@ -796,11 +810,12 @@ void Resolve_BREP(void) List_Add(ListInt, &paf->Num); } } - Cdbz101(cs.Num + 1000000, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, NULL, - ListInt); + //TODO Cdbz101(cs.Num + 1000000, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, NULL, ListInt); List_Reset(ListInt); j = cs.Num + 1000000; List_Add(ListInt, &j); - Cdbz101(cs.Num, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, NULL, ListInt); + //TODO Cdbz101(cs.Num, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, NULL, ListInt); } } + + diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp index 6a153e15f059a5475b65ae65bec6ae31ea322e4e..ab1ccd0522d08300c1941f330498f49379e70775 100644 --- a/Graphics/Geom.cpp +++ b/Graphics/Geom.cpp @@ -1,4 +1,4 @@ -// $Id: Geom.cpp,v 1.49 2004-02-20 17:58:00 geuzaine Exp $ +// $Id: Geom.cpp,v 1.50 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -27,7 +27,6 @@ #include "Utils.h" #include "Draw.h" #include "Context.h" -#include "Verif.h" #include "Interpolation.h" #include "STL.h" #include "gl2ps.h" @@ -282,13 +281,12 @@ void Draw_Triangulated_Surface(Surface * s) if(CTX.geom.light) glEnable(GL_LIGHTING); glBegin(GL_TRIANGLES); while (k < List_Nbr(s->thePolyRep->polygons)){ - points = (double*)List_Pointer (s->thePolyRep->polygons,k); + points = (double*)List_Pointer(s->thePolyRep->polygons,k); k+= ((int)points[0] + 1); - if (points[0] == 3){ - p1 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[1]); - p2 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[2]); - p3 = (double*)List_Pointer (s->thePolyRep->points_and_normals,6*(int)points[3]); + p1 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[1]); + p2 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[2]); + p3 = (double*)List_Pointer(s->thePolyRep->points_and_normals, 6*(int)points[3]); glNormal3dv(&p1[3]); glVertex3d(p1[0],p1[1],p1[2]); glNormal3dv(&p2[3]); diff --git a/Graphics/Makefile b/Graphics/Makefile index 14b5e1c8430f974801340a9d5e3110af88751591..daf96f727063cd5a608f132cc34acf6419f16ace 100644 --- a/Graphics/Makefile +++ b/Graphics/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.54 2004-02-07 01:40:19 geuzaine Exp $ +# $Id: Makefile,v 1.55 2004-02-28 00:48:49 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -82,14 +82,14 @@ Mesh.o: Mesh.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ Draw.h ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Geo/MinMax.h gl2ps.h ../Geo/Verif.h ../Numeric/Numeric.h + ../Geo/MinMax.h gl2ps.h ../Numeric/Numeric.h Geom.o: Geom.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 ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \ ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ ../Mesh/Utils.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Context.h ../Geo/Verif.h ../Mesh/Interpolation.h gl2ps.h + ../Common/Context.h ../Mesh/Interpolation.h gl2ps.h Post.o: Post.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 ../Numeric/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \ diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp index 45d4ccf26588f8a4e0e6d1280f4e5b22ed41c90e..a1b6e0da59bb398c5c1ee1207e2c79276e646d2c 100644 --- a/Graphics/Mesh.cpp +++ b/Graphics/Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Mesh.cpp,v 1.65 2004-02-20 17:58:00 geuzaine Exp $ +// $Id: Mesh.cpp,v 1.66 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -28,12 +28,14 @@ #include "Context.h" #include "MinMax.h" #include "gl2ps.h" -#include "Verif.h" #include "Numeric.h" extern Mesh *THEM; extern Context_T CTX; +static DrawingColor theColor; +static int thePhysical = 0; + void draw_polygon_2d(double r, double g, double b, int n, double *x, double *y, double *z) { @@ -58,13 +60,21 @@ void draw_polygon_2d(double r, double g, double b, int n, glEnable(GL_DEPTH_TEST); } -static DrawingColor theColor; - void ColorSwitch(int i) { glColor4ubv((GLubyte *) & CTX.color.mesh.carousel[abs(i % 10)]); } +int getFirstPhysical(int type, int num) +{ + for(int i = 0; i < List_Nbr(THEM->PhysicalGroups); i++){ + PhysicalGroup *p = *(PhysicalGroup**)List_Pointer(THEM->PhysicalGroups, i); + if(p->Typ == type && List_Query(p->Entities, &num, fcmp_int)) + return p->Num; + } + return 0; +} + void Draw_Mesh(Mesh * M) { int i; @@ -135,7 +145,7 @@ void Draw_Mesh(Mesh * M) //printf("normal mesh drawing\n"); if(M->status >= 3 && (CTX.mesh.volumes || CTX.mesh.volumes_num)) { - Tree_Action(M->Volumes, Draw_Mesh_Volumes); + Tree_Action(M->Volumes, Draw_Mesh_Volumes); } if(M->status >= 2 && (CTX.mesh.surfaces || CTX.mesh.surfaces_num)) { @@ -184,12 +194,7 @@ void Draw_Mesh(Mesh * M) void Draw_Mesh_Volumes(void *a, void *b) { - Volume *v; - v = *(Volume **) a; - theColor = v->Color; - // FIXME: this is the correct method, but will only work when a - // coherent datastruct exists for volumes - // if(!(v->Visible & VIS_MESH)) return; + Volume *v = *(Volume **) a; Tree_Action(v->Simplexes, Draw_Simplex_Volume); Tree_Action(v->Hexahedra, Draw_Hexahedron_Volume); Tree_Action(v->Prisms, Draw_Prism_Volume); @@ -208,9 +213,9 @@ int Test_Simple_Surface_Draw() void Draw_Mesh_Surfaces(void *a, void *b) { - Surface *s; - s = *(Surface **) a; + Surface *s = *(Surface **) a; theColor = s->Color; + thePhysical = getFirstPhysical(MSH_PHYSICAL_SURFACE, s->Num); if(!(s->Visible & VIS_MESH)) return; if(!Test_Simple_Surface_Draw()) @@ -233,11 +238,11 @@ void Draw_Mesh_Extruded_Surfaces(void *a, void *b) void Draw_Mesh_Curves(void *a, void *b) { - Curve *c; - c = *(Curve **) a; + Curve *c = *(Curve **) a; if(c->Num < 0) return; theColor = c->Color; + thePhysical = getFirstPhysical(MSH_PHYSICAL_LINE, c->Num); if(!(c->Visible & VIS_MESH)) return; Tree_Action(c->Simplexes, Draw_Simplex_Curves); @@ -308,10 +313,13 @@ void Draw_Simplex_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(s->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, s->iEnt); if(CTX.mesh.gamma_sup) { tmp = s->GammaShapeMeasure(); @@ -326,7 +334,6 @@ void Draw_Simplex_Volume(void *a, void *b) fulldraw = 1; } - double Xc = .25 * (s->V[0]->Pos.X + s->V[1]->Pos.X + s->V[2]->Pos.X + s->V[3]->Pos.X); double Yc = .25 * (s->V[0]->Pos.Y + s->V[1]->Pos.Y + @@ -340,13 +347,20 @@ void Draw_Simplex_Volume(void *a, void *b) fulldraw = 1; } - if(CTX.mesh.color_carousel && !fulldraw){ - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); + if(!fulldraw){ + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); + else + glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron); } - else if(fulldraw) - glColor4ubv((GLubyte *) & CTX.color.mesh.line); else - glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron); + glColor4ubv((GLubyte *) & CTX.color.mesh.line); // this is killing us!!! for(int i = 0; i < 4; i++) { @@ -414,8 +428,14 @@ void Draw_Simplex_Volume(void *a, void *b) double n[4], x1x0, y1y0, z1z0, x2x0, y2y0, z2z0; - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.tetrahedron); @@ -527,11 +547,17 @@ void Draw_Simplex_Surface_Common(Simplex * s, double *pX, double *pY, if(CTX.mesh.surfaces && CTX.mesh.lines) { - if(CTX.mesh.color_carousel && !CTX.mesh.solid) { + if(!CTX.mesh.solid) { if(theColor.type) - glColor4ubv((GLubyte *) & theColor.mesh); + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); else - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); + glColor4ubv((GLubyte *) & CTX.color.mesh.line); } else { glColor4ubv((GLubyte *) & CTX.color.mesh.line); @@ -564,18 +590,18 @@ void Draw_Simplex_Surface_Common(Simplex * s, double *pX, double *pY, } - if(CTX.mesh.color_carousel) { - if(theColor.type) - glColor4ubv((GLubyte *) & theColor.mesh); - else - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); - } - else { - if(K == 3) - glColor4ubv((GLubyte *) & CTX.color.mesh.triangle); - else - glColor4ubv((GLubyte *) & CTX.color.mesh.quadrangle); - } + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); + else if(K == 3) + glColor4ubv((GLubyte *) & CTX.color.mesh.triangle); + else + glColor4ubv((GLubyte *) & CTX.color.mesh.quadrangle); if(CTX.mesh.surfaces && CTX.mesh.solid) { @@ -783,12 +809,14 @@ void Draw_Simplex_Curves(void *a, void *b) Z[1] = Zc + CTX.mesh.explode * (s->VSUP[0]->Pos.Z - Zc); } - if(CTX.mesh.color_carousel) { - if(theColor.type) - glColor4ubv((GLubyte *) & theColor.mesh); - else - ColorSwitch((CTX.mesh.color_carousel == 2) ? s->iPart : s->iEnt); - } + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(s->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(s->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.line); @@ -839,10 +867,13 @@ void Draw_Hexahedron_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(h->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, h->iEnt); for(i = 0; i < 8; i++) { Xc += h->V[i]->Pos.X; @@ -858,8 +889,14 @@ void Draw_Hexahedron_Volume(void *a, void *b) return; } - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? h->iPart : h->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(h->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(h->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.hexahedron); @@ -977,10 +1014,13 @@ void Draw_Prism_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(p->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, p->iEnt); for(i = 0; i < 6; i++) { Xc += p->V[i]->Pos.X; @@ -996,8 +1036,14 @@ void Draw_Prism_Volume(void *a, void *b) return; } - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? p->iPart : p->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(p->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(p->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.prism); @@ -1096,10 +1142,13 @@ void Draw_Pyramid_Volume(void *a, void *b) if(part && !(*part)->Visible) return; - // FIXME: remove as soon as a coherent structure exists for volumes + // FIXME: move this in Draw_Mesh_Volumes as soon as a coherent + // structure exists for volumes Volume *V; if((V = FindVolume(p->iEnt, THEM)) && !(V->Visible & VIS_MESH)) return; + if(CTX.mesh.color_carousel == 2) + thePhysical = getFirstPhysical(MSH_PHYSICAL_VOLUME, p->iEnt); for(i = 0; i < 5; i++) { Xc += p->V[i]->Pos.X; @@ -1115,8 +1164,14 @@ void Draw_Pyramid_Volume(void *a, void *b) return; } - if(CTX.mesh.color_carousel) - ColorSwitch((CTX.mesh.color_carousel == 2) ? p->iPart : p->iEnt); + if(theColor.type) + glColor4ubv((GLubyte *) & theColor.mesh); + else if(CTX.mesh.color_carousel == 1) + ColorSwitch(p->iEnt); + else if(CTX.mesh.color_carousel == 2) + ColorSwitch(thePhysical); + else if(CTX.mesh.color_carousel == 3) + ColorSwitch(p->iPart); else glColor4ubv((GLubyte *) & CTX.color.mesh.pyramid); diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp index 51e266b14fd34a4ed6f698e43451f7dee6fbe985..abfc9eaaa94689cd8d84c9bbb10078b7322b4973 100644 --- a/Graphics/PostElement.cpp +++ b/Graphics/PostElement.cpp @@ -1,4 +1,4 @@ -// $Id: PostElement.cpp,v 1.22 2004-02-20 17:58:00 geuzaine Exp $ +// $Id: PostElement.cpp,v 1.23 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -21,7 +21,7 @@ // // Contributor(s): // Laurent Stainier -// +// Jean-Luc Flejou // OK, I understand why the Cut2D stuff does not work correctly with a // TWO_FACE light: the normal has too be coherent with the vertex @@ -818,6 +818,10 @@ void Draw_VectorElement(int type, Post_View * View, if(ts) { //draw trajectory if(View->LineType) { double dx2, dy2, dz2, XX[2], YY[2], ZZ[2]; + // warning, warning... + Raise[0][1] = Raise[0][0]; + Raise[1][1] = Raise[1][0]; + Raise[2][1] = Raise[2][0]; for(j = 0; j < ts; j++) { dx = V[3 * (ts - j)]; dy = V[3 * (ts - j) + 1]; @@ -829,11 +833,11 @@ void Draw_VectorElement(int type, Post_View * View, // not perfect... Palette2(View, ValMin, ValMax, dd); XX[0] = X[0] + fact * dx; - XX[1] = X[1] + fact * dx2; + XX[1] = X[0] + fact * dx2; YY[0] = Y[0] + fact * dy; - YY[1] = Y[1] + fact * dy2; + YY[1] = Y[0] + fact * dy2; ZZ[0] = Z[0] + fact * dz; - ZZ[1] = Z[1] + fact * dz2; + ZZ[1] = Z[0] + fact * dz2; Draw_Line(View->LineType, View->LineWidth, XX, YY, ZZ, Raise, View->Light); } } @@ -1041,10 +1045,12 @@ void Draw_TensorElement(int type, Post_View * View, /// the scalar function... // View->TensorType == DRAW_POST_VONMISES + int ts = View->TimeStep; + View->TimeStep = 0; double V_VonMises[8]; for(int i = 0; i < nbnod; i++){ - V_VonMises[i] = ComputeVonMises(V + 9*i); + V_VonMises[i] = ComputeVonMises(V + 9*(i + nbnod * ts)); } switch (type) { @@ -1073,6 +1079,8 @@ void Draw_TensorElement(int type, Post_View * View, Draw_ScalarPyramid(View, 0, ValMin, ValMax, Raise, X, Y, Z, V_VonMises); break; } + + View->TimeStep = ts; } #define ARGS Post_View *View, \ @@ -1120,4 +1128,3 @@ void Draw_TensorPyramid(ARGS) } #undef ARGS - diff --git a/Makefile b/Makefile index fedb43cc0d4f9bca3357fae0f06ffc96bef883a9..043c09530fa6af5b90c074348cbe8a578ef01dc4 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.321 2004-02-20 17:57:58 geuzaine Exp $ +# $Id: Makefile,v 1.322 2004-02-28 00:48:47 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -145,6 +145,10 @@ tags: gtags htags +etags: + etags `find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h"\ + -o -name "*.y" -o -name "*.l" \)` + tgz: if (test -f ${GMSH_ARCHIVE}.tar.gz); then \ mv -f ${GMSH_ARCHIVE}.tar.gz ${GMSH_ARCHIVE}.tar.gz~; \ diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp index aff00fc2657f85fa088d309f2c6178bdbbd2c281..c4e3cc73ba1c71456ebabfba4d4f54e34e691914 100644 --- a/Mesh/2D_Mesh.cpp +++ b/Mesh/2D_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: 2D_Mesh.cpp,v 1.51 2004-02-07 01:40:20 geuzaine Exp $ +// $Id: 2D_Mesh.cpp,v 1.52 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -925,6 +925,11 @@ void Maillage_Surface(void *data, void *dum) return; } + if(s->Typ == MSH_SURF_STL) { + Msg(GERROR, "Remeshing of STL surfaces is not implemented (yet)"); + return; + } + THESUPPORT = s->Support; THESURFACE = s; diff --git a/Mesh/Create.cpp b/Mesh/Create.cpp index f2130dcae6e16798dbb8217708c31b70a0fd85f4..312c0e99ac5029efbddb26f9dd7760fd8daaeafc 100644 --- a/Mesh/Create.cpp +++ b/Mesh/Create.cpp @@ -1,4 +1,4 @@ -// $Id: Create.cpp,v 1.47 2004-02-07 01:40:21 geuzaine Exp $ +// $Id: Create.cpp,v 1.48 2004-02-28 00:48:49 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -28,6 +28,10 @@ #include "Context.h" #include "Create.h" +// This file contains the C-style interface for creation/deletion of +// objects. All this could be easily rewritten in C++ (and split into +// separate classes: Line, Surface, Volume, etc.). + extern Mesh *THEM; extern Context_T CTX; @@ -155,6 +159,37 @@ int compareSxF(const void *a, const void *b) return compareFace(&q->F, &w->F); } +int comparePhysicalGroup(const void *a, const void *b) +{ + PhysicalGroup *q, *w; + int cmp; + + q = *(PhysicalGroup **) a; + w = *(PhysicalGroup **) b; + cmp = q->Typ - w->Typ; + + if(cmp) + return cmp; + else + return (q->Num - w->Num); +} + +int compareMeshPartitionNum(const void *a, const void *b) +{ + MeshPartition *q, *w; + q = *(MeshPartition **) a; + w = *(MeshPartition **) b; + return (q->Num - w->Num); +} + +int compareMeshPartitionIndex(const void *a, const void *b) +{ + MeshPartition *q, *w; + q = *(MeshPartition **) a; + w = *(MeshPartition **) b; + return (q->Index - w->Index); +} + Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius, Vertex * v, Curve * c, Surface * s) { @@ -170,36 +205,20 @@ Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius, return pA; } -void Add_SurfaceLoop(int Num, List_T * intlist, Mesh * M) -{ - SurfaceLoop *pSL; - int i, j; - pSL = (SurfaceLoop *) Malloc(sizeof(SurfaceLoop)); - pSL->Surfaces = List_Create(List_Nbr(intlist), 1, sizeof(int)); - pSL->Num = Num; - THEM->MaxSurfaceLoopNum = IMAX(THEM->MaxSurfaceLoopNum, Num); - for(i = 0; i < List_Nbr(intlist); i++) { - List_Read(intlist, i, &j); - List_Add(pSL->Surfaces, &j); - } - Tree_Add(M->SurfaceLoops, &pSL); -} - -void Add_PhysicalGroup(int Num, int typ, List_T * intlist, Mesh * M) +PhysicalGroup *Create_PhysicalGroup(int Num, int typ, List_T * intlist) { - PhysicalGroup *p; - int i, j; - p = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup)); + PhysicalGroup *p = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup)); p->Entities = List_Create(List_Nbr(intlist), 1, sizeof(int)); p->Num = Num; THEM->MaxPhysicalNum = IMAX(THEM->MaxPhysicalNum, Num); p->Typ = typ; p->Visible = VIS_GEOM | VIS_MESH; - for(i = 0; i < List_Nbr(intlist); i++) { + for(int i = 0; i < List_Nbr(intlist); i++) { + int j; List_Read(intlist, i, &j); List_Add(p->Entities, &j); } - List_Add(M->PhysicalGroups, &p); + return p; } void Free_PhysicalGroup(void *a, void *b) @@ -239,35 +258,52 @@ void Free_MeshPartition(void *a, void *b) } } -int compareMeshPartitionNum(const void *a, const void *b) +EdgeLoop *Create_EdgeLoop(int Num, List_T * intlist) { - MeshPartition *q, *w; - q = *(MeshPartition **) a; - w = *(MeshPartition **) b; - return (q->Num - w->Num); + EdgeLoop *l = (EdgeLoop *) Malloc(sizeof(EdgeLoop)); + l->Curves = List_Create(List_Nbr(intlist), 1, sizeof(int)); + l->Num = Num; + THEM->MaxLineLoopNum = IMAX(THEM->MaxLineLoopNum, Num); + for(int i = 0; i < List_Nbr(intlist); i++) { + int j; + List_Read(intlist, i, &j); + List_Add(l->Curves, &j); + } + return l; } -int compareMeshPartitionIndex(const void *a, const void *b) +void Free_EdgeLoop(void *a, void *b) { - MeshPartition *q, *w; - q = *(MeshPartition **) a; - w = *(MeshPartition **) b; - return (q->Index - w->Index); + EdgeLoop *l = *(EdgeLoop **) a; + if(l) { + List_Delete(l->Curves); + Free(l); + l = NULL; + } } -void Add_EdgeLoop(int Num, List_T * intlist, Mesh * M) +SurfaceLoop *Create_SurfaceLoop(int Num, List_T * intlist) { - EdgeLoop *pEL; - int i, j; - pEL = (EdgeLoop *) Malloc(sizeof(EdgeLoop)); - pEL->Curves = List_Create(List_Nbr(intlist), 1, sizeof(int)); - pEL->Num = Num; - THEM->MaxLineLoopNum = IMAX(THEM->MaxLineLoopNum, Num); - for(i = 0; i < List_Nbr(intlist); i++) { + SurfaceLoop *l = (SurfaceLoop *) Malloc(sizeof(SurfaceLoop)); + l->Surfaces = List_Create(List_Nbr(intlist), 1, sizeof(int)); + l->Num = Num; + THEM->MaxSurfaceLoopNum = IMAX(THEM->MaxSurfaceLoopNum, Num); + for(int i = 0; i < List_Nbr(intlist); i++) { + int j; List_Read(intlist, i, &j); - List_Add(pEL->Curves, &j); + List_Add(l->Surfaces, &j); + } + return l; +} + +void Free_SurfaceLoop(void *a, void *b) +{ + SurfaceLoop *l = *(SurfaceLoop **) a; + if(l) { + List_Delete(l->Surfaces); + Free(l); + l = NULL; } - Tree_Add(M->EdgeLoops, &pEL); } void End_Curve(Curve * c) @@ -279,8 +315,7 @@ void End_Curve(Curve * c) int i; Curve *Curve; - if(c->Typ == MSH_SEGM_CIRC || - c->Typ == MSH_SEGM_CIRC_INV || + if(c->Typ == MSH_SEGM_CIRC || c->Typ == MSH_SEGM_CIRC_INV || c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV) { Curve = c; @@ -492,7 +527,6 @@ void End_Surface(Surface * s) } - Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste, List_T * Knots, int p1, int p2, double u1, double u2) { @@ -501,20 +535,17 @@ Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste, int i, j, iPnt; double d; double matcr[4][4] = { {-0.5, 1.5, -1.5, 0.5}, - {1.0, -2.5, 2.0, -0.5}, - {-0.5, 0.0, 0.5, 0.0}, - {0.0, 1.0, 0.0, 0.0} - }; + {1.0, -2.5, 2.0, -0.5}, + {-0.5, 0.0, 0.5, 0.0}, + {0.0, 1.0, 0.0, 0.0} }; double matbs[4][4] = { {-1.0, 3, -3, 1}, - {3, -6, 3.0, 0}, - {-3, 0.0, 3, 0.0}, - {1, 4, 1, 0.0} - }; + {3, -6, 3.0, 0}, + {-3, 0.0, 3, 0.0}, + {1, 4, 1, 0.0} }; double matbez[4][4] = { {-1.0, 3, -3, 1}, - {3, -6, 3.0, 0}, - {-3, 3.0, 0, 0.0}, - {1, 0, 0, 0.0} - }; + {3, -6, 3.0, 0}, + {-3, 3.0, 0, 0.0}, + {1, 0, 0, 0.0} }; pC = (Curve *) Malloc(sizeof(Curve)); pC->Dirty = 0; diff --git a/Mesh/Create.h b/Mesh/Create.h index db00214d5614d71b884fa0038cff651279bb2cf9..885f900afc2a308db0a825a9bb15e3c91f346105 100644 --- a/Mesh/Create.h +++ b/Mesh/Create.h @@ -24,56 +24,53 @@ #include "Vertex.h" #include "Mesh.h" -int compareNXE (const void *a, const void *b); -int compareFxE (const void *a, const void *b); -int compareSurfaceLoop (const void *a, const void *b); -int compareEdgeLoop (const void *a, const void *b); -int compareHexahedron (const void *a, const void *b); -int comparePrism (const void *a, const void *b); -int comparePyramid (const void *a, const void *b); -int compareQuality (const void *a, const void *b); -int compareCurve (const void *a, const void *b); -int compareAttractor (const void *a, const void *b); -int compareSurface (const void *a, const void *b); -int compareVolume (const void *a, const void *b); -int compareSxF (const void *a, const void *b); +int compareNXE(const void *a, const void *b); +int compareFxE(const void *a, const void *b); +int compareSurfaceLoop(const void *a, const void *b); +int compareEdgeLoop(const void *a, const void *b); +int compareHexahedron(const void *a, const void *b); +int comparePrism(const void *a, const void *b); +int comparePyramid(const void *a, const void *b); +int compareQuality(const void *a, const void *b); +int compareCurve(const void *a, const void *b); +int compareAttractor(const void *a, const void *b); +int compareSurface(const void *a, const void *b); +int compareVolume(const void *a, const void *b); +int compareSxF(const void *a, const void *b); int compareMeshPartitionNum(const void *a, const void *b); int compareMeshPartitionIndex(const void *a, const void *b); +int comparePhysicalGroup(const void *a, const void *b); -Attractor * Create_Attractor (int Num, double lc1, double lc2, double Radius, - Vertex * v, Curve * c, Surface * s); +Attractor *Create_Attractor(int Num, double lc1, double lc2, double Radius, + Vertex * v, Curve * c, Surface * s); +PhysicalGroup *Create_PhysicalGroup(int Num, int typ, List_T * intlist); +Curve *Create_Curve(int Num, int Typ, int Order, List_T * Liste, + List_T * Knots, int p1, int p2, double u1, double u2); +Surface *Create_Surface(int Num, int Typ); +Volume *Create_Volume(int Num, int Typ); +Hexahedron *Create_Hexahedron(Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4, + Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8); +Prism *Create_Prism(Vertex * v1, Vertex * v2, Vertex * v3, + Vertex * v4, Vertex * v5, Vertex * v6); +Pyramid *Create_Pyramid(Vertex * v1, Vertex * v2, Vertex * v3, + Vertex * v4, Vertex * v5); +EdgeLoop *Create_EdgeLoop(int Num, List_T * intlist); +SurfaceLoop *Create_SurfaceLoop(int Num, List_T * intlist); -void Add_EdgeLoop (int Num, List_T * intlist, Mesh * M); -void Add_SurfaceLoop (int Num, List_T * intlist, Mesh * M); - -void Add_PhysicalGroup (int Num, int typ, List_T * intlist, Mesh * M); void Free_PhysicalGroup(void *a, void *b); - -int Add_MeshPartition(int Num, Mesh * M); void Free_MeshPartition(void *a, void *b); - -Curve *Create_Curve (int Num, int Typ, int Order, List_T * Liste, - List_T * Knots, int p1, int p2, double u1, double u2); -void End_Curve (Curve * c); -void Free_Curve(void *a, void *b); - -Surface * Create_Surface (int Num, int Typ); -void End_Surface (Surface * s); void Free_Surface(void *a, void *b); - -Volume * Create_Volume (int Num, int Typ); void Free_Volume(void *a, void *b); - -Hexahedron * Create_Hexahedron (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4, - Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8); void Free_Hexahedron(void *a, void *b); - -Prism * Create_Prism (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * v4, Vertex * v5, Vertex * v6); void Free_Prism(void *a, void *b); - -Pyramid * Create_Pyramid (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * v4, Vertex * v5); void Free_Pyramid(void *a, void *b); +void Free_Curve(void *a, void *b); +void Free_EdgeLoop(void *a, void *b); +void Free_SurfaceLoop(void *a, void *b); + +void End_Curve(Curve * c); +void End_Surface(Surface * s); + +int Add_MeshPartition(int Num, Mesh * M); #endif diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp index 8dc8b911cc4ccfa2f2589e6317c7b564c033ef88..170ccba75a45f5fbe02b7c9280161e8a86726e32 100644 --- a/Mesh/Generator.cpp +++ b/Mesh/Generator.cpp @@ -1,4 +1,4 @@ -// $Id: Generator.cpp,v 1.48 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Generator.cpp,v 1.49 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -200,10 +200,10 @@ void Init_Mesh(Mesh * M) Tree_Action(M->Curves, Free_Curve); Tree_Delete(M->Curves); - //Tree_Action (M->SurfaceLoops, Free_SurfaceLoop); // todo + Tree_Action (M->SurfaceLoops, Free_SurfaceLoop); Tree_Delete(M->SurfaceLoops); - //Tree_Action (M->EdgeLoops, Free_EdgeLoop); // todo + Tree_Action (M->EdgeLoops, Free_EdgeLoop); Tree_Delete(M->EdgeLoops); Tree_Action(M->Surfaces, Free_Surface); diff --git a/Mesh/Interpolation.cpp b/Mesh/Interpolation.cpp index e30dbcebbb980ea0b6cd90abb571f4439b07b8a8..24e81f1cd3eeeaaf9001dd40505a90046e7532f2 100644 --- a/Mesh/Interpolation.cpp +++ b/Mesh/Interpolation.cpp @@ -1,4 +1,4 @@ -// $Id: Interpolation.cpp,v 1.23 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Interpolation.cpp,v 1.24 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -22,6 +22,7 @@ #include "Gmsh.h" #include "Numeric.h" #include "Geo.h" +#include "Nurbs.h" #include "CAD.h" #include "Mesh.h" #include "Utils.h" @@ -420,20 +421,11 @@ Vertex InterpolateSurface(Surface * s, double u, double v, S[1] = C[1]->beg; S[2] = C[2]->beg; S[3] = C[3]->beg; - V[0] = - InterpolateCurve(C[0], C[0]->ubeg + (C[0]->uend - C[0]->ubeg) * u, 0); - V[1] = - InterpolateCurve(C[1], C[1]->ubeg + (C[1]->uend - C[1]->ubeg) * v, 0); - V[2] = - InterpolateCurve(C[2], - C[2]->ubeg + (C[2]->uend - C[2]->ubeg) * (1. - u), 0); - V[3] = - InterpolateCurve(C[3], - C[3]->ubeg + (C[3]->uend - C[3]->ubeg) * (1. - v), 0); - - T = - TransfiniteQua(V[0], V[1], V[2], V[3], *S[0], *S[1], *S[2], *S[3], u, - v); + V[0] = InterpolateCurve(C[0], C[0]->ubeg + (C[0]->uend - C[0]->ubeg) * u, 0); + V[1] = InterpolateCurve(C[1], C[1]->ubeg + (C[1]->uend - C[1]->ubeg) * v, 0); + V[2] = InterpolateCurve(C[2], C[2]->ubeg + (C[2]->uend - C[2]->ubeg) * (1. - u), 0); + V[3] = InterpolateCurve(C[3], C[3]->ubeg + (C[3]->uend - C[3]->ubeg) * (1. - v), 0); + T = TransfiniteQua(V[0], V[1], V[2], V[3], *S[0], *S[1], *S[2], *S[3], u, v); if(issphere) TransfiniteSph(*S[0], *c1, &T); diff --git a/Mesh/Interpolation.h b/Mesh/Interpolation.h index e4fc22b09e97dbc623373c4fad10f2260cecb381..55e49952a7fa08a2001201cc1425360cd30562a3 100644 --- a/Mesh/Interpolation.h +++ b/Mesh/Interpolation.h @@ -48,14 +48,6 @@ void TransfiniteSph (Vertex S, Vertex center, Vertex * T); void Normal2Surface (Surface * s, double u, double v, double n[3]); -Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4], - int derivee, double t1, double t2); -Vertex InterpolateUBS (Curve * Curve, double u, int derivee); - -Vertex InterpolateNurbs (Curve * Curve, double u, int derivee); - -Vertex InterpolateNurbsSurface (Surface * s, double u, double v); - #endif diff --git a/Mesh/Makefile b/Mesh/Makefile index f6137d55b4214ad6fe01c4e1a6e6121d7368f9eb..7818243d46215f9422332e9f7b823f3e6a542f07 100644 --- a/Mesh/Makefile +++ b/Mesh/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.54 2004-02-07 01:40:22 geuzaine Exp $ +# $Id: Makefile,v 1.55 2004-02-28 00:48:50 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -251,13 +251,15 @@ Print_Mesh.o: Print_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../Mesh/Matrix.h Create.h ../Common/Context.h Read_Mesh.o: Read_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h \ + ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h ../Geo/CAD.h \ + ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ + ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h ../Mesh/Matrix.h \ 3D_Mesh.h Create.h ../Geo/MinMax.h ../Common/Context.h STL.o: STL.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h \ - Matrix.h + ../Numeric/Numeric.h Mesh.h Vertex.h Simplex.h Edge.h \ + ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/CAD.h \ + ../Geo/Geo.h Create.h Interpolation.h ../Common/Context.h SMS.o: SMS.cpp ../Common/Gmsh.h ../Common/Message.h ../DataStr/Malloc.h \ ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ ../Geo/Geo.h Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h \ @@ -282,14 +284,14 @@ Metric.o: Metric.cpp ../Common/Gmsh.h ../Common/Message.h \ ../Mesh/Matrix.h Interpolation.h Nurbs.o: Nurbs.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h + ../DataStr/avl.h ../DataStr/Tools.h Nurbs.h Vertex.h Mesh.h Simplex.h \ + Edge.h ../Geo/ExtrudeParams.h STL.h Metric.h Matrix.h ../Geo/Geo.h \ + ../Geo/GeoUtils.h Create.h ../Geo/CAD.h Interpolation.o: Interpolation.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h ../Mesh/Metric.h \ - ../Mesh/Matrix.h Utils.h Interpolation.h + Nurbs.h Vertex.h Mesh.h Simplex.h Edge.h ../Geo/ExtrudeParams.h STL.h \ + Metric.h Matrix.h ../Geo/CAD.h Utils.h Interpolation.h SecondOrder.o: SecondOrder.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 77d14351b9b530fac299a9fb9226a6f8096d6124..664b7c6a62c062585be8b148f04a4658e8928108 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -243,10 +243,11 @@ typedef struct{ double center[3]; }CylParam; -typedef struct{ +class DrawingColor{ + public: int type; unsigned int geom, mesh; -}DrawingColor; +}; struct _Surf{ int Num; diff --git a/Mesh/Nurbs.cpp b/Mesh/Nurbs.cpp index 8f6e9adb17faccb7a5471a20b1c9acc344b21aa9..fc503fcee094286ae4de8837af1bb17428b9233c 100644 --- a/Mesh/Nurbs.cpp +++ b/Mesh/Nurbs.cpp @@ -1,4 +1,4 @@ -// $Id: Nurbs.cpp,v 1.14 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Nurbs.cpp,v 1.15 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -20,7 +20,14 @@ // Please report all bugs and problems to <gmsh@geuz.org>. #include "Gmsh.h" +#include "Nurbs.h" #include "Mesh.h" +#include "Geo.h" +#include "GeoUtils.h" +#include "Create.h" +#include "CAD.h" + +extern Mesh *THEM; // Cubic spline @@ -227,3 +234,214 @@ Vertex InterpolateNurbsSurface(Surface * s, double u, double v) } return sp; } + + +// Surface creation helpers + +void CreateNurbsSurfaceSupport(int Num, int Order1, int Order2, + List_T * List, List_T * ku, List_T * kv) +{ + // This routine has been heavily modified to fit the new interfaces, + // but has not been tested since then. It's probably full of bugs + // now. + List_T *ListOfDouble_L; + List_T *ListCP = List_Create(2, 2, sizeof(int)); + + for(int j = 0; j < List_Nbr(List); j++) { + List_Read(List, j, &ListOfDouble_L); + for(int i = 0; i < List_Nbr(ListOfDouble_L); i++) { + double d; + List_Read(ListOfDouble_L, i, &d); + int N = (int)d; + List_Add(ListCP, &N); + } + } + List_Read(List, 0, &ListOfDouble_L); + int Nu = List_Nbr(List); + int Nv = List_Nbr(ListOfDouble_L); + + Surface *s = Create_Surface(Num, MSH_SURF_NURBS); + s->Support = NULL; + s->Control_Points = List_Create(4, 1, sizeof(Vertex *)); + s->OrderU = Order1; + s->OrderV = Order2; + s->Nu = Nu; + s->Nv = Nv; + for(int i = 0; i < List_Nbr(ListCP); i++) { + int j; + List_Read(ListCP, i, &j); + Vertex *v = FindPoint(j, THEM); + if(v){ + List_Add(s->Control_Points, &v); + } + else{ + Msg(GERROR, "Unknown control point %d in nurbs surface", j); + } + } + + s->ku = (float *)malloc(List_Nbr(ku) * sizeof(float)); + s->kv = (float *)malloc(List_Nbr(kv) * sizeof(float)); + + double kumin = 0., kumax = 1.; + double kvmin = 0., kvmax = 1.; + + for(int i = 0; i < List_Nbr(ku); i++) { + double d; + List_Read(ku, i, &d); + float f = (float)((d - kumin) / (kumax - kumin)); + s->ku[i] = f; + } + for(int i = 0; i < List_Nbr(kv); i++) { + double d; + List_Read(kv, i, &d); + float f = (float)((d - kvmin) / (kvmax - kvmin)); + s->kv[i] = f; + } + + List_Delete(ListCP); + + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); +} + +void CreateNurbsSurface(int Num, int Order1, int Order2, List_T * List, + List_T * ku, List_T * kv) +{ + // This routine has been heavily modified to fit the new interfaces, + // but has not been tested since then. It's probably full of bugs + // now. + + List_T *ListOfDouble_L, *Listint, *ListCP; + int Loop[4]; + + ListCP = List_Create(2, 2, sizeof(int)); + + double kumin, kumax; + List_Read(ku, 0, &kumin); + List_Read(ku, List_Nbr(ku) - 1, &kumax); + double kvmin, kvmax; + List_Read(kv, 0, &kvmin); + List_Read(kv, List_Nbr(kv) - 1, &kvmax); + for(int j = 0; j < List_Nbr(List); j++) { + List_Read(List, j, &ListOfDouble_L); + for(int i = 0; i < List_Nbr(ListOfDouble_L); i++) { + double d; + List_Read(ListOfDouble_L, i, &d); + int N = (int)d; + List_Add(ListCP, &N); + } + } + + // 1st and 3rd gen + List_Read(List, 0, &ListOfDouble_L); + Listint = ListOfDouble2ListOfInt(ListOfDouble_L); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[0])) { + } + else { + Loop[0] = NEWREG(); + Curve *c = Create_Curve(Loop[0], MSH_SEGM_NURBS, Order1, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); + for(int i = 0; i < List_Nbr(ku); i++) { + double d; + List_Read(ku, i, &d); + c->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; + } + } + List_Delete(Listint); + + List_Read(List, List_Nbr(List) - 1, &ListOfDouble_L); + Listint = ListOfDouble2ListOfInt(ListOfDouble_L); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[2])) { + } + else { + Loop[2] = NEWREG(); + Curve *c = Create_Curve(Loop[2], MSH_SEGM_NURBS, Order1, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(ku) * sizeof(float)); + for(int i = 0; i < List_Nbr(ku); i++) { + double d; + List_Read(ku, i, &d); + c->k[i] = (float)d /*((d-kumin)/(kumax-kumin)) */ ; + } + } + List_Delete(Listint); + + // 2nd and 4th gen + List_T *List1 = List_Create(List_Nbr(List), 1, sizeof(double)); + List_T *List2 = List_Create(List_Nbr(List), 1, sizeof(double)); + for(int i = 0; i < List_Nbr(List); i++) { + List_Read(List, i, &ListOfDouble_L); + List_Add(List1, List_Pointer(ListOfDouble_L, 0)); + List_Add(List2, List_Pointer(ListOfDouble_L, List_Nbr(ListOfDouble_L) - 1)); + } + + Listint = ListOfDouble2ListOfInt(List1); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[1])) { + } + else { + Loop[1] = NEWREG(); + Curve *c = Create_Curve(Loop[1], MSH_SEGM_NURBS, Order2, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); + for(int i = 0; i < List_Nbr(kv); i++) { + double d; + List_Read(kv, i, &d); + c->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; + } + } + List_Delete(Listint); + + Listint = ListOfDouble2ListOfInt(List2); + if(recognize_seg(MSH_SEGM_NURBS, Listint, &Loop[3])) { + } + else { + Loop[3] = NEWREG(); + Curve *c = Create_Curve(Loop[3], MSH_SEGM_NURBS, Order2, Listint, NULL, + -1, -1, kumin, kumax); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + c->k = (float *)malloc(4 * List_Nbr(kv) * sizeof(float)); + for(int i = 0; i < List_Nbr(kv); i++) { + double d; + List_Read(kv, i, &d); + c->k[i] = (float)d /*((d-kvmin)/(kvmax-kvmin)) */ ; + } + } + List_Delete(Listint); + List_Delete(List1); + List_Delete(List2); + + Listint = List_Create(10, 10, sizeof(int)); + int l0 = -Loop[0]; + List_Add(Listint, &l0); + List_Add(Listint, &Loop[1]); + List_Add(Listint, &Loop[2]); + int l3 = -Loop[3]; + List_Add(Listint, &l3); + + int topnew = NEWREG(); + CreateNurbsSurfaceSupport(topnew, Order1, Order2, List, ku, kv); + + int il = NEWREG(); + SurfaceLoop *l = Create_SurfaceLoop(il, Listint); + Tree_Add(THEM->SurfaceLoops, &l); + List_Reset(Listint); + List_Add(Listint, &il); + + Surface *s = Create_Surface(NEWREG(), MSH_SURF_TRIMMED); + setSurfaceGeneratrices(s, Listint); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + + List_Delete(Listint); + List_Delete(ListCP); +} + diff --git a/Mesh/Nurbs.h b/Mesh/Nurbs.h new file mode 100644 index 0000000000000000000000000000000000000000..2ec9fa7fec3cfae87ac3c8e429d0ece59ea0a6b5 --- /dev/null +++ b/Mesh/Nurbs.h @@ -0,0 +1,37 @@ +#ifndef _NURBS_H_ +#define _NURBS_H_ + +// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to <gmsh@geuz.org>. + +#include "Vertex.h" +#include "Mesh.h" +#include "List.h" + +Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4], + int derivee, double t1, double t2); +Vertex InterpolateUBS (Curve * Curve, double u, int derivee); +Vertex InterpolateNurbs (Curve * Curve, double u, int derivee); +Vertex InterpolateNurbsSurface (Surface * s, double u, double v); + +void CreateNurbsSurface (int Num, int Order1, int Order2, List_T *, List_T *, List_T *); +void CreateNurbsSurfaceSupport (int Num, int Order2, int Order1, + List_T * List, List_T *, List_T *); + +#endif diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp index 92d641ac9613a4161b61c122ef620e4a1191ecd8..4362c5c0f8a03b0beed27e207b883da0326b6328 100644 --- a/Mesh/Read_Mesh.cpp +++ b/Mesh/Read_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Read_Mesh.cpp,v 1.69 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Read_Mesh.cpp,v 1.70 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -21,6 +21,7 @@ #include "Gmsh.h" #include "Geo.h" +#include "CAD.h" #include "Mesh.h" #include "3D_Mesh.h" #include "Create.h" @@ -49,35 +50,17 @@ extern Context_T CTX; #define NB_NOD_MAX_ELM 30 -int comparePhysicalGroup(const void *a, const void *b) -{ - PhysicalGroup *q, *w; - int cmp; - - q = *(PhysicalGroup **) a; - w = *(PhysicalGroup **) b; - cmp = q->Typ - w->Typ; - - if(cmp) - return cmp; - else - return (q->Num - w->Num); -} - void addPhysicalGroup(Mesh * M, int Type, int Physical, int Elementary) { - PhysicalGroup PG, *pg, **ppg; - pg = &PG; - pg->Typ = Type; - pg->Num = Physical; - if((ppg = (PhysicalGroup **) List_PQuery(M->PhysicalGroups, &pg, - comparePhysicalGroup))) { - List_Insert((*ppg)->Entities, &Elementary, fcmp_int); + PhysicalGroup *pg; + if((pg = FindPhysicalGroup(Physical, Type, M))) { + List_Insert(pg->Entities, &Elementary, fcmp_int); } else { List_T *tmp = List_Create(1, 1, sizeof(int)); List_Add(tmp, &Elementary); - Add_PhysicalGroup(Physical, Type, tmp, M); + pg = Create_PhysicalGroup(Physical, Type, tmp); + List_Add(M->PhysicalGroups, &pg); List_Delete(tmp); } } @@ -88,46 +71,34 @@ void addPhysicalGroup(Mesh * M, int Type, int Physical, int Elementary) Curve *addElementaryCurve(Mesh * M, int Num) { - Curve C, *c, **cc; - c = &C; - c->Num = Num; - if(!(cc = (Curve **) Tree_PQuery(M->Curves, &c))) { + Curve *c; + if(!(c = FindCurve(Num, M))) { c = Create_Curve(Num, MSH_SEGM_LINE, 0, NULL, NULL, -1, -1, 0., 1.); c->Dirty = 1; Tree_Add(M->Curves, &c); } - else - c = *cc; return c; } Surface *addElementarySurface(Mesh * M, int Num) { - Surface S, *s, **ss; - s = &S; - s->Num = Num; - if(!(ss = (Surface **) Tree_PQuery(M->Surfaces, &s))) { + Surface *s; + if(!(s = FindSurface(Num, M))) { s = Create_Surface(Num, MSH_SURF_PLAN); s->Dirty = 1; Tree_Add(M->Surfaces, &s); } - else - s = *ss; return s; } Volume *addElementaryVolume(Mesh * M, int Num) { - Volume V, *v, **vv; - v = &V; - v->Num = Num; - if(!(vv = (Volume **) Tree_PQuery(M->Volumes, &v))) { + Volume *v; + if(!(v = FindVolume(Num, M))) { v = Create_Volume(Num, MSH_VOLUME); v->Dirty = 1; Tree_Add(M->Volumes, &v); } - else - v = *vv; return v; } diff --git a/Mesh/STL.cpp b/Mesh/STL.cpp index 52ae119e117b0a77f36a264f2733064bd0d947a5..851cc43e9df01e6ba9718a7af30a26fbe23c0a06 100644 --- a/Mesh/STL.cpp +++ b/Mesh/STL.cpp @@ -1,6 +1,6 @@ -// $Id: STL.cpp,v 1.11 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: STL.cpp,v 1.12 2004-02-28 00:48:50 geuzaine Exp $ // -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -16,14 +16,134 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. -// -// Please report all bugs and problems to <gmsh@geuz.org>. +// +// Please report all bugs and problems to "gmsh@geuz.org". +// +// Contributor(s): +// Nicolas Tardieu +// #include "Gmsh.h" +#include "Numeric.h" #include "Mesh.h" #include "STL.h" +#include "CAD.h" +#include "Geo.h" +#include "Create.h" +#include "Interpolation.h" +#include "Context.h" extern Mesh *THEM; +extern Context_T CTX; + +bool BelongToPhysicalEntity(int SurfaceNumber, + PhysicalGroup * CurrentPhysicalGroup) +{ + PhysicalGroup *PhysicalGroup; + int NbPhysicalGroup = List_Nbr(THEM->PhysicalGroups); + bool Belong = false; + + // Search if the current Surface belongs to the current PhysicalGroup + if(CurrentPhysicalGroup != NULL) { + if(List_Search(CurrentPhysicalGroup->Entities, &SurfaceNumber, fcmp_int)) { + Belong = true; + } + } + + // Search if the current Surface belongs to another PhysicalGroup + if(!Belong) { + for(int i = 0; i < NbPhysicalGroup; i++) { + List_Read(THEM->PhysicalGroups, i, &PhysicalGroup); + if((PhysicalGroup->Typ == MSH_PHYSICAL_SURFACE) && (!Belong)) { + if(List_Search(PhysicalGroup->Entities, &SurfaceNumber, fcmp_int)) { + Belong = true; + break; + } + } + } + } + return Belong; +} + + +void ComputeNormal(Surface * Surface, double Normal[3]) +{ + Curve *Curve1; + Curve *Curve2; + Vertex *Point11; + Vertex *Point12; + Vertex *Point21; + Vertex *Point22; + + double vec1[3]; + double vec2[3]; + + List_Read(Surface->Generatrices, 0, &Curve1); + List_Read(Surface->Generatrices, 1, &Curve2); + + Point11 = Curve1->beg; + Point12 = Curve1->end; + + Point21 = Curve2->beg; + Point22 = Curve2->end; + + vec1[0] = (Point12->Pos.X) - (Point11->Pos.X); + vec1[1] = (Point12->Pos.Y) - (Point11->Pos.Y); + vec1[2] = (Point12->Pos.Z) - (Point11->Pos.Z); + + vec2[0] = (Point22->Pos.X) - (Point21->Pos.X); + vec2[1] = (Point22->Pos.Y) - (Point21->Pos.Y); + vec2[2] = (Point22->Pos.Z) - (Point21->Pos.Z); + + prodve(vec1, vec2, Normal); + norme(Normal); +} + +void AddCorrectNeighborToPhysical(Surface * Surf1, PhysicalGroup * CurrentPhysicalGroup) +{ + + double Normal1[3], Normal2[3]; + int elem2; + List_T *pSurfaceList = Tree2List(THEM->Surfaces); + Surface *Surf2; + int NbSimplex = Tree_Nbr(THEM->Surfaces); + Curve *Curve1; + Curve *Curve2; + + ComputeNormal(Surf1, Normal1); + + // Scan all the elements to find a Surface not belonging to an existing PhysicalGroup + for(elem2 = 1; elem2 < NbSimplex; elem2++) { + List_Read(pSurfaceList, elem2, &Surf2); + if(BelongToPhysicalEntity(Surf2->Num, CurrentPhysicalGroup)) { + continue; + } + + ComputeNormal(Surf2, Normal2); + double Scal = + Normal1[0] * Normal2[0] + Normal1[1] * Normal2[1] + + Normal1[2] * Normal2[2]; + // If the normals are OK, determine if the surfaces are neighbors + if((fabs(Scal) > 0.90) && ((Surf1->Num) != (Surf2->Num))) { + bool Exit = false; + for(int i = 0; i < 3; i++) { + if(!Exit) { + for(int j = 0; j < 3; j++) { + List_Read(Surf1->Generatrices, i, &Curve1); + List_Read(Surf2->Generatrices, j, &Curve2); + // The Surface have a common Edge + if(fabs(Curve1->Num) == fabs(Curve2->Num)) { + List_Add(CurrentPhysicalGroup->Entities, &(Surf2->Num)); + AddCorrectNeighborToPhysical(Surf2, CurrentPhysicalGroup); + Exit = true; + break; + } + } + } + } + } + } +} STL_Data::STL_Data() { @@ -39,11 +159,26 @@ STL_Data::~STL_Data() void STL_Data::Add_Facet(double x1, double y1, double z1, double x2, double y2, double z2, - double x3, double y3, double z3) + double x3, double y3, double z3, + int in_geometry) { Vertex **ppv; - Vertex *v1 = Create_Vertex(Tree_Nbr(Vertices) + 1, x1, y1, z1, 1, 0); + // Calculation Of Characterisctic Length + double lc1 = + sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + + (z1 - z2) * (z1 - z2)); + double lc2 = + sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3) + + (z1 - z3) * (z1 - z3)); + double lc3 = + sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3) + + (z2 - z3) * (z2 - z3)); + double lc = DMAX(lc1, DMAX(lc2, lc3)); + + + // Importation Of Nodes + Vertex *v1 = Create_Vertex(Tree_Nbr(Vertices) + 1, x1, y1, z1, lc, 0); if((ppv = (Vertex **) Tree_PQuery(Vertices, &v1))) { delete v1; v1 = *ppv; @@ -53,7 +188,7 @@ void STL_Data::Add_Facet(double x1, double y1, double z1, Tree_Add(THEM->Points, &v1); } - Vertex *v2 = Create_Vertex(Tree_Nbr(Vertices) + 1, x2, y2, z2, 1, 0); + Vertex *v2 = Create_Vertex(Tree_Nbr(Vertices) + 1, x2, y2, z2, lc, 0); if((ppv = (Vertex **) Tree_PQuery(Vertices, &v2))) { delete v2; v2 = *ppv; @@ -63,7 +198,7 @@ void STL_Data::Add_Facet(double x1, double y1, double z1, Tree_Add(THEM->Points, &v2); } - Vertex *v3 = Create_Vertex(Tree_Nbr(Vertices) + 1, x3, y3, z3, 1, 0); + Vertex *v3 = Create_Vertex(Tree_Nbr(Vertices) + 1, x3, y3, z3, lc, 0); if((ppv = (Vertex **) Tree_PQuery(Vertices, &v3))) { delete v3; v3 = *ppv; @@ -72,8 +207,89 @@ void STL_Data::Add_Facet(double x1, double y1, double z1, Tree_Add(Vertices, &v3); Tree_Add(THEM->Points, &v3); } - Simplex *s = Create_Simplex(v1, v2, v3, NULL); - Tree_Add(Simplexes, &s); + + if(in_geometry){ + // Creation Of Each Curve + Curve *c1; + c1 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.); + c1->Control_Points = List_Create(2, 1, sizeof(Vertex *)); + List_Add(c1->Control_Points, &v1); + List_Add(c1->Control_Points, &v2); + c1->beg = v1; + c1->end = v2; + End_Curve(c1); + Tree_Add(THEM->Curves, &c1); + CreateReversedCurve(THEM, c1); + + Curve *c2; + c2 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.); + c2->Control_Points = List_Create(2, 1, sizeof(Vertex *)); + List_Add(c2->Control_Points, &v2); + List_Add(c2->Control_Points, &v3); + c2->beg = v2; + c2->end = v3; + End_Curve(c2); + Tree_Add(THEM->Curves, &c2); + CreateReversedCurve(THEM, c2); + + Curve *c3; + c3 = Create_Curve(NEWLINE(), MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0., 1.); + c3->Control_Points = List_Create(2, 1, sizeof(Vertex *)); + List_Add(c3->Control_Points, &v3); + List_Add(c3->Control_Points, &v1); + c3->beg = v3; + c3->end = v1; + End_Curve(c3); + Tree_Add(THEM->Curves, &c3); + CreateReversedCurve(THEM, c3); + + // Creation Of Each Surface + Surface *s; + s = Create_Surface(NEWSURFACE(), MSH_SURF_PLAN); + s->Method = LIBRE; + s->Generatrices = List_Create(4, 1, sizeof(Curve *)); + List_Add(s->Generatrices, &c1); + List_Add(s->Generatrices, &c2); + List_Add(s->Generatrices, &c3); + s->Support = s; + End_Surface(s); + Tree_Insert(THEM->Surfaces, &s); + } + else{ + Simplex *s = Create_Simplex(v1, v2, v3, NULL); + Tree_Add(Simplexes, &s); + } +} + +void STL_Data::ReplaceDuplicate() +{ + ReplaceAllDuplicates(THEM); +} + +void STL_Data::CreatePhysicalSurface() +{ + Surface *Surf1; + PhysicalGroup *CurrentPhysicalGroup; + int NbSimplex = Tree_Nbr(THEM->Surfaces); + List_T *pSurfaceList = Tree2List(THEM->Surfaces); + + // Scan all Simplexes to find correct Neighbors and add them to a PhysicalGroup + for(int elem1 = 0; elem1 < NbSimplex; elem1++) { + List_Read(pSurfaceList, elem1, &Surf1); + if(BelongToPhysicalEntity((Surf1->Num), NULL)) + continue; + CurrentPhysicalGroup = (PhysicalGroup *) Malloc(sizeof(PhysicalGroup)); + CurrentPhysicalGroup->Num = List_Nbr(THEM->PhysicalGroups)+1; + CurrentPhysicalGroup->Entities = List_Create(1, 1, sizeof(int)); + CurrentPhysicalGroup->Typ = MSH_PHYSICAL_SURFACE; + CurrentPhysicalGroup->Visible = VIS_GEOM | VIS_MESH; + List_Add(CurrentPhysicalGroup->Entities, &(Surf1->Num)); + AddCorrectNeighborToPhysical(Surf1, CurrentPhysicalGroup); + if(List_Nbr(CurrentPhysicalGroup->Entities) > 0) + List_Add(THEM->PhysicalGroups, &CurrentPhysicalGroup); + else + Free(CurrentPhysicalGroup); + } } void STL_Data::GetFacet(int ifac, int &v1, int &v2, int &v3) diff --git a/Mesh/STL.h b/Mesh/STL.h index 5a51a5105a36bafbeb426f2e17dc45fb4996321c..a21133d8c7534d6eca86b642da691aeea7f310cb 100644 --- a/Mesh/STL.h +++ b/Mesh/STL.h @@ -1,7 +1,7 @@ #ifndef _STL_H_ #define _STL_H_ -// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle +// Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // -// Please report all bugs and problems to <gmsh@geuz.org>. +// Please report all bugs and problems to "gmsh@geuz.org". #include "List.h" #include "Tree.h" @@ -32,28 +32,44 @@ class STL_Data List_T *LSimplexes; void Add_Facet (double x1, double y1, double z1, double x2, double y2, double z2, - double x3, double y3, double z3); + double x3, double y3, double z3, + int in_geometry=0); int GetNbFacets (){ - return Tree_Nbr (Simplexes); + return Tree_Nbr(Simplexes); } int GetNbVertices (){ return Tree_Nbr (Vertices); } void GetFacet (int iFac, int &v1, int &v2, int &v3); void GetVertex (int iVertex, double &x, double &y, double &z); + void ReplaceDuplicate (); + void CreatePhysicalSurface (); STL_Data (); ~STL_Data (); }; -// more convenient representation + +// This is a more convinient surface representation, that can be used +// as a triangulation for any given surface. See the "Triangulation +// Surface" command, which takes a surface defined by edge loops (that +// may be initially planar or anything else) and adds a triangulation +// to it in order to represent the shape of the surface. This +// triangulation may be a STL triangulation (polygons are triangle) +// but anything else is okay. Solid modelers like parasolid or proE +// are able to provide such representations. I have written a +// translator from ideas to gmsh that does that. + class POLY_rep { public : List_T *points_and_normals; // 6 * nbrPoints List_T *polygons; // first integer gives the number of point of the polygon - // then next ones are the points id's of the polygon + // then next ones are the points id's of the polygon POLY_rep (List_T *_p, List_T *_pol) : points_and_normals (_p),polygons(_pol){} - ~POLY_rep(){if(polygons)List_Delete(polygons);if(points_and_normals)List_Delete(points_and_normals);} + ~POLY_rep(){ + if(polygons)List_Delete(polygons); + if(points_and_normals)List_Delete(points_and_normals); + } }; #endif diff --git a/Mesh/Vertex.cpp b/Mesh/Vertex.cpp index 01c33af4906cbd4d2a59bf4c7241848456574288..839fbfcd39f123cd4e3b5a4399def7cd5f8ba0af 100644 --- a/Mesh/Vertex.cpp +++ b/Mesh/Vertex.cpp @@ -1,4 +1,4 @@ -// $Id: Vertex.cpp,v 1.23 2004-02-07 01:40:22 geuzaine Exp $ +// $Id: Vertex.cpp,v 1.24 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -35,6 +35,7 @@ Vertex::Vertex() Pos.X = 0.0; Pos.Y = 0.0; Pos.Z = 0.0; + w = 1.0; lc = 1.0; Mov = NULL; ListSurf = NULL; diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l index 4dd319db0530c0469c0c76be09732ae47fc2d450..2ed10db68142ce37a749ce85d3a1870a8c85599a 100644 --- a/Parser/Gmsh.l +++ b/Parser/Gmsh.l @@ -1,6 +1,5 @@ %{ - -// $Id: Gmsh.l,v 1.53 2004-02-07 01:40:23 geuzaine Exp $ +// $Id: Gmsh.l,v 1.54 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp index 86c71f9d9a18f2807a0dba02e8efbbbe3680ee47..02eaadcd530768b98de7114fa0f8ab95d4ed57a4 100644 --- a/Parser/Gmsh.tab.cpp +++ b/Parser/Gmsh.tab.cpp @@ -190,8 +190,8 @@ #define UNARYPREC 440 #line 1 "Gmsh.y" - -// $Id: Gmsh.tab.cpp,v 1.181 2004-02-07 01:40:23 geuzaine Exp $ + +// $Id: Gmsh.tab.cpp,v 1.182 2004-02-28 00:48:50 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -219,8 +219,9 @@ #include "Numeric.h" #include "Context.h" #include "Geo.h" +#include "GeoUtils.h" +#include "Nurbs.h" #include "CAD.h" -#include "DataBase.h" #include "Mesh.h" #include "Draw.h" #include "Create.h" @@ -238,39 +239,32 @@ #include "STL.h" #include "Visibility.h" +// FIXME: most tSTRING and tBIGSTRING are leaked: Free() them! + Tree_T *Symbol_T = NULL; extern Context_T CTX; extern Mesh *THEM; -static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES]; -static int yylinenoImbricatedLoopsTab[MAX_OPEN_FILES]; -static double LoopControlVariablesTab[MAX_OPEN_FILES][3]; -static char *LoopControlVariablesNameTab[MAX_OPEN_FILES]; -static char tmpstring[1024]; -static Symbol TheSymbol, *pSymbol; -static Surface *STL_Surf; -static Shape TheShape; -static int i, j, k, flag, ImbricatedLoop = 0; static int Last_NumberOfPoints = 0; -static double d, *pd; +static Surface *STL_Surf; static ExtrudeParams extr; -static char *str; -static StringXString *pStrCat; -static StringXNumber *pNumCat; -static StringXColor *pColCat; -static double (*pNumOpt)(int num, int action, double value); -static char* (*pStrOpt)(int num, int action, char *value); -static unsigned int (*pColOpt)(int num, int action, unsigned int value); static Post_View *View; +#define MAX_RECUR_LOOPS 100 +static int ImbricatedLoop = 0; +static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3]; +static char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS]; + char *strsave (char *ptr); void yyerror (char *s); void yymsg (int type, char *fmt, ...); void skip_until (char *skip, char *until); int PrintListOfDouble (char *format, List_T *list, char *buffer); -#line 82 "Gmsh.y" +#line 76 "Gmsh.y" typedef union { char *c; int i; @@ -290,11 +284,11 @@ typedef union { -#define YYFINAL 2323 +#define YYFINAL 2336 #define YYFLAG -32768 #define YYNTBASE 206 -#define YYTRANSLATE(x) ((unsigned)(x) <= 440 ? yytranslate[x] : 340) +#define YYTRANSLATE(x) ((unsigned)(x) <= 440 ? yytranslate[x] : 341) static const short yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -345,436 +339,440 @@ static const short yytranslate[] = { 0, #if YYDEBUG != 0 static const short yyprhs[] = { 0, - 0, 2, 4, 6, 9, 11, 14, 16, 38, 40, - 41, 44, 46, 48, 50, 53, 56, 59, 62, 65, - 73, 79, 97, 107, 131, 163, 179, 191, 203, 219, - 229, 243, 253, 265, 279, 289, 299, 311, 321, 333, - 343, 355, 369, 383, 395, 409, 427, 437, 449, 461, - 475, 487, 497, 498, 501, 503, 505, 507, 509, 511, - 513, 515, 517, 519, 521, 523, 525, 527, 529, 535, - 543, 550, 559, 560, 563, 566, 569, 572, 575, 578, - 581, 584, 587, 590, 593, 596, 599, 602, 605, 608, - 611, 614, 617, 620, 623, 626, 629, 632, 635, 638, - 640, 644, 645, 659, 661, 665, 666, 680, 682, 686, - 687, 701, 703, 707, 708, 728, 730, 734, 735, 755, - 757, 761, 762, 782, 784, 788, 789, 815, 817, 821, - 822, 848, 850, 854, 855, 881, 883, 887, 888, 920, - 922, 926, 927, 959, 961, 965, 966, 998, 1000, 1004, - 1005, 1037, 1039, 1043, 1044, 1076, 1078, 1082, 1083, 1115, - 1117, 1121, 1122, 1178, 1180, 1184, 1185, 1241, 1243, 1247, - 1248, 1304, 1306, 1310, 1311, 1355, 1357, 1361, 1362, 1406, - 1408, 1412, 1413, 1457, 1459, 1463, 1464, 1502, 1504, 1508, - 1509, 1547, 1549, 1553, 1554, 1592, 1594, 1598, 1599, 1613, - 1615, 1619, 1620, 1636, 1638, 1640, 1642, 1644, 1646, 1648, - 1650, 1655, 1663, 1673, 1680, 1684, 1691, 1698, 1708, 1715, - 1725, 1731, 1740, 1749, 1761, 1768, 1778, 1788, 1798, 1806, - 1815, 1828, 1835, 1843, 1851, 1864, 1872, 1880, 1890, 1908, - 1917, 1926, 1934, 1942, 1954, 1963, 1976, 1985, 2000, 2023, - 2044, 2053, 2062, 2071, 2079, 2088, 2094, 2106, 2112, 2122, - 2124, 2126, 2128, 2129, 2132, 2139, 2146, 2153, 2160, 2165, - 2172, 2177, 2184, 2188, 2194, 2198, 2202, 2207, 2212, 2216, - 2224, 2228, 2236, 2240, 2243, 2246, 2253, 2262, 2271, 2282, - 2284, 2287, 2289, 2293, 2298, 2300, 2309, 2322, 2337, 2338, - 2351, 2352, 2369, 2370, 2389, 2398, 2411, 2426, 2427, 2440, - 2441, 2458, 2459, 2478, 2487, 2500, 2515, 2516, 2529, 2530, - 2547, 2548, 2567, 2569, 2572, 2582, 2590, 2593, 2600, 2610, - 2620, 2629, 2638, 2647, 2654, 2659, 2662, 2665, 2667, 2669, - 2671, 2673, 2675, 2677, 2681, 2684, 2687, 2690, 2694, 2698, - 2702, 2706, 2710, 2714, 2718, 2722, 2726, 2730, 2734, 2738, - 2742, 2746, 2752, 2757, 2762, 2767, 2772, 2777, 2782, 2787, - 2792, 2797, 2802, 2809, 2814, 2819, 2824, 2829, 2834, 2839, - 2846, 2853, 2860, 2865, 2870, 2875, 2880, 2885, 2890, 2895, - 2900, 2905, 2910, 2915, 2922, 2927, 2932, 2937, 2942, 2947, - 2952, 2959, 2966, 2973, 2978, 2980, 2982, 2984, 2986, 2988, - 2993, 2998, 3001, 3007, 3011, 3018, 3023, 3031, 3033, 3036, - 3039, 3043, 3047, 3059, 3069, 3077, 3085, 3086, 3090, 3092, - 3096, 3097, 3101, 3105, 3107, 3111, 3113, 3115, 3119, 3124, - 3128, 3134, 3139, 3141, 3143, 3145, 3149, 3154, 3161, 3169, - 3171, 3173, 3177, 3181, 3191, 3199, 3201, 3207, 3211, 3218, - 3220, 3224, 3226, 3233, 3238, 3243, 3250, 3257 + 0, 2, 4, 6, 9, 11, 14, 15, 18, 20, + 42, 44, 45, 48, 50, 52, 54, 57, 60, 63, + 66, 69, 77, 83, 101, 111, 135, 167, 183, 195, + 207, 223, 233, 247, 257, 269, 283, 293, 303, 315, + 325, 337, 347, 359, 373, 387, 399, 413, 431, 441, + 453, 465, 479, 491, 501, 502, 505, 507, 509, 511, + 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, + 533, 539, 547, 554, 563, 564, 567, 570, 573, 576, + 579, 582, 585, 588, 591, 594, 597, 600, 603, 606, + 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, + 639, 642, 644, 648, 649, 663, 665, 669, 670, 684, + 686, 690, 691, 705, 707, 711, 712, 732, 734, 738, + 739, 759, 761, 765, 766, 786, 788, 792, 793, 819, + 821, 825, 826, 852, 854, 858, 859, 885, 887, 891, + 892, 924, 926, 930, 931, 963, 965, 969, 970, 1002, + 1004, 1008, 1009, 1041, 1043, 1047, 1048, 1080, 1082, 1086, + 1087, 1119, 1121, 1125, 1126, 1182, 1184, 1188, 1189, 1245, + 1247, 1251, 1252, 1308, 1310, 1314, 1315, 1359, 1361, 1365, + 1366, 1410, 1412, 1416, 1417, 1461, 1463, 1467, 1468, 1506, + 1508, 1512, 1513, 1551, 1553, 1557, 1558, 1596, 1598, 1602, + 1603, 1617, 1619, 1623, 1624, 1640, 1642, 1644, 1646, 1648, + 1650, 1652, 1654, 1659, 1667, 1677, 1684, 1688, 1695, 1702, + 1712, 1719, 1729, 1735, 1744, 1753, 1765, 1772, 1782, 1792, + 1802, 1810, 1819, 1832, 1839, 1847, 1855, 1863, 1873, 1881, + 1899, 1907, 1915, 1927, 1936, 1949, 1958, 1967, 1976, 1989, + 2004, 2019, 2042, 2063, 2072, 2081, 2090, 2098, 2107, 2113, + 2125, 2131, 2141, 2143, 2145, 2147, 2148, 2151, 2158, 2165, + 2172, 2179, 2184, 2191, 2196, 2203, 2207, 2213, 2217, 2221, + 2226, 2231, 2235, 2243, 2247, 2255, 2259, 2262, 2265, 2272, + 2281, 2290, 2301, 2303, 2306, 2308, 2312, 2317, 2319, 2328, + 2341, 2356, 2357, 2370, 2371, 2388, 2389, 2408, 2417, 2430, + 2445, 2446, 2459, 2460, 2477, 2478, 2497, 2506, 2519, 2534, + 2535, 2548, 2549, 2566, 2567, 2586, 2588, 2591, 2601, 2609, + 2612, 2619, 2629, 2639, 2648, 2657, 2666, 2673, 2678, 2681, + 2684, 2686, 2688, 2690, 2692, 2694, 2696, 2700, 2703, 2706, + 2709, 2713, 2717, 2721, 2725, 2729, 2733, 2737, 2741, 2745, + 2749, 2753, 2757, 2761, 2765, 2771, 2776, 2781, 2786, 2791, + 2796, 2801, 2806, 2811, 2816, 2821, 2828, 2833, 2838, 2843, + 2848, 2853, 2858, 2865, 2872, 2879, 2884, 2889, 2894, 2899, + 2904, 2909, 2914, 2919, 2924, 2929, 2934, 2941, 2946, 2951, + 2956, 2961, 2966, 2971, 2978, 2985, 2992, 2997, 2999, 3001, + 3003, 3005, 3007, 3012, 3017, 3020, 3026, 3030, 3037, 3042, + 3050, 3052, 3055, 3058, 3062, 3066, 3078, 3088, 3096, 3104, + 3105, 3109, 3111, 3115, 3116, 3120, 3124, 3126, 3130, 3132, + 3134, 3138, 3143, 3147, 3153, 3158, 3160, 3162, 3164, 3168, + 3173, 3180, 3188, 3190, 3192, 3196, 3200, 3210, 3218, 3220, + 3226, 3230, 3237, 3239, 3243, 3245, 3252, 3257, 3262, 3269, + 3276 }; -static const short yyrhs[] = { 209, - 0, 208, 0, 214, 0, 1, 6, 0, 3, 0, - 187, 3, 0, 163, 0, 166, 167, 207, 207, 207, - 168, 169, 165, 207, 207, 207, 165, 207, 207, 207, - 165, 207, 207, 207, 170, 171, 0, 164, 0, 0, - 209, 210, 0, 211, 0, 213, 0, 212, 0, 138, - 6, 0, 139, 6, 0, 141, 6, 0, 140, 6, - 0, 142, 6, 0, 143, 197, 329, 203, 5, 198, - 6, 0, 144, 197, 329, 198, 6, 0, 145, 197, - 5, 203, 5, 203, 329, 203, 329, 203, 5, 203, - 5, 203, 5, 198, 6, 0, 3, 7, 122, 197, - 5, 203, 327, 198, 6, 0, 3, 7, 121, 197, - 5, 203, 325, 203, 333, 203, 324, 203, 324, 203, - 324, 203, 333, 203, 333, 203, 324, 198, 6, 0, - 3, 7, 120, 197, 5, 203, 325, 203, 325, 203, - 331, 203, 324, 203, 324, 203, 324, 203, 324, 203, - 333, 203, 333, 203, 333, 203, 333, 203, 324, 198, - 6, 0, 3, 7, 128, 197, 5, 203, 3, 203, - 3, 203, 3, 203, 324, 198, 6, 0, 3, 7, - 132, 197, 5, 203, 3, 203, 324, 198, 6, 0, - 3, 7, 149, 197, 5, 203, 3, 203, 324, 198, - 6, 0, 3, 7, 130, 197, 5, 203, 188, 203, - 188, 203, 325, 203, 324, 198, 6, 0, 3, 7, - 133, 197, 5, 203, 333, 198, 6, 0, 3, 7, - 134, 197, 5, 203, 333, 203, 3, 203, 324, 198, - 6, 0, 3, 7, 129, 197, 5, 203, 3, 198, - 6, 0, 3, 7, 135, 197, 5, 203, 3, 203, - 325, 198, 6, 0, 3, 7, 137, 197, 5, 203, - 3, 203, 3, 203, 3, 198, 6, 0, 3, 7, - 136, 197, 5, 203, 327, 198, 6, 0, 3, 7, - 131, 197, 5, 203, 3, 198, 6, 0, 3, 7, - 41, 197, 5, 203, 3, 203, 3, 198, 6, 0, - 3, 7, 147, 197, 5, 203, 333, 198, 6, 0, - 3, 7, 148, 197, 5, 203, 333, 203, 3, 198, - 6, 0, 3, 7, 146, 197, 5, 203, 3, 198, - 6, 0, 3, 7, 150, 197, 5, 203, 3, 203, - 325, 198, 6, 0, 3, 7, 151, 197, 5, 203, - 3, 203, 325, 203, 325, 198, 6, 0, 3, 7, - 158, 197, 5, 203, 3, 203, 325, 203, 325, 198, - 6, 0, 3, 7, 152, 197, 5, 203, 3, 203, - 325, 198, 6, 0, 3, 7, 162, 197, 5, 203, - 3, 203, 325, 203, 325, 198, 6, 0, 3, 7, - 153, 197, 5, 203, 3, 203, 333, 203, 333, 203, - 324, 203, 324, 198, 6, 0, 3, 7, 154, 197, - 5, 203, 333, 198, 6, 0, 3, 7, 155, 197, - 156, 203, 324, 203, 3, 198, 6, 0, 3, 7, - 157, 197, 5, 203, 333, 203, 324, 198, 6, 0, - 3, 7, 159, 197, 5, 203, 5, 203, 3, 203, - 3, 198, 6, 0, 3, 7, 160, 197, 5, 203, - 5, 203, 3, 198, 6, 0, 3, 7, 161, 197, - 3, 203, 3, 198, 6, 0, 0, 214, 215, 0, - 217, 0, 216, 0, 299, 0, 300, 0, 301, 0, - 304, 0, 305, 0, 306, 0, 307, 0, 310, 0, - 322, 0, 323, 0, 309, 0, 308, 0, 33, 197, - 5, 198, 6, 0, 33, 197, 5, 203, 335, 198, - 6, 0, 4, 5, 204, 218, 205, 6, 0, 4, - 5, 4, 327, 204, 218, 205, 6, 0, 0, 218, - 220, 0, 218, 223, 0, 218, 226, 0, 218, 229, - 0, 218, 232, 0, 218, 235, 0, 218, 238, 0, - 218, 241, 0, 218, 244, 0, 218, 247, 0, 218, - 250, 0, 218, 253, 0, 218, 256, 0, 218, 259, - 0, 218, 262, 0, 218, 265, 0, 218, 268, 0, - 218, 271, 0, 218, 274, 0, 218, 277, 0, 218, - 280, 0, 218, 283, 0, 218, 286, 0, 218, 289, - 0, 218, 292, 0, 218, 295, 0, 325, 0, 219, - 203, 325, 0, 0, 72, 197, 325, 203, 325, 203, - 325, 198, 221, 204, 219, 205, 6, 0, 325, 0, - 222, 203, 325, 0, 0, 73, 197, 325, 203, 325, - 203, 325, 198, 224, 204, 222, 205, 6, 0, 325, - 0, 225, 203, 325, 0, 0, 74, 197, 325, 203, - 325, 203, 325, 198, 227, 204, 225, 205, 6, 0, - 325, 0, 228, 203, 325, 0, 0, 75, 197, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 230, 204, 228, 205, 6, 0, 325, 0, 231, - 203, 325, 0, 0, 76, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 233, 204, - 231, 205, 6, 0, 325, 0, 234, 203, 325, 0, - 0, 77, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 198, 236, 204, 234, 205, 6, - 0, 325, 0, 237, 203, 325, 0, 0, 78, 197, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 239, 204, - 237, 205, 6, 0, 325, 0, 240, 203, 325, 0, - 0, 79, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 242, 204, 240, 205, 6, 0, 325, 0, 243, - 203, 325, 0, 0, 80, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 198, 245, 204, 243, 205, 6, 0, - 325, 0, 246, 203, 325, 0, 0, 81, 197, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 198, 248, 204, 246, 205, 6, 0, 325, - 0, 249, 203, 325, 0, 0, 82, 197, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 198, 251, 204, 249, 205, 6, 0, 325, 0, - 252, 203, 325, 0, 0, 83, 197, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 254, 204, 252, 205, 6, 0, 325, 0, 255, - 203, 325, 0, 0, 84, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 198, - 257, 204, 255, 205, 6, 0, 325, 0, 258, 203, - 325, 0, 0, 85, 197, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 198, 260, - 204, 258, 205, 6, 0, 325, 0, 261, 203, 325, - 0, 0, 86, 197, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 263, 204, - 261, 205, 6, 0, 325, 0, 264, 203, 325, 0, - 0, 87, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 198, 266, 204, 264, 205, 6, 0, 325, 0, 267, - 203, 325, 0, 0, 88, 197, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 198, 269, 204, 267, 205, 6, 0, - 325, 0, 270, 203, 325, 0, 0, 89, 197, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 198, 272, 204, 270, - 205, 6, 0, 325, 0, 273, 203, 325, 0, 0, - 90, 197, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 198, 275, 204, - 273, 205, 6, 0, 325, 0, 276, 203, 325, 0, - 0, 91, 197, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 198, 278, - 204, 276, 205, 6, 0, 325, 0, 279, 203, 325, - 0, 0, 92, 197, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 198, - 281, 204, 279, 205, 6, 0, 325, 0, 282, 203, - 325, 0, 0, 93, 197, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 198, 284, 204, 282, 205, 6, - 0, 325, 0, 285, 203, 325, 0, 0, 94, 197, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 203, - 325, 203, 325, 203, 325, 203, 325, 203, 325, 198, - 287, 204, 285, 205, 6, 0, 325, 0, 288, 203, - 325, 0, 0, 95, 197, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 203, 325, 203, 325, - 203, 325, 203, 325, 198, 290, 204, 288, 205, 6, - 0, 339, 0, 291, 203, 339, 0, 0, 96, 197, - 325, 203, 325, 203, 325, 198, 293, 204, 291, 205, - 6, 0, 339, 0, 294, 203, 339, 0, 0, 97, - 197, 325, 203, 325, 203, 325, 203, 325, 198, 296, - 204, 294, 205, 6, 0, 7, 0, 172, 0, 173, - 0, 174, 0, 175, 0, 193, 0, 194, 0, 4, - 297, 325, 6, 0, 4, 199, 325, 200, 297, 325, - 6, 0, 4, 199, 204, 335, 205, 200, 297, 333, - 6, 0, 4, 199, 200, 7, 333, 6, 0, 4, - 298, 6, 0, 4, 199, 325, 200, 298, 6, 0, - 4, 201, 4, 7, 339, 6, 0, 4, 199, 325, - 200, 201, 4, 7, 339, 6, 0, 4, 201, 4, - 297, 325, 6, 0, 4, 199, 325, 200, 201, 4, - 297, 325, 6, 0, 4, 201, 4, 298, 6, 0, - 4, 199, 325, 200, 201, 4, 298, 6, 0, 4, - 201, 106, 201, 4, 7, 336, 6, 0, 4, 199, - 325, 200, 201, 106, 201, 4, 7, 336, 6, 0, - 4, 201, 107, 7, 337, 6, 0, 4, 199, 325, - 200, 201, 107, 7, 337, 6, 0, 58, 197, 4, - 198, 201, 4, 7, 325, 6, 0, 58, 197, 4, - 198, 201, 4, 7, 339, 6, 0, 38, 197, 325, - 198, 7, 327, 6, 0, 54, 38, 197, 325, 198, - 7, 333, 6, 0, 70, 38, 333, 7, 204, 325, - 203, 325, 203, 325, 205, 6, 0, 45, 46, 333, - 7, 325, 6, 0, 41, 197, 325, 198, 7, 333, - 6, 0, 43, 197, 325, 198, 7, 333, 6, 0, - 70, 41, 333, 7, 204, 325, 203, 325, 203, 325, - 205, 6, 0, 39, 197, 325, 198, 7, 333, 6, - 0, 40, 197, 325, 198, 7, 333, 6, 0, 39, - 197, 325, 198, 7, 333, 49, 327, 6, 0, 47, - 197, 325, 198, 7, 204, 325, 203, 325, 203, 5, - 203, 5, 203, 5, 205, 6, 0, 54, 41, 197, - 325, 198, 7, 333, 6, 0, 41, 65, 197, 325, - 198, 7, 333, 6, 0, 99, 197, 325, 198, 7, - 333, 6, 0, 100, 197, 325, 198, 7, 333, 6, - 0, 101, 197, 325, 198, 7, 333, 105, 333, 102, - 325, 6, 0, 49, 42, 197, 325, 198, 7, 333, - 6, 0, 117, 42, 197, 325, 198, 7, 204, 325, - 203, 333, 205, 6, 0, 50, 42, 197, 325, 198, - 7, 333, 6, 0, 51, 42, 197, 325, 198, 7, - 197, 325, 203, 325, 198, 333, 333, 6, 0, 101, - 42, 103, 104, 197, 325, 198, 7, 331, 105, 204, - 333, 203, 333, 205, 102, 204, 325, 203, 325, 205, - 6, 0, 101, 42, 197, 325, 198, 7, 331, 105, - 204, 333, 203, 333, 205, 102, 204, 325, 203, 325, - 205, 6, 0, 54, 42, 197, 325, 198, 7, 333, - 6, 0, 42, 65, 197, 325, 198, 7, 333, 6, - 0, 53, 44, 197, 325, 198, 7, 333, 6, 0, - 44, 197, 325, 198, 7, 333, 6, 0, 54, 44, - 197, 325, 198, 7, 333, 6, 0, 60, 327, 204, - 302, 205, 0, 59, 204, 327, 203, 327, 203, 325, - 205, 204, 302, 205, 0, 61, 327, 204, 302, 205, - 0, 62, 204, 327, 203, 325, 205, 204, 302, 205, - 0, 304, 0, 303, 0, 301, 0, 0, 303, 300, - 0, 303, 38, 204, 335, 205, 6, 0, 303, 41, - 204, 335, 205, 6, 0, 303, 42, 204, 335, 205, - 6, 0, 303, 44, 204, 335, 205, 6, 0, 64, - 204, 303, 205, 0, 64, 4, 199, 325, 200, 6, - 0, 67, 204, 303, 205, 0, 67, 4, 199, 325, - 200, 6, 0, 67, 4, 6, 0, 106, 336, 204, - 303, 205, 0, 118, 339, 6, 0, 119, 339, 6, - 0, 118, 204, 303, 205, 0, 119, 204, 303, 205, - 0, 4, 339, 6, 0, 4, 4, 199, 325, 200, - 339, 6, 0, 4, 325, 6, 0, 58, 197, 4, - 198, 201, 4, 6, 0, 98, 4, 6, 0, 113, - 6, 0, 37, 6, 0, 108, 197, 325, 8, 325, - 198, 0, 108, 197, 325, 8, 325, 8, 325, 198, - 0, 108, 4, 109, 204, 325, 8, 325, 205, 0, - 108, 4, 109, 204, 325, 8, 325, 8, 325, 205, - 0, 110, 0, 116, 4, 0, 114, 0, 115, 4, - 6, 0, 111, 197, 325, 198, 0, 112, 0, 63, - 38, 204, 325, 203, 327, 205, 6, 0, 63, 38, - 204, 325, 203, 327, 203, 327, 203, 325, 205, 6, - 0, 63, 38, 204, 325, 203, 327, 203, 327, 203, - 327, 203, 325, 205, 6, 0, 0, 63, 38, 204, - 325, 203, 327, 205, 311, 204, 320, 205, 6, 0, - 0, 63, 38, 204, 325, 203, 327, 203, 327, 203, - 325, 205, 312, 204, 320, 205, 6, 0, 0, 63, - 38, 204, 325, 203, 327, 203, 327, 203, 327, 203, - 325, 205, 313, 204, 320, 205, 6, 0, 63, 41, - 204, 325, 203, 327, 205, 6, 0, 63, 41, 204, - 325, 203, 327, 203, 327, 203, 325, 205, 6, 0, - 63, 41, 204, 325, 203, 327, 203, 327, 203, 327, - 203, 325, 205, 6, 0, 0, 63, 41, 204, 325, - 203, 327, 205, 314, 204, 320, 205, 6, 0, 0, - 63, 41, 204, 325, 203, 327, 203, 327, 203, 325, - 205, 315, 204, 320, 205, 6, 0, 0, 63, 41, - 204, 325, 203, 327, 203, 327, 203, 327, 203, 325, - 205, 316, 204, 320, 205, 6, 0, 63, 42, 204, - 325, 203, 327, 205, 6, 0, 63, 42, 204, 325, - 203, 327, 203, 327, 203, 325, 205, 6, 0, 63, - 42, 204, 325, 203, 327, 203, 327, 203, 327, 203, - 325, 205, 6, 0, 0, 63, 42, 204, 325, 203, - 327, 205, 317, 204, 320, 205, 6, 0, 0, 63, - 42, 204, 325, 203, 327, 203, 327, 203, 325, 205, - 318, 204, 320, 205, 6, 0, 0, 63, 42, 204, - 325, 203, 327, 203, 327, 203, 327, 203, 325, 205, - 319, 204, 320, 205, 6, 0, 321, 0, 320, 321, - 0, 71, 204, 333, 203, 333, 203, 333, 205, 6, - 0, 71, 204, 333, 203, 333, 205, 6, 0, 66, - 6, 0, 52, 41, 333, 7, 325, 6, 0, 52, - 41, 333, 7, 325, 55, 57, 325, 6, 0, 52, - 41, 333, 7, 325, 55, 56, 325, 6, 0, 52, - 42, 204, 325, 205, 7, 333, 6, 0, 48, 42, - 204, 325, 205, 7, 333, 6, 0, 52, 44, 204, - 325, 205, 7, 333, 6, 0, 66, 42, 333, 7, - 325, 6, 0, 66, 42, 333, 6, 0, 68, 6, - 0, 69, 6, 0, 123, 0, 124, 0, 125, 0, - 126, 0, 127, 0, 326, 0, 197, 325, 198, 0, - 187, 325, 0, 186, 325, 0, 192, 325, 0, 325, - 187, 325, 0, 325, 186, 325, 0, 325, 188, 325, - 0, 325, 189, 325, 0, 325, 190, 325, 0, 325, - 196, 325, 0, 325, 182, 325, 0, 325, 184, 325, - 0, 325, 183, 325, 0, 325, 185, 325, 0, 325, - 179, 325, 0, 325, 180, 325, 0, 325, 178, 325, - 0, 325, 177, 325, 0, 325, 176, 325, 8, 325, - 0, 12, 197, 325, 198, 0, 13, 197, 325, 198, - 0, 14, 197, 325, 198, 0, 15, 197, 325, 198, - 0, 16, 197, 325, 198, 0, 17, 197, 325, 198, - 0, 18, 197, 325, 198, 0, 19, 197, 325, 198, - 0, 20, 197, 325, 198, 0, 22, 197, 325, 198, - 0, 23, 197, 325, 203, 325, 198, 0, 24, 197, - 325, 198, 0, 25, 197, 325, 198, 0, 26, 197, - 325, 198, 0, 27, 197, 325, 198, 0, 28, 197, - 325, 198, 0, 29, 197, 325, 198, 0, 30, 197, - 325, 203, 325, 198, 0, 31, 197, 325, 203, 325, - 198, 0, 32, 197, 325, 203, 325, 198, 0, 21, - 197, 325, 198, 0, 12, 199, 325, 200, 0, 13, - 199, 325, 200, 0, 14, 199, 325, 200, 0, 15, - 199, 325, 200, 0, 16, 199, 325, 200, 0, 17, - 199, 325, 200, 0, 18, 199, 325, 200, 0, 19, - 199, 325, 200, 0, 20, 199, 325, 200, 0, 22, - 199, 325, 200, 0, 23, 199, 325, 203, 325, 200, - 0, 24, 199, 325, 200, 0, 25, 199, 325, 200, - 0, 26, 199, 325, 200, 0, 27, 199, 325, 200, - 0, 28, 199, 325, 200, 0, 29, 199, 325, 200, - 0, 30, 199, 325, 203, 325, 200, 0, 31, 199, - 325, 203, 325, 200, 0, 32, 199, 325, 203, 325, - 200, 0, 21, 199, 325, 200, 0, 3, 0, 9, - 0, 10, 0, 11, 0, 4, 0, 4, 199, 325, - 200, 0, 202, 4, 199, 200, 0, 4, 298, 0, - 4, 199, 325, 200, 298, 0, 4, 201, 4, 0, - 4, 199, 325, 200, 201, 4, 0, 4, 201, 4, - 298, 0, 4, 199, 325, 200, 201, 4, 298, 0, - 328, 0, 187, 327, 0, 186, 327, 0, 327, 187, - 327, 0, 327, 186, 327, 0, 204, 325, 203, 325, - 203, 325, 203, 325, 203, 325, 205, 0, 204, 325, - 203, 325, 203, 325, 203, 325, 205, 0, 204, 325, - 203, 325, 203, 325, 205, 0, 197, 325, 203, 325, - 203, 325, 198, 0, 0, 197, 330, 198, 0, 5, - 0, 330, 203, 5, 0, 0, 204, 332, 205, 0, - 197, 332, 198, 0, 333, 0, 332, 203, 333, 0, - 325, 0, 334, 0, 204, 335, 205, 0, 187, 204, - 335, 205, 0, 325, 8, 325, 0, 325, 8, 325, - 8, 325, 0, 38, 204, 325, 205, 0, 301, 0, - 304, 0, 310, 0, 4, 199, 200, 0, 187, 4, - 199, 200, 0, 4, 199, 204, 335, 205, 200, 0, - 187, 4, 199, 204, 335, 205, 200, 0, 325, 0, - 334, 0, 335, 203, 325, 0, 335, 203, 334, 0, - 204, 325, 203, 325, 203, 325, 203, 325, 205, 0, - 204, 325, 203, 325, 203, 325, 205, 0, 4, 0, - 4, 201, 106, 201, 4, 0, 204, 338, 205, 0, - 4, 199, 325, 200, 201, 107, 0, 336, 0, 338, - 203, 336, 0, 5, 0, 35, 197, 339, 203, 339, - 198, 0, 36, 197, 339, 198, 0, 34, 197, 339, - 198, 0, 34, 197, 339, 203, 335, 198, 0, 34, - 197, 4, 201, 4, 198, 0, 34, 197, 4, 199, - 325, 200, 201, 4, 198, 0 +static const short yyrhs[] = { 210, + 0, 208, 0, 215, 0, 1, 6, 0, 3, 0, + 187, 3, 0, 0, 208, 209, 0, 163, 0, 166, + 167, 207, 207, 207, 168, 169, 165, 207, 207, 207, + 165, 207, 207, 207, 165, 207, 207, 207, 170, 171, + 0, 164, 0, 0, 210, 211, 0, 212, 0, 214, + 0, 213, 0, 138, 6, 0, 139, 6, 0, 141, + 6, 0, 140, 6, 0, 142, 6, 0, 143, 197, + 330, 203, 5, 198, 6, 0, 144, 197, 330, 198, + 6, 0, 145, 197, 5, 203, 5, 203, 330, 203, + 330, 203, 5, 203, 5, 203, 5, 198, 6, 0, + 3, 7, 122, 197, 5, 203, 328, 198, 6, 0, + 3, 7, 121, 197, 5, 203, 326, 203, 334, 203, + 325, 203, 325, 203, 325, 203, 334, 203, 334, 203, + 325, 198, 6, 0, 3, 7, 120, 197, 5, 203, + 326, 203, 326, 203, 332, 203, 325, 203, 325, 203, + 325, 203, 325, 203, 334, 203, 334, 203, 334, 203, + 334, 203, 325, 198, 6, 0, 3, 7, 128, 197, + 5, 203, 3, 203, 3, 203, 3, 203, 325, 198, + 6, 0, 3, 7, 132, 197, 5, 203, 3, 203, + 325, 198, 6, 0, 3, 7, 149, 197, 5, 203, + 3, 203, 325, 198, 6, 0, 3, 7, 130, 197, + 5, 203, 188, 203, 188, 203, 326, 203, 325, 198, + 6, 0, 3, 7, 133, 197, 5, 203, 334, 198, + 6, 0, 3, 7, 134, 197, 5, 203, 334, 203, + 3, 203, 325, 198, 6, 0, 3, 7, 129, 197, + 5, 203, 3, 198, 6, 0, 3, 7, 135, 197, + 5, 203, 3, 203, 326, 198, 6, 0, 3, 7, + 137, 197, 5, 203, 3, 203, 3, 203, 3, 198, + 6, 0, 3, 7, 136, 197, 5, 203, 328, 198, + 6, 0, 3, 7, 131, 197, 5, 203, 3, 198, + 6, 0, 3, 7, 41, 197, 5, 203, 3, 203, + 3, 198, 6, 0, 3, 7, 147, 197, 5, 203, + 334, 198, 6, 0, 3, 7, 148, 197, 5, 203, + 334, 203, 3, 198, 6, 0, 3, 7, 146, 197, + 5, 203, 3, 198, 6, 0, 3, 7, 150, 197, + 5, 203, 3, 203, 326, 198, 6, 0, 3, 7, + 151, 197, 5, 203, 3, 203, 326, 203, 326, 198, + 6, 0, 3, 7, 158, 197, 5, 203, 3, 203, + 326, 203, 326, 198, 6, 0, 3, 7, 152, 197, + 5, 203, 3, 203, 326, 198, 6, 0, 3, 7, + 162, 197, 5, 203, 3, 203, 326, 203, 326, 198, + 6, 0, 3, 7, 153, 197, 5, 203, 3, 203, + 334, 203, 334, 203, 325, 203, 325, 198, 6, 0, + 3, 7, 154, 197, 5, 203, 334, 198, 6, 0, + 3, 7, 155, 197, 156, 203, 325, 203, 3, 198, + 6, 0, 3, 7, 157, 197, 5, 203, 334, 203, + 325, 198, 6, 0, 3, 7, 159, 197, 5, 203, + 5, 203, 3, 203, 3, 198, 6, 0, 3, 7, + 160, 197, 5, 203, 5, 203, 3, 198, 6, 0, + 3, 7, 161, 197, 3, 203, 3, 198, 6, 0, + 0, 215, 216, 0, 218, 0, 217, 0, 300, 0, + 301, 0, 302, 0, 305, 0, 306, 0, 307, 0, + 308, 0, 311, 0, 323, 0, 324, 0, 310, 0, + 309, 0, 33, 197, 5, 198, 6, 0, 33, 197, + 5, 203, 336, 198, 6, 0, 4, 5, 204, 219, + 205, 6, 0, 4, 5, 4, 328, 204, 219, 205, + 6, 0, 0, 219, 221, 0, 219, 224, 0, 219, + 227, 0, 219, 230, 0, 219, 233, 0, 219, 236, + 0, 219, 239, 0, 219, 242, 0, 219, 245, 0, + 219, 248, 0, 219, 251, 0, 219, 254, 0, 219, + 257, 0, 219, 260, 0, 219, 263, 0, 219, 266, + 0, 219, 269, 0, 219, 272, 0, 219, 275, 0, + 219, 278, 0, 219, 281, 0, 219, 284, 0, 219, + 287, 0, 219, 290, 0, 219, 293, 0, 219, 296, + 0, 326, 0, 220, 203, 326, 0, 0, 72, 197, + 326, 203, 326, 203, 326, 198, 222, 204, 220, 205, + 6, 0, 326, 0, 223, 203, 326, 0, 0, 73, + 197, 326, 203, 326, 203, 326, 198, 225, 204, 223, + 205, 6, 0, 326, 0, 226, 203, 326, 0, 0, + 74, 197, 326, 203, 326, 203, 326, 198, 228, 204, + 226, 205, 6, 0, 326, 0, 229, 203, 326, 0, + 0, 75, 197, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 231, 204, 229, 205, 6, + 0, 326, 0, 232, 203, 326, 0, 0, 76, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 234, 204, 232, 205, 6, 0, 326, 0, + 235, 203, 326, 0, 0, 77, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 198, 237, + 204, 235, 205, 6, 0, 326, 0, 238, 203, 326, + 0, 0, 78, 197, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 240, 204, 238, 205, 6, 0, 326, 0, + 241, 203, 326, 0, 0, 79, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 243, 204, 241, 205, 6, + 0, 326, 0, 244, 203, 326, 0, 0, 80, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 198, 246, 204, + 244, 205, 6, 0, 326, 0, 247, 203, 326, 0, + 0, 81, 197, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 198, 249, 204, 247, + 205, 6, 0, 326, 0, 250, 203, 326, 0, 0, + 82, 197, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 198, 252, 204, 250, 205, + 6, 0, 326, 0, 253, 203, 326, 0, 0, 83, + 197, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 255, 204, 253, 205, 6, + 0, 326, 0, 256, 203, 326, 0, 0, 84, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 198, 258, 204, 256, 205, 6, 0, + 326, 0, 259, 203, 326, 0, 0, 85, 197, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 198, 261, 204, 259, 205, 6, 0, 326, + 0, 262, 203, 326, 0, 0, 86, 197, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 264, 204, 262, 205, 6, 0, 326, 0, + 265, 203, 326, 0, 0, 87, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 198, 267, 204, 265, 205, 6, + 0, 326, 0, 268, 203, 326, 0, 0, 88, 197, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 198, 270, 204, + 268, 205, 6, 0, 326, 0, 271, 203, 326, 0, + 0, 89, 197, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 198, 273, 204, 271, 205, 6, 0, 326, 0, 274, + 203, 326, 0, 0, 90, 197, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 198, 276, 204, 274, 205, 6, 0, 326, 0, + 277, 203, 326, 0, 0, 91, 197, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 198, 279, 204, 277, 205, 6, 0, 326, + 0, 280, 203, 326, 0, 0, 92, 197, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 198, 282, 204, 280, 205, 6, 0, + 326, 0, 283, 203, 326, 0, 0, 93, 197, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 198, 285, + 204, 283, 205, 6, 0, 326, 0, 286, 203, 326, + 0, 0, 94, 197, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 203, 326, 203, 326, 203, + 326, 203, 326, 198, 288, 204, 286, 205, 6, 0, + 326, 0, 289, 203, 326, 0, 0, 95, 197, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 203, 326, + 203, 326, 203, 326, 203, 326, 203, 326, 198, 291, + 204, 289, 205, 6, 0, 340, 0, 292, 203, 340, + 0, 0, 96, 197, 326, 203, 326, 203, 326, 198, + 294, 204, 292, 205, 6, 0, 340, 0, 295, 203, + 340, 0, 0, 97, 197, 326, 203, 326, 203, 326, + 203, 326, 198, 297, 204, 295, 205, 6, 0, 7, + 0, 172, 0, 173, 0, 174, 0, 175, 0, 193, + 0, 194, 0, 4, 298, 326, 6, 0, 4, 199, + 326, 200, 298, 326, 6, 0, 4, 199, 204, 336, + 205, 200, 298, 334, 6, 0, 4, 199, 200, 7, + 334, 6, 0, 4, 299, 6, 0, 4, 199, 326, + 200, 299, 6, 0, 4, 201, 4, 7, 340, 6, + 0, 4, 199, 326, 200, 201, 4, 7, 340, 6, + 0, 4, 201, 4, 298, 326, 6, 0, 4, 199, + 326, 200, 201, 4, 298, 326, 6, 0, 4, 201, + 4, 299, 6, 0, 4, 199, 326, 200, 201, 4, + 299, 6, 0, 4, 201, 106, 201, 4, 7, 337, + 6, 0, 4, 199, 326, 200, 201, 106, 201, 4, + 7, 337, 6, 0, 4, 201, 107, 7, 338, 6, + 0, 4, 199, 326, 200, 201, 107, 7, 338, 6, + 0, 58, 197, 4, 198, 201, 4, 7, 326, 6, + 0, 58, 197, 4, 198, 201, 4, 7, 340, 6, + 0, 38, 197, 326, 198, 7, 328, 6, 0, 54, + 38, 197, 326, 198, 7, 334, 6, 0, 70, 38, + 334, 7, 204, 326, 203, 326, 203, 326, 205, 6, + 0, 45, 46, 334, 7, 326, 6, 0, 41, 197, + 326, 198, 7, 334, 6, 0, 43, 197, 326, 198, + 7, 334, 6, 0, 39, 197, 326, 198, 7, 334, + 6, 0, 39, 197, 326, 198, 7, 334, 49, 328, + 6, 0, 40, 197, 326, 198, 7, 334, 6, 0, + 47, 197, 326, 198, 7, 204, 326, 203, 326, 203, + 5, 203, 5, 203, 5, 205, 6, 0, 99, 197, + 326, 198, 7, 334, 6, 0, 100, 197, 326, 198, + 7, 334, 6, 0, 101, 197, 326, 198, 7, 334, + 105, 334, 102, 326, 6, 0, 41, 65, 197, 326, + 198, 7, 334, 6, 0, 70, 41, 334, 7, 204, + 326, 203, 326, 203, 326, 205, 6, 0, 54, 41, + 197, 326, 198, 7, 334, 6, 0, 49, 42, 197, + 326, 198, 7, 334, 6, 0, 50, 42, 197, 326, + 198, 7, 334, 6, 0, 117, 42, 197, 326, 198, + 7, 204, 326, 203, 334, 205, 6, 0, 51, 42, + 204, 326, 205, 7, 197, 326, 203, 326, 198, 334, + 334, 6, 0, 51, 42, 197, 326, 198, 7, 197, + 326, 203, 326, 198, 334, 334, 6, 0, 101, 42, + 103, 104, 197, 326, 198, 7, 332, 105, 204, 334, + 203, 334, 205, 102, 204, 326, 203, 326, 205, 6, + 0, 101, 42, 197, 326, 198, 7, 332, 105, 204, + 334, 203, 334, 205, 102, 204, 326, 203, 326, 205, + 6, 0, 42, 65, 197, 326, 198, 7, 334, 6, + 0, 54, 42, 197, 326, 198, 7, 334, 6, 0, + 53, 44, 197, 326, 198, 7, 334, 6, 0, 44, + 197, 326, 198, 7, 334, 6, 0, 54, 44, 197, + 326, 198, 7, 334, 6, 0, 60, 328, 204, 303, + 205, 0, 59, 204, 328, 203, 328, 203, 326, 205, + 204, 303, 205, 0, 61, 328, 204, 303, 205, 0, + 62, 204, 328, 203, 326, 205, 204, 303, 205, 0, + 305, 0, 304, 0, 302, 0, 0, 304, 301, 0, + 304, 38, 204, 336, 205, 6, 0, 304, 41, 204, + 336, 205, 6, 0, 304, 42, 204, 336, 205, 6, + 0, 304, 44, 204, 336, 205, 6, 0, 64, 204, + 304, 205, 0, 64, 4, 199, 326, 200, 6, 0, + 67, 204, 304, 205, 0, 67, 4, 199, 326, 200, + 6, 0, 67, 4, 6, 0, 106, 337, 204, 304, + 205, 0, 118, 340, 6, 0, 119, 340, 6, 0, + 118, 204, 304, 205, 0, 119, 204, 304, 205, 0, + 4, 340, 6, 0, 4, 4, 199, 326, 200, 340, + 6, 0, 4, 326, 6, 0, 58, 197, 4, 198, + 201, 4, 6, 0, 98, 4, 6, 0, 113, 6, + 0, 37, 6, 0, 108, 197, 326, 8, 326, 198, + 0, 108, 197, 326, 8, 326, 8, 326, 198, 0, + 108, 4, 109, 204, 326, 8, 326, 205, 0, 108, + 4, 109, 204, 326, 8, 326, 8, 326, 205, 0, + 110, 0, 116, 4, 0, 114, 0, 115, 4, 6, + 0, 111, 197, 326, 198, 0, 112, 0, 63, 38, + 204, 326, 203, 328, 205, 6, 0, 63, 38, 204, + 326, 203, 328, 203, 328, 203, 326, 205, 6, 0, + 63, 38, 204, 326, 203, 328, 203, 328, 203, 328, + 203, 326, 205, 6, 0, 0, 63, 38, 204, 326, + 203, 328, 205, 312, 204, 321, 205, 6, 0, 0, + 63, 38, 204, 326, 203, 328, 203, 328, 203, 326, + 205, 313, 204, 321, 205, 6, 0, 0, 63, 38, + 204, 326, 203, 328, 203, 328, 203, 328, 203, 326, + 205, 314, 204, 321, 205, 6, 0, 63, 41, 204, + 326, 203, 328, 205, 6, 0, 63, 41, 204, 326, + 203, 328, 203, 328, 203, 326, 205, 6, 0, 63, + 41, 204, 326, 203, 328, 203, 328, 203, 328, 203, + 326, 205, 6, 0, 0, 63, 41, 204, 326, 203, + 328, 205, 315, 204, 321, 205, 6, 0, 0, 63, + 41, 204, 326, 203, 328, 203, 328, 203, 326, 205, + 316, 204, 321, 205, 6, 0, 0, 63, 41, 204, + 326, 203, 328, 203, 328, 203, 328, 203, 326, 205, + 317, 204, 321, 205, 6, 0, 63, 42, 204, 326, + 203, 328, 205, 6, 0, 63, 42, 204, 326, 203, + 328, 203, 328, 203, 326, 205, 6, 0, 63, 42, + 204, 326, 203, 328, 203, 328, 203, 328, 203, 326, + 205, 6, 0, 0, 63, 42, 204, 326, 203, 328, + 205, 318, 204, 321, 205, 6, 0, 0, 63, 42, + 204, 326, 203, 328, 203, 328, 203, 326, 205, 319, + 204, 321, 205, 6, 0, 0, 63, 42, 204, 326, + 203, 328, 203, 328, 203, 328, 203, 326, 205, 320, + 204, 321, 205, 6, 0, 322, 0, 321, 322, 0, + 71, 204, 334, 203, 334, 203, 334, 205, 6, 0, + 71, 204, 334, 203, 334, 205, 6, 0, 66, 6, + 0, 52, 41, 334, 7, 326, 6, 0, 52, 41, + 334, 7, 326, 55, 57, 326, 6, 0, 52, 41, + 334, 7, 326, 55, 56, 326, 6, 0, 52, 42, + 204, 326, 205, 7, 334, 6, 0, 48, 42, 204, + 326, 205, 7, 334, 6, 0, 52, 44, 204, 326, + 205, 7, 334, 6, 0, 66, 42, 334, 7, 326, + 6, 0, 66, 42, 334, 6, 0, 68, 6, 0, + 69, 6, 0, 123, 0, 124, 0, 125, 0, 126, + 0, 127, 0, 327, 0, 197, 326, 198, 0, 187, + 326, 0, 186, 326, 0, 192, 326, 0, 326, 187, + 326, 0, 326, 186, 326, 0, 326, 188, 326, 0, + 326, 189, 326, 0, 326, 190, 326, 0, 326, 196, + 326, 0, 326, 182, 326, 0, 326, 184, 326, 0, + 326, 183, 326, 0, 326, 185, 326, 0, 326, 179, + 326, 0, 326, 180, 326, 0, 326, 178, 326, 0, + 326, 177, 326, 0, 326, 176, 326, 8, 326, 0, + 12, 197, 326, 198, 0, 13, 197, 326, 198, 0, + 14, 197, 326, 198, 0, 15, 197, 326, 198, 0, + 16, 197, 326, 198, 0, 17, 197, 326, 198, 0, + 18, 197, 326, 198, 0, 19, 197, 326, 198, 0, + 20, 197, 326, 198, 0, 22, 197, 326, 198, 0, + 23, 197, 326, 203, 326, 198, 0, 24, 197, 326, + 198, 0, 25, 197, 326, 198, 0, 26, 197, 326, + 198, 0, 27, 197, 326, 198, 0, 28, 197, 326, + 198, 0, 29, 197, 326, 198, 0, 30, 197, 326, + 203, 326, 198, 0, 31, 197, 326, 203, 326, 198, + 0, 32, 197, 326, 203, 326, 198, 0, 21, 197, + 326, 198, 0, 12, 199, 326, 200, 0, 13, 199, + 326, 200, 0, 14, 199, 326, 200, 0, 15, 199, + 326, 200, 0, 16, 199, 326, 200, 0, 17, 199, + 326, 200, 0, 18, 199, 326, 200, 0, 19, 199, + 326, 200, 0, 20, 199, 326, 200, 0, 22, 199, + 326, 200, 0, 23, 199, 326, 203, 326, 200, 0, + 24, 199, 326, 200, 0, 25, 199, 326, 200, 0, + 26, 199, 326, 200, 0, 27, 199, 326, 200, 0, + 28, 199, 326, 200, 0, 29, 199, 326, 200, 0, + 30, 199, 326, 203, 326, 200, 0, 31, 199, 326, + 203, 326, 200, 0, 32, 199, 326, 203, 326, 200, + 0, 21, 199, 326, 200, 0, 3, 0, 9, 0, + 10, 0, 11, 0, 4, 0, 4, 199, 326, 200, + 0, 202, 4, 199, 200, 0, 4, 299, 0, 4, + 199, 326, 200, 299, 0, 4, 201, 4, 0, 4, + 199, 326, 200, 201, 4, 0, 4, 201, 4, 299, + 0, 4, 199, 326, 200, 201, 4, 299, 0, 329, + 0, 187, 328, 0, 186, 328, 0, 328, 187, 328, + 0, 328, 186, 328, 0, 204, 326, 203, 326, 203, + 326, 203, 326, 203, 326, 205, 0, 204, 326, 203, + 326, 203, 326, 203, 326, 205, 0, 204, 326, 203, + 326, 203, 326, 205, 0, 197, 326, 203, 326, 203, + 326, 198, 0, 0, 197, 331, 198, 0, 5, 0, + 331, 203, 5, 0, 0, 204, 333, 205, 0, 197, + 333, 198, 0, 334, 0, 333, 203, 334, 0, 326, + 0, 335, 0, 204, 336, 205, 0, 187, 204, 336, + 205, 0, 326, 8, 326, 0, 326, 8, 326, 8, + 326, 0, 38, 204, 326, 205, 0, 302, 0, 305, + 0, 311, 0, 4, 199, 200, 0, 187, 4, 199, + 200, 0, 4, 199, 204, 336, 205, 200, 0, 187, + 4, 199, 204, 336, 205, 200, 0, 326, 0, 335, + 0, 336, 203, 326, 0, 336, 203, 335, 0, 204, + 326, 203, 326, 203, 326, 203, 326, 205, 0, 204, + 326, 203, 326, 203, 326, 205, 0, 4, 0, 4, + 201, 106, 201, 4, 0, 204, 339, 205, 0, 4, + 199, 326, 200, 201, 107, 0, 337, 0, 339, 203, + 337, 0, 5, 0, 35, 197, 340, 203, 340, 198, + 0, 36, 197, 340, 198, 0, 34, 197, 340, 198, + 0, 34, 197, 340, 203, 336, 198, 0, 34, 197, + 4, 201, 4, 198, 0, 34, 197, 4, 199, 326, + 200, 201, 4, 198, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 167, 169, 170, 171, 176, 178, 181, 189, 203, 213, - 215, 218, 220, 221, 224, 230, 235, 236, 237, 240, - 244, 247, 253, 258, 264, 272, 277, 281, 287, 292, - 296, 301, 305, 308, 313, 317, 321, 325, 330, 334, - 337, 341, 345, 349, 353, 357, 361, 364, 368, 371, - 375, 378, 385, 389, 395, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 412, 417, - 432, 437, 443, 448, 449, 450, 451, 452, 453, 454, + 161, 163, 164, 165, 170, 172, 175, 177, 180, 188, + 202, 219, 221, 224, 226, 227, 230, 236, 241, 242, + 243, 246, 250, 253, 259, 264, 270, 278, 283, 287, + 293, 298, 302, 307, 311, 314, 319, 323, 327, 331, + 336, 340, 343, 347, 351, 355, 359, 363, 367, 370, + 374, 377, 381, 384, 391, 393, 396, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 413, 418, 434, 439, 445, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 476, - 479, 483, 489, 495, 498, 502, 508, 514, 517, 521, - 527, 533, 536, 540, 548, 554, 557, 561, 569, 575, - 578, 582, 590, 596, 599, 603, 615, 621, 624, 628, - 640, 646, 649, 653, 665, 671, 674, 678, 691, 697, - 700, 704, 717, 723, 726, 730, 743, 749, 752, 756, - 769, 775, 778, 782, 795, 801, 804, 808, 821, 827, - 830, 834, 857, 863, 866, 870, 893, 899, 902, 906, - 929, 935, 938, 942, 960, 966, 969, 973, 991, 997, - 1000, 1004, 1022, 1028, 1031, 1035, 1052, 1058, 1061, 1065, - 1082, 1088, 1091, 1095, 1112, 1118, 1124, 1131, 1139, 1145, - 1151, 1158, 1166, 1175, 1177, 1178, 1179, 1180, 1183, 1185, - 1188, 1219, 1253, 1300, 1315, 1324, 1339, 1351, 1365, 1388, - 1412, 1424, 1438, 1450, 1464, 1484, 1506, 1516, 1530, 1541, - 1547, 1566, 1580, 1586, 1592, 1611, 1617, 1623, 1639, 1646, - 1652, 1658, 1669, 1680, 1705, 1711, 1730, 1752, 1758, 1766, - 1772, 1778, 1787, 1793, 1799, 1809, 1815, 1820, 1825, 1832, - 1834, 1835, 1838, 1843, 1847, 1861, 1875, 1889, 1907, 1918, - 1928, 1936, 1940, 1949, 1961, 1969, 1974, 1983, 1994, 2030, - 2043, 2060, 2069, 2078, 2082, 2102, 2114, 2124, 2145, 2166, - 2187, 2193, 2198, 2203, 2207, 2215, 2228, 2238, 2248, 2253, - 2263, 2268, 2278, 2283, 2295, 2312, 2329, 2346, 2351, 2368, - 2373, 2390, 2395, 2415, 2431, 2447, 2463, 2468, 2485, 2491, - 2508, 2514, 2533, 2537, 2542, 2569, 2593, 2601, 2620, 2638, - 2656, 2678, 2699, 2720, 2734, 2753, 2758, 2767, 2769, 2770, - 2771, 2772, 2775, 2777, 2778, 2779, 2780, 2781, 2782, 2783, - 2784, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, - 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, - 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, - 2820, 2821, 2822, 2824, 2825, 2826, 2827, 2828, 2829, 2830, - 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, - 2841, 2842, 2843, 2844, 2849, 2854, 2855, 2856, 2860, 2871, - 2888, 2900, 2911, 2930, 2946, 2962, 2978, 2995, 3000, 3004, - 3008, 3012, 3018, 3023, 3027, 3031, 3037, 3041, 3046, 3050, - 3055, 3059, 3063, 3069, 3075, 3082, 3088, 3092, 3096, 3106, - 3113, 3124, 3144, 3153, 3162, 3173, 3187, 3203, 3223, 3247, - 3253, 3257, 3261, 3272, 3277, 3288, 3293, 3311, 3316, 3329, - 3335, 3341, 3346, 3354, 3367, 3371, 3389, 3403 + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 478, 481, 485, 491, 497, 500, 504, 510, 516, + 519, 523, 529, 535, 538, 542, 550, 556, 559, 563, + 571, 577, 580, 584, 592, 598, 601, 605, 617, 623, + 626, 630, 642, 648, 651, 655, 667, 673, 676, 680, + 693, 699, 702, 706, 719, 725, 728, 732, 745, 751, + 754, 758, 771, 777, 780, 784, 797, 803, 806, 810, + 823, 829, 832, 836, 859, 865, 868, 872, 895, 901, + 904, 908, 931, 937, 940, 944, 962, 968, 971, 975, + 993, 999, 1002, 1006, 1024, 1030, 1033, 1037, 1054, 1060, + 1063, 1067, 1084, 1090, 1093, 1097, 1114, 1120, 1126, 1133, + 1141, 1147, 1153, 1160, 1168, 1177, 1179, 1180, 1181, 1182, + 1185, 1187, 1190, 1222, 1258, 1307, 1323, 1333, 1351, 1364, + 1380, 1405, 1431, 1444, 1460, 1473, 1489, 1508, 1530, 1539, + 1553, 1573, 1589, 1608, 1627, 1645, 1663, 1681, 1707, 1725, + 1744, 1768, 1792, 1818, 1835, 1853, 1872, 1891, 1930, 1955, + 1977, 1993, 2012, 2031, 2047, 2066, 2083, 2100, 2120, 2126, + 2131, 2136, 2143, 2145, 2146, 2149, 2154, 2158, 2174, 2190, + 2206, 2226, 2240, 2250, 2260, 2264, 2273, 2287, 2295, 2300, + 2311, 2324, 2369, 2383, 2398, 2407, 2416, 2420, 2440, 2456, + 2470, 2495, 2520, 2547, 2553, 2558, 2563, 2567, 2575, 2589, + 2600, 2611, 2616, 2627, 2632, 2643, 2648, 2661, 2679, 2697, + 2715, 2720, 2738, 2743, 2761, 2766, 2787, 2804, 2821, 2838, + 2843, 2860, 2866, 2883, 2889, 2908, 2912, 2917, 2944, 2968, + 2976, 2995, 3013, 3031, 3054, 3076, 3098, 3112, 3131, 3136, + 3145, 3147, 3148, 3149, 3150, 3153, 3155, 3156, 3157, 3158, + 3159, 3160, 3161, 3162, 3169, 3170, 3171, 3172, 3173, 3174, + 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, + 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, + 3195, 3196, 3197, 3198, 3199, 3200, 3202, 3203, 3204, 3205, + 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, + 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3227, 3232, 3233, + 3234, 3238, 3250, 3269, 3282, 3294, 3316, 3333, 3350, 3367, + 3386, 3391, 3395, 3399, 3403, 3409, 3414, 3418, 3422, 3428, + 3432, 3437, 3441, 3446, 3450, 3454, 3460, 3466, 3473, 3479, + 3483, 3487, 3498, 3505, 3516, 3536, 3546, 3556, 3568, 3584, + 3602, 3625, 3652, 3658, 3662, 3666, 3678, 3683, 3695, 3701, + 3721, 3726, 3739, 3745, 3751, 3756, 3764, 3778, 3782, 3801, + 3817 }; #endif @@ -811,12 +809,12 @@ static const char * const yytname[] = { "$","error","$undefined.","tDOUBLE", "tAFFECTMINUS","tAFFECTTIMES","tAFFECTDIVIDE","'?'","tOR","tAND","tEQUAL","tNOTEQUAL", "tAPPROXEQUAL","'<'","tLESSOREQUAL","'>'","tGREATEROREQUAL","'+'","'-'","'*'", "'/'","'%'","tCROSSPRODUCT","'!'","tPLUSPLUS","tMINUSMINUS","UNARYPREC","'^'", -"'('","')'","'['","']'","'.'","'#'","','","'{'","'}'","All","SignedDouble","STLFormatItem", -"StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem","StepDataItem", -"GeomFormatList","GeomFormat","Printf","View","Views","ScalarPointValues","ScalarPoint", -"@1","VectorPointValues","VectorPoint","@2","TensorPointValues","TensorPoint", -"@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine","@5", -"TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle", +"'('","')'","'['","']'","'.'","'#'","','","'{'","'}'","All","SignedDouble","StlFormatItems", +"StlFormatItem","StepFormatItems","StepFormatItem","StepSpecial","StepHeaderItem", +"StepDataItem","GeoFormatItems","GeoFormatItem","Printf","View","Views","ScalarPointValues", +"ScalarPoint","@1","VectorPointValues","VectorPoint","@2","TensorPointValues", +"TensorPoint","@3","ScalarLineValues","ScalarLine","@4","VectorLineValues","VectorLine", +"@5","TensorLineValues","TensorLine","@6","ScalarTriangleValues","ScalarTriangle", "@7","VectorTriangleValues","VectorTriangle","@8","TensorTriangleValues","TensorTriangle", "@9","ScalarQuadrangleValues","ScalarQuadrangle","@10","VectorQuadrangleValues", "VectorQuadrangle","@11","TensorQuadrangleValues","TensorQuadrangle","@12","ScalarTetrahedronValues", @@ -830,605 +828,609 @@ static const char * const yytname[] = { "$","error","$undefined.","tDOUBLE", "@26","NumericAffectation","NumericIncrement","Affectation","Shape","Transform", "MultipleShape","ListOfShapes","Duplicata","Delete","Colorify","Visibility", "Command","Loop","Extrude","@27","@28","@29","@30","@31","@32","@33","@34","@35", -"ExtrudeParameters","ExtrudeParameter","Transfini","Coherence","BoolExpr","FExpr", -"FExpr_Single","VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings", +"ExtrudeParameters","ExtrudeParameter","Transfinite","Coherence","BoolExpr", +"FExpr","FExpr_Single","VExpr","VExpr_Single","ListOfStrings","RecursiveListOfStrings", "ListOfListOfDouble","RecursiveListOfListOfDouble","ListOfDouble","FExpr_Multi", "RecursiveListOfDouble","ColorExpr","ListOfColor","RecursiveListOfColor","StringExpr", NULL }; #endif static const short yyr1[] = { 0, - 206, 206, 206, 206, 207, 207, 208, 208, 208, 209, - 209, 210, 210, 210, 211, 211, 211, 211, 211, 212, - 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 214, 214, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 215, 216, 216, - 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, - 219, 221, 220, 222, 222, 224, 223, 225, 225, 227, - 226, 228, 228, 230, 229, 231, 231, 233, 232, 234, - 234, 236, 235, 237, 237, 239, 238, 240, 240, 242, - 241, 243, 243, 245, 244, 246, 246, 248, 247, 249, - 249, 251, 250, 252, 252, 254, 253, 255, 255, 257, - 256, 258, 258, 260, 259, 261, 261, 263, 262, 264, - 264, 266, 265, 267, 267, 269, 268, 270, 270, 272, - 271, 273, 273, 275, 274, 276, 276, 278, 277, 279, - 279, 281, 280, 282, 282, 284, 283, 285, 285, 287, - 286, 288, 288, 290, 289, 291, 291, 293, 292, 294, - 294, 296, 295, 297, 297, 297, 297, 297, 298, 298, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 206, 206, 206, 206, 207, 207, 208, 208, 209, 209, + 209, 210, 210, 211, 211, 211, 212, 212, 212, 212, + 212, 213, 213, 213, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 215, 215, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 217, 217, 218, 218, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 220, 220, 222, 221, 223, 223, 225, 224, 226, + 226, 228, 227, 229, 229, 231, 230, 232, 232, 234, + 233, 235, 235, 237, 236, 238, 238, 240, 239, 241, + 241, 243, 242, 244, 244, 246, 245, 247, 247, 249, + 248, 250, 250, 252, 251, 253, 253, 255, 254, 256, + 256, 258, 257, 259, 259, 261, 260, 262, 262, 264, + 263, 265, 265, 267, 266, 268, 268, 270, 269, 271, + 271, 273, 272, 274, 274, 276, 275, 277, 277, 279, + 278, 280, 280, 282, 281, 283, 283, 285, 284, 286, + 286, 288, 287, 289, 289, 291, 290, 292, 292, 294, + 293, 295, 295, 297, 296, 298, 298, 298, 298, 298, + 299, 299, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 301, 301, 301, 301, 302, - 302, 302, 303, 303, 303, 303, 303, 303, 304, 304, - 305, 305, 305, 306, 307, 307, 307, 307, 308, 308, - 308, 308, 308, 308, 308, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 310, 310, 310, 311, 310, - 312, 310, 313, 310, 310, 310, 310, 314, 310, 315, - 310, 316, 310, 310, 310, 310, 317, 310, 318, 310, - 319, 310, 320, 320, 321, 321, 321, 322, 322, 322, - 322, 322, 322, 322, 322, 323, 323, 324, 324, 324, - 324, 324, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 326, 326, 326, 326, 326, 326, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 302, 302, + 302, 302, 303, 303, 303, 304, 304, 304, 304, 304, + 304, 305, 305, 306, 306, 306, 307, 308, 308, 308, + 308, 309, 309, 309, 309, 309, 309, 309, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 311, 311, + 311, 312, 311, 313, 311, 314, 311, 311, 311, 311, + 315, 311, 316, 311, 317, 311, 311, 311, 311, 318, + 311, 319, 311, 320, 311, 321, 321, 322, 322, 322, + 323, 323, 323, 323, 323, 323, 323, 323, 324, 324, + 325, 325, 325, 325, 325, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 327, 327, 327, - 327, 327, 328, 328, 328, 328, 329, 329, 330, 330, - 331, 331, 331, 332, 332, 333, 333, 333, 333, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 335, - 335, 335, 335, 336, 336, 336, 336, 337, 337, 338, - 338, 339, 339, 339, 339, 339, 339, 339 + 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, + 328, 328, 328, 328, 328, 329, 329, 329, 329, 330, + 330, 331, 331, 332, 332, 332, 333, 333, 334, 334, + 334, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 336, 336, 336, 336, 337, 337, 337, 337, + 338, 338, 339, 339, 340, 340, 340, 340, 340, 340, + 340 }; static const short yyr2[] = { 0, - 1, 1, 1, 2, 1, 2, 1, 21, 1, 0, - 2, 1, 1, 1, 2, 2, 2, 2, 2, 7, - 5, 17, 9, 23, 31, 15, 11, 11, 15, 9, - 13, 9, 11, 13, 9, 9, 11, 9, 11, 9, - 11, 13, 13, 11, 13, 17, 9, 11, 11, 13, - 11, 9, 0, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, - 6, 8, 0, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 2, 1, 2, 0, 2, 1, 21, + 1, 0, 2, 1, 1, 1, 2, 2, 2, 2, + 2, 7, 5, 17, 9, 23, 31, 15, 11, 11, + 15, 9, 13, 9, 11, 13, 9, 9, 11, 9, + 11, 9, 11, 13, 13, 11, 13, 17, 9, 11, + 11, 13, 11, 9, 0, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 5, 7, 6, 8, 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, 1, - 3, 0, 13, 1, 3, 0, 13, 1, 3, 0, - 13, 1, 3, 0, 19, 1, 3, 0, 19, 1, - 3, 0, 19, 1, 3, 0, 25, 1, 3, 0, - 25, 1, 3, 0, 25, 1, 3, 0, 31, 1, - 3, 0, 31, 1, 3, 0, 31, 1, 3, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 3, 0, 13, 1, 3, 0, 13, 1, + 3, 0, 13, 1, 3, 0, 19, 1, 3, 0, + 19, 1, 3, 0, 19, 1, 3, 0, 25, 1, + 3, 0, 25, 1, 3, 0, 25, 1, 3, 0, 31, 1, 3, 0, 31, 1, 3, 0, 31, 1, - 3, 0, 55, 1, 3, 0, 55, 1, 3, 0, - 55, 1, 3, 0, 43, 1, 3, 0, 43, 1, - 3, 0, 43, 1, 3, 0, 37, 1, 3, 0, - 37, 1, 3, 0, 37, 1, 3, 0, 13, 1, - 3, 0, 15, 1, 1, 1, 1, 1, 1, 1, - 4, 7, 9, 6, 3, 6, 6, 9, 6, 9, - 5, 8, 8, 11, 6, 9, 9, 9, 7, 8, - 12, 6, 7, 7, 12, 7, 7, 9, 17, 8, - 8, 7, 7, 11, 8, 12, 8, 14, 22, 20, - 8, 8, 8, 7, 8, 5, 11, 5, 9, 1, - 1, 1, 0, 2, 6, 6, 6, 6, 4, 6, - 4, 6, 3, 5, 3, 3, 4, 4, 3, 7, - 3, 7, 3, 2, 2, 6, 8, 8, 10, 1, - 2, 1, 3, 4, 1, 8, 12, 14, 0, 12, - 0, 16, 0, 18, 8, 12, 14, 0, 12, 0, - 16, 0, 18, 8, 12, 14, 0, 12, 0, 16, - 0, 18, 1, 2, 9, 7, 2, 6, 9, 9, - 8, 8, 8, 6, 4, 2, 2, 1, 1, 1, - 1, 1, 1, 3, 2, 2, 2, 3, 3, 3, + 3, 0, 31, 1, 3, 0, 31, 1, 3, 0, + 31, 1, 3, 0, 55, 1, 3, 0, 55, 1, + 3, 0, 55, 1, 3, 0, 43, 1, 3, 0, + 43, 1, 3, 0, 43, 1, 3, 0, 37, 1, + 3, 0, 37, 1, 3, 0, 37, 1, 3, 0, + 13, 1, 3, 0, 15, 1, 1, 1, 1, 1, + 1, 1, 4, 7, 9, 6, 3, 6, 6, 9, + 6, 9, 5, 8, 8, 11, 6, 9, 9, 9, + 7, 8, 12, 6, 7, 7, 7, 9, 7, 17, + 7, 7, 11, 8, 12, 8, 8, 8, 12, 14, + 14, 22, 20, 8, 8, 8, 7, 8, 5, 11, + 5, 9, 1, 1, 1, 0, 2, 6, 6, 6, + 6, 4, 6, 4, 6, 3, 5, 3, 3, 4, + 4, 3, 7, 3, 7, 3, 2, 2, 6, 8, + 8, 10, 1, 2, 1, 3, 4, 1, 8, 12, + 14, 0, 12, 0, 16, 0, 18, 8, 12, 14, + 0, 12, 0, 16, 0, 18, 8, 12, 14, 0, + 12, 0, 16, 0, 18, 1, 2, 9, 7, 2, + 6, 9, 9, 8, 8, 8, 6, 4, 2, 2, + 1, 1, 1, 1, 1, 1, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 6, 4, 4, 4, 4, 4, 4, 6, - 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, - 6, 6, 6, 4, 1, 1, 1, 1, 1, 4, - 4, 2, 5, 3, 6, 4, 7, 1, 2, 2, - 3, 3, 11, 9, 7, 7, 0, 3, 1, 3, - 0, 3, 3, 1, 3, 1, 1, 3, 4, 3, - 5, 4, 1, 1, 1, 3, 4, 6, 7, 1, - 1, 3, 3, 9, 7, 1, 5, 3, 6, 1, - 3, 1, 6, 4, 4, 6, 6, 9 + 3, 3, 3, 3, 5, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, + 4, 4, 6, 6, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, + 4, 4, 4, 6, 6, 6, 4, 1, 1, 1, + 1, 1, 4, 4, 2, 5, 3, 6, 4, 7, + 1, 2, 2, 3, 3, 11, 9, 7, 7, 0, + 3, 1, 3, 0, 3, 3, 1, 3, 1, 1, + 3, 4, 3, 5, 4, 1, 1, 1, 3, 4, + 6, 7, 1, 1, 3, 3, 9, 7, 1, 5, + 3, 6, 1, 3, 1, 6, 4, 4, 6, 6, + 9 }; static const short yydefact[] = { 0, - 0, 7, 9, 0, 2, 1, 3, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, - 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 1, 3, 4, 9, 11, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, + 16, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 295, 0, 292, 0, 0, 0, 0, 0, 54, - 56, 55, 57, 58, 59, 60, 61, 62, 63, 68, - 67, 64, 65, 66, 5, 0, 0, 0, 15, 16, - 18, 17, 19, 427, 427, 0, 405, 409, 462, 204, - 406, 407, 408, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, + 0, 298, 0, 295, 0, 0, 0, 0, 0, 56, + 58, 57, 59, 60, 61, 62, 63, 64, 65, 70, + 69, 66, 67, 68, 0, 0, 17, 18, 20, 19, + 21, 430, 430, 0, 408, 412, 465, 206, 409, 410, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, - 208, 0, 0, 0, 209, 210, 0, 0, 0, 0, - 0, 0, 0, 343, 0, 0, 285, 0, 0, 0, + 0, 0, 0, 0, 0, 207, 208, 209, 210, 0, + 0, 0, 211, 212, 0, 0, 0, 0, 0, 0, + 0, 346, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, - 0, 0, 0, 263, 0, 0, 263, 336, 337, 0, - 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, - 0, 0, 284, 0, 291, 0, 462, 263, 0, 263, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, + 0, 266, 0, 0, 266, 339, 340, 0, 0, 0, + 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, + 287, 0, 294, 0, 465, 266, 0, 266, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, - 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, + 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 346, 345, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 215, 281, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 443, 444, 445, 436, 0, 437, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 349, 348, 350, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, + 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, + 446, 447, 448, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 420, 419, 0, 0, 0, 0, 263, 263, - 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, - 263, 0, 0, 0, 293, 0, 0, 275, 0, 276, + 0, 0, 423, 422, 0, 0, 0, 0, 266, 266, + 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, + 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, + 266, 0, 0, 0, 296, 0, 0, 278, 0, 279, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 432, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 429, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, + 0, 453, 454, 0, 0, 206, 0, 0, 0, 0, + 0, 213, 0, 364, 363, 361, 362, 357, 359, 358, + 360, 352, 351, 353, 354, 355, 356, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, - 450, 451, 0, 0, 204, 0, 0, 0, 0, 0, - 211, 0, 361, 360, 358, 359, 354, 356, 355, 357, - 349, 348, 350, 351, 352, 353, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 425, 424, 265, 0, 264, 263, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 272, 267, + 338, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 297, 0, 280, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 422, 421, 262, 0, 261, 260, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 264, 335, 0, - 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 277, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, - 0, 0, 21, 0, 410, 416, 73, 0, 0, 0, + 0, 431, 0, 0, 23, 0, 413, 419, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 74, 75, 76, 77, 78, 79, + 0, 0, 0, 0, 0, 0, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 363, 384, 364, 385, 365, 386, 366, 387, 367, 388, - 368, 389, 369, 390, 370, 391, 371, 392, 383, 404, - 372, 393, 0, 0, 374, 395, 375, 396, 376, 397, - 377, 398, 378, 399, 379, 400, 0, 0, 0, 0, - 0, 0, 0, 0, 465, 0, 0, 464, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, - 0, 0, 411, 0, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 0, 0, 0, 0, 438, - 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, - 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 100, 101, 366, 387, 367, 388, 368, 389, 369, 390, + 370, 391, 371, 392, 372, 393, 373, 394, 374, 395, + 386, 407, 375, 396, 0, 0, 377, 398, 378, 399, + 379, 400, 380, 401, 381, 402, 382, 403, 0, 0, + 0, 0, 0, 0, 0, 0, 468, 0, 0, 467, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, + 0, 0, 0, 0, 414, 0, 71, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, + 0, 441, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 259, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 430, 0, 427, 0, - 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, + 0, 430, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 410, 214, 452, 453, 0, 0, 0, 0, - 0, 216, 217, 219, 0, 0, 460, 0, 225, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 442, 447, 0, 439, 0, 232, 0, 0, 0, 0, - 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, - 0, 0, 0, 334, 272, 0, 0, 0, 0, 0, - 431, 0, 457, 0, 0, 0, 286, 0, 0, 0, + 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 413, 216, 455, 456, 0, + 0, 0, 0, 0, 218, 219, 221, 0, 0, 463, + 0, 227, 365, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 445, 450, 0, 442, 0, 234, 0, + 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 337, 275, 0, + 0, 0, 0, 0, 434, 0, 460, 0, 0, 0, + 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 338, 339, 340, 341, 342, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 415, 280, 0, 0, + 0, 0, 0, 0, 0, 0, 341, 342, 343, 344, + 345, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 418, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, + 397, 383, 404, 384, 405, 385, 406, 0, 470, 469, + 466, 0, 206, 0, 0, 0, 0, 214, 0, 0, + 0, 461, 72, 231, 237, 0, 239, 0, 235, 0, + 236, 257, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 373, 394, 380, 401, 381, - 402, 382, 403, 0, 467, 466, 463, 0, 204, 0, - 0, 0, 0, 212, 0, 0, 0, 458, 70, 229, - 236, 0, 237, 0, 233, 0, 234, 254, 0, 0, - 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 263, 0, 299, 0, 308, 0, 317, 0, 0, 0, - 0, 0, 0, 242, 243, 0, 0, 0, 0, 0, + 285, 0, 0, 0, 0, 266, 0, 302, 0, 311, + 0, 320, 0, 0, 0, 0, 0, 0, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 417, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 430, 420, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, - 0, 223, 0, 461, 0, 241, 252, 448, 0, 0, - 332, 245, 247, 0, 0, 0, 331, 333, 253, 230, - 240, 251, 255, 0, 0, 0, 426, 0, 425, 0, - 0, 296, 0, 0, 305, 0, 0, 314, 0, 265, - 266, 267, 268, 0, 0, 431, 0, 434, 0, 0, - 0, 0, 455, 0, 288, 287, 0, 0, 0, 0, - 0, 23, 0, 32, 0, 36, 0, 30, 0, 0, - 35, 0, 40, 38, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 224, 0, 0, 225, 0, 464, 0, + 244, 254, 451, 0, 0, 335, 247, 248, 0, 0, + 0, 0, 334, 336, 256, 232, 246, 255, 258, 0, + 0, 0, 429, 0, 428, 0, 0, 299, 0, 0, + 308, 0, 0, 317, 0, 268, 269, 270, 271, 0, + 0, 434, 0, 437, 0, 0, 0, 0, 458, 0, + 291, 290, 0, 0, 0, 0, 0, 25, 0, 34, + 0, 38, 0, 32, 0, 0, 37, 0, 42, 40, + 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 213, 218, 220, 0, - 226, 0, 238, 449, 0, 0, 330, 329, 227, 228, - 263, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 433, 0, 432, 0, 0, 0, 0, 0, - 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 215, 220, 222, 0, 228, 0, 238, 452, + 0, 0, 0, 333, 332, 229, 230, 266, 0, 262, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, + 0, 435, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, - 0, 459, 0, 0, 0, 0, 424, 0, 0, 0, - 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 435, 0, 0, 454, 289, - 0, 0, 37, 0, 0, 0, 0, 27, 0, 33, - 0, 39, 28, 41, 0, 44, 0, 48, 49, 0, - 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 224, 0, 0, 257, 0, 0, 301, 0, 327, 0, - 0, 324, 310, 0, 0, 319, 0, 0, 0, 0, - 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 102, 106, 110, + 0, 0, 0, 0, 0, 0, 471, 0, 462, 0, + 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, + 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 438, 0, 0, 457, 292, 0, 0, + 39, 0, 0, 0, 0, 29, 0, 35, 0, 41, + 30, 43, 0, 46, 0, 50, 51, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 0, 0, 0, 423, 297, 0, 0, 0, - 300, 306, 0, 0, 309, 315, 0, 0, 318, 231, - 235, 0, 0, 246, 0, 0, 0, 0, 0, 31, - 34, 42, 0, 43, 50, 45, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, + 0, 0, 260, 0, 0, 304, 0, 330, 0, 0, + 327, 313, 0, 0, 322, 0, 0, 0, 0, 0, + 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 104, 108, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 303, 0, 0, 312, - 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, + 200, 0, 0, 0, 0, 426, 300, 0, 0, 0, + 303, 309, 0, 0, 312, 318, 0, 0, 321, 233, + 245, 0, 0, 249, 0, 0, 0, 0, 0, 33, + 36, 44, 0, 45, 52, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 202, 0, 248, 0, - 298, 0, 0, 0, 307, 0, 0, 316, 0, 0, - 0, 0, 0, 0, 26, 29, 0, 0, 0, 100, - 0, 104, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, + 315, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 204, 0, 251, + 250, 0, 301, 0, 0, 0, 310, 0, 0, 319, + 0, 0, 0, 0, 0, 0, 28, 31, 0, 0, + 0, 102, 0, 106, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 302, 0, 0, 326, 311, - 0, 320, 0, 0, 0, 0, 0, 0, 46, 22, - 101, 103, 105, 107, 109, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 199, 0, - 200, 239, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 118, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 304, 325, 313, 322, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, + 329, 314, 0, 323, 0, 0, 0, 0, 0, 0, + 48, 24, 103, 105, 107, 109, 111, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, + 201, 0, 202, 240, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 116, 120, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 201, 203, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 307, 328, 316, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 250, 0, 0, 0, 112, 0, 116, - 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 253, 10, 0, 0, 0, + 114, 0, 118, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 24, - 113, 115, 117, 119, 121, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 130, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 252, 0, 26, 115, 117, 119, 121, 123, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 132, + 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 124, 0, 128, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 126, 0, 130, 0, + 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 125, 127, 129, 131, - 133, 135, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 138, 142, - 146, 150, 154, 158, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, + 129, 131, 133, 135, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 136, 0, 140, 0, 144, - 0, 148, 0, 152, 0, 156, 0, 0, 0, 0, + 0, 140, 144, 148, 152, 156, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 137, 139, 141, 143, - 145, 147, 149, 151, 153, 155, 157, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, + 142, 0, 146, 0, 150, 0, 154, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 186, 190, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, + 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, + 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 192, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 184, 0, 188, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 187, 189, 191, 193, 195, - 0, 0, 0, 174, 178, 182, 0, 0, 0, 0, + 0, 0, 0, 0, 186, 0, 190, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 172, 0, 176, 0, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, - 175, 177, 179, 181, 183, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 189, 191, + 193, 195, 197, 0, 0, 0, 176, 180, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 166, 170, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 164, 0, 168, 0, 0, - 0, 0, 0, 0, 161, 163, 165, 167, 169, 171, - 0, 0, 0 + 0, 0, 0, 0, 0, 174, 0, 178, 0, 182, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 175, 177, 179, 181, 183, 185, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 164, 168, 172, 0, + 0, 0, 0, 0, 0, 0, 162, 0, 166, 0, + 170, 0, 0, 0, 0, 0, 0, 163, 165, 167, + 169, 171, 173, 0, 0, 0 }; -static const short yydefgoto[] = { 2321, - 87, 5, 6, 19, 20, 21, 22, 7, 70, 71, - 72, 440, 1639, 655, 1548, 1641, 656, 1549, 1643, 657, - 1550, 1857, 658, 1804, 1859, 659, 1805, 1861, 660, 1806, - 1993, 661, 1955, 1995, 662, 1956, 1997, 663, 1957, 2105, - 664, 2075, 2107, 665, 2076, 2109, 666, 2077, 2111, 667, - 2078, 2113, 668, 2079, 2115, 669, 2080, 2303, 670, 2297, - 2305, 671, 2298, 2307, 672, 2299, 2252, 673, 2240, 2254, - 674, 2241, 2256, 675, 2242, 2201, 676, 2183, 2203, 677, - 2184, 2205, 678, 2185, 1666, 679, 1572, 1760, 680, 1668, - 141, 250, 73, 568, 342, 554, 555, 343, 77, 78, - 79, 80, 81, 344, 1203, 1518, 1622, 1206, 1523, 1626, - 1209, 1527, 1629, 1385, 1386, 83, 84, 988, 345, 144, - 363, 177, 245, 433, 1099, 1217, 1218, 347, 493, 199, - 742, 898, 145 +static const short yydefgoto[] = { 2334, + 212, 2, 9, 3, 19, 20, 21, 22, 4, 70, + 71, 72, 441, 1651, 657, 1558, 1653, 658, 1559, 1655, + 659, 1560, 1870, 660, 1816, 1872, 661, 1817, 1874, 662, + 1818, 2006, 663, 1968, 2008, 664, 1969, 2010, 665, 1970, + 2118, 666, 2088, 2120, 667, 2089, 2122, 668, 2090, 2124, + 669, 2091, 2126, 670, 2092, 2128, 671, 2093, 2316, 672, + 2310, 2318, 673, 2311, 2320, 674, 2312, 2265, 675, 2253, + 2267, 676, 2254, 2269, 677, 2255, 2214, 678, 2196, 2216, + 679, 2197, 2218, 680, 2198, 1678, 681, 1582, 1772, 682, + 1680, 139, 249, 73, 570, 341, 556, 557, 342, 77, + 78, 79, 80, 81, 343, 1209, 1528, 1634, 1212, 1533, + 1638, 1215, 1537, 1641, 1393, 1394, 83, 84, 992, 344, + 142, 363, 175, 244, 434, 1104, 1223, 1224, 346, 494, + 197, 744, 901, 143 }; -static const short yypact[] = { 2832, - 65,-32768,-32768, -123,-32768, 424, 3114,-32768, 21, 47, - 82, 110, 139, 156, 168, -49, 32, 76,-32768,-32768, --32768,-32768, 2290, 88, 205, 108, 118, 149, -44, 103, - 172, 175, 262, 184, 282, 351, 357, 417, 575, 352, - 470, 296, 302, -80, -80, 309, 384, 6, 475, 8, - 512, 518, 63, 521, 331, 362, -14, 10, 19,-32768, - 373,-32768, 565,-32768, 545, 571, 532, 15, 22,-32768, +static const short yypact[] = { 2959, + 66, 388, 459, 3225,-32768,-32768,-32768, -91,-32768, 99, + 135, 147, 173, 181, 198, -71, 31, 90,-32768,-32768, +-32768,-32768, 2301, 107, 214, 151, 171, 209, -11, 100, + 213, 234, 298, 263, 353, 428, 439, 449, 514, 463, + 241, 320, 326, -76, -76, 349, 478, 3, 546, 5, + 559, 565, 240, 592, 421, 424, -13, 8, 17,-32768, + 466,-32768, 606,-32768, 652, 653, 633, 15, 23,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 579, 21, 2942,-32768,-32768, --32768,-32768,-32768, 393, 393, 608,-32768, -132, 13,-32768, --32768,-32768,-32768, -99, -60, -8, 162, 221, 300, 349, - 358, 403, 404, 469, 479, 490, 491, 494, 510, 513, - 516, 517, 523, 526, 462, 482, 495,-32768,-32768,-32768, --32768, 2324, 2324, 2324,-32768,-32768, 2324, 972, 60, 697, - 2324, 661, 671,-32768, 698, 714,-32768, 2324, 2324, 2324, - 531, 2324, 534, 2324, 2324, 611, 2324, 553, 566, 572, - 587, 611, 558, 568, 591, 598, 599, 609, 617, 748, - -80, -80, -80, 2324, 2324, -64,-32768, 167, -80, 600, - 616, 648, 672,-32768, 611, 25,-32768,-32768,-32768, 611, - 611, 856, 2324, 2324, -84, 2324, 673, 2324, 676, 790, - 2324, 2324,-32768, 906,-32768, 732,-32768,-32768, 929,-32768, - 937,-32768, 21, 783, 812, 814, 815, 816, 817, 818, - 819, 822, 823, 824, 825, 827, 828, 834, 844, 851, - 852, 854, 855, 861, 862, 863, 864, 865, 866, 867, - 868, 869, 870, 969, 871, 849, 872, 2324, 1064,-32768, - -80,-32768, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 38, 48, 48, 209, 875, 875, - 875, 11052, 1065, 1828, 850, 307, 877, 1069, 881, 699, --32768,-32768, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, -135, 11075, - 11098, 11121, 2324, 11144, 2324, 11167, 11190, 222, 878, 1503, - 1828,-32768,-32768,-32768, 17, 1076,-32768, 11213, 2324, 2324, - 2324, 2324, 1078, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 888, -95,-32768,-32768, 3538, 3560, -80, -80, 601, 601, - -91, 2324, 2324, 2324, 2324, 2545, 405,-32768, 2324, 2579, - 1080, 1083,-32768, 11236, 11259, 985, 2324, 11282, 986, 3582, --32768, 887, 468, 11305,-32768, 2324, 2614,-32768, 2648,-32768, - 925, 1090, 1091, 1092, 1093, 1094, 1095, 1099, 1100, 1101, - 1102, 1104, 1105, 1106, 1108, 1109, 1110, 1142, 1155, 1156, - 1158, 1160, 1161, 1162, 1012, 1165, 1166, 1168, 1172, 1175, - 1174,-32768, -70, 1180, 1196, 1225, 1906, 272, 193, 2927, - 11328, 10402, 11351, 10427, 11374, 10452, 11397, 10477, 11420, 10502, - 11443, 10527, 11466, 10552, 11489, 10577, 11512, 10602, 11535, 10627, - 11558, 10652, 3604, 3626, 11581, 10677, 11604, 10702, 11627, 10727, - 11650, 10752, 11673, 10777, 11696, 10802, 3648, 3670, 3692, 3714, - 3736, 3758, 525, 86, 1026, 1033, 2324,-32768, 611, 2414, - 17,-32768, 524, 169, 48, 2324, 1226, 1253, 14, 1063, --32768, 1718, 718, 249, 554, 554, 422, 422, 422, 422, - 333, 333, 875, 875, 875, 875, 1268, 1828, 1273, 1275, - 1277, 11719, 1279, 11742, 1282, 1283, 1194, 2324, 297, 1828, - 529, 2324, 2324, 1284, 2731, 11765, 11788, 11811, 2324, 3073, - 3107, 11834, 11857, 11880, 11903, 11926, 1097, -80, 2324, 2324, --32768,-32768,-32768, 1087, 3147,-32768, 1088, 2324, 3780, 3802, - 3824, 10827, -40, -39, -20, -12,-32768,-32768,-32768, 2324, - 10852,-32768, 1096, 1098, 1288, 1289, 1107, 11949, 1294, 1111, - 2324, 2751, 2324, 2324,-32768, 11972,-32768,-32768, 1136, 1103, - 1112, 1114, 1115, 1117, 1144, 1145, 1146, 1148, 1149, 1151, - 1157, 1159, 1179, 1181, 1184, 1185, 1186, 1187, 1190, 1192, - 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205,-32768, - 1302, 1116,-32768, 1206, 85,-32768,-32768, 1113, 1164, 1167, - 1195, 1215, 1216, 1217, 1218, 1220, 1221, 1222, 1223, 1228, - 1230, 1232, 1233, 1234, 1235, 1236, 1237, 1239, 1240, 1241, - 1243, 1245, 1248, 1303,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 21, 3089,-32768,-32768,-32768,-32768, +-32768, 484, 484, 684,-32768, -103, 9,-32768,-32768,-32768, +-32768, -144, -77, 124, 175, 185, 231, 280, 362, 384, + 408, 414, 417, 420, 427, 455, 456, 477, 480, 487, + 488, 491, 494, 506, 520,-32768,-32768,-32768,-32768, 1720, + 1720, 1720,-32768,-32768, 1720, 619, 52, 707, 1720, 710, + 1008,-32768, 730, 736,-32768, 1720, 1720, 1720, 568, 1720, + 574, 1720, 1720, 423, 1720, 550, 575, 589, -152, 423, + 551, 583, 594, 617, 620, 625, 658, 799, -76, -76, + -76, 1720, 1720, -52,-32768, 120, -76, 600, 661, 673, + 675,-32768, 423, 16,-32768,-32768,-32768, 423, 423, 877, + 1720, 1720, -61, 1720, 711, 1720, 699, 807, 1720, 1720, +-32768, 922,-32768, 732,-32768,-32768, 924,-32768, 925,-32768, + 929, 21, 737, 741, 742, 744, 745, 751, 761, 762, + 763, 764, 765, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 782, 783, 784, 810, 811, 812, + 813, 814, 959, 809, 815, 816, 1720, 1011,-32768, -76, +-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 69, 58, 58, 121, 820, 820, 820, + 1324, 1010, 1841, 856, 340, 817, 1013, 824, 1087,-32768, +-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720,-32768, -47, 11121, 11144, + 11167, 1720, 11190, 1720, 11213, 11236, 270, 821, 1229, 1841, +-32768,-32768,-32768, 482, 1017,-32768, 11259, 1720, 1720, 1720, + 1720, 1720, 1019, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 830, -102,-32768,-32768, 1476, 3607, -76, -76, 486, 486, + -49, 1720, 1720, 1720, 1720, 2628, 460,-32768, 1720, 2650, + 1022, 1023,-32768, 11282, 11305, 927, 1720, 11328, 931, 3629, +-32768, 849, 1380, 11351,-32768, 1720, 2693,-32768, 2773,-32768, +-32768, 21, 1049, 1050, 1058, 1059, 1060, 1061, 1062, 1063, + 1064, 1065, 1066, 1067, 1068, 1071, 1072, 1073, 1074, 1075, + 1076, 1077, 1079, 1080, 1083, 934, 1086, 1089, 1090, 1091, + 1094, 1093,-32768, -15, 1095, 1096, 1098, 2955, 119, 159, + 3085, 11374, 10471, 11397, 10496, 11420, 10521, 11443, 10546, 11466, + 10571, 11489, 10596, 11512, 10621, 11535, 10646, 11558, 10671, 11581, + 10696, 11604, 10721, 3651, 3673, 11627, 10746, 11650, 10771, 11673, + 10796, 11696, 10821, 11719, 10846, 11742, 10871, 3695, 3717, 3739, + 3761, 3783, 3805, 386, 157, 889, 903, 1720,-32768, 423, + 2335, 482,-32768, 489, 168, 58, 1720, 1099, 1100, 14, + 909,-32768, 2423, 560, 229, 612, 612, 203, 203, 203, + 203, 233, 233, 820, 820, 820, 820, 1104, 1841, 1105, + 1107, 1108, 11765, 1109, 11788, 1111, 1112, 974, 1720, 279, + 1841, 490, 1720, 1720, 1113, 2592, 11811, 11834, 11857, 2717, + 1720, 2768, 3123, 11880, 11903, 11926, 11949, 11972, 910, -76, + 1720, 1720,-32768,-32768,-32768, 942, 2992,-32768, 943, 1720, + 3827, 3849, 3871, 10896, -129, -42, -32, -30,-32768,-32768, +-32768, 1720, 10921,-32768, 945, 946, 1145, 1146, 957, 11995, + 1148, 955, 1720, 2809, 1720, 1720,-32768, 12018,-32768,-32768, + 989, 956, 960, 961, 962, 964, 965, 966, 967, 969, + 970, 972, 976, 977, 979, 980, 986, 997, 998, 1003, + 1031, 1032, 1033, 1034, 1078, 1084, 1088, 1097, 1101, 1103, + 1110,-32768, 1153, 1070,-32768, 1114, 83,-32768,-32768, 1081, + 1092, 1102, 1106, 1115, 1117, 1118, 1119, 1122, 1123, 1124, + 1125, 1127, 1128, 1130, 1157, 1158, 1159, 1160, 1162, 1163, + 1165, 1169, 1170, 1177, 1187, 1171,-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,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 2324, 2324,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 1304,-32768, 1828, 48,-32768, 10877, 1307, - 1828, 1163, 81, 2324, 1352, 1353, 762,-32768, 1376, 1252, - 10, 1391,-32768, 2324,-32768, 127, -80, 611, 611, 1392, - 611, 1415, 611, 611,-32768, 1828, 3131, 1224, 543,-32768, - 1793, 777, 1219, 1454, 1455, 1456, 1457, 354, 1458, 1460, - 1482, 1484, 1485, 1486, 1487, 1491, 171, 3846, 3868,-32768, --32768, 3161, -80, -80, -80, 1490, 1828, 1828, 1828, 1828, - 966, 1492, 2324, 2324, 611, 611, 2324, 1493, 611, 1495, - 3890,-32768, 2352, 409, 1494, 1332, 1499, 2324, 2324, -80, - 1501, 1502, 1320, 1506, 1507, 611, 611, 1508, -80, 1535, - 1536, 611, 611, 1537, 1538, 1563, 1564, 1565, 611, 559, - 611, 1590, 1589, 1591, 1594, 1595,-32768, 1593, 393, 1598, --32768, 1599, 2964, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, - 11995, 10902, 12018, 10927, 12041, 10952, 12064, 10977, 11002, 1403, - 142, 1406, 154,-32768, 17,-32768, 148, 379, 1405, 1600, - 1004,-32768,-32768,-32768, 10, 2324,-32768, 544,-32768, 12915, - 1618, 34, 30, 1619, 611, 1620, 611, 1621, 1622, 548, --32768,-32768, 1828,-32768, 2324,-32768, 2324, 611, 611, 611, - 1434,-32768, 427, 611, 611, 611, 611, 611, 611, 611, - 496, 2324, 2324, 2324, 1426, -127, -106, -100,-32768, 555, - 556, 570, 573,-32768,-32768, 3912, 3934, 1626, 1627, 12087, - 188, 1529,-32768, 2324, 2324, 2324,-32768, 1431, 21, 1435, - 3956, 3978, -121, 1436, 1438, 1437, 1443, 1441, 1447, 1444, - 1446, -51, 1448, 1459, 1461, 1449, 1450, 1451, 1462, 1464, - 1489, 1463,-32768,-32768,-32768,-32768,-32768, 1496, 1498, 1500, - 1505, 1509, 1465, 1510,-32768, 1511, 272,-32768, 1640, 4000, - 4022, 4044, 4066, 4088, 4110, 4132, 4154, 4176, 4198, 4220, - 4242, 4264, 4286, 4308, 4330, 4352, 4374, 4396, 4418, 4440, - 4462, 4484, 4506, 4528, 4550,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1497,-32768,-32768,-32768, 611, 48, 2324, - 1644, 1651, 14,-32768, 1652, 11027, 10,-32768,-32768,-32768, --32768, -80,-32768, 1654,-32768, 1690,-32768,-32768, 1504, 574, - 12915, 4572, 1691, 1696, 1700, 2324, 2324, 2324, 1703, 1704, - 1705, 1709, 1710, 1711, 1712,-32768, 2380, 3185, 12110, 1948, - 601, -80, 1715, -80, 1716, -80, 1717, 1721, 1722, 1723, - 1725, 2324, 2324,-32768,-32768, 1726, 611, 611, 1629, 611, - 2317, 264, 12133, 2324, 21, 1729, 2324, 611, 1730, 1735, - 1733, 1552, 1736, 559, 1737, 1738, 2324, 1740, 1744, 1742, - 1743, 1747, 559, 2324, 2324, 2324, 611, 1745, 1767, 559, - 2324, 1768, 1775, 1782, 2324, 393,-32768,-32768, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 1720, 1783, 1784, 1082,-32768, 1785, - 1788,-32768, 1596,-32768, 96,-32768,-32768,-32768, 1602, 2324, --32768,-32768,-32768, 4594, 1189, 1270,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1433, 1789, 1587,-32768, 2324,-32768, 1601, - 197,-32768, 1592, 201,-32768, 1603, 203,-32768, 1604,-32768, --32768,-32768,-32768, 4616, 4638, 188, 265,-32768, 577, 1630, - 1697, 2324,-32768, 2324,-32768,-32768, 4660, 21, 1605, 4682, - 1632,-32768, 1633,-32768, 1659,-32768, 1607,-32768, 1661, 12156, --32768, 1682,-32768,-32768, 1635, 1688, 12179, 4704, 12202, 1706, --32768, 1695, 1701, 4726, 1707, 1713,-32768, 4748, 1728, 4770, - 4792, 4814, 4836, 4858, 4880, 4902, 4924, 4946, 4968, 4990, - 5012, 5034, 5056, 5078, 5100, 5122, 5144, 5166, 5188, 5210, - 5232, 5254, 5276, 5298, 5320, 1714,-32768,-32768,-32768, 10, --32768, 1693,-32768,-32768, 5342, 2324,-32768,-32768,-32768,-32768, - 601, 2550,-32768, 1533, 406, 1533, 406, 1533, 406, 2324, - 2324, 1808,-32768, 611,-32768, 611, 2324, 3215, 3250, 611, - 1665, 1792, 188, 559, 1912, 2324, 1926, 559, 1927, 1931, - 1929, 1930, 1932, 2324, 1933, 611, 1934, 1936, 2324, 1940, - 1938, 2324, 1941, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, - 1939,-32768, 1942, 12225, 1732, 2324,-32768, 1533, 1533, 2324, - 3274, 227, 1943, 1746, -36,-32768, 3298, 275, -33, 3322, - 284, -25, 3346, 3370, 1770,-32768, 1781, 1597,-32768,-32768, - 1780, 21,-32768, 1787, 1790, 1794, 5364,-32768, 1750,-32768, - 1797,-32768,-32768,-32768, 12248,-32768, 1810,-32768,-32768, 12271, - 1818,-32768, 12294, 1814, 12317, 12340, 12363, 5386, 5408, 5430, - 5452, 5474, 5496, 5518, 5540, 5562, 5584, 5606, 5628, 5650, - 5672, 5694, 5716, 5738, 5760, 5782, 5804, 5826, 12386, 5848, --32768, 1815, 611,-32768, 3394, 2271, 1980, 2324,-32768, 611, - 1981,-32768, 1982, 2324, 1985, 2013, 2324, 2015, 2016, 2017, - 611, 611,-32768, 2018, 21, 559, 559, 559, 559, 2020, - 2021, 2022, 559, 2023, 2025, 2026, 2028,-32768,-32768,-32768, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324,-32768, 2324, 2029, 611,-32768,-32768, 1831, 3418, 1833, --32768,-32768, 1834, 3442,-32768,-32768, 1835, 3466,-32768,-32768, --32768, 1837, 1832,-32768, 21, 1838, 1848, 1854, 1855,-32768, --32768,-32768, 1851,-32768,-32768,-32768, 1852, 1853, 1856, 1857, - 5870, 5892, 5914, 5936, 5958, 5980, 6002, 6024, 6046, 6068, - 6090, 6112, 6134, 6156, 6178, 6200, 6222, 6244, 6266, 6288, - 6310, 1858, 12409, 1860, 2050, 406, 2052, 611, 406, 2053, - 406, 2058, 611, 1963, 1901, 559, 559, 2081, 2091, 559, - 2093, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 48,-32768, 2094,-32768, 4, --32768, 1896, 584, 23,-32768, 1897, 72,-32768, 1900, 1903, - 1908, 21, 1907, 1911,-32768,-32768, 1944, 1945, 588, 12915, - 589, 12915, 596, 12915, 6332, 6354, 6376, 6398, 6420, 6442, - 6464, 6486, 6508, 6530, 6552, 6574, 6596, 6618, 6640, 6662, - 6684, 6706, 6728, 6750, 6772, 597,-32768, 1925, 1935, 2133, - 406, 611, 2135, 2146, 406, 2148, 406, 2054, 2324, 21, - 559, 611, 2149, 2151, 2324, 2152, 2324, 2153, 2324, 2154, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 48, 2155, 48, 2156,-32768, 75, 1967,-32768,-32768, - 83,-32768, 111, 1969, 6794, 21, 1971, 1972,-32768,-32768, - 12915,-32768, 12915,-32768, 12915,-32768, 12432, 12455, 12478, 6816, - 6838, 6860, 6882, 6904, 6926, 6948, 6970, 6992, 7014, 7036, - 7058, 7080, 7102, 7124, 7146, 7168, 7190,-32768,-32768, 602, --32768,-32768, 2170, 2171, 2172, 2173, 2324, 2324, 2010, 559, - 611,-32768,-32768,-32768, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 48, 2175,-32768,-32768,-32768,-32768, 7212, 3490, - 2011, 1988, 1990, 1979, 1991, 1992, 7234, 7256, 7278, 7300, - 7322, 7344, 7366, 7388, 7410, 7432, 7454, 7476, 7498, 7520, - 7542, 7564, 7586, 7608,-32768,-32768, 2324, 2191,-32768, 611, - 559, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 3514,-32768, 1995, 2001, 606, 12915, 607, 12915, - 613, 12915, 7630, 7652, 7674, 7696, 7718, 7740, 7762, 7784, - 7806, 7828, 7850, 7872, 7894, 7916, 7938, 7960, 7982, 8004, - 2196, 611, 2198, 2324, 2201, 2324, 2205, 2324, 2206, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324,-32768, 2012,-32768, - 12915,-32768, 12915,-32768, 12915,-32768, 12501, 12524, 12547, 8026, - 8048, 8070, 8092, 8114, 8136, 8158, 8180, 8202, 8224, 8246, - 8268, 8290, 8312, 8334, 611,-32768,-32768,-32768, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2014, 2009, 2024, 2027, 8356, 8378, 8400, - 8422, 8444, 8466, 8488, 8510, 8532, 8554, 8576, 8598, 8620, - 8642, 8664, 611, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2030, 614, 12915, 660, 12915, 663, 12915, 8686, 8708, - 8730, 8752, 8774, 8796, 8818, 8840, 8862, 8884, 8906, 8928, - 8950, 8972, 8994, 559, 2324, 2208, 2324, 2210, 2324, 2212, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2031, 12915,-32768, 12915,-32768, - 12915,-32768, 12570, 12593, 12616, 12639, 12662, 12685, 9016, 9038, - 9060, 9082, 9104, 9126, 9148, 9170, 9192, 2213,-32768,-32768, --32768,-32768,-32768,-32768, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324,-32768, 2035, 2037, 2039, 2040, 2041, 2042, - 9214, 9236, 9258, 9280, 9302, 9324, 9346, 9368, 9390, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 667, 12915, 688, 12915, 712, 12915, - 713, 12915, 716, 12915, 717, 12915, 9412, 9434, 9456, 9478, - 9500, 9522, 9544, 9566, 9588, 2324, 2220, 2324, 2221, 2324, - 2224, 2324, 2226, 2324, 2228, 2324, 2243, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 2324, 2324, 12915,-32768, 12915,-32768, - 12915,-32768, 12915,-32768, 12915,-32768, 12915,-32768, 9610, 9632, - 9654, 9676, 9698, 9720, 12708, 12731, 12754, 2324, 2324, 2324, - 2324, 2324, 2324,-32768,-32768,-32768, 9742, 9764, 9786, 9808, - 9830, 9852, 2046, 2048, 2059, 2324, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2324, 9874, 9896, 9918, 9940, 9962, 9984, - 720, 12915, 721, 12915, 725, 12915, 2324, 2324, 2324, 2324, - 2324, 2324, 2324, 2250, 2324, 2251, 2324, 2252, 10006, 10028, - 10050, 12777, 12800, 12823, 12915,-32768, 12915,-32768, 12915,-32768, - 2324, 2324, 2324,-32768,-32768,-32768, 10072, 10094, 10116, 2060, - 2066, 2067, 2324, 2324, 2324, 2324, 2324, 2324, 10138, 10160, - 10182, 731, 12915, 765, 12915, 766, 12915, 2324, 2324, 2324, - 2324, 2256, 2324, 2266, 2324, 2267, 10204, 10226, 10248, 12915, --32768, 12915,-32768, 12915,-32768, 2324, 2324, 2324, 10270, 10292, - 10314, 2324, 2324, 2324, 10336, 10358, 10380, 2324, 2324, 2324, - 12846, 12869, 12892,-32768,-32768,-32768, 2072, 2076, 2078, 2324, - 2324, 2324, 774, 12915, 802, 12915, 803, 12915, 2324, 2278, - 2324, 2279, 2324, 2281, 12915,-32768, 12915,-32768, 12915,-32768, - 2289, 2291,-32768 +-32768,-32768,-32768,-32768, 1720, 1720,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1258,-32768, 1841, 58,-32768, + 10946, 1287, 1841, 1190, 75, 1720, 1290, 1291, 1193,-32768, + 1295, 1188, 8, 1292,-32768, 1720,-32768, 300, -76, 423, + 423, 1301, 423, 1304, 423, 423,-32768, 1841, 3176, 1199, + 501,-32768, 2454, 1279, 1189, 1385, 1387, 1388, 1390, 1391, + 674, 1393, 1395, 1397, 1398, 1399, 1400, 1401, 1405, -43, + 3893, 3915,-32768,-32768, 3200, -76, -76, -76, 1404, 1841, + 1841, 1841, 1841, 1441, 1406, 1720, 1720, 423, 423, 1720, + 1407, 423, 1409, 3937,-32768, 2469, 767, 1410, 1242, 1415, + 1720, 1720, -76, 1417, 1419, 1235, 1421, 1422, 423, 423, + 1424, -76, 1425, 1426, 423, 423, 1427, 1429, 1431, 1432, + 1433, 423, 415, 423, 1434, 1435, 1436, 1439, 1440,-32768, + 1442, 484, 1445,-32768, 1446, 3111, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720,-32768, 12041, 10971, 12064, 10996, 12087, 11021, 12110, + 11046, 11071, 1240, 306, 1241, 301,-32768, 482,-32768, 20, + 350, 1244, 1444, 1609,-32768,-32768,-32768, 8, 1720,-32768, + 504,-32768, 2529, 1448, 19, 37, 1454, 423, 1464, 423, + 1465, 1466, 509,-32768,-32768, 1841,-32768, 1720,-32768, 1720, + 423, 423, 423, 1249, 1276,-32768, 444, 423, 423, 423, + 423, 423, 423, 423, 529, 1720, 1720, 1720, 1270, -116, + -106, -72,-32768, 516, 519, 522, 523,-32768,-32768, 3959, + 3981, 1470, 1492, 12133, -8, 1411,-32768, 1720, 1720, 1720, +-32768, 1313, 1340, 1318, 4003, 4025, 4, 1320, 1350, 1346, + 1352, 1348, 1354, 1351, 1368, 167, 1369, 1355, 1357, 1370, + 1371, 1372, 1374, 1375, 1376, 1412,-32768,-32768,-32768,-32768, +-32768, 1402, 1408, 1430, 1437, 1438, 1414, 1443,-32768, 1467, + 119,-32768, 1601, 4047, 4069, 4091, 4113, 4135, 4157, 4179, + 4201, 4223, 4245, 4267, 4289, 4311, 4333, 4355, 4377, 4399, + 4421, 4443, 4465, 4487, 4509, 4531, 4553, 4575, 4597,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1413,-32768,-32768, +-32768, 423, 58, 1720, 1602, 1605, 14,-32768, 1607, 11096, + 8,-32768,-32768,-32768,-32768, -76,-32768, 1626,-32768, 1628, +-32768,-32768, 1447, 527, 2529, 4619, 1629, 1630, 1632, 1720, + 1720, 1720, 1720, 1633, 1636, 1637, 1638, 1642, 1643, 1651, +-32768, 2394, 3235, 12156, 702, 486, -76, 1661, -76, 1663, + -76, 1665, 1667, 1669, 1671, 1698, 1720, 1720,-32768,-32768, + 1699, 423, 423, 1603, 423, 1961, 390, 12179, 1720, 21, + 1706, 1720, 423, 1704, 1708, 1707, 1526, 1709, 415, 1710, + 1715, 1720, 1714, 1718, 1716, 1719, 1723, 415, 1720, 1720, + 1720, 423, 1721, 1725, 415, 1720, 1750, 1751, 1749, 1720, + 484,-32768,-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1754, + 1753, 1755, 1806,-32768, 1756, 1776,-32768, 1559,-32768, 24, +-32768,-32768,-32768, 1562, 1720,-32768,-32768,-32768, 4641, 4663, + 1919, 2256,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 2271, + 1777, 1586,-32768, 1720,-32768, 1595, -40,-32768, 1597, 85, +-32768, 1598, 172,-32768, 1599,-32768,-32768,-32768,-32768, 4685, + 4707, -8, 328,-32768, 528, 1600, 1705, 1720,-32768, 1720, +-32768,-32768, 4729, 21, 1608, 4751, 1606,-32768, 1610,-32768, + 1611,-32768, 1612,-32768, 1614, 12202,-32768, 1615,-32768,-32768, + 1613, 1617, 12225, 4773, 12248, 1616,-32768, 1622, 1644, 4795, + 1640, 1648,-32768, 4817, 1645, 4839, 4861, 4883, 4905, 4927, + 4949, 4971, 4993, 5015, 5037, 5059, 5081, 5103, 5125, 5147, + 5169, 5191, 5213, 5235, 5257, 5279, 5301, 5323, 5345, 5367, + 5389, 1649,-32768,-32768,-32768, 8,-32768, 1701,-32768,-32768, + 5411, 1720, 1720,-32768,-32768,-32768,-32768, 486, 2330,-32768, + 1515, 29, 1515, 29, 1515, 29, 1720, 1720, 1744,-32768, + 423,-32768, 423, 1720, 3267, 3291, 423, 21, 1869, -8, + 415, 1874, 1720, 1892, 415, 1893, 1905, 1903, 1904, 1907, + 1720, 1908, 423, 1909, 1910, 1720, 1915, 1913, 1720, 1906, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720,-32768, 1914,-32768, 1916, + 12271, 12294, 1722, 1720,-32768, 1515, 1515, 1720, 3315, 194, + 1917, 1724, -35,-32768, 3339, 199, -27, 3363, 201, -25, + 3387, 3411, 1740,-32768, 1742, 2362,-32768,-32768, 1741, 1759, +-32768, 1745, 1746, 1747, 5433,-32768, 1728,-32768, 1757,-32768, +-32768,-32768, 12317,-32768, 1748,-32768,-32768, 12340, 1758,-32768, + 12363, 1760, 12386, 12409, 12432, 5455, 5477, 5499, 5521, 5543, + 5565, 5587, 5609, 5631, 5653, 5675, 5697, 5719, 5741, 5763, + 5785, 5807, 5829, 5851, 5873, 5895, 12455, 5917,-32768, 1784, + 423, 423,-32768, 3435, 3579, 1941, 1720,-32768, 423, 1947, +-32768, 1948, 1720, 1951, 1952, 1720, 1953, 1954, 1955, 423, + 423,-32768, 1956, 21, 415, 415, 415, 415, 1991, 1992, + 1993, 415, 1994, 1995, 1997, 1999,-32768,-32768,-32768, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, +-32768, 1720, 2001, 423, 423,-32768,-32768, 1804, 3459, 1807, +-32768,-32768, 1822, 3483,-32768,-32768, 1825, 3507,-32768,-32768, +-32768, 1827, 1826,-32768, 21, 1829, 1831, 1837, 1838,-32768, +-32768,-32768, 1834,-32768,-32768,-32768, 1836, 1840, 1842, 1843, + 5939, 5961, 5983, 6005, 6027, 6049, 6071, 6093, 6115, 6137, + 6159, 6181, 6203, 6225, 6247, 6269, 6291, 6313, 6335, 6357, + 6379, 1844, 12478, 1839, 2034, 2035, 29, 2039, 423, 29, + 2043, 29, 2044, 423, 1949, 21, 415, 415, 2046, 2047, + 415, 2049, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 58,-32768, 2059,-32768, +-32768, -6,-32768, 1861, 548, -5,-32768, 1862, -4,-32768, + 1863, 1864, 1866, 1911, 1865, 1868,-32768,-32768, 1875, 1876, + 557, 2529, 558, 2529, 561, 2529, 6401, 6423, 6445, 6467, + 6489, 6511, 6533, 6555, 6577, 6599, 6621, 6643, 6665, 6687, + 6709, 6731, 6753, 6775, 6797, 6819, 6841, 573,-32768, 1871, + 1867, 2071, 29, 423, 2072, 2073, 29, 2094, 29, 2008, + 1720, 21, 415, 423, 2105, 2106, 1720, 2107, 1720, 2108, + 1720, 2111, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 58, 2113, 58, 2115,-32768, -2, 1918, +-32768,-32768, 11,-32768, 12, 1921, 6863, 21, 1924, 1939, +-32768,-32768, 2529,-32768, 2529,-32768, 2529,-32768, 12501, 12524, + 12547, 6885, 6907, 6929, 6951, 6973, 6995, 7017, 7039, 7061, + 7083, 7105, 7127, 7149, 7171, 7193, 7215, 7237, 7259,-32768, +-32768, 576,-32768,-32768, 2146, 2147, 2148, 2149, 1720, 1720, + 21, 415, 423,-32768,-32768,-32768, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 58, 2150,-32768,-32768,-32768,-32768, + 7281, 3531, 1998, 1962, 1964, 1965, 1966, 1967, 7303, 7325, + 7347, 7369, 7391, 7413, 7435, 7457, 7479, 7501, 7523, 7545, + 7567, 7589, 7611, 7633, 7655, 7677,-32768,-32768, 1720, 2166, + 2002, 423, 415, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 3555,-32768,-32768, 1971, 1977, 577, + 2529, 580, 2529, 587, 2529, 7699, 7721, 7743, 7765, 7787, + 7809, 7831, 7853, 7875, 7897, 7919, 7941, 7963, 7985, 8007, + 8029, 8051, 8073, 2179, 423, 2180, 1720, 2181, 1720, 2182, + 1720, 2183, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, +-32768, 1987,-32768, 2529,-32768, 2529,-32768, 2529,-32768, 12570, + 12593, 12616, 8095, 8117, 8139, 8161, 8183, 8205, 8227, 8249, + 8271, 8293, 8315, 8337, 8359, 8381, 8403, 423,-32768,-32768, +-32768, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1988, 1989, 1990, 2000, + 8425, 8447, 8469, 8491, 8513, 8535, 8557, 8579, 8601, 8623, + 8645, 8667, 8689, 8711, 8733, 423, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 2003, 604, 2529, 607, 2529, 610, + 2529, 8755, 8777, 8799, 8821, 8843, 8865, 8887, 8909, 8931, + 8953, 8975, 8997, 9019, 9041, 9063, 415, 1720, 2186, 1720, + 2189, 1720, 2190, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 2010, 2529, +-32768, 2529,-32768, 2529,-32768, 12639, 12662, 12685, 12708, 12731, + 12754, 9085, 9107, 9129, 9151, 9173, 9195, 9217, 9239, 9261, + 2203,-32768,-32768,-32768,-32768,-32768,-32768, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720,-32768, 2006, 2007, 2012, + 2015, 2016, 2020, 9283, 9305, 9327, 9349, 9371, 9393, 9415, + 9437, 9459, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 615, 2529, 663, + 2529, 666, 2529, 670, 2529, 691, 2529, 696, 2529, 9481, + 9503, 9525, 9547, 9569, 9591, 9613, 9635, 9657, 1720, 2208, + 1720, 2219, 1720, 2220, 1720, 2221, 1720, 2222, 1720, 2223, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 2529, +-32768, 2529,-32768, 2529,-32768, 2529,-32768, 2529,-32768, 2529, +-32768, 9679, 9701, 9723, 9745, 9767, 9789, 12777, 12800, 12823, + 1720, 1720, 1720, 1720, 1720, 1720,-32768,-32768,-32768, 9811, + 9833, 9855, 9877, 9899, 9921, 2026, 2027, 2028, 1720, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 1720, 9943, 9965, 9987, + 10009, 10031, 10053, 697, 2529, 701, 2529, 705, 2529, 1720, + 1720, 1720, 1720, 1720, 1720, 1720, 2233, 1720, 2234, 1720, + 2235, 10075, 10097, 10119, 12846, 12869, 12892, 2529,-32768, 2529, +-32768, 2529,-32768, 1720, 1720, 1720,-32768,-32768,-32768, 10141, + 10163, 10185, 2038, 2040, 2041, 1720, 1720, 1720, 1720, 1720, + 1720, 10207, 10229, 10251, 706, 2529, 714, 2529, 717, 2529, + 1720, 1720, 1720, 1720, 2237, 1720, 2240, 1720, 2241, 10273, + 10295, 10317, 2529,-32768, 2529,-32768, 2529,-32768, 1720, 1720, + 1720, 10339, 10361, 10383, 1720, 1720, 1720, 10405, 10427, 10449, + 1720, 1720, 1720, 12915, 12938, 12961,-32768,-32768,-32768, 2048, + 2050, 2052, 1720, 1720, 1720, 718, 2529, 721, 2529, 722, + 2529, 1720, 2251, 1720, 2252, 1720, 2253, 2529,-32768, 2529, +-32768, 2529,-32768, 2263, 2265,-32768 }; static const short yypgoto[] = {-32768, - -32,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 1669,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + -177,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 1641,-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,-32768, @@ -1436,2463 +1438,2467 @@ static const short yypgoto[] = {-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, - -304, -19,-32768, 2285, -4, -364, -176, -2,-32768,-32768, --32768,-32768,-32768, 2316,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, -1270, -1229,-32768,-32768, -1101, -23,-32768, - -29,-32768, -94,-32768, -1164, 1231, 1452, -211, -332, -734, - 1255,-32768, -21 +-32768, -297, -19,-32768, 2267, -3, -368, -168, 1,-32768, +-32768,-32768,-32768,-32768, 2272,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, -1282, -1236,-32768,-32768, -1109, -23, +-32768, -29,-32768, -90,-32768, -1185, 1166, 1462, -201, -334, + -732, 1228,-32768, -21 }; -#define YYLAST 13111 - - -static const short yytable[] = { 143, - 246, 496, 75, 142, 76, 557, 897, 376, 531, 183, - 380, 186, 1237, 197, 176, 178, 251, 740, 386, 207, - 151, 1246, 200, 85, 532, 151, 207, 195, 1253, 1383, - 378, 397, 1383, 399, 1384, 1051, 1389, 1384, 1392, 1050, - 1383, 483, 207, 9, 153, 1384, 209, 211, 125, 126, - 127, 1312, 207, 88, 213, 125, 126, 127, 367, 368, - 135, 136, 517, 306, 367, 368, 248, 518, 249, 1383, - 8, 125, 126, 127, 1384, 1082, 1109, 1083, 1052, 367, - 368, 125, 126, 127, 888, 367, 368, 89, 1383, 207, - 367, 368, 492, 1384, 367, 368, 1084, 253, 1085, 254, - 190, 1293, 1086, 191, 1087, 172, 173, 548, 299, 300, - 301, 558, 387, 302, 305, 90, 174, 310, 125, 126, - 127, 367, 368, 175, 330, 331, 332, 620, 334, 492, - 336, 337, 621, 348, 367, 368, 255, 1383, 256, 369, - 1383, 362, 1384, 364, 91, 1384, 1118, 94, 1383, 371, - 365, 366, 152, 1384, 100, 1462, 148, 152, 1404, 1462, - 1045, 92, 1462, 787, 788, 307, 308, 153, 1461, 384, - 385, 1465, 388, 93, 390, 100, 1383, 393, 394, 1468, - 401, 1384, 196, 789, 155, 746, 889, 890, 257, 734, - 258, 790, 313, 314, 315, 316, 317, 759, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 86, 1670, 184, - 147, 187, 327, 198, 582, 201, 252, 741, 208, 367, - 368, 439, 1405, 379, 437, 210, 1409, 1674, 95, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 1224, 96, 484, 485, 486, 1676, 135, 136, 1763, - 491, 367, 368, 725, 146, 840, 497, 1765, 726, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 148, 1620, 492, 156, 1624, 522, - 1627, 524, 1174, 495, 149, 1766, 300, 491, 492, 128, - 129, 130, 131, 158, 901, 535, 536, 537, 538, 731, - 540, 541, 542, 543, 544, 545, 546, 551, 552, 1036, - 128, 129, 130, 131, 731, 150, 135, 136, 559, 560, - 561, 562, 367, 368, 840, 571, 367, 368, 259, 922, - 260, 135, 136, 578, 553, 553, 556, 556, 154, 733, - 370, 155, 586, 932, 1536, 1537, 1538, 1539, 367, 368, - 157, 1543, 367, 368, 1097, 1039, 367, 368, 367, 368, - 1462, 1098, 159, 881, 1462, 165, 627, 1462, 160, 1304, - 1717, 135, 136, 1306, 1721, 1308, 1723, 487, 923, 249, - 569, 570, 367, 368, 135, 136, 956, 261, 626, 262, - 527, 180, 249, 910, 181, 182, 10, 316, 317, 1458, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 313, - 314, 315, 316, 317, 327, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 940, 941, 942, 943, 161, 327, - 367, 368, 1313, 729, 135, 136, 300, 1314, 1225, 367, - 368, 1383, 737, 736, 735, 584, 1384, 1464, 128, 129, - 130, 131, 1067, 1068, 1633, 1634, 1467, 1462, 1637, 135, - 136, 1462, 170, 1462, 491, 758, 263, 249, 264, 135, - 136, 1076, 1077, 729, 757, 171, 491, 166, 761, 762, - 167, 168, 179, 169, 492, 768, 185, 188, 777, 886, - 324, 325, 326, 189, 192, 778, 779, 193, 327, 313, - 314, 315, 316, 317, 782, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 492, 265, 791, 266, 204, 327, - 128, 129, 130, 131, 267, 1371, 268, 801, 194, 803, - 804, 11, 12, 13, 14, 15, 16, 17, 18, 202, - 203, 135, 136, 206, 205, 492, 492, 492, 492, 1727, - 1060, 212, 1038, 1040, 313, 314, 315, 316, 317, 244, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 269, - 271, 270, 272, 842, 327, 841, 957, 322, 323, 324, - 325, 326, 247, 97, 338, 162, 163, 327, 164, 101, +#define YYLAST 13159 + + +static const short yytable[] = { 141, + 75, 559, 245, 140, 76, 532, 181, 497, 184, 1243, + 900, 195, 250, 376, 174, 176, 380, 742, 1252, 205, + 198, 378, 149, 210, 1054, 1259, 98, 205, 193, 1299, + 1391, 1397, 151, 1400, 402, 1392, 1319, 397, 1391, 399, + 1391, 386, 1055, 1392, 351, 1392, 207, 209, 123, 124, + 125, 352, 252, 149, 253, 305, 123, 124, 125, 1391, + 1391, 1391, 205, 1391, 1392, 1392, 1392, 146, 1392, 367, + 368, 5, 484, 205, 790, 85, 1391, 1391, 891, 367, + 368, 1392, 1392, 367, 368, 1056, 1087, 205, 1088, 133, + 134, 123, 124, 125, 1391, 247, 1089, 248, 1090, 1392, + 550, 493, 123, 124, 125, 86, 298, 299, 300, 170, + 171, 301, 304, 367, 368, 309, 123, 124, 125, 254, + 172, 255, 329, 330, 331, 92, 333, 173, 335, 336, + 1091, 347, 1092, 367, 368, 387, 367, 368, 493, 362, + 87, 364, 367, 368, 1412, 367, 368, 371, 365, 366, + 518, 369, 88, 560, 150, 519, 1471, 306, 307, 936, + 1471, 791, 1311, 1471, 151, 1049, 153, 384, 385, 1470, + 388, 792, 390, 793, 98, 393, 394, 1474, 89, 1477, + 892, 893, 622, 194, 748, 150, 90, 623, 1102, 367, + 368, 126, 127, 128, 129, 1103, 761, 736, 1682, 1686, + 1688, 1114, 1775, 91, 367, 368, 182, 211, 185, 367, + 368, 196, 251, 199, 379, 1777, 1778, 743, 206, 145, + 440, 1413, 584, 438, 591, 1417, 208, 93, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 367, 368, 485, 486, 487, 133, 134, 188, 164, 492, + 189, 165, 166, 843, 167, 498, 94, 1313, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 144, 1632, 367, 368, 1636, 523, 1639, + 525, 133, 134, 133, 134, 299, 492, 493, 1179, 488, + 256, 248, 257, 370, 536, 537, 538, 539, 540, 493, + 542, 543, 544, 545, 546, 547, 548, 553, 554, 126, + 127, 128, 129, 154, 367, 368, 496, 146, 561, 562, + 563, 564, 367, 368, 727, 573, 1043, 367, 368, 728, + 133, 134, 629, 580, 1123, 555, 555, 147, 735, 558, + 558, 258, 588, 259, 1315, 1546, 1547, 1548, 1549, 367, + 368, 260, 1553, 261, 367, 368, 367, 368, 321, 322, + 323, 324, 325, 884, 156, 1471, 1467, 1230, 326, 1471, + 1729, 1473, 1471, 1476, 1733, 148, 1735, 315, 316, 152, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 628, + 323, 324, 325, 913, 326, 95, 337, 262, 326, 263, + 153, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 944, 945, 946, 947, 155, + 338, 10, 133, 134, 731, 571, 572, 299, 528, 157, + 248, 133, 134, 739, 738, 737, 264, 760, 265, 248, + 158, 43, 44, 45, 46, 47, 48, 1645, 1646, 533, + 159, 1649, 1471, 133, 134, 492, 1471, 904, 1471, 1072, + 1073, 843, 733, 1040, 731, 759, 163, 492, 733, 763, + 764, 126, 127, 128, 129, 178, 168, 771, 179, 180, + 780, 126, 127, 128, 129, 1320, 493, 781, 782, 169, + 1321, 889, 133, 134, 1081, 1082, 785, 987, 988, 989, + 990, 991, 133, 134, 43, 44, 45, 46, 794, 48, + 6, 7, 177, 8, 160, 161, 493, 162, 266, 804, + 267, 806, 807, 1378, 186, 312, 313, 314, 315, 316, + 187, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 268, 1064, 269, 1739, 725, 326, 726, 183, 493, 493, + 493, 493, 1042, 1044, 1231, 190, 11, 12, 13, 14, + 15, 16, 17, 18, 270, 845, 271, 844, 130, 339, + 272, 201, 273, 274, 132, 275, 276, 191, 277, 135, + 192, 95, 297, 278, 138, 279, 340, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 280, 282, 281, 283, 202, 203, 312, 313, 314, + 315, 316, 200, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 1814, 284, 204, 285, 286, 326, 287, 926, + 243, 874, 875, 288, 290, 289, 291, 292, 246, 293, + 294, 733, 733, 734, 762, 876, 877, 878, 879, 880, + 881, 882, 295, 733, 492, 917, 1051, 885, 1052, 888, + 308, 733, 894, 1063, 493, 310, 296, 1206, 733, 905, + 1093, 733, 903, 1094, 733, 733, 1095, 1096, 927, 733, + 1321, 1184, 1322, 1869, 492, 327, 731, 314, 315, 316, + 328, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 1684, 1000, 1685, 348, 354, 326, 940, 941, 942, 1697, + 1699, 1698, 1700, 1701, 332, 1702, 492, 492, 492, 492, + 334, 349, 950, 951, 960, 1724, 954, 1725, 1805, 1897, + 1806, 1898, 1899, 967, 1900, 350, 355, 965, 966, 1901, + 356, 1902, 976, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 361, 372, 130, 131, 2028, 326, 2029, 2030, + 132, 2031, 2032, 357, 2033, 135, 358, 2139, 302, 2140, + 138, 359, 303, 1004, 1005, 1006, 1007, 1008, 1009, 1010, + 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 312, + 313, 314, 315, 316, 360, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 373, 2141, 844, 2142, 2143, 326, + 2144, 1045, 2145, 375, 2146, 1050, 374, 312, 313, 314, + 315, 316, 383, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 492, 2147, 1065, 2148, 1066, 326, 2149, 2226, + 2150, 2227, 391, 2228, 1204, 2229, 1205, 2230, 2274, 2231, + 2275, 389, 1083, 1084, 1085, 392, 2276, 2049, 2277, 2278, + 2322, 2279, 2323, 2324, 2326, 2325, 2327, 395, 396, 398, + 400, 401, 1234, 403, 1106, 1107, 1108, 404, 405, 1383, + 406, 407, 312, 313, 314, 315, 316, 408, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 409, 410, 411, + 412, 413, 326, 433, 961, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 95, 297, 425, 426, + 427, 1142, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 428, 429, 430, 431, + 432, 435, 436, 311, 439, 326, 490, 499, 437, 500, + 1173, 1172, 501, 534, 529, 541, 1180, 549, 575, 576, + 579, 312, 313, 314, 315, 316, 582, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 1189, 1190, 1191, 1192, + 1265, 326, 585, 592, 593, 495, 1328, 1207, 1200, 1210, + 1201, 1213, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 1220, 1221, 605, 606, 607, 608, 609, + 610, 611, 555, 612, 613, 1233, 558, 614, 1236, 615, + 616, 729, 502, 617, 618, 619, 620, 621, 1246, 624, + 730, 625, 626, 741, 740, 1253, 1254, 1255, 745, 747, + 779, 749, 1260, 750, 751, 753, 1264, 755, 756, 765, + 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, + 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, + 1286, 1287, 1288, 1289, 1290, 1291, 783, 784, 796, 797, + 1410, 798, 799, 800, 802, 803, 809, 840, 810, 130, + 131, 1301, 811, 812, 813, 132, 814, 815, 816, 817, + 135, 818, 819, 757, 820, 138, 873, 758, 821, 822, + 1309, 823, 824, 312, 313, 314, 315, 316, 825, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 897, 826, + 827, 95, 297, 326, 1325, 828, 1326, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 95, 530, 829, 830, 831, 832, 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, 313, 314, 315, 316, 317, 339, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 295, 43, - 44, 45, 46, 327, 48, 273, 311, 274, 1802, 43, - 44, 45, 46, 47, 48, 275, 312, 276, 296, 871, - 872, 983, 984, 985, 986, 987, 277, 279, 278, 280, - 281, 297, 282, 873, 874, 875, 876, 877, 878, 879, - 309, 492, 491, 328, 501, 882, 283, 885, 284, 285, - 891, 286, 287, 289, 288, 290, 1200, 902, 329, 291, - 900, 292, 293, 723, 294, 724, 731, 333, 732, 1856, - 335, 731, 491, 760, 729, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 996, 731, 1047, 914, 1048, 327, - 731, 361, 1059, 936, 937, 938, 349, 731, 731, 1088, - 1089, 354, 350, 491, 491, 491, 491, 894, 351, 946, - 947, 355, 731, 950, 1090, 731, 731, 1091, 1179, 1314, - 963, 1315, 916, 352, 961, 962, 1672, 356, 1673, 972, - 1685, 1687, 1686, 1688, 357, 358, 132, 340, 1689, 1712, - 1690, 1713, 134, 372, 1793, 359, 1794, 137, 1884, 1886, - 1885, 1887, 140, 360, 341, 1888, 2015, 1889, 2016, 373, - 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1025, 313, 314, 315, 316, - 317, 374, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 383, 2017, 841, 2018, 2019, 327, 2020, 1041, 2126, - 375, 2127, 1046, 389, 313, 314, 315, 316, 317, 391, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 491, - 2128, 1061, 2129, 1062, 327, 315, 316, 317, 392, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 1078, 1079, - 1080, 395, 2036, 327, 2130, 2132, 2131, 2133, 2134, 2136, - 2135, 2137, 2213, 2215, 2214, 2216, 1105, 2217, 396, 2218, - 1101, 1102, 1103, 2261, 398, 2262, 1375, 313, 314, 315, - 316, 317, 400, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 313, 314, 315, 316, 317, 327, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 2263, 2265, 2264, - 2266, 944, 327, 432, 97, 298, 2309, 1137, 2310, 402, + 122, 883, 312, 313, 314, 315, 316, 841, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 847, 1381, 1382, + 833, 1390, 326, 1396, 919, 1399, 834, 1389, 848, 1395, + 835, 1398, 887, 1401, 1402, 895, 896, 902, 849, 836, + 1406, 898, 850, 837, 555, 838, 1545, 908, 558, 1415, + 910, 851, 839, 852, 853, 854, 842, 1423, 855, 856, + 857, 858, 1428, 859, 860, 1431, 861, 1433, 1434, 1435, + 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, + 1456, 1457, 1458, 862, 863, 864, 865, 364, 866, 867, + 1464, 868, 298, 299, 1465, 869, 870, 1596, 312, 313, + 314, 315, 316, 871, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 872, 130, 131, 899, 586, 326, 890, + 132, 921, 920, 922, 923, 135, 924, 925, 915, 928, + 138, 929, 916, 930, 931, 932, 933, 934, 935, 943, + 963, 949, 957, 955, 130, 131, 962, 964, 1644, 968, + 132, 969, 970, 971, 972, 135, 975, 977, 978, 981, + 138, 982, 531, 983, 984, 985, 994, 1039, 1041, 995, + 996, 997, 998, 1529, 1046, 1070, 948, 999, 1001, 1534, + 1047, 1002, 1538, 1053, 312, 313, 314, 315, 316, 1057, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 1059, + 1061, 1062, 1071, 1086, 326, 1099, 1561, 1562, 1563, 1564, + 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, + 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1100, 1583, 312, + 313, 314, 315, 316, 1110, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 1738, 1105, 1109, 95, 297, 326, + 1111, 489, 1115, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 1116, 1117, 1118, + 1119, 1120, 1125, 1121, 1126, 312, 313, 314, 315, 316, + 1781, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 1122, 1124, 1127, 1128, 1129, 326, 1130, 1131, 1132, 1652, + 1654, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, + 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, + 1675, 1676, 1677, 1813, 1134, 1679, 1143, 1174, 1175, 1133, + 1135, 1139, 1177, 1170, 1048, 345, 312, 313, 314, 315, + 316, 353, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 1181, 1136, 1182, 1186, 1187, 326, 1188, 1193, 1137, + 1138, 1194, 1195, 1196, 377, 1140, 1183, 1197, 1198, 381, + 382, 312, 313, 314, 315, 316, 1199, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 1208, 1737, 1211, 1141, + 1214, 326, 1216, 1743, 1217, 1745, 1218, 1747, 551, 1749, + 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, + 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, + 1386, 1387, 1770, 1219, 1773, 1222, 132, 1226, 1235, 1238, + 1239, 1388, 1240, 1241, 1242, 1244, 138, 1245, 173, 1247, + 1248, 1249, 95, 297, 1250, 1251, 1257, 1258, 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, 2311, 2313, 2312, 2314, 403, 1044, - 404, 405, 406, 407, 408, 409, 1168, 1167, 410, 411, - 412, 413, 1175, 414, 415, 313, 314, 315, 316, 317, - 416, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 417, 1259, 1184, 1185, 1186, 327, 435, 418, 419, 494, - 420, 421, 1201, 1194, 1204, 1195, 1207, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 438, 1214, 1215, - 327, 489, 1228, 434, 436, 499, 553, 498, 556, 500, - 1227, 528, 533, 1230, 539, 547, 573, 1289, 577, 574, - 583, 580, 589, 1240, 590, 591, 592, 593, 594, 595, - 1247, 1248, 1249, 596, 597, 598, 599, 1254, 600, 601, - 602, 1258, 603, 604, 605, 1260, 1261, 1262, 1263, 1264, - 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, - 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, - 1285, 313, 314, 315, 316, 317, 606, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 1295, 132, 133, 607, - 608, 327, 609, 134, 610, 611, 612, 613, 137, 614, - 615, 303, 616, 140, 1302, 304, 617, 618, 619, 313, - 314, 315, 316, 317, 622, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 1297, 1321, 97, 298, 1318, 327, - 1319, 623, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 97, 298, 727, 624, - 728, 738, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 739, 313, 314, 315, - 316, 317, 743, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 1374, 745, 1382, 1298, 1388, 327, 1391, 747, - 1381, 748, 1387, 749, 1390, 751, 1393, 1394, 753, 754, - 763, 780, 781, 1398, 795, 796, 553, 776, 556, 793, - 799, 794, 1407, 797, 806, 807, 837, 880, 870, 844, - 1415, 800, 884, 838, 808, 1420, 809, 810, 1423, 811, - 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, - 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, - 1445, 1446, 1447, 1448, 1449, 1450, 812, 813, 814, 364, - 815, 816, 1455, 817, 299, 300, 1456, 892, 893, 818, - 845, 819, 887, 846, 313, 314, 315, 316, 317, 1475, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 132, - 133, 820, 895, 821, 327, 134, 822, 823, 824, 825, - 137, 847, 826, 755, 827, 140, 899, 756, 905, 828, - 829, 830, 831, 832, 833, 834, 835, 836, 839, 132, - 133, 848, 849, 850, 851, 134, 852, 853, 854, 855, - 137, 907, 917, 912, 856, 140, 857, 913, 858, 859, - 860, 861, 862, 863, 1519, 864, 865, 866, 1299, 867, - 1524, 868, 1535, 1528, 869, 313, 314, 315, 316, 317, - 896, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 918, 919, 920, 921, 924, 327, 925, 1551, 1552, 1553, - 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, - 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 926, 1573, - 927, 928, 929, 930, 931, 939, 959, 945, 953, 951, - 958, 960, 1585, 964, 965, 97, 529, 966, 967, 968, - 971, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 121, 122, 1261, 1262, 1263, 1811, 1812, 1292, 1293, 1298, + 1294, 1300, 1296, 1819, 1820, 1821, 1822, 1823, 1824, 1825, + 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, + 1836, 1297, 1307, 1837, 312, 313, 314, 315, 316, 1308, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 1310, + 1312, 1314, 1316, 1323, 326, 1329, 1324, 1379, 1331, 1334, + 1338, 1295, 1332, 1333, 1339, 1865, 1335, 1337, 1343, 1344, + 1871, 1873, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, + 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, + 1893, 1345, 1347, 95, 337, 1348, 1377, 1350, 1403, 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, 97, 298, 973, 974, 977, - 978, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 120, 121, 122, 1924, 1411, 1926, 1414, 1928, 338, 1930, + 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, + 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1416, 1418, 43, + 44, 45, 46, 47, 48, 130, 131, 1419, 1420, 1421, + 1432, 132, 1422, 1424, 1426, 1427, 135, 1429, 1430, 1459, + 1460, 138, 1468, 1484, 1304, 1489, 1463, 1469, 1971, 1972, + 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, + 1983, 1984, 1985, 1480, 1481, 1483, 1527, 1485, 1486, 1487, + 1492, 732, 1531, 1532, 1490, 1494, 1535, 1536, 1539, 1540, + 1541, 1544, 1496, 2007, 2009, 2011, 2012, 2013, 2014, 2015, + 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, + 2026, 312, 313, 314, 315, 316, 1523, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 1550, 1551, 1552, 1554, + 1555, 326, 1556, 1557, 2050, 1584, 2052, 1587, 2054, 1589, + 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, + 2066, 2067, 2068, 2069, 2070, 1590, 130, 491, 1592, 1594, + 1595, 1597, 132, 1598, 1599, 1600, 1601, 135, 1602, 1630, + 1631, 1629, 138, 1603, 1633, 1604, 1605, 1627, 1637, 1640, + 1643, 1647, 1648, 1650, 2094, 2095, 2096, 2097, 2098, 2099, + 2100, 2101, 2102, 1681, 1683, 1687, 1689, 1693, 1690, 1691, + 1694, 1727, 1695, 1696, 1726, 1692, 1728, 1731, 1732, 2119, + 2121, 2123, 2125, 2127, 2129, 2130, 2131, 2132, 2133, 2134, + 2135, 2136, 2137, 2138, 312, 313, 314, 315, 316, 1734, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 1736, + 1741, 1742, 1744, 1746, 326, 2160, 1748, 2162, 1771, 2164, + 1774, 2166, 1776, 2168, 1779, 2170, 1782, 2172, 2173, 2174, + 2175, 2176, 2177, 2178, 2179, 2180, 312, 313, 314, 315, + 316, 1783, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 1807, 1808, 1809, 1810, 1838, 326, 2190, 2191, 2192, + 2193, 2194, 2195, 1228, 1842, 1229, 1843, 1841, 1844, 1845, + 1846, 1866, 1867, 1895, 1896, 2208, 2209, 2210, 2211, 2212, + 2213, 2215, 2217, 2219, 1921, 1923, 1925, 1927, 1929, 1948, + 1986, 2051, 1987, 1988, 2053, 2055, 2232, 2233, 2234, 2235, + 2236, 2237, 2238, 1989, 2240, 2027, 2242, 2071, 2087, 2103, + 2104, 906, 907, 2161, 909, 2105, 911, 912, 2106, 2107, + 2250, 2251, 2252, 2108, 2163, 2165, 2167, 2169, 2171, 2205, + 2206, 2207, 2262, 2263, 2264, 2266, 2268, 2270, 2239, 2241, + 2243, 2259, 2284, 2260, 2261, 2286, 2288, 2280, 2281, 2282, + 2283, 2313, 2285, 2314, 2287, 2315, 2329, 2331, 2333, 952, + 953, 1305, 2335, 956, 2336, 2292, 2293, 2294, 1225, 846, + 74, 2298, 2299, 2300, 1176, 82, 1306, 2304, 2305, 2306, + 973, 974, 0, 0, 0, 0, 979, 980, 0, 2317, + 2319, 2321, 0, 986, 0, 993, 0, 0, 2328, 0, + 2330, 0, 2332, 95, 96, 97, 0, 98, 0, 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, 979, 980, 981, 1640, 1642, - 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, - 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, - 1664, 1665, 990, 991, 1667, 992, 993, 994, 995, 1680, - 1035, 997, 1473, 1037, 998, 1042, 1043, 346, 313, 314, - 315, 316, 317, 353, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 1049, 1053, 1055, 1057, 1058, 327, 1081, - 1066, 1094, 1095, 1100, 1104, 1111, 377, 1106, 1110, 1112, - 1113, 381, 382, 1114, 1115, 1138, 1116, 1726, 1117, 1169, - 1119, 1122, 1123, 1124, 1170, 1725, 1120, 1172, 1121, 1176, - 1128, 1731, 1134, 1733, 1125, 1735, 1126, 1737, 1738, 1739, - 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, - 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 132, 133, - 1758, 1127, 1761, 1769, 134, 1177, 1181, 1165, 1129, 137, - 1130, 1182, 1131, 1178, 140, 1183, 530, 1132, 1187, 1188, - 1189, 1133, 1135, 1136, 1190, 1191, 1192, 1193, 1378, 1379, - 1202, 1205, 1208, 1286, 134, 744, 1210, 1211, 1212, 1380, - 1213, 1229, 1216, 1220, 140, 1232, 175, 1233, 1234, 1235, - 1239, 1236, 1238, 1799, 1800, 1241, 1242, 1243, 1244, 1245, - 1251, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, - 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1252, - 1255, 1825, 313, 314, 315, 316, 317, 1256, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 1257, 1287, 1288, - 1301, 1290, 327, 1291, 1300, 1305, 1292, 1403, 1317, 1372, - 915, 1294, 1322, 1853, 1327, 1303, 1307, 1309, 1858, 1860, - 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, - 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1402, - 97, 338, 1331, 1316, 1324, 1325, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 1911, 1326, 1913, 1328, 1915, 339, 1917, 1918, 1919, 1920, - 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, - 1931, 1932, 1933, 1934, 1330, 1332, 43, 44, 45, 46, - 47, 48, 1337, 313, 314, 315, 316, 317, 1338, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 1336, 1340, - 1341, 1370, 1395, 327, 1406, 1958, 1959, 1960, 1961, 1962, - 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, - 1343, 1408, 1410, 1411, 1412, 1413, 1454, 1414, 1416, 1418, - 730, 1419, 1421, 1422, 1451, 1424, 1452, 1480, 1459, 1460, - 1994, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 313, 314, - 315, 316, 317, 1471, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 1472, 1474, 1517, 1521, 1522, 327, 1476, - 1525, 2037, 1477, 2039, 1481, 2041, 1478, 2043, 2044, 2045, - 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, - 2056, 2057, 1483, 132, 490, 1485, 1487, 1514, 1526, 134, - 1529, 1530, 1531, 1534, 137, 1540, 1541, 1542, 1544, 140, - 1545, 1546, 1547, 1574, 1576, 1578, 1584, 1579, 1581, 1583, - 1586, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, - 1587, 1588, 1589, 1590, 1591, 1619, 1592, 1621, 1625, 1593, - 1594, 1616, 1618, 1628, 1631, 1632, 2106, 2108, 2110, 2112, - 2114, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, - 2125, 313, 314, 315, 316, 317, 1635, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 1636, 1638, 1669, 1671, - 1675, 327, 2147, 1677, 2149, 625, 2151, 1678, 2153, 1681, - 2155, 1679, 2157, 1682, 2159, 2160, 2161, 2162, 2163, 2164, - 2165, 2166, 2167, 313, 314, 315, 316, 317, 1714, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 1716, 1715, - 1719, 1683, 1684, 327, 2177, 2178, 2179, 2180, 2181, 2182, - 1198, 1720, 1199, 1722, 1729, 1724, 1730, 1732, 1734, 1736, - 1759, 1762, 2195, 2196, 2197, 2198, 2199, 2200, 2202, 2204, - 2206, 1764, 1767, 1770, 1771, 1795, 1796, 1797, 1798, 1801, - 1826, 1829, 1832, 2219, 2220, 2221, 2222, 2223, 2224, 2225, - 1830, 2227, 1831, 2229, 1833, 1834, 1854, 1882, 1883, 903, - 904, 1908, 906, 1910, 908, 909, 1912, 2237, 2238, 2239, - 1914, 1916, 1974, 2038, 1935, 2040, 1973, 2042, 2074, 2249, - 2250, 2251, 2253, 2255, 2257, 2148, 2150, 1975, 2058, 2152, - 1976, 2154, 2014, 2156, 2267, 2268, 2269, 2270, 2090, 2272, - 2091, 2274, 2092, 2093, 2094, 2095, 948, 949, 2158, 2192, - 952, 2193, 2279, 2280, 2281, 2226, 2228, 2230, 2285, 2286, - 2287, 2271, 2194, 2246, 2291, 2292, 2293, 969, 970, 2247, - 2248, 2273, 2275, 975, 976, 2300, 2304, 2306, 2308, 2301, - 982, 2302, 989, 2316, 2318, 2315, 2320, 2317, 2322, 2319, - 2323, 74, 97, 98, 99, 843, 100, 1171, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 82, 125, 126, 127, 97, 298, 1219, 0, - 0, 0, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 1054, 0, 1056, 955, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1063, - 1064, 1065, 0, 0, 0, 1069, 1070, 1071, 1072, 1073, - 1074, 1075, 97, 298, 207, 0, 0, 0, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 97, 529, 0, 0, - 0, 0, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 128, 129, 130, 131, 0, 327, 0, 488, 0, - 0, 0, 0, 549, 0, 132, 133, 0, 0, 0, - 0, 134, 135, 136, 0, 0, 137, 0, 138, 1166, - 139, 140, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 132, - 133, 0, 327, 0, 0, 134, 0, 0, 0, 1222, - 137, 1223, 0, 0, 0, 140, 0, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1221, 0, 0, 0, 0, 0, 0, 0, 1231, - 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, - 0, 134, 0, 0, 0, 0, 137, 0, 1250, 0, - 0, 140, 563, 27, 28, 564, 565, 31, 566, 33, - 0, 34, 0, 36, 37, 38, 0, 40, 41, 132, - 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 137, 0, 0, 0, 53, 140, 563, 27, 28, 564, - 565, 31, 566, 33, 0, 34, 0, 36, 37, 38, + 120, 121, 122, 0, 123, 124, 125, 95, 530, 0, + 0, 0, 0, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 1482, 0, 1058, + 0, 1060, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1067, 1068, 1069, 0, 0, 0, 0, 1074, + 1075, 1076, 1077, 1078, 1079, 1080, 95, 297, 205, 0, + 0, 0, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 0, 123, 124, 125, + 746, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 312, 313, 314, 315, + 316, 326, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 918, 0, 0, 0, 0, 326, 0, 0, 0, + 0, 0, 126, 127, 128, 129, 959, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 131, 0, 0, + 0, 0, 132, 133, 134, 0, 0, 135, 0, 136, + 0, 137, 138, 1171, 0, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 130, 131, 0, 0, 0, 326, 132, 0, 0, 0, + 0, 135, 1384, 0, 1385, 0, 138, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 0, + 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, + 0, 0, 0, 0, 1237, 0, 0, 0, 0, 130, + 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, + 135, 0, 0, 1256, 0, 138, 0, 0, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 312, 313, 314, 315, 316, 326, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 565, 27, 28, 566, 567, + 31, 568, 33, 0, 34, 0, 36, 37, 38, 0, + 40, 41, 0, 0, 0, 0, 0, 565, 27, 28, + 566, 567, 31, 568, 33, 0, 34, 53, 36, 37, + 38, 0, 40, 41, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 53, + 0, 0, 0, 0, 326, 0, 55, 56, 57, 0, + 565, 27, 28, 566, 567, 31, 568, 33, 0, 34, + 0, 36, 37, 38, 67, 40, 41, 0, 55, 56, + 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 0, 67, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 1404, 0, 1405, 0, 0, 326, 1409, 0, + 0, 55, 56, 57, 0, 0, 766, 0, 0, 0, + 0, 0, 0, 0, 1425, 0, 0, 0, 0, 67, + 565, 27, 28, 566, 567, 31, 568, 33, 0, 34, + 0, 36, 37, 38, 0, 40, 41, 0, 0, 0, + 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 0, 565, 27, 28, 566, + 567, 31, 568, 33, 574, 34, 0, 36, 37, 38, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 55, 56, 57, 0, 0, 53, 0, - 0, 563, 27, 28, 564, 565, 31, 566, 33, 0, - 34, 67, 36, 37, 38, 0, 40, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, - 0, 0, 0, 53, 0, 563, 27, 28, 564, 565, - 31, 566, 33, 0, 34, 67, 36, 37, 38, 0, - 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 56, 57, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 313, 314, 315, 316, 317, - 67, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 55, 56, 57, 567, - 0, 0, 1376, 0, 1377, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 1396, 0, 1397, 0, 0, - 0, 1401, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 572, 0, 0, 0, 1417, 563, 27, - 28, 564, 565, 31, 566, 33, 0, 34, 0, 36, - 37, 38, 0, 40, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -10, 1, 0, -10, -53, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, - 56, 57, 588, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -53, 0, 0, 67, -53, -53, - -53, -53, -53, -53, -53, -53, -53, 0, -53, -53, - -53, -53, -53, -53, -53, -53, 0, 0, 0, -53, - -53, -53, -53, -53, -53, -53, 0, -53, -53, -53, - -53, -53, 0, 0, 1515, 0, 313, 314, 315, 316, - 317, 1520, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 1532, 1533, 0, 0, 327, 0, 0, -53, - -53, -53, -53, 0, 0, 764, 0, -53, 0, -53, - 0, -53, -53, -53, -53, -53, -53, -53, -53, -53, - -53, 0, 0, 0, 0, 802, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1575, 0, 0, -10, - -10, -10, -10, -10, -10, -10, -10, 0, 0, 0, - 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 3, 0, 4, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 0, 0, 0, 0, 0, 1623, - 0, 0, 0, 0, 1630, 628, 629, 630, 631, 632, - 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, - 653, 215, 216, 217, 0, 0, 0, 0, 0, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 0, 238, 239, - 240, 241, 242, 243, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, - 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, - 0, 654, 0, 1728, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, - 34, 35, 36, 37, 38, 39, 40, 41, 999, 0, - 0, 42, 43, 44, 45, 46, 47, 48, 0, 49, - 50, 51, 52, 53, 563, 27, 28, 564, 565, 31, - 566, 33, 0, 34, 0, 36, 37, 38, 0, 40, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 55, 56, 57, 0, 53, 0, 0, 58, - 0, 59, 1803, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 56, 57, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 67, 0, 0, 0, 0, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, - 0, 1855, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 313, 314, 315, 316, - 317, 770, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 0, 0, 0, 1909, 0, 911, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 313, 314, 315, 316, 317, 935, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 0, 0, 0, 0, 1954, 0, 0, 1196, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 1399, - 0, 0, 0, 0, 1992, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 313, - 314, 315, 316, 317, 1400, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 313, 314, 315, 316, 317, 1457, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 0, 0, 313, 314, 315, - 316, 317, 1463, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 313, 314, 315, 316, 317, 1466, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 0, 0, 313, 314, 315, 316, 317, - 1469, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 313, - 314, 315, 316, 317, 1470, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 313, 314, 315, 316, 317, 1516, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 0, 0, 313, 314, 315, - 316, 317, 1577, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 313, 314, 315, 316, 317, 1580, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 0, 0, 313, 314, 315, 316, 317, - 1582, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 313, - 314, 315, 316, 317, 1828, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 313, 314, 315, 316, 317, 1881, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 549, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 550, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 581, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 703, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 704, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 717, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 718, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 719, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 720, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 721, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 722, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 783, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 784, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 785, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 933, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 934, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 954, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1092, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1093, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1107, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1108, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1139, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1140, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1141, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1142, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1143, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1144, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1145, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1146, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1147, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1148, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1149, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1150, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1151, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1152, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1153, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1154, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1155, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1156, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1157, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1158, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1159, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1160, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1161, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1162, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1163, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1164, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1180, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1296, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1310, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1311, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1320, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1323, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1334, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1339, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1342, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1344, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1345, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1346, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1347, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1348, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1349, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1350, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1351, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1352, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1353, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1354, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1355, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1356, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1357, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1358, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1359, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1360, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1361, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1362, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1363, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1364, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1365, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1366, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1367, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1368, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1369, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1373, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1479, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1491, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1492, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1493, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1494, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1495, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1496, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1497, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1498, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1499, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1500, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1501, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1502, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1503, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1504, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1505, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1506, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1507, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1508, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1509, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1510, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1511, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1513, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1595, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1596, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1597, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1598, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1599, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1600, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1601, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1602, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1603, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1604, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1605, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1606, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1607, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1608, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1609, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1610, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1611, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1612, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1613, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1614, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1615, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1691, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1692, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1693, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1694, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1695, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1696, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1697, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1698, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1699, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1700, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1701, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1702, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1703, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1704, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1705, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1706, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1707, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1708, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1709, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1710, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1711, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1768, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1775, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1776, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1777, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1778, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1779, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1780, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1781, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1782, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1783, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1784, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1785, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1786, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1787, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1788, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1789, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1790, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1791, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1792, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1827, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1835, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1836, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1837, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1838, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1839, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1840, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1841, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1842, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1843, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1844, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1845, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1846, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1847, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1848, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1849, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1850, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1851, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1852, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1890, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1891, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1892, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1893, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1894, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1895, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1896, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1897, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1898, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1899, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1900, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1901, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1902, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1903, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1904, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1905, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1906, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1907, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1939, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1940, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1941, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1942, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1943, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1944, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1945, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1946, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1947, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1948, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1949, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1950, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1951, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1952, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1953, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1977, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1978, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1979, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1980, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1981, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1982, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1983, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1984, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1985, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1986, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 1987, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 1988, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 1989, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 1990, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 1991, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2021, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2022, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2023, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2024, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2025, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2026, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2027, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2028, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2029, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2030, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2031, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2032, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2033, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2034, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2035, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2065, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2066, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2067, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2068, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2069, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2070, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2071, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2072, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2073, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2096, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2097, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2098, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2099, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2100, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2101, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2102, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2103, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2104, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2138, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2139, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2140, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2141, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2142, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2143, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2144, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2145, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2146, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2168, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2169, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2170, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2171, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2172, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2173, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2186, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2187, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2188, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2189, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2190, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2191, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2207, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2208, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2209, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2210, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2211, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2212, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2231, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2232, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2233, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2243, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2244, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2245, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2258, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2259, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2260, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2276, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2277, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2278, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2282, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 313, - 314, 315, 316, 317, 2283, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 313, 314, 315, 316, 317, 2284, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 313, 314, 315, 316, 317, 2288, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 313, 314, 315, 316, 317, - 2289, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 313, 314, 315, - 316, 317, 2290, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 682, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 684, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 686, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 688, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 690, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 692, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 694, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 696, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 698, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 700, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 702, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 706, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 708, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 710, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 712, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 714, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 716, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 786, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 792, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 883, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1027, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 1029, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1031, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 1033, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 1034, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 0, 0, 1173, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 488, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 519, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 520, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 521, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 523, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 525, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 526, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 534, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 575, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 576, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 579, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 585, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 681, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 683, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 685, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 687, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 689, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 691, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 693, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 695, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 697, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 699, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 701, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 705, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 707, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 709, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 711, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 713, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 715, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 750, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 752, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 765, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 766, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 767, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 771, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 772, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 773, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 774, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 775, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 798, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 805, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 1026, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 1028, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 1030, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 1032, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 1096, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 1197, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 1226, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 1329, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 1333, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 1335, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 1453, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 1482, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 1484, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 1486, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 1488, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 1489, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 1490, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 1512, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 1617, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 1772, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 1773, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 1774, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 1936, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 1937, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 1938, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 2059, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 2060, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 2061, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 2062, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 2063, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327, 0, 2064, 313, 314, 315, 316, 317, 0, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 0, 0, - 0, 0, 0, 327, 0, 2174, 313, 314, 315, 316, - 317, 0, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 0, 0, 0, 0, 327, 0, 2175, 313, - 314, 315, 316, 317, 0, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 0, 0, 0, 0, 0, 327, - 0, 2176, 313, 314, 315, 316, 317, 0, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 0, 0, - 0, 0, 327, 0, 2234, 313, 314, 315, 316, 317, - 0, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 0, 0, 0, 0, 0, 327, 0, 2235, 313, 314, - 315, 316, 317, 0, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, - 2236, 313, 314, 315, 316, 317, 0, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 0, 0, 0, - 0, 327, 0, 2294, 313, 314, 315, 316, 317, 0, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, - 0, 0, 0, 0, 327, 0, 2295, 313, 314, 315, - 316, 317, 0, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 0, 0, 0, 0, 327, 0, 2296, - 313, 314, 315, 316, 317, 0, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 0, 0, 0, 0, 0, - 327 + 0, 55, 56, 57, 0, 0, 0, 0, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, + 0, 0, 312, 313, 314, 315, 316, 589, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 55, 56, 57, + 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, + 0, 770, 1524, 1525, 0, 67, 0, 0, 0, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1542, 1543, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, -7, 1, + 0, -12, -55, 326, 0, 0, 0, 0, 0, 0, + 0, 0, 772, 0, 0, 0, 0, 590, 0, 0, + 0, 0, 0, 0, 0, 1585, 1586, 0, 0, 0, + 0, -55, 0, 0, 0, -55, -55, -55, -55, -55, + -55, -55, -55, -55, 0, -55, -55, -55, -55, -55, + -55, -55, -55, 805, 0, 0, -55, -55, -55, -55, + -55, -55, -55, 0, -55, -55, -55, -55, -55, 565, + 27, 28, 566, 567, 31, 568, 33, 0, 34, 0, + 36, 37, 38, 0, 40, 41, 0, 0, 0, 0, + 1635, 0, 0, 0, 0, 1642, -55, -55, -55, -55, + 0, 53, 0, 0, -55, 0, -55, 0, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 55, 56, 57, 0, 0, 0, -12, -12, -12, -12, + -12, -12, -12, -12, 0, 0, 0, 0, 67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -7, -7, 0, -7, 0, 0, 0, 0, 213, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 1730, 0, 0, 0, 0, + 326, 0, 0, 0, 627, 1740, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 214, 215, + 216, 0, 0, 0, 0, 0, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 0, 0, 23, 0, + 0, 0, 0, 0, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 1815, 237, 238, 239, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 24, 0, 0, + 0, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 0, 34, 35, 36, 37, 38, 39, 40, 41, 0, + 0, 0, 42, 43, 44, 45, 46, 47, 48, 656, + 49, 50, 51, 52, 53, 0, 0, 0, 312, 313, + 314, 315, 316, 1868, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 1003, 0, 0, 326, 0, + 0, 0, 54, 55, 56, 57, 0, 773, 0, 0, + 58, 0, 59, 0, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 0, 0, 0, 0, + 0, 312, 313, 314, 315, 316, 1922, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 312, 313, 314, 315, 316, + 914, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, + 0, 0, 0, 0, 939, 0, 0, 0, 0, 1967, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 0, 0, 0, 0, 0, 1202, + 0, 0, 312, 313, 314, 315, 316, 2005, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 312, 313, 314, 315, + 316, 1407, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 312, 313, 314, 315, 316, 1408, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 312, 313, 314, 315, 316, 1466, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 0, 0, 312, 313, + 314, 315, 316, 1472, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 0, 0, 312, 313, 314, 315, 316, 1475, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 312, 313, 314, 315, + 316, 1478, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 312, 313, 314, 315, 316, 1479, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 312, 313, 314, 315, 316, 1526, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 0, 0, 312, 313, + 314, 315, 316, 1588, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 0, 0, 312, 313, 314, 315, 316, 1591, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 312, 313, 314, 315, + 316, 1593, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 312, 313, 314, 315, 316, 1840, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 312, 313, 314, 315, 316, 1894, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 489, 0, 0, 0, + 0, 551, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 552, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 583, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 705, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 706, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 719, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 720, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 721, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 722, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 723, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 724, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 786, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 787, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 788, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 937, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 938, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 958, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1097, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1098, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1112, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1113, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1144, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1145, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1146, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1147, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1148, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1149, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1150, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1151, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1152, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1153, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1154, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1155, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1156, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1157, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1158, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1159, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1160, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1161, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1162, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1163, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1164, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1165, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1166, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1167, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1168, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1169, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1185, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1302, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1303, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1317, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1318, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1327, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1330, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1341, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1346, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1349, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1351, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1352, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1353, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1354, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1355, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1356, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1357, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1358, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1359, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1360, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1361, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1362, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1363, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1364, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1365, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1366, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1367, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1368, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1369, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1370, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1371, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1372, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1373, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1374, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1375, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1376, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1380, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1488, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1500, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1501, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1502, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1503, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1504, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1505, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1506, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1507, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1508, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1509, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1510, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1511, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1512, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1513, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1514, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1515, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1516, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1517, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1518, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1519, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1520, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1522, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1606, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1607, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1608, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1609, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1610, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1611, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1612, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1613, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1614, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1615, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1616, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1617, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1618, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1619, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1620, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1621, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1622, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1623, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1624, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1625, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1626, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1703, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1704, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1705, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1706, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1707, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1708, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1709, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1710, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1711, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1712, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1713, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1714, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1715, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1716, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1717, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1718, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1719, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1720, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1721, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1722, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1723, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1780, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1787, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1788, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1789, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1790, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1791, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1792, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1793, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1794, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1795, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1796, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1797, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1798, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1799, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1800, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1801, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1802, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1803, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1804, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1839, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1847, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1848, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1849, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1850, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1851, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1852, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1853, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1854, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1855, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1856, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1857, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1858, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1859, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1860, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1861, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1862, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1863, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1864, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1903, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1904, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1905, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1906, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1907, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1908, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1909, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1910, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1911, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1912, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1913, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1914, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1915, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1916, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1917, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1918, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1919, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1920, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1952, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1953, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1954, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1955, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1956, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1957, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1958, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1959, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1960, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1961, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1962, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1963, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1964, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1965, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1966, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1990, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1991, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1992, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1993, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1994, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 1995, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 1996, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 1997, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 1998, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 1999, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2000, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2001, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2002, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2003, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2004, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2034, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2035, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2036, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2037, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2038, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2039, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2040, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2041, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2042, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2043, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2044, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2045, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2046, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2047, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2048, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2078, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2079, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2080, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2081, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2082, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2083, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2084, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2085, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2086, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2109, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2110, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2111, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2112, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2113, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2114, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2115, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2116, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2117, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2151, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2152, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2153, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2154, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2155, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2156, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2157, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2158, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2159, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2181, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2182, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2183, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2184, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2185, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2186, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2199, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2200, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2201, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2202, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2203, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2204, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2220, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2221, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2222, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2223, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2224, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2225, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2244, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2245, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2246, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2256, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2257, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2258, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2271, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2272, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2273, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2289, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2290, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2291, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2295, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 312, 313, + 314, 315, 316, 2296, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 312, 313, 314, 315, 316, 2297, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 312, 313, 314, 315, 316, 2301, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 312, 313, 314, 315, 316, 2302, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 312, 313, 314, 315, + 316, 2303, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 684, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 686, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 688, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 690, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 692, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 694, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 696, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 698, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 700, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 702, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 704, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 708, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 710, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 712, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 714, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 716, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 718, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 789, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 795, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 886, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 1031, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 1033, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 1035, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 1037, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 1038, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 1178, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 520, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 521, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 522, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 524, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 526, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 527, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 535, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 577, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 578, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 581, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 587, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 683, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 685, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 687, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 689, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 691, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 693, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 695, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 697, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 699, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 701, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 703, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 707, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 709, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 711, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 713, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 715, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 717, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 752, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 754, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 767, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 768, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 769, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 774, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 775, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 776, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 777, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 778, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 801, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 808, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 1030, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 1032, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 1034, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 1036, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 1101, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 1203, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 1232, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 1336, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 1340, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 1342, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 1461, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 1462, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 1491, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 1493, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 1495, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 1497, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 1498, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 1499, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 1521, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 1628, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 1784, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 1785, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 1786, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 1949, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 1950, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 1951, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 2072, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 2073, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 2074, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 2075, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 2076, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 0, 0, 0, 326, + 0, 2077, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 0, 0, 0, + 0, 0, 326, 0, 2187, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 0, 0, 0, 326, 0, 2188, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 0, 0, 0, 0, 0, 326, 0, + 2189, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 0, 0, + 0, 326, 0, 2247, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, + 0, 0, 0, 0, 326, 0, 2248, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 0, 0, 0, 326, 0, 2249, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 0, 0, 0, + 326, 0, 2307, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 0, + 0, 0, 0, 326, 0, 2308, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 0, 0, 0, 0, 0, 326, 0, 2309 }; static const short yycheck[] = { 23, - 95, 306, 7, 23, 7, 370, 741, 184, 341, 4, - 187, 4, 1114, 4, 44, 45, 4, 4, 103, 5, - 65, 1123, 4, 3, 8, 65, 5, 42, 1130, 66, - 6, 208, 66, 210, 71, 6, 1307, 71, 1309, 6, - 66, 4, 5, 167, 65, 71, 68, 69, 34, 35, - 36, 1216, 5, 7, 87, 34, 35, 36, 186, 187, - 193, 194, 198, 4, 186, 187, 199, 203, 201, 66, - 6, 34, 35, 36, 71, 203, 198, 205, 49, 186, - 187, 34, 35, 36, 4, 186, 187, 6, 66, 5, - 186, 187, 304, 71, 186, 187, 203, 197, 205, 199, - 38, 6, 203, 41, 205, 186, 187, 203, 132, 133, - 134, 203, 197, 137, 138, 6, 197, 141, 34, 35, - 36, 186, 187, 204, 148, 149, 150, 198, 152, 341, - 154, 155, 203, 157, 186, 187, 197, 66, 199, 204, - 66, 171, 71, 173, 6, 71, 198, 197, 66, 179, - 174, 175, 197, 71, 7, 1385, 197, 197, 1323, 1389, - 895, 6, 1392, 204, 204, 106, 107, 65, 205, 193, - 194, 205, 196, 6, 198, 7, 66, 201, 202, 205, - 213, 71, 197, 204, 197, 518, 106, 107, 197, 494, - 199, 204, 176, 177, 178, 179, 180, 530, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 187, 205, 204, - 6, 204, 196, 204, 391, 197, 204, 204, 204, 186, - 187, 251, 1324, 199, 248, 204, 1328, 205, 197, 253, + 4, 370, 93, 23, 4, 340, 4, 305, 4, 1119, + 743, 4, 4, 182, 44, 45, 185, 4, 1128, 5, + 4, 6, 65, 3, 6, 1135, 7, 5, 42, 6, + 66, 1314, 65, 1316, 212, 71, 1222, 206, 66, 208, + 66, 103, 6, 71, 197, 71, 68, 69, 34, 35, + 36, 204, 197, 65, 199, 4, 34, 35, 36, 66, + 66, 66, 5, 66, 71, 71, 71, 197, 71, 186, + 187, 6, 4, 5, 204, 167, 66, 66, 4, 186, + 187, 71, 71, 186, 187, 49, 203, 5, 205, 193, + 194, 34, 35, 36, 66, 199, 203, 201, 205, 71, + 203, 303, 34, 35, 36, 7, 130, 131, 132, 186, + 187, 135, 136, 186, 187, 139, 34, 35, 36, 197, + 197, 199, 146, 147, 148, 197, 150, 204, 152, 153, + 203, 155, 205, 186, 187, 197, 186, 187, 340, 169, + 6, 171, 186, 187, 1330, 186, 187, 177, 172, 173, + 198, 204, 6, 203, 197, 203, 1393, 106, 107, 203, + 1397, 204, 203, 1400, 65, 898, 197, 191, 192, 205, + 194, 204, 196, 204, 7, 199, 200, 205, 6, 205, + 106, 107, 198, 197, 519, 197, 6, 203, 197, 186, + 187, 172, 173, 174, 175, 204, 531, 495, 205, 205, + 205, 198, 205, 6, 186, 187, 204, 187, 204, 186, + 187, 204, 204, 197, 199, 205, 205, 204, 204, 6, + 250, 1331, 391, 247, 402, 1335, 204, 197, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 8, 197, 295, 296, 297, 205, 193, 194, 205, - 304, 186, 187, 198, 197, 201, 306, 205, 203, 313, + 186, 187, 294, 295, 296, 193, 194, 38, 38, 303, + 41, 41, 42, 201, 44, 305, 197, 203, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 197, 1576, 518, 46, 1579, 333, - 1581, 335, 1047, 7, 197, 205, 340, 341, 530, 172, - 173, 174, 175, 42, 198, 349, 350, 351, 352, 203, - 354, 355, 356, 357, 358, 359, 360, 367, 368, 198, - 172, 173, 174, 175, 203, 197, 193, 194, 372, 373, - 374, 375, 186, 187, 201, 379, 186, 187, 197, 6, - 199, 193, 194, 387, 369, 370, 369, 370, 197, 201, - 204, 197, 396, 203, 1476, 1477, 1478, 1479, 186, 187, - 197, 1483, 186, 187, 197, 7, 186, 187, 186, 187, - 1620, 204, 42, 726, 1624, 44, 204, 1627, 42, 203, - 1671, 193, 194, 203, 1675, 203, 1677, 199, 55, 201, - 6, 7, 186, 187, 193, 194, 8, 197, 438, 199, - 199, 38, 201, 756, 41, 42, 3, 179, 180, 203, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 176, - 177, 178, 179, 180, 196, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 787, 788, 789, 790, 42, 196, - 186, 187, 198, 487, 193, 194, 490, 203, 205, 186, - 187, 66, 496, 495, 494, 8, 71, 203, 172, 173, - 174, 175, 56, 57, 1586, 1587, 203, 1717, 1590, 193, - 194, 1721, 197, 1723, 518, 199, 197, 201, 199, 193, - 194, 6, 7, 527, 528, 204, 530, 38, 532, 533, - 41, 42, 204, 44, 726, 539, 42, 6, 548, 731, - 188, 189, 190, 6, 4, 549, 550, 197, 196, 176, - 177, 178, 179, 180, 558, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 756, 197, 570, 199, 4, 196, - 172, 173, 174, 175, 197, 1290, 199, 581, 197, 583, - 584, 138, 139, 140, 141, 142, 143, 144, 145, 197, - 6, 193, 194, 42, 4, 787, 788, 789, 790, 1681, - 913, 3, 887, 888, 176, 177, 178, 179, 180, 197, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 197, - 197, 199, 199, 625, 196, 625, 198, 186, 187, 188, - 189, 190, 5, 3, 4, 41, 42, 196, 44, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 176, 177, 178, 179, 180, 38, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 197, 59, - 60, 61, 62, 196, 64, 197, 6, 199, 1770, 59, - 60, 61, 62, 63, 64, 197, 6, 199, 197, 703, - 704, 123, 124, 125, 126, 127, 197, 197, 199, 199, - 197, 197, 199, 717, 718, 719, 720, 721, 722, 723, - 4, 913, 726, 6, 6, 727, 197, 731, 199, 197, - 734, 199, 197, 197, 199, 199, 1081, 747, 5, 197, - 744, 199, 197, 199, 199, 201, 203, 197, 205, 1831, - 197, 203, 756, 205, 758, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 839, 203, 203, 205, 205, 196, - 203, 4, 205, 783, 784, 785, 204, 203, 203, 205, - 205, 204, 197, 787, 788, 789, 790, 6, 197, 793, - 794, 204, 203, 797, 205, 203, 203, 205, 205, 203, - 810, 205, 6, 197, 808, 809, 203, 197, 205, 819, - 203, 203, 205, 205, 197, 197, 186, 187, 203, 203, - 205, 205, 192, 204, 203, 197, 205, 197, 203, 203, - 205, 205, 202, 197, 204, 203, 203, 205, 205, 204, - 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 324, 325, 326, 197, 1587, 186, 187, 1590, 332, 1592, + 334, 193, 194, 193, 194, 339, 340, 519, 1051, 199, + 197, 201, 199, 204, 348, 349, 350, 351, 352, 531, + 354, 355, 356, 357, 358, 359, 360, 367, 368, 172, + 173, 174, 175, 46, 186, 187, 7, 197, 372, 373, + 374, 375, 186, 187, 198, 379, 7, 186, 187, 203, + 193, 194, 204, 387, 198, 369, 370, 197, 201, 369, + 370, 197, 396, 199, 203, 1485, 1486, 1487, 1488, 186, + 187, 197, 1492, 199, 186, 187, 186, 187, 186, 187, + 188, 189, 190, 728, 42, 1632, 203, 8, 196, 1636, + 1683, 203, 1639, 203, 1687, 197, 1689, 179, 180, 197, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 439, + 188, 189, 190, 758, 196, 3, 4, 197, 196, 199, + 197, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 790, 791, 792, 793, 197, + 38, 3, 193, 194, 488, 6, 7, 491, 199, 42, + 201, 193, 194, 497, 496, 495, 197, 199, 199, 201, + 42, 59, 60, 61, 62, 63, 64, 1597, 1598, 8, + 42, 1601, 1729, 193, 194, 519, 1733, 198, 1735, 56, + 57, 201, 203, 198, 528, 529, 44, 531, 203, 533, + 534, 172, 173, 174, 175, 38, 197, 541, 41, 42, + 550, 172, 173, 174, 175, 198, 728, 551, 552, 204, + 203, 733, 193, 194, 6, 7, 560, 123, 124, 125, + 126, 127, 193, 194, 59, 60, 61, 62, 572, 64, + 163, 164, 204, 166, 41, 42, 758, 44, 197, 583, + 199, 585, 586, 1296, 6, 176, 177, 178, 179, 180, + 6, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 197, 916, 199, 1693, 199, 196, 201, 42, 790, 791, + 792, 793, 890, 891, 205, 4, 138, 139, 140, 141, + 142, 143, 144, 145, 197, 627, 199, 627, 186, 187, + 197, 6, 199, 197, 192, 199, 197, 197, 199, 197, + 197, 3, 4, 197, 202, 199, 204, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 197, 197, 199, 199, 4, 4, 176, 177, 178, + 179, 180, 197, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 1782, 197, 42, 199, 197, 196, 199, 6, + 197, 705, 706, 197, 197, 199, 199, 197, 5, 199, + 197, 203, 203, 205, 205, 719, 720, 721, 722, 723, + 724, 725, 197, 203, 728, 205, 203, 729, 205, 733, + 4, 203, 736, 205, 916, 6, 197, 1086, 203, 749, + 205, 203, 746, 205, 203, 203, 205, 205, 55, 203, + 203, 205, 205, 1843, 758, 6, 760, 178, 179, 180, + 5, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 203, 842, 205, 204, 204, 196, 786, 787, 788, 203, + 203, 205, 205, 203, 197, 205, 790, 791, 792, 793, + 197, 197, 796, 797, 8, 203, 800, 205, 203, 203, + 205, 205, 203, 813, 205, 197, 204, 811, 812, 203, + 197, 205, 822, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 4, 204, 186, 187, 203, 196, 205, 203, + 192, 205, 203, 197, 205, 197, 197, 203, 200, 205, + 202, 197, 204, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, - 864, 865, 866, 867, 868, 869, 176, 177, 178, 179, - 180, 204, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 6, 203, 883, 205, 203, 196, 205, 888, 203, - 199, 205, 896, 201, 176, 177, 178, 179, 180, 204, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 913, - 203, 915, 205, 917, 196, 178, 179, 180, 109, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 932, 933, - 934, 6, 2014, 196, 203, 203, 205, 205, 203, 203, - 205, 205, 203, 203, 205, 205, 959, 203, 197, 205, - 954, 955, 956, 203, 6, 205, 1301, 176, 177, 178, + 864, 865, 866, 867, 868, 869, 870, 871, 872, 176, + 177, 178, 179, 180, 197, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 204, 203, 886, 205, 203, 196, + 205, 891, 203, 199, 205, 899, 204, 176, 177, 178, 179, 180, 6, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 176, 177, 178, 179, 180, 196, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 203, 203, 205, - 205, 6, 196, 5, 3, 4, 203, 997, 205, 197, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 203, 203, 205, 205, 197, 6, - 197, 197, 197, 197, 197, 197, 1040, 1039, 197, 197, - 197, 197, 1052, 197, 197, 176, 177, 178, 179, 180, - 197, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 197, 1136, 1066, 1067, 1068, 196, 198, 197, 197, 200, - 197, 197, 1082, 1077, 1084, 1077, 1086, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 4, 1092, 1093, - 196, 7, 1105, 203, 203, 7, 1081, 201, 1081, 199, - 1104, 204, 7, 1107, 7, 198, 7, 6, 104, 7, - 204, 106, 168, 1117, 5, 5, 5, 5, 5, 5, - 1124, 1125, 1126, 5, 5, 5, 5, 1131, 5, 5, - 5, 1135, 5, 5, 5, 1139, 1140, 1141, 1142, 1143, + 189, 190, 916, 203, 918, 205, 920, 196, 203, 203, + 205, 205, 204, 203, 203, 205, 205, 203, 203, 205, + 205, 201, 936, 937, 938, 109, 203, 2027, 205, 203, + 203, 205, 205, 203, 203, 205, 205, 6, 197, 6, + 6, 3, 1110, 197, 958, 959, 960, 197, 197, 1308, + 197, 197, 176, 177, 178, 179, 180, 197, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 197, 197, 197, + 197, 197, 196, 5, 198, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 3, 4, 197, 197, + 197, 1001, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 197, 197, 197, 197, + 197, 203, 198, 6, 4, 196, 7, 201, 203, 7, + 1044, 1043, 199, 7, 204, 7, 1056, 198, 7, 7, + 104, 176, 177, 178, 179, 180, 106, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 1070, 1071, 1072, 1073, + 1141, 196, 204, 5, 5, 200, 1234, 1087, 1082, 1089, + 1082, 1091, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 1097, 1098, 5, 5, 5, 5, 5, + 5, 5, 1086, 5, 5, 1109, 1086, 5, 1112, 156, + 5, 203, 6, 5, 5, 5, 3, 5, 1122, 5, + 198, 6, 5, 4, 6, 1129, 1130, 1131, 200, 6, + 201, 7, 1136, 7, 7, 7, 1140, 7, 7, 7, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, - 1164, 176, 177, 178, 179, 180, 5, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 1180, 186, 187, 5, - 5, 196, 5, 192, 5, 5, 5, 156, 197, 5, - 5, 200, 5, 202, 1198, 204, 5, 3, 5, 176, - 177, 178, 179, 180, 5, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 6, 1228, 3, 4, 1222, 196, - 1224, 6, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 3, 4, 203, 5, - 198, 6, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 4, 176, 177, 178, - 179, 180, 200, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 1296, 6, 1304, 6, 1306, 196, 1308, 7, - 1304, 7, 1306, 7, 1308, 7, 1310, 1311, 7, 7, - 7, 205, 205, 1317, 7, 7, 1301, 201, 1301, 204, - 7, 204, 1326, 197, 169, 203, 5, 4, 6, 197, - 1334, 201, 6, 198, 203, 1339, 203, 203, 1342, 203, - 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, + 1164, 1165, 1166, 1167, 1168, 1169, 205, 205, 204, 204, + 1328, 7, 7, 197, 7, 201, 168, 5, 203, 186, + 187, 1185, 203, 203, 203, 192, 203, 203, 203, 203, + 197, 203, 203, 200, 203, 202, 6, 204, 203, 203, + 1204, 203, 203, 176, 177, 178, 179, 180, 203, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 6, 203, + 203, 3, 4, 196, 1228, 203, 1230, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 3, 4, 203, 203, 203, 203, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 4, 176, 177, 178, 179, 180, 198, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 197, 1302, 1303, + 203, 1311, 196, 1313, 6, 1315, 203, 1311, 197, 1313, + 203, 1315, 6, 1317, 1318, 6, 6, 6, 197, 203, + 1324, 7, 197, 203, 1308, 203, 1484, 7, 1308, 1333, + 7, 197, 203, 197, 197, 197, 203, 1341, 197, 197, + 197, 197, 1346, 197, 197, 1349, 197, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, - 1364, 1365, 1366, 1367, 1368, 1369, 203, 203, 203, 1379, - 203, 203, 1376, 203, 1378, 1379, 1380, 6, 6, 203, - 197, 203, 200, 197, 176, 177, 178, 179, 180, 1402, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 186, - 187, 203, 7, 203, 196, 192, 203, 203, 203, 203, - 197, 197, 203, 200, 203, 202, 6, 204, 7, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 186, - 187, 197, 197, 197, 197, 192, 197, 197, 197, 197, - 197, 7, 204, 200, 197, 202, 197, 204, 197, 197, - 197, 197, 197, 197, 1458, 197, 197, 197, 6, 197, - 1464, 197, 1475, 1467, 197, 176, 177, 178, 179, 180, - 199, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 7, 7, 7, 7, 7, 196, 7, 1491, 1492, 1493, - 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, - 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 7, 1513, - 7, 7, 7, 7, 4, 6, 165, 6, 4, 7, - 7, 3, 1535, 3, 3, 3, 4, 188, 3, 3, - 3, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 3, 4, 3, 3, 3, - 3, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 3, 3, 3, 1592, 1593, - 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, + 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, + 1374, 1375, 1376, 197, 197, 197, 197, 1387, 197, 197, + 1384, 197, 1386, 1387, 1388, 197, 197, 1545, 176, 177, + 178, 179, 180, 197, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 197, 186, 187, 199, 8, 196, 200, + 192, 7, 204, 7, 7, 197, 7, 7, 200, 7, + 202, 7, 204, 7, 7, 7, 7, 7, 4, 6, + 169, 6, 4, 7, 186, 187, 7, 3, 1596, 3, + 192, 3, 188, 3, 3, 197, 3, 3, 3, 3, + 202, 3, 204, 3, 3, 3, 3, 198, 198, 5, + 5, 3, 3, 1467, 201, 197, 6, 6, 4, 1473, + 7, 6, 1476, 6, 176, 177, 178, 179, 180, 6, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 6, + 6, 6, 197, 204, 196, 6, 1500, 1501, 1502, 1503, + 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, + 1514, 1515, 1516, 1517, 1518, 1519, 1520, 6, 1522, 176, + 177, 178, 179, 180, 165, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 1692, 105, 204, 3, 4, 196, + 203, 198, 203, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 198, 203, 198, + 203, 198, 198, 203, 198, 176, 177, 178, 179, 180, + 1738, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 203, 203, 203, 203, 203, 196, 203, 203, 203, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, - 1614, 1615, 3, 5, 1616, 5, 3, 3, 6, 1632, - 198, 4, 6, 198, 6, 201, 7, 156, 176, 177, - 178, 179, 180, 162, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 6, 6, 6, 6, 6, 196, 204, - 197, 6, 6, 105, 204, 198, 185, 203, 203, 203, - 198, 190, 191, 203, 198, 6, 203, 1680, 203, 6, - 203, 203, 203, 203, 4, 1679, 198, 6, 198, 6, - 198, 1685, 198, 1687, 203, 1689, 203, 1691, 1692, 1693, - 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, - 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 186, 187, - 1712, 203, 1714, 1726, 192, 6, 6, 201, 203, 197, - 203, 6, 203, 200, 202, 6, 204, 203, 6, 6, - 6, 203, 203, 203, 6, 6, 6, 6, 186, 187, - 6, 6, 6, 4, 192, 8, 6, 6, 6, 197, - 6, 3, 7, 105, 202, 6, 204, 3, 6, 188, - 3, 6, 6, 1767, 1768, 6, 3, 6, 6, 3, - 6, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, - 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 3, - 3, 1793, 176, 177, 178, 179, 180, 3, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 6, 6, 6, - 204, 7, 196, 6, 6, 204, 201, 6, 102, 107, - 8, 200, 198, 1827, 198, 205, 204, 204, 1832, 1833, - 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, - 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 165, - 3, 4, 198, 204, 203, 203, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 1884, 203, 1886, 203, 1888, 38, 1890, 1891, 1892, 1893, - 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, - 1904, 1905, 1906, 1907, 203, 198, 59, 60, 61, 62, - 63, 64, 198, 176, 177, 178, 179, 180, 198, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 203, 203, - 198, 198, 105, 196, 3, 1939, 1940, 1941, 1942, 1943, - 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, - 203, 6, 6, 3, 6, 6, 205, 6, 6, 6, - 489, 6, 3, 6, 6, 5, 5, 198, 6, 204, - 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, - 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 176, 177, - 178, 179, 180, 204, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 203, 205, 6, 6, 6, 196, 203, - 6, 2015, 203, 2017, 198, 2019, 203, 2021, 2022, 2023, - 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, - 2034, 2035, 203, 186, 187, 198, 203, 203, 6, 192, - 6, 6, 6, 6, 197, 6, 6, 6, 6, 202, - 6, 6, 5, 5, 204, 203, 205, 204, 204, 203, - 203, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, - 203, 198, 198, 203, 203, 6, 204, 6, 6, 204, - 204, 204, 203, 6, 102, 165, 2090, 2091, 2092, 2093, - 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, - 2104, 176, 177, 178, 179, 180, 6, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 6, 5, 5, 204, - 204, 196, 2126, 204, 2128, 200, 2130, 205, 2132, 203, - 2134, 204, 2136, 203, 2138, 2139, 2140, 2141, 2142, 2143, - 2144, 2145, 2146, 176, 177, 178, 179, 180, 204, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 6, 205, - 6, 198, 198, 196, 2168, 2169, 2170, 2171, 2172, 2173, - 203, 6, 205, 6, 6, 102, 6, 6, 6, 6, - 6, 6, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, - 2194, 205, 204, 203, 203, 6, 6, 6, 6, 170, - 6, 171, 204, 2207, 2208, 2209, 2210, 2211, 2212, 2213, - 203, 2215, 203, 2217, 204, 204, 6, 203, 198, 748, - 749, 6, 751, 6, 753, 754, 6, 2231, 2232, 2233, - 6, 6, 204, 6, 203, 6, 203, 6, 6, 2243, - 2244, 2245, 2246, 2247, 2248, 6, 6, 204, 198, 6, - 204, 6, 203, 6, 2258, 2259, 2260, 2261, 204, 2263, - 204, 2265, 204, 204, 204, 204, 795, 796, 6, 204, - 799, 204, 2276, 2277, 2278, 6, 6, 6, 2282, 2283, - 2284, 6, 204, 204, 2288, 2289, 2290, 816, 817, 204, - 204, 6, 6, 822, 823, 204, 2300, 2301, 2302, 204, - 829, 204, 831, 6, 6, 2309, 6, 2311, 0, 2313, - 0, 7, 3, 4, 5, 627, 7, 1043, 9, 10, + 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, + 1624, 1625, 1626, 1781, 203, 1627, 6, 6, 4, 198, + 203, 198, 6, 201, 6, 154, 176, 177, 178, 179, + 180, 160, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 6, 203, 6, 6, 6, 196, 6, 6, 203, + 203, 6, 6, 6, 183, 203, 200, 6, 6, 188, + 189, 176, 177, 178, 179, 180, 6, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 6, 1691, 6, 203, + 6, 196, 6, 1697, 6, 1699, 6, 1701, 203, 1703, + 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, + 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, + 186, 187, 1724, 6, 1726, 7, 192, 105, 3, 6, + 3, 197, 6, 188, 6, 6, 202, 3, 204, 6, + 3, 6, 3, 4, 6, 3, 6, 3, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 7, 34, 35, 36, 3, 4, 1098, -1, - -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 905, -1, 907, 8, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 918, - 919, 920, -1, -1, -1, 924, 925, 926, 927, 928, - 929, 930, 3, 4, 5, -1, -1, -1, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, 35, 36, 3, 4, -1, -1, + 31, 32, 3, 3, 6, 1779, 1780, 4, 6, 201, + 6, 200, 7, 1787, 1788, 1789, 1790, 1791, 1792, 1793, + 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, + 1804, 6, 6, 1805, 176, 177, 178, 179, 180, 204, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 205, + 204, 204, 204, 204, 196, 198, 102, 107, 203, 198, + 198, 6, 203, 203, 198, 1839, 203, 203, 203, 198, + 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, + 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, + 1864, 198, 203, 3, 4, 198, 198, 203, 105, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 1897, 6, 1899, 3, 1901, 38, 1903, + 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, + 1914, 1915, 1916, 1917, 1918, 1919, 1920, 6, 6, 59, + 60, 61, 62, 63, 64, 186, 187, 3, 6, 6, + 5, 192, 6, 6, 6, 6, 197, 3, 6, 6, + 5, 202, 6, 165, 6, 198, 205, 204, 1952, 1953, + 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, + 1964, 1965, 1966, 204, 203, 205, 6, 203, 203, 203, + 203, 490, 6, 6, 198, 198, 6, 6, 6, 6, + 6, 6, 203, 1987, 1988, 1989, 1990, 1991, 1992, 1993, + 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + 2004, 176, 177, 178, 179, 180, 203, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 6, 6, 6, 6, + 6, 196, 6, 5, 2028, 5, 2030, 204, 2032, 203, + 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, + 2044, 2045, 2046, 2047, 2048, 204, 186, 187, 204, 203, + 205, 203, 192, 203, 198, 198, 203, 197, 203, 6, + 6, 203, 202, 204, 6, 204, 204, 204, 6, 6, + 102, 6, 6, 5, 2078, 2079, 2080, 2081, 2082, 2083, + 2084, 2085, 2086, 5, 204, 204, 204, 203, 205, 204, + 203, 205, 198, 198, 204, 165, 6, 6, 6, 2103, + 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, + 2114, 2115, 2116, 2117, 176, 177, 178, 179, 180, 6, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 102, + 6, 6, 6, 6, 196, 2139, 6, 2141, 6, 2143, + 6, 2145, 205, 2147, 204, 2149, 203, 2151, 2152, 2153, + 2154, 2155, 2156, 2157, 2158, 2159, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 6, 6, 6, 6, 6, 196, 2181, 2182, 2183, + 2184, 2185, 2186, 203, 203, 205, 203, 170, 204, 204, + 204, 6, 171, 203, 198, 2199, 2200, 2201, 2202, 2203, + 2204, 2205, 2206, 2207, 6, 6, 6, 6, 6, 203, + 203, 6, 204, 204, 6, 6, 2220, 2221, 2222, 2223, + 2224, 2225, 2226, 204, 2228, 203, 2230, 198, 6, 204, + 204, 750, 751, 6, 753, 204, 755, 756, 204, 204, + 2244, 2245, 2246, 204, 6, 6, 6, 6, 6, 204, + 204, 204, 2256, 2257, 2258, 2259, 2260, 2261, 6, 6, + 6, 204, 6, 204, 204, 6, 6, 2271, 2272, 2273, + 2274, 204, 2276, 204, 2278, 204, 6, 6, 6, 798, + 799, 6, 0, 802, 0, 2289, 2290, 2291, 1103, 629, + 4, 2295, 2296, 2297, 1047, 4, 6, 2301, 2302, 2303, + 819, 820, -1, -1, -1, -1, 825, 826, -1, 2313, + 2314, 2315, -1, 832, -1, 834, -1, -1, 2322, -1, + 2324, -1, 2326, 3, 4, 5, -1, 7, -1, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, 34, 35, 36, 3, 4, -1, + -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 6, -1, 908, + -1, 910, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 921, 922, 923, -1, -1, -1, -1, 928, + 929, 930, 931, 932, 933, 934, 3, 4, 5, -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 176, 177, 178, 179, - 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 172, 173, 174, 175, -1, 196, -1, 198, -1, - -1, -1, -1, 203, -1, 186, 187, -1, -1, -1, - -1, 192, 193, 194, -1, -1, 197, -1, 199, 1038, - 201, 202, 176, 177, 178, 179, 180, -1, 182, 183, - 184, 185, 186, 187, 188, 189, 190, -1, -1, 186, - 187, -1, 196, -1, -1, 192, -1, -1, -1, 203, - 197, 205, -1, -1, -1, 202, -1, 176, 177, 178, + 27, 28, 29, 30, 31, 32, -1, 34, 35, 36, + 8, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 176, 177, 178, 179, + 180, 196, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 8, -1, -1, -1, -1, 196, -1, -1, -1, + -1, -1, 172, 173, 174, 175, 8, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 186, 187, -1, -1, + -1, -1, 192, 193, 194, -1, -1, 197, -1, 199, + -1, 201, 202, 1042, -1, 176, 177, 178, 179, 180, + -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 186, 187, -1, -1, -1, 196, 192, -1, -1, -1, + -1, 197, 203, -1, 205, -1, 202, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 1100, -1, -1, -1, -1, -1, -1, -1, 1108, - -1, -1, -1, -1, -1, 186, 187, -1, -1, -1, - -1, 192, -1, -1, -1, -1, 197, -1, 1127, -1, - -1, 202, 38, 39, 40, 41, 42, 43, 44, 45, - -1, 47, -1, 49, 50, 51, -1, 53, 54, 186, + -1, -1, -1, -1, -1, -1, 1105, -1, -1, -1, + -1, -1, -1, -1, 1113, -1, -1, -1, -1, 186, 187, -1, -1, -1, -1, 192, -1, -1, -1, -1, - 197, -1, -1, -1, 70, 202, 38, 39, 40, 41, - 42, 43, 44, 45, -1, 47, -1, 49, 50, 51, - -1, 53, 54, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 99, 100, 101, -1, -1, 70, -1, - -1, 38, 39, 40, 41, 42, 43, 44, 45, -1, - 47, 117, 49, 50, 51, -1, 53, 54, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 99, 100, 101, - -1, -1, -1, 70, -1, 38, 39, 40, 41, 42, - 43, 44, 45, -1, 47, 117, 49, 50, 51, -1, - 53, 54, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 99, 100, 101, -1, -1, 70, -1, -1, - -1, -1, -1, -1, -1, 176, 177, 178, 179, 180, - 117, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, 99, 100, 101, 205, - -1, -1, 203, -1, 205, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 117, 1314, -1, 1316, -1, -1, - -1, 1320, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 205, -1, -1, -1, 1336, 38, 39, - 40, 41, 42, 43, 44, 45, -1, 47, -1, 49, - 50, 51, -1, 53, 54, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 205, -1, - 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, 1, -1, 3, 4, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, - 100, 101, 205, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, -1, -1, 117, 37, 38, - 39, 40, 41, 42, 43, 44, 45, -1, 47, 48, - 49, 50, 51, 52, 53, 54, -1, -1, -1, 58, - 59, 60, 61, 62, 63, 64, -1, 66, 67, 68, - 69, 70, -1, -1, 1453, -1, 176, 177, 178, 179, - 180, 1460, 182, 183, 184, 185, 186, 187, 188, 189, - 190, -1, 1471, 1472, -1, -1, 196, -1, -1, 98, - 99, 100, 101, -1, -1, 205, -1, 106, -1, 108, - -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, -1, -1, -1, -1, 205, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1515, -1, -1, 138, - 139, 140, 141, 142, 143, 144, 145, -1, -1, -1, - -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 163, 164, -1, 166, 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, -1, -1, -1, -1, -1, 1578, - -1, -1, -1, -1, 1583, 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, 120, 121, 122, -1, -1, -1, -1, -1, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, -1, - -1, -1, -1, -1, -1, -1, -1, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, -1, 157, 158, - 159, 160, 161, 162, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, - -1, -1, -1, 1672, -1, -1, -1, -1, -1, -1, - -1, 205, -1, 1682, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, - 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, - 47, 48, 49, 50, 51, 52, 53, 54, 205, -1, - -1, 58, 59, 60, 61, 62, 63, 64, -1, 66, - 67, 68, 69, 70, 38, 39, 40, 41, 42, 43, - 44, 45, -1, 47, -1, 49, 50, 51, -1, 53, - 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 98, 99, 100, 101, -1, 70, -1, -1, 106, - -1, 108, 1771, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 99, 100, 101, 176, 177, + 197, -1, -1, 1132, -1, 202, -1, -1, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 117, -1, -1, -1, -1, 196, -1, - -1, -1, -1, -1, -1, -1, -1, 205, -1, -1, - -1, 1830, 176, 177, 178, 179, 180, -1, 182, 183, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 176, + 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 176, 177, 178, 179, 180, 196, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, 38, 39, 40, 41, 42, + 43, 44, 45, -1, 47, -1, 49, 50, 51, -1, + 53, 54, -1, -1, -1, -1, -1, 38, 39, 40, + 41, 42, 43, 44, 45, -1, 47, 70, 49, 50, + 51, -1, 53, 54, 176, 177, 178, 179, 180, -1, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 70, + -1, -1, -1, -1, 196, -1, 99, 100, 101, -1, + 38, 39, 40, 41, 42, 43, 44, 45, -1, 47, + -1, 49, 50, 51, 117, 53, 54, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, -1, -1, -1, 117, 176, 177, 178, + 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 1321, -1, 1323, -1, -1, 196, 1327, -1, + -1, 99, 100, 101, -1, -1, 205, -1, -1, -1, + -1, -1, -1, -1, 1343, -1, -1, -1, -1, 117, + 38, 39, 40, 41, 42, 43, 44, 45, -1, 47, + -1, 49, 50, 51, -1, 53, 54, -1, -1, -1, + -1, -1, 205, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, -1, -1, -1, 38, 39, 40, 41, + 42, 43, 44, 45, 205, 47, -1, 49, 50, 51, + -1, 53, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 99, 100, 101, -1, -1, -1, -1, 70, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 117, + -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 99, 100, 101, + -1, -1, 196, -1, -1, -1, -1, -1, -1, -1, + -1, 205, 1461, 1462, -1, 117, -1, -1, -1, -1, + 1469, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1480, 1481, 176, 177, 178, 179, 180, -1, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 0, 1, + -1, 3, 4, 196, -1, -1, -1, -1, -1, -1, + -1, -1, 205, -1, -1, -1, -1, 205, -1, -1, + -1, -1, -1, -1, -1, 1524, 1525, -1, -1, -1, + -1, 33, -1, -1, -1, 37, 38, 39, 40, 41, + 42, 43, 44, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 205, -1, -1, 58, 59, 60, 61, + 62, 63, 64, -1, 66, 67, 68, 69, 70, 38, + 39, 40, 41, 42, 43, 44, 45, -1, 47, -1, + 49, 50, 51, -1, 53, 54, -1, -1, -1, -1, + 1589, -1, -1, -1, -1, 1594, 98, 99, 100, 101, + -1, 70, -1, -1, 106, -1, 108, -1, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 99, 100, 101, -1, -1, -1, 138, 139, 140, 141, + 142, 143, 144, 145, -1, -1, -1, -1, 117, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 163, 164, -1, 166, -1, -1, -1, -1, 41, + 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 1684, -1, -1, -1, -1, + 196, -1, -1, -1, 200, 1694, 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, 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, 120, 121, + 122, -1, -1, -1, -1, -1, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, -1, -1, 4, -1, + -1, -1, -1, -1, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 1783, 157, 158, 159, 160, 161, + 162, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, 37, 38, 39, 40, 41, 42, 43, 44, 45, + -1, 47, 48, 49, 50, 51, 52, 53, 54, -1, + -1, -1, 58, 59, 60, 61, 62, 63, 64, 205, + 66, 67, 68, 69, 70, -1, -1, -1, 176, 177, + 178, 179, 180, 1842, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, 205, -1, -1, 196, -1, + -1, -1, 98, 99, 100, 101, -1, 205, -1, -1, + 106, -1, 108, -1, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, -1, -1, -1, -1, -1, -1, + -1, 176, 177, 178, 179, 180, 1895, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, + 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, + -1, -1, -1, -1, -1, 196, -1, -1, -1, -1, + -1, -1, -1, -1, 205, -1, -1, -1, -1, 1948, + 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, -1, -1, -1, -1, -1, -1, -1, 205, + -1, -1, 176, 177, 178, 179, 180, 1986, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, - -1, -1, -1, 1882, -1, 205, 176, 177, 178, 179, - 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, + 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, + 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196, -1, -1, -1, -1, -1, 1935, -1, -1, 205, - 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, -1, -1, 176, 177, + 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + -1, -1, 176, 177, 178, 179, 180, 205, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, -1, -1, 176, 177, 178, 179, + 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 176, 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196, -1, -1, -1, -1, -1, -1, -1, -1, 205, - -1, -1, -1, -1, 1973, 176, 177, 178, 179, 180, - -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, - 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, - 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, - 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, - 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, -1, -1, 176, 177, 178, - 179, 180, 205, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 176, 177, 178, 179, 180, 205, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, -1, -1, 176, 177, 178, 179, 180, - 205, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, -1, -1, 176, - 177, 178, 179, 180, 205, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, -1, -1, 176, 177, 178, 179, 180, 205, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 176, - 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, - 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, - -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, - 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, - -1, 196, -1, 176, 177, 178, 179, 180, 203, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 176, 177, 178, 179, 180, - 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, - -1, -1, -1, -1, -1, 196, -1, 176, 177, 178, - 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + 196, -1, -1, -1, 176, 177, 178, 179, 180, 205, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 198, -1, -1, -1, + -1, 203, 176, 177, 178, 179, 180, -1, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, -1, - -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, - -1, -1, 196, -1, -1, -1, 200, 176, 177, 178, - 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, - 189, 190, -1, -1, -1, -1, -1, 196, -1, 198, - 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, - 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, - -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 176, 177, + 178, 179, 180, 203, 182, 183, 184, 185, 186, 187, + 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, + 176, 177, 178, 179, 180, 203, 182, 183, 184, 185, + 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, + 196, -1, 176, 177, 178, 179, 180, 203, 182, 183, + 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, + -1, -1, 196, -1, 176, 177, 178, 179, 180, 203, + 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, + -1, -1, -1, -1, 196, -1, 176, 177, 178, 179, + 180, 203, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, + 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, + 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 200, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, @@ -4074,7 +4080,11 @@ static const short yycheck[] = { 23, 189, 190, -1, -1, -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, -1, -1, -1, - 196 + 196, -1, 198, 176, 177, 178, 179, 180, -1, 182, + 183, 184, 185, 186, 187, 188, 189, 190, -1, -1, + -1, -1, -1, 196, -1, 198, 176, 177, 178, 179, + 180, -1, 182, 183, 184, 185, 186, 187, 188, 189, + 190, -1, -1, -1, -1, -1, 196, -1, 198 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison.simple" @@ -4620,250 +4630,247 @@ yyreduce: switch (yyn) { case 4: -#line 171 "Gmsh.y" -{ yyerrok ; return 1; ; +#line 165 "Gmsh.y" +{ yyerrok; return 1; ; break;} case 5: -#line 177 "Gmsh.y" +#line 171 "Gmsh.y" { yyval.d = yyvsp[0].d; ; break;} case 6: -#line 178 "Gmsh.y" +#line 172 "Gmsh.y" { yyval.d = -yyvsp[0].d; ; break;} -case 7: -#line 183 "Gmsh.y" +case 9: +#line 182 "Gmsh.y" { - yymsg(INFO, "STL file format"); - STL_Surf = Create_Surface(1, MSH_SURF_STL); + yymsg(INFO, "Reading STL solid"); + STL_Surf = Create_Surface(NEWSURFACE(), MSH_SURF_STL); STL_Surf->STL = new STL_Data; return 1; ; break;} -case 8: -#line 197 "Gmsh.y" +case 10: +#line 196 "Gmsh.y" { STL_Surf->STL->Add_Facet(yyvsp[-12].d, yyvsp[-11].d, yyvsp[-10].d, yyvsp[-8].d, yyvsp[-7].d, yyvsp[-6].d, - yyvsp[-4].d, yyvsp[-3].d, yyvsp[-2].d); + yyvsp[-4].d, yyvsp[-3].d, yyvsp[-2].d, CTX.geom.stl_create_elementary); return 1; ; break;} -case 9: -#line 204 "Gmsh.y" +case 11: +#line 203 "Gmsh.y" { - yymsg(INFO, "STL file format read"); - Tree_Add(THEM->Surfaces, &STL_Surf); + if(CTX.geom.stl_create_elementary){ + STL_Surf->STL->ReplaceDuplicate(); + if(CTX.geom.stl_create_physical) + STL_Surf->STL->CreatePhysicalSurface(); + } + else{ + Tree_Add(THEM->Surfaces, &STL_Surf); + } + yymsg(INFO, "Read STL solid"); return 1; ; break;} -case 12: -#line 219 "Gmsh.y" +case 14: +#line 225 "Gmsh.y" { return 1; ; break;} -case 13: -#line 220 "Gmsh.y" +case 15: +#line 226 "Gmsh.y" { return 1; ; break;} -case 14: -#line 221 "Gmsh.y" +case 16: +#line 227 "Gmsh.y" { return 1; ; break;} -case 15: -#line 226 "Gmsh.y" +case 17: +#line 232 "Gmsh.y" { - yymsg(INFO, "Step Iso-10303-21 file format"); + yymsg(INFO, "Reading Step Iso-10303-21 data"); Create_Step_Solid_BRep(); ; break;} -case 16: -#line 231 "Gmsh.y" +case 18: +#line 237 "Gmsh.y" { - yymsg(INFO, "Step Iso-10303-21 file format read"); Resolve_BREP (); + yymsg(INFO, "Read Step Iso-10303-21 data"); ; break;} -case 20: -#line 242 "Gmsh.y" +case 22: +#line 248 "Gmsh.y" { ; break;} -case 21: -#line 245 "Gmsh.y" +case 23: +#line 251 "Gmsh.y" { ; break;} -case 22: -#line 249 "Gmsh.y" +case 24: +#line 255 "Gmsh.y" { ; break;} -case 23: -#line 255 "Gmsh.y" +case 25: +#line 261 "Gmsh.y" { Add_Cartesian_Point((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]); ; break;} -case 24: -#line 261 "Gmsh.y" +case 26: +#line 267 "Gmsh.y" { Add_BSpline_Curve_With_Knots ((int)yyvsp[-22].d, yyvsp[-18].c, (int) yyvsp[-16].d, yyvsp[-14].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1.); ; break;} -case 25: -#line 268 "Gmsh.y" +case 27: +#line 274 "Gmsh.y" { Add_BSpline_Surface_With_Knots ((int)yyvsp[-30].d, yyvsp[-26].c, (int) yyvsp[-24].d, (int) yyvsp[-22].d, yyvsp[-20].l, yyvsp[-10].l, yyvsp[-8].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1., 0., 1. ); ; break;} -case 26: -#line 274 "Gmsh.y" +case 28: +#line 280 "Gmsh.y" { Add_Edge_Curve ((int)yyvsp[-14].d, yyvsp[-10].c , (int)yyvsp[-8].d , (int)yyvsp[-6].d, (int)yyvsp[-4].d); ; break;} -case 27: -#line 278 "Gmsh.y" +case 29: +#line 284 "Gmsh.y" { Add_Face_Outer_Bound((int)yyvsp[-10].d, yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-2].i, 1); ; break;} -case 28: -#line 282 "Gmsh.y" +case 30: +#line 288 "Gmsh.y" { // check the norm! Face_Bound : hole outside surface! yymsg(INFO, "Found a face bound"); Add_Face_Outer_Bound((int)yyvsp[-10].d, yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-2].i, 0); ; break;} -case 29: -#line 289 "Gmsh.y" -{ - Add_Oriented_Edge((int)yyvsp[-14].d, yyvsp[-10].c, (int)yyvsp[-4].d, yyvsp[-2].i); - ; - break;} -case 30: -#line 293 "Gmsh.y" -{ - Add_Edge_Loop((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].l); - ; - break;} case 31: -#line 298 "Gmsh.y" +#line 295 "Gmsh.y" { - Add_Advanced_Face((int)yyvsp[-12].d, yyvsp[-8].c, yyvsp[-6].l, (int)yyvsp[-4].d, yyvsp[-2].i); + Add_Oriented_Edge((int)yyvsp[-14].d, yyvsp[-10].c, (int)yyvsp[-4].d, yyvsp[-2].i); ; break;} case 32: -#line 302 "Gmsh.y" +#line 299 "Gmsh.y" { - Add_Vertex_Point((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); + Add_Edge_Loop((int)yyvsp[-8].d, yyvsp[-4].c, yyvsp[-2].l); ; break;} case 33: -#line 306 "Gmsh.y" +#line 304 "Gmsh.y" { + Add_Advanced_Face((int)yyvsp[-12].d, yyvsp[-8].c, yyvsp[-6].l, (int)yyvsp[-4].d, yyvsp[-2].i); ; break;} case 34: -#line 310 "Gmsh.y" +#line 308 "Gmsh.y" { - Add_Axis2_Placement3D ((int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d); + Add_Vertex_Point((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); ; break;} case 35: -#line 314 "Gmsh.y" +#line 312 "Gmsh.y" { - Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]); ; break;} case 36: -#line 318 "Gmsh.y" +#line 316 "Gmsh.y" { - Add_Plane((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); + Add_Axis2_Placement3D ((int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d); ; break;} case 37: -#line 322 "Gmsh.y" +#line 320 "Gmsh.y" { - Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d); + Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]); ; break;} case 38: -#line 326 "Gmsh.y" +#line 324 "Gmsh.y" { - yymsg(INFO, "Found a closed shell"); - Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l); + Add_Plane((int)yyvsp[-8].d, yyvsp[-4].c, (int)yyvsp[-2].d); ; break;} case 39: -#line 332 "Gmsh.y" +#line 328 "Gmsh.y" { + Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d); ; break;} case 40: -#line 335 "Gmsh.y" +#line 332 "Gmsh.y" { + yymsg(INFO, "Found a closed shell"); + Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l); ; break;} case 41: #line 338 "Gmsh.y" { - Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d); ; break;} case 42: -#line 342 "Gmsh.y" +#line 341 "Gmsh.y" { - Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 43: -#line 346 "Gmsh.y" +#line 344 "Gmsh.y" { - Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); + Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d); ; break;} case 44: -#line 350 "Gmsh.y" +#line 348 "Gmsh.y" { - Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d); + Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 45: -#line 354 "Gmsh.y" +#line 352 "Gmsh.y" { - Add_Ellipse((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); + Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 46: -#line 359 "Gmsh.y" +#line 356 "Gmsh.y" { + Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d); ; break;} case 47: -#line 362 "Gmsh.y" +#line 360 "Gmsh.y" { + Add_Ellipse((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); ; break;} case 48: -#line 366 "Gmsh.y" +#line 365 "Gmsh.y" { ; break;} case 49: -#line 369 "Gmsh.y" +#line 368 "Gmsh.y" { ; break;} case 50: -#line 373 "Gmsh.y" +#line 372 "Gmsh.y" { ; break;} case 51: -#line 376 "Gmsh.y" +#line 375 "Gmsh.y" { ; break;} @@ -4873,82 +4880,82 @@ case 52: ; break;} case 53: -#line 387 "Gmsh.y" +#line 382 "Gmsh.y" { - ; + ; break;} case 54: -#line 390 "Gmsh.y" +#line 385 "Gmsh.y" { - yymsg(INFO, "Gmsh file format read"); - ; - break;} -case 55: -#line 396 "Gmsh.y" -{ return 1; ; + ; break;} -case 56: +case 57: #line 397 "Gmsh.y" { return 1; ; break;} -case 57: +case 58: #line 398 "Gmsh.y" { return 1; ; break;} -case 58: +case 59: #line 399 "Gmsh.y" { return 1; ; break;} -case 59: +case 60: #line 400 "Gmsh.y" { return 1; ; break;} -case 60: +case 61: #line 401 "Gmsh.y" -{ return 1; ; +{ List_Delete(yyvsp[0].l); return 1; ; break;} -case 61: +case 62: #line 402 "Gmsh.y" -{ return 1; ; +{ List_Delete(yyvsp[0].l); return 1; ; break;} -case 62: +case 63: #line 403 "Gmsh.y" { return 1; ; break;} -case 63: +case 64: #line 404 "Gmsh.y" { return 1; ; break;} -case 64: +case 65: #line 405 "Gmsh.y" { return 1; ; break;} -case 65: +case 66: #line 406 "Gmsh.y" -{ return 1; ; +{ List_Delete(yyvsp[0].l); return 1; ; break;} -case 66: +case 67: #line 407 "Gmsh.y" { return 1; ; break;} -case 67: +case 68: #line 408 "Gmsh.y" { return 1; ; break;} -case 68: +case 69: #line 409 "Gmsh.y" { return 1; ; break;} -case 69: -#line 414 "Gmsh.y" +case 70: +#line 410 "Gmsh.y" +{ return 1; ; + break;} +case 71: +#line 415 "Gmsh.y" { Msg(DIRECT, yyvsp[-2].c); ; break;} -case 70: -#line 418 "Gmsh.y" +case 72: +#line 419 "Gmsh.y" { - i = PrintListOfDouble(yyvsp[-4].c, yyvsp[-2].l, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble(yyvsp[-4].c, yyvsp[-2].l, tmpstring); if(i < 0) yymsg(GERROR, "Too few arguments in Printf"); else if(i > 0) @@ -4958,163 +4965,163 @@ case 70: List_Delete(yyvsp[-2].l); ; break;} -case 71: -#line 434 "Gmsh.y" +case 73: +#line 436 "Gmsh.y" { if(!strcmp(yyvsp[-5].c, "View")) EndView(View, 1, yyname, yyvsp[-4].c); ; break;} -case 72: -#line 438 "Gmsh.y" +case 74: +#line 440 "Gmsh.y" { if(!strcmp(yyvsp[-7].c, "View")) EndView(View, 1, yyname, yyvsp[-6].c); ; break;} -case 73: -#line 445 "Gmsh.y" +case 75: +#line 447 "Gmsh.y" { View = BeginView(1); ; break;} -case 100: -#line 478 "Gmsh.y" -{ List_Add(View->SP, &yyvsp[0].d) ; ; - break;} -case 101: +case 102: #line 480 "Gmsh.y" -{ List_Add(View->SP, &yyvsp[0].d) ; ; +{ List_Add(View->SP, &yyvsp[0].d); ; break;} -case 102: -#line 485 "Gmsh.y" +case 103: +#line 482 "Gmsh.y" +{ List_Add(View->SP, &yyvsp[0].d); ; + break;} +case 104: +#line 487 "Gmsh.y" { List_Add(View->SP, &yyvsp[-5].d); List_Add(View->SP, &yyvsp[-3].d); List_Add(View->SP, &yyvsp[-1].d); ; break;} -case 103: -#line 490 "Gmsh.y" +case 105: +#line 492 "Gmsh.y" { - View->NbSP++ ; + View->NbSP++; ; break;} -case 104: -#line 497 "Gmsh.y" -{ List_Add(View->VP, &yyvsp[0].d) ; ; - break;} -case 105: +case 106: #line 499 "Gmsh.y" -{ List_Add(View->VP, &yyvsp[0].d) ; ; +{ List_Add(View->VP, &yyvsp[0].d); ; break;} -case 106: -#line 504 "Gmsh.y" +case 107: +#line 501 "Gmsh.y" +{ List_Add(View->VP, &yyvsp[0].d); ; + break;} +case 108: +#line 506 "Gmsh.y" { List_Add(View->VP, &yyvsp[-5].d); List_Add(View->VP, &yyvsp[-3].d); List_Add(View->VP, &yyvsp[-1].d); ; break;} -case 107: -#line 509 "Gmsh.y" +case 109: +#line 511 "Gmsh.y" { - View->NbVP++ ; + View->NbVP++; ; break;} -case 108: -#line 516 "Gmsh.y" -{ List_Add(View->TP, &yyvsp[0].d) ; ; - break;} -case 109: +case 110: #line 518 "Gmsh.y" -{ List_Add(View->TP, &yyvsp[0].d) ; ; +{ List_Add(View->TP, &yyvsp[0].d); ; break;} -case 110: -#line 523 "Gmsh.y" +case 111: +#line 520 "Gmsh.y" +{ List_Add(View->TP, &yyvsp[0].d); ; + break;} +case 112: +#line 525 "Gmsh.y" { List_Add(View->TP, &yyvsp[-5].d); List_Add(View->TP, &yyvsp[-3].d); List_Add(View->TP, &yyvsp[-1].d); ; break;} -case 111: -#line 528 "Gmsh.y" +case 113: +#line 530 "Gmsh.y" { - View->NbTP++ ; + View->NbTP++; ; break;} -case 112: -#line 535 "Gmsh.y" -{ List_Add(View->SL, &yyvsp[0].d) ; ; - break;} -case 113: +case 114: #line 537 "Gmsh.y" -{ List_Add(View->SL, &yyvsp[0].d) ; ; +{ List_Add(View->SL, &yyvsp[0].d); ; break;} -case 114: -#line 543 "Gmsh.y" +case 115: +#line 539 "Gmsh.y" +{ List_Add(View->SL, &yyvsp[0].d); ; + break;} +case 116: +#line 545 "Gmsh.y" { List_Add(View->SL, &yyvsp[-11].d); List_Add(View->SL, &yyvsp[-5].d); List_Add(View->SL, &yyvsp[-9].d); List_Add(View->SL, &yyvsp[-3].d); List_Add(View->SL, &yyvsp[-7].d); List_Add(View->SL, &yyvsp[-1].d); ; break;} -case 115: -#line 549 "Gmsh.y" +case 117: +#line 551 "Gmsh.y" { - View->NbSL++ ; + View->NbSL++; ; break;} -case 116: -#line 556 "Gmsh.y" -{ List_Add(View->VL, &yyvsp[0].d) ; ; - break;} -case 117: +case 118: #line 558 "Gmsh.y" -{ List_Add(View->VL, &yyvsp[0].d) ; ; +{ List_Add(View->VL, &yyvsp[0].d); ; break;} -case 118: -#line 564 "Gmsh.y" +case 119: +#line 560 "Gmsh.y" +{ List_Add(View->VL, &yyvsp[0].d); ; + break;} +case 120: +#line 566 "Gmsh.y" { List_Add(View->VL, &yyvsp[-11].d); List_Add(View->VL, &yyvsp[-5].d); List_Add(View->VL, &yyvsp[-9].d); List_Add(View->VL, &yyvsp[-3].d); List_Add(View->VL, &yyvsp[-7].d); List_Add(View->VL, &yyvsp[-1].d); ; break;} -case 119: -#line 570 "Gmsh.y" +case 121: +#line 572 "Gmsh.y" { - View->NbVL++ ; + View->NbVL++; ; break;} -case 120: -#line 577 "Gmsh.y" -{ List_Add(View->TL, &yyvsp[0].d) ; ; - break;} -case 121: +case 122: #line 579 "Gmsh.y" -{ List_Add(View->TL, &yyvsp[0].d) ; ; +{ List_Add(View->TL, &yyvsp[0].d); ; break;} -case 122: -#line 585 "Gmsh.y" +case 123: +#line 581 "Gmsh.y" +{ List_Add(View->TL, &yyvsp[0].d); ; + break;} +case 124: +#line 587 "Gmsh.y" { List_Add(View->TL, &yyvsp[-11].d); List_Add(View->TL, &yyvsp[-5].d); List_Add(View->TL, &yyvsp[-9].d); List_Add(View->TL, &yyvsp[-3].d); List_Add(View->TL, &yyvsp[-7].d); List_Add(View->TL, &yyvsp[-1].d); ; break;} -case 123: -#line 591 "Gmsh.y" +case 125: +#line 593 "Gmsh.y" { - View->NbTL++ ; + View->NbTL++; ; break;} -case 124: -#line 598 "Gmsh.y" -{ List_Add(View->ST, &yyvsp[0].d) ; ; - break;} -case 125: +case 126: #line 600 "Gmsh.y" -{ List_Add(View->ST, &yyvsp[0].d) ; ; +{ List_Add(View->ST, &yyvsp[0].d); ; break;} -case 126: -#line 607 "Gmsh.y" +case 127: +#line 602 "Gmsh.y" +{ List_Add(View->ST, &yyvsp[0].d); ; + break;} +case 128: +#line 609 "Gmsh.y" { List_Add(View->ST, &yyvsp[-17].d); List_Add(View->ST, &yyvsp[-11].d); List_Add(View->ST, &yyvsp[-5].d); @@ -5124,22 +5131,22 @@ case 126: List_Add(View->ST, &yyvsp[-1].d); ; break;} -case 127: -#line 616 "Gmsh.y" +case 129: +#line 618 "Gmsh.y" { - View->NbST++ ; + View->NbST++; ; break;} -case 128: -#line 623 "Gmsh.y" -{ List_Add(View->VT, &yyvsp[0].d) ; ; - break;} -case 129: +case 130: #line 625 "Gmsh.y" -{ List_Add(View->VT, &yyvsp[0].d) ; ; +{ List_Add(View->VT, &yyvsp[0].d); ; break;} -case 130: -#line 632 "Gmsh.y" +case 131: +#line 627 "Gmsh.y" +{ List_Add(View->VT, &yyvsp[0].d); ; + break;} +case 132: +#line 634 "Gmsh.y" { List_Add(View->VT, &yyvsp[-17].d); List_Add(View->VT, &yyvsp[-11].d); List_Add(View->VT, &yyvsp[-5].d); @@ -5149,22 +5156,22 @@ case 130: List_Add(View->VT, &yyvsp[-1].d); ; break;} -case 131: -#line 641 "Gmsh.y" +case 133: +#line 643 "Gmsh.y" { - View->NbVT++ ; + View->NbVT++; ; break;} -case 132: -#line 648 "Gmsh.y" -{ List_Add(View->TT, &yyvsp[0].d) ; ; - break;} -case 133: +case 134: #line 650 "Gmsh.y" -{ List_Add(View->TT, &yyvsp[0].d) ; ; +{ List_Add(View->TT, &yyvsp[0].d); ; break;} -case 134: -#line 657 "Gmsh.y" +case 135: +#line 652 "Gmsh.y" +{ List_Add(View->TT, &yyvsp[0].d); ; + break;} +case 136: +#line 659 "Gmsh.y" { List_Add(View->TT, &yyvsp[-17].d); List_Add(View->TT, &yyvsp[-11].d); List_Add(View->TT, &yyvsp[-5].d); @@ -5174,22 +5181,22 @@ case 134: List_Add(View->TT, &yyvsp[-1].d); ; break;} -case 135: -#line 666 "Gmsh.y" +case 137: +#line 668 "Gmsh.y" { - View->NbTT++ ; + View->NbTT++; ; break;} -case 136: -#line 673 "Gmsh.y" -{ List_Add(View->SQ, &yyvsp[0].d) ; ; - break;} -case 137: +case 138: #line 675 "Gmsh.y" -{ List_Add(View->SQ, &yyvsp[0].d) ; ; +{ List_Add(View->SQ, &yyvsp[0].d); ; break;} -case 138: -#line 683 "Gmsh.y" +case 139: +#line 677 "Gmsh.y" +{ List_Add(View->SQ, &yyvsp[0].d); ; + break;} +case 140: +#line 685 "Gmsh.y" { List_Add(View->SQ, &yyvsp[-23].d); List_Add(View->SQ, &yyvsp[-17].d); List_Add(View->SQ, &yyvsp[-11].d); List_Add(View->SQ, &yyvsp[-5].d); @@ -5199,22 +5206,22 @@ case 138: List_Add(View->SQ, &yyvsp[-7].d); List_Add(View->SQ, &yyvsp[-1].d); ; break;} -case 139: -#line 692 "Gmsh.y" +case 141: +#line 694 "Gmsh.y" { - View->NbSQ++ ; + View->NbSQ++; ; break;} -case 140: -#line 699 "Gmsh.y" -{ List_Add(View->VQ, &yyvsp[0].d) ; ; - break;} -case 141: +case 142: #line 701 "Gmsh.y" -{ List_Add(View->VQ, &yyvsp[0].d) ; ; +{ List_Add(View->VQ, &yyvsp[0].d); ; break;} -case 142: -#line 709 "Gmsh.y" +case 143: +#line 703 "Gmsh.y" +{ List_Add(View->VQ, &yyvsp[0].d); ; + break;} +case 144: +#line 711 "Gmsh.y" { List_Add(View->VQ, &yyvsp[-23].d); List_Add(View->VQ, &yyvsp[-17].d); List_Add(View->VQ, &yyvsp[-11].d); List_Add(View->VQ, &yyvsp[-5].d); @@ -5224,22 +5231,22 @@ case 142: List_Add(View->VQ, &yyvsp[-7].d); List_Add(View->VQ, &yyvsp[-1].d); ; break;} -case 143: -#line 718 "Gmsh.y" +case 145: +#line 720 "Gmsh.y" { - View->NbVQ++ ; + View->NbVQ++; ; break;} -case 144: -#line 725 "Gmsh.y" -{ List_Add(View->TQ, &yyvsp[0].d) ; ; - break;} -case 145: +case 146: #line 727 "Gmsh.y" -{ List_Add(View->TQ, &yyvsp[0].d) ; ; +{ List_Add(View->TQ, &yyvsp[0].d); ; break;} -case 146: -#line 735 "Gmsh.y" +case 147: +#line 729 "Gmsh.y" +{ List_Add(View->TQ, &yyvsp[0].d); ; + break;} +case 148: +#line 737 "Gmsh.y" { List_Add(View->TQ, &yyvsp[-23].d); List_Add(View->TQ, &yyvsp[-17].d); List_Add(View->TQ, &yyvsp[-11].d); List_Add(View->TQ, &yyvsp[-5].d); @@ -5249,22 +5256,22 @@ case 146: List_Add(View->TQ, &yyvsp[-7].d); List_Add(View->TQ, &yyvsp[-1].d); ; break;} -case 147: -#line 744 "Gmsh.y" +case 149: +#line 746 "Gmsh.y" { - View->NbTQ++ ; + View->NbTQ++; ; break;} -case 148: -#line 751 "Gmsh.y" -{ List_Add(View->SS, &yyvsp[0].d) ; ; - break;} -case 149: +case 150: #line 753 "Gmsh.y" -{ List_Add(View->SS, &yyvsp[0].d) ; ; +{ List_Add(View->SS, &yyvsp[0].d); ; break;} -case 150: -#line 761 "Gmsh.y" +case 151: +#line 755 "Gmsh.y" +{ List_Add(View->SS, &yyvsp[0].d); ; + break;} +case 152: +#line 763 "Gmsh.y" { List_Add(View->SS, &yyvsp[-23].d); List_Add(View->SS, &yyvsp[-17].d); List_Add(View->SS, &yyvsp[-11].d); List_Add(View->SS, &yyvsp[-5].d); @@ -5274,22 +5281,22 @@ case 150: List_Add(View->SS, &yyvsp[-7].d); List_Add(View->SS, &yyvsp[-1].d); ; break;} -case 151: -#line 770 "Gmsh.y" +case 153: +#line 772 "Gmsh.y" { - View->NbSS++ ; + View->NbSS++; ; break;} -case 152: -#line 777 "Gmsh.y" -{ List_Add(View->VS, &yyvsp[0].d) ; ; - break;} -case 153: +case 154: #line 779 "Gmsh.y" -{ List_Add(View->VS, &yyvsp[0].d) ; ; +{ List_Add(View->VS, &yyvsp[0].d); ; break;} -case 154: -#line 787 "Gmsh.y" +case 155: +#line 781 "Gmsh.y" +{ List_Add(View->VS, &yyvsp[0].d); ; + break;} +case 156: +#line 789 "Gmsh.y" { List_Add(View->VS, &yyvsp[-23].d); List_Add(View->VS, &yyvsp[-17].d); List_Add(View->VS, &yyvsp[-11].d); List_Add(View->VS, &yyvsp[-5].d); @@ -5299,22 +5306,22 @@ case 154: List_Add(View->VS, &yyvsp[-7].d); List_Add(View->VS, &yyvsp[-1].d); ; break;} -case 155: -#line 796 "Gmsh.y" +case 157: +#line 798 "Gmsh.y" { - View->NbVS++ ; + View->NbVS++; ; break;} -case 156: -#line 803 "Gmsh.y" -{ List_Add(View->TS, &yyvsp[0].d) ; ; - break;} -case 157: +case 158: #line 805 "Gmsh.y" -{ List_Add(View->TS, &yyvsp[0].d) ; ; +{ List_Add(View->TS, &yyvsp[0].d); ; break;} -case 158: -#line 813 "Gmsh.y" +case 159: +#line 807 "Gmsh.y" +{ List_Add(View->TS, &yyvsp[0].d); ; + break;} +case 160: +#line 815 "Gmsh.y" { List_Add(View->TS, &yyvsp[-23].d); List_Add(View->TS, &yyvsp[-17].d); List_Add(View->TS, &yyvsp[-11].d); List_Add(View->TS, &yyvsp[-5].d); @@ -5324,22 +5331,22 @@ case 158: List_Add(View->TS, &yyvsp[-7].d); List_Add(View->TS, &yyvsp[-1].d); ; break;} -case 159: -#line 822 "Gmsh.y" +case 161: +#line 824 "Gmsh.y" { - View->NbTS++ ; + View->NbTS++; ; break;} -case 160: -#line 829 "Gmsh.y" -{ List_Add(View->SH, &yyvsp[0].d) ; ; - break;} -case 161: +case 162: #line 831 "Gmsh.y" -{ List_Add(View->SH, &yyvsp[0].d) ; ; +{ List_Add(View->SH, &yyvsp[0].d); ; break;} -case 162: -#line 843 "Gmsh.y" +case 163: +#line 833 "Gmsh.y" +{ List_Add(View->SH, &yyvsp[0].d); ; + break;} +case 164: +#line 845 "Gmsh.y" { List_Add(View->SH, &yyvsp[-47].d); List_Add(View->SH, &yyvsp[-41].d); List_Add(View->SH, &yyvsp[-35].d); List_Add(View->SH, &yyvsp[-29].d); @@ -5355,22 +5362,22 @@ case 162: List_Add(View->SH, &yyvsp[-7].d); List_Add(View->SH, &yyvsp[-1].d); ; break;} -case 163: -#line 858 "Gmsh.y" +case 165: +#line 860 "Gmsh.y" { - View->NbSH++ ; + View->NbSH++; ; break;} -case 164: -#line 865 "Gmsh.y" -{ List_Add(View->VH, &yyvsp[0].d) ; ; - break;} -case 165: +case 166: #line 867 "Gmsh.y" -{ List_Add(View->VH, &yyvsp[0].d) ; ; +{ List_Add(View->VH, &yyvsp[0].d); ; break;} -case 166: -#line 879 "Gmsh.y" +case 167: +#line 869 "Gmsh.y" +{ List_Add(View->VH, &yyvsp[0].d); ; + break;} +case 168: +#line 881 "Gmsh.y" { List_Add(View->VH, &yyvsp[-47].d); List_Add(View->VH, &yyvsp[-41].d); List_Add(View->VH, &yyvsp[-35].d); List_Add(View->VH, &yyvsp[-29].d); @@ -5386,22 +5393,22 @@ case 166: List_Add(View->VH, &yyvsp[-7].d); List_Add(View->VH, &yyvsp[-1].d); ; break;} -case 167: -#line 894 "Gmsh.y" +case 169: +#line 896 "Gmsh.y" { - View->NbVH++ ; + View->NbVH++; ; break;} -case 168: -#line 901 "Gmsh.y" -{ List_Add(View->TH, &yyvsp[0].d) ; ; - break;} -case 169: +case 170: #line 903 "Gmsh.y" -{ List_Add(View->TH, &yyvsp[0].d) ; ; +{ List_Add(View->TH, &yyvsp[0].d); ; break;} -case 170: -#line 915 "Gmsh.y" +case 171: +#line 905 "Gmsh.y" +{ List_Add(View->TH, &yyvsp[0].d); ; + break;} +case 172: +#line 917 "Gmsh.y" { List_Add(View->TH, &yyvsp[-47].d); List_Add(View->TH, &yyvsp[-41].d); List_Add(View->TH, &yyvsp[-35].d); List_Add(View->TH, &yyvsp[-29].d); @@ -5417,22 +5424,22 @@ case 170: List_Add(View->TH, &yyvsp[-7].d); List_Add(View->TH, &yyvsp[-1].d); ; break;} -case 171: -#line 930 "Gmsh.y" +case 173: +#line 932 "Gmsh.y" { - View->NbTH++ ; + View->NbTH++; ; break;} -case 172: -#line 937 "Gmsh.y" -{ List_Add(View->SI, &yyvsp[0].d) ; ; - break;} -case 173: +case 174: #line 939 "Gmsh.y" -{ List_Add(View->SI, &yyvsp[0].d) ; ; +{ List_Add(View->SI, &yyvsp[0].d); ; break;} -case 174: -#line 949 "Gmsh.y" +case 175: +#line 941 "Gmsh.y" +{ List_Add(View->SI, &yyvsp[0].d); ; + break;} +case 176: +#line 951 "Gmsh.y" { List_Add(View->SI, &yyvsp[-35].d); List_Add(View->SI, &yyvsp[-29].d); List_Add(View->SI, &yyvsp[-23].d); List_Add(View->SI, &yyvsp[-17].d); @@ -5445,22 +5452,22 @@ case 174: List_Add(View->SI, &yyvsp[-7].d); List_Add(View->SI, &yyvsp[-1].d); ; break;} -case 175: -#line 961 "Gmsh.y" +case 177: +#line 963 "Gmsh.y" { - View->NbSI++ ; + View->NbSI++; ; break;} -case 176: -#line 968 "Gmsh.y" -{ List_Add(View->VI, &yyvsp[0].d) ; ; - break;} -case 177: +case 178: #line 970 "Gmsh.y" -{ List_Add(View->VI, &yyvsp[0].d) ; ; +{ List_Add(View->VI, &yyvsp[0].d); ; break;} -case 178: -#line 980 "Gmsh.y" +case 179: +#line 972 "Gmsh.y" +{ List_Add(View->VI, &yyvsp[0].d); ; + break;} +case 180: +#line 982 "Gmsh.y" { List_Add(View->VI, &yyvsp[-35].d); List_Add(View->VI, &yyvsp[-29].d); List_Add(View->VI, &yyvsp[-23].d); List_Add(View->VI, &yyvsp[-17].d); @@ -5473,22 +5480,22 @@ case 178: List_Add(View->VI, &yyvsp[-7].d); List_Add(View->VI, &yyvsp[-1].d); ; break;} -case 179: -#line 992 "Gmsh.y" +case 181: +#line 994 "Gmsh.y" { - View->NbVI++ ; + View->NbVI++; ; break;} -case 180: -#line 999 "Gmsh.y" -{ List_Add(View->TI, &yyvsp[0].d) ; ; - break;} -case 181: +case 182: #line 1001 "Gmsh.y" -{ List_Add(View->TI, &yyvsp[0].d) ; ; +{ List_Add(View->TI, &yyvsp[0].d); ; break;} -case 182: -#line 1011 "Gmsh.y" +case 183: +#line 1003 "Gmsh.y" +{ List_Add(View->TI, &yyvsp[0].d); ; + break;} +case 184: +#line 1013 "Gmsh.y" { List_Add(View->TI, &yyvsp[-35].d); List_Add(View->TI, &yyvsp[-29].d); List_Add(View->TI, &yyvsp[-23].d); List_Add(View->TI, &yyvsp[-17].d); @@ -5501,22 +5508,22 @@ case 182: List_Add(View->TI, &yyvsp[-7].d); List_Add(View->TI, &yyvsp[-1].d); ; break;} -case 183: -#line 1023 "Gmsh.y" +case 185: +#line 1025 "Gmsh.y" { - View->NbTI++ ; + View->NbTI++; ; break;} -case 184: -#line 1030 "Gmsh.y" -{ List_Add(View->SY, &yyvsp[0].d) ; ; - break;} -case 185: +case 186: #line 1032 "Gmsh.y" -{ List_Add(View->SY, &yyvsp[0].d) ; ; +{ List_Add(View->SY, &yyvsp[0].d); ; break;} -case 186: -#line 1041 "Gmsh.y" +case 187: +#line 1034 "Gmsh.y" +{ List_Add(View->SY, &yyvsp[0].d); ; + break;} +case 188: +#line 1043 "Gmsh.y" { List_Add(View->SY, &yyvsp[-29].d); List_Add(View->SY, &yyvsp[-23].d); List_Add(View->SY, &yyvsp[-17].d); List_Add(View->SY, &yyvsp[-11].d); @@ -5529,22 +5536,22 @@ case 186: List_Add(View->SY, &yyvsp[-1].d); ; break;} -case 187: -#line 1053 "Gmsh.y" +case 189: +#line 1055 "Gmsh.y" { - View->NbSY++ ; + View->NbSY++; ; break;} -case 188: -#line 1060 "Gmsh.y" -{ List_Add(View->VY, &yyvsp[0].d) ; ; - break;} -case 189: +case 190: #line 1062 "Gmsh.y" -{ List_Add(View->VY, &yyvsp[0].d) ; ; +{ List_Add(View->VY, &yyvsp[0].d); ; break;} -case 190: -#line 1071 "Gmsh.y" +case 191: +#line 1064 "Gmsh.y" +{ List_Add(View->VY, &yyvsp[0].d); ; + break;} +case 192: +#line 1073 "Gmsh.y" { List_Add(View->VY, &yyvsp[-29].d); List_Add(View->VY, &yyvsp[-23].d); List_Add(View->VY, &yyvsp[-17].d); List_Add(View->VY, &yyvsp[-11].d); @@ -5557,22 +5564,22 @@ case 190: List_Add(View->VY, &yyvsp[-1].d); ; break;} -case 191: -#line 1083 "Gmsh.y" +case 193: +#line 1085 "Gmsh.y" { - View->NbVY++ ; + View->NbVY++; ; break;} -case 192: -#line 1090 "Gmsh.y" -{ List_Add(View->TY, &yyvsp[0].d) ; ; - break;} -case 193: +case 194: #line 1092 "Gmsh.y" -{ List_Add(View->TY, &yyvsp[0].d) ; ; +{ List_Add(View->TY, &yyvsp[0].d); ; break;} -case 194: -#line 1101 "Gmsh.y" +case 195: +#line 1094 "Gmsh.y" +{ List_Add(View->TY, &yyvsp[0].d); ; + break;} +case 196: +#line 1103 "Gmsh.y" { List_Add(View->TY, &yyvsp[-29].d); List_Add(View->TY, &yyvsp[-23].d); List_Add(View->TY, &yyvsp[-17].d); List_Add(View->TY, &yyvsp[-11].d); @@ -5585,102 +5592,104 @@ case 194: List_Add(View->TY, &yyvsp[-1].d); ; break;} -case 195: -#line 1113 "Gmsh.y" +case 197: +#line 1115 "Gmsh.y" { - View->NbTY++ ; + View->NbTY++; ; break;} -case 196: -#line 1120 "Gmsh.y" +case 198: +#line 1122 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 197: -#line 1125 "Gmsh.y" +case 199: +#line 1127 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T2C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 198: -#line 1133 "Gmsh.y" +case 200: +#line 1135 "Gmsh.y" { List_Add(View->T2D, &yyvsp[-5].d); List_Add(View->T2D, &yyvsp[-3].d); List_Add(View->T2D, &yyvsp[-1].d); - d = List_Nbr(View->T2C); + double d = List_Nbr(View->T2C); List_Add(View->T2D, &d); ; break;} -case 199: -#line 1140 "Gmsh.y" +case 201: +#line 1142 "Gmsh.y" { - View->NbT2++ ; + View->NbT2++; ; break;} -case 200: -#line 1147 "Gmsh.y" +case 202: +#line 1149 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 201: -#line 1152 "Gmsh.y" +case 203: +#line 1154 "Gmsh.y" { - for(i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]) ; + for(int i = 0; i < (int)strlen(yyvsp[0].c)+1; i++) List_Add(View->T3C, &yyvsp[0].c[i]); Free(yyvsp[0].c); ; break;} -case 202: -#line 1160 "Gmsh.y" +case 204: +#line 1162 "Gmsh.y" { List_Add(View->T3D, &yyvsp[-7].d); List_Add(View->T3D, &yyvsp[-5].d); List_Add(View->T3D, &yyvsp[-3].d); List_Add(View->T3D, &yyvsp[-1].d); - d = List_Nbr(View->T3C); + double d = List_Nbr(View->T3C); List_Add(View->T3D, &d); ; break;} -case 203: -#line 1167 "Gmsh.y" +case 205: +#line 1169 "Gmsh.y" { - View->NbT3++ ; + View->NbT3++; ; break;} -case 204: -#line 1176 "Gmsh.y" -{ yyval.i = 0 ; ; - break;} -case 205: -#line 1177 "Gmsh.y" -{ yyval.i = 1 ; ; - break;} case 206: #line 1178 "Gmsh.y" -{ yyval.i = 2 ; ; +{ yyval.i = 0; ; break;} case 207: #line 1179 "Gmsh.y" -{ yyval.i = 3 ; ; +{ yyval.i = 1; ; break;} case 208: #line 1180 "Gmsh.y" -{ yyval.i = 4 ; ; +{ yyval.i = 2; ; break;} case 209: -#line 1184 "Gmsh.y" -{ yyval.i = 1 ; ; +#line 1181 "Gmsh.y" +{ yyval.i = 3; ; break;} case 210: -#line 1185 "Gmsh.y" -{ yyval.i = -1 ; ; +#line 1182 "Gmsh.y" +{ yyval.i = 4; ; break;} case 211: -#line 1193 "Gmsh.y" +#line 1186 "Gmsh.y" +{ yyval.i = 1; ; + break;} +case 212: +#line 1187 "Gmsh.y" +{ yyval.i = -1; ; + break;} +case 213: +#line 1195 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-3].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); if(!yyvsp[-2].i){ @@ -5688,27 +5697,29 @@ case 211: Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c); } else{ - pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; + double *pd = (double*)List_Pointer_Fast(pSymbol->val, 0); switch(yyvsp[-2].i){ - case 0 : *pd = yyvsp[-1].d; break ; - case 1 : *pd += yyvsp[-1].d ; break ; - case 2 : *pd -= yyvsp[-1].d ; break ; - case 3 : *pd *= yyvsp[-1].d ; break ; + case 0 : *pd = yyvsp[-1].d; break; + case 1 : *pd += yyvsp[-1].d; break; + case 2 : *pd -= yyvsp[-1].d; break; + case 3 : *pd *= yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; + if(yyvsp[-1].d) *pd /= yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s /= %g'", yyvsp[-3].c, yyvsp[-1].d); break; } } ; break;} -case 212: -#line 1220 "Gmsh.y" +case 214: +#line 1223 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-6].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!yyvsp[-2].i){ @@ -5716,17 +5727,18 @@ case 212: Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-6].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-6].c); } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d))){ switch(yyvsp[-2].i){ - case 0 : *pd = yyvsp[-1].d; break ; - case 1 : *pd += yyvsp[-1].d ; break ; - case 2 : *pd -= yyvsp[-1].d ; break ; - case 3 : *pd *= yyvsp[-1].d ; break ; + case 0 : *pd = yyvsp[-1].d; break; + case 1 : *pd += yyvsp[-1].d; break; + case 2 : *pd -= yyvsp[-1].d; break; + case 3 : *pd *= yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; + if(yyvsp[-1].d) *pd /= yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].d); break; } @@ -5735,42 +5747,45 @@ case 212: if(!yyvsp[-2].i) List_Put(pSymbol->val, (int)yyvsp[-4].d, &yyvsp[-1].d); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d); } } ; break;} -case 213: -#line 1254 "Gmsh.y" +case 215: +#line 1259 "Gmsh.y" { if(List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-1].l)) yymsg(GERROR, "Incompatible array dimensions in affectation"); else{ + Symbol TheSymbol; TheSymbol.Name = yyvsp[-8].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!yyvsp[-2].i){ - for(i = 0; i < List_Nbr(yyvsp[-5].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-5].l); i++){ List_Put(TheSymbol.val, (int)(*(double*)List_Pointer(yyvsp[-5].l, i)), (double*)List_Pointer(yyvsp[-1].l, i)); } Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-8].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-8].c); } else{ - for(i = 0; i < List_Nbr(yyvsp[-5].l); i++){ - j = (int)(*(double*)List_Pointer(yyvsp[-5].l, i)) ; - d = *(double*)List_Pointer(yyvsp[-1].l, i) ; + for(int i = 0; i < List_Nbr(yyvsp[-5].l); i++){ + int j = (int)(*(double*)List_Pointer(yyvsp[-5].l, i)); + double d = *(double*)List_Pointer(yyvsp[-1].l, i); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ switch(yyvsp[-2].i){ - case 0 : *pd = d; break ; - case 1 : *pd += d ; break ; - case 2 : *pd -= d ; break ; - case 3 : *pd *= d ; break ; + case 0 : *pd = d; break; + case 1 : *pd += d; break; + case 2 : *pd -= d; break; + case 3 : *pd *= d; break; case 4 : - if(yyvsp[-1].l) *pd /= d ; + if(yyvsp[-1].l) *pd /= d; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", yyvsp[-8].c, j, d); break; } @@ -5779,7 +5794,7 @@ case 213: if(!yyvsp[-2].i) List_Put(pSymbol->val, j, &d); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-8].c, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-8].c, j); } } } @@ -5788,10 +5803,12 @@ case 213: List_Delete(yyvsp[-1].l); ; break;} -case 214: -#line 1301 "Gmsh.y" +case 216: +#line 1308 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); List_Copy(yyvsp[-1].l, TheSymbol.val); @@ -5804,159 +5821,182 @@ case 214: List_Delete(yyvsp[-1].l); ; break;} -case 215: -#line 1316 "Gmsh.y" +case 217: +#line 1324 "Gmsh.y" { + Symbol TheSymbol; TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); else *(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[-1].i; ; break;} -case 216: -#line 1325 "Gmsh.y" +case 218: +#line 1334 "Gmsh.y" { - TheSymbol.Name = yyvsp[-5].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c); else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-3].d))) - *pd += yyvsp[-1].i ; + *pd += yyvsp[-1].i; else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d); } ; break;} -case 217: -#line 1340 "Gmsh.y" +case 219: +#line 1352 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-5].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-5].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c); else - pStrOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].c) ; + pStrOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].c); } ; break;} -case 218: -#line 1352 "Gmsh.y" +case 220: +#line 1365 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-8].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-8].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c); else - pStrOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, yyvsp[-1].c) ; + pStrOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, yyvsp[-1].c); } ; break;} -case 219: -#line 1366 "Gmsh.y" +case 221: +#line 1381 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c); else{ + double d = 0; switch(yyvsp[-2].i){ - case 0 : d = yyvsp[-1].d ; break ; - case 1 : d = pNumOpt(0, GMSH_GET, 0) + yyvsp[-1].d ; break ; - case 2 : d = pNumOpt(0, GMSH_GET, 0) - yyvsp[-1].d ; break ; - case 3 : d = pNumOpt(0, GMSH_GET, 0) * yyvsp[-1].d ; break ; + case 0 : d = yyvsp[-1].d; break; + case 1 : d = pNumOpt(0, GMSH_GET, 0) + yyvsp[-1].d; break; + case 2 : d = pNumOpt(0, GMSH_GET, 0) - yyvsp[-1].d; break; + case 3 : d = pNumOpt(0, GMSH_GET, 0) * yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) d = pNumOpt(0, GMSH_GET, 0) / yyvsp[-1].d ; + if(yyvsp[-1].d) d = pNumOpt(0, GMSH_GET, 0) / yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s.%s /= %g'", yyvsp[-5].c, yyvsp[-3].c, yyvsp[-1].d); break; } - pNumOpt(0, GMSH_SET|GMSH_GUI, d) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, d); } } ; break;} -case 220: -#line 1389 "Gmsh.y" +case 222: +#line 1406 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-8].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-8].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c); else{ + double d = 0; switch(yyvsp[-2].i){ - case 0 : d = yyvsp[-1].d; break ; - case 1 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) + yyvsp[-1].d ; break ; - case 2 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) - yyvsp[-1].d ; break ; - case 3 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) * yyvsp[-1].d ; break ; + case 0 : d = yyvsp[-1].d; break; + case 1 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) + yyvsp[-1].d; break; + case 2 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) - yyvsp[-1].d; break; + case 3 : d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) * yyvsp[-1].d; break; case 4 : - if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) / yyvsp[-1].d ; + if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d, GMSH_GET, 0) / yyvsp[-1].d; else yymsg(GERROR, "Division by zero in '%s[%d].%s /= %g'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c, yyvsp[-1].d); break; } - pNumOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, d) ; + pNumOpt((int)yyvsp[-6].d, GMSH_SET|GMSH_GUI, d); } } ; break;} -case 221: -#line 1413 "Gmsh.y" +case 223: +#line 1432 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-4].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-4].c, yyvsp[-2].c); else - pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[-1].i) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[-1].i); } ; break;} -case 222: -#line 1425 "Gmsh.y" +case 224: +#line 1445 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-7].c))) yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-7].c); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-7].c, (int)yyvsp[-5].d, yyvsp[-2].c); else - pNumOpt((int)yyvsp[-5].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-5].d, GMSH_GET, 0)+yyvsp[-1].i) ; + pNumOpt((int)yyvsp[-5].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-5].d, GMSH_GET, 0)+yyvsp[-1].i); } ; break;} -case 223: -#line 1439 "Gmsh.y" +case 225: +#line 1461 "Gmsh.y" { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory(yyvsp[-7].c))) yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-7].c); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat))) yymsg(GERROR, "Unknown color option '%s.Color.%s'", yyvsp[-7].c, yyvsp[-3].c); else - pColOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].u) ; + pColOpt(0, GMSH_SET|GMSH_GUI, yyvsp[-1].u); } ; break;} -case 224: -#line 1451 "Gmsh.y" +case 226: +#line 1474 "Gmsh.y" { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory(yyvsp[-10].c))) yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-10].c); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat))) yymsg(GERROR, "Unknown color option '%s[%d].Color.%s'", yyvsp[-10].c, (int)yyvsp[-8].d, yyvsp[-3].c); else - pColOpt((int)yyvsp[-8].d, GMSH_SET|GMSH_GUI, yyvsp[-1].u) ; + pColOpt((int)yyvsp[-8].d, GMSH_SET|GMSH_GUI, yyvsp[-1].u); } ; break;} -case 225: -#line 1465 "Gmsh.y" +case 227: +#line 1490 "Gmsh.y" { GmshColorTable *ct = Get_ColorTable(0); if(!ct) @@ -5967,7 +6007,7 @@ case 225: yymsg(GERROR, "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]); + for(int i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -5976,8 +6016,8 @@ case 225: List_Delete(yyvsp[-1].l); ; break;} -case 226: -#line 1485 "Gmsh.y" +case 228: +#line 1509 "Gmsh.y" { GmshColorTable *ct = Get_ColorTable((int)yyvsp[-6].d); if(!ct) @@ -5988,7 +6028,7 @@ case 226: yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", ct->size, COLORTABLE_NBMAX_COLOR, (int)yyvsp[-6].d); else - for(i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); + for(int i = 0; i < ct->size; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -5997,8 +6037,8 @@ case 226: List_Delete(yyvsp[-1].l); ; break;} -case 227: -#line 1507 "Gmsh.y" +case 229: +#line 1531 "Gmsh.y" { try { GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].d); @@ -6008,8 +6048,8 @@ case 227: } ; break;} -case 228: -#line 1517 "Gmsh.y" +case 230: +#line 1540 "Gmsh.y" { try { GMSH_PluginManager::instance()->setPluginOption(yyvsp[-6].c, yyvsp[-3].c, yyvsp[-1].c); @@ -6019,47 +6059,68 @@ case 228: } ; break;} -case 229: -#line 1535 "Gmsh.y" +case 231: +#line 1558 "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]); + int num = (int)yyvsp[-4].d; + if(FindPoint(num, THEM)){ + yymsg(GERROR, "Point %d already exists", num); + } + else{ + Vertex *v = Create_Vertex(num, CTX.geom.scaling_factor * yyvsp[-1].v[0], + CTX.geom.scaling_factor * yyvsp[-1].v[1], + CTX.geom.scaling_factor * yyvsp[-1].v[2], + CTX.geom.scaling_factor * yyvsp[-1].v[3], 1.0); + Tree_Add(THEM->Points, &v); + } yyval.s.Type = MSH_POINT; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 230: -#line 1542 "Gmsh.y" +case 232: +#line 1574 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_POINT, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT, THEM)){ + yymsg(GERROR, "Physical point %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_PHYSICAL_POINT; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 231: -#line 1548 "Gmsh.y" +case 233: +#line 1590 "Gmsh.y" { - Vertex *v; - Attractor *a; - double p; - int ip; for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){ + double p; List_Read(yyvsp[-9].l, i, &p); - ip = (int)p; - v = FindPoint(ip, THEM); + Vertex *v = FindPoint((int)p, THEM); if(!v) - yymsg(WARNING, "Unknown Point %d", ip); + yymsg(WARNING, "Unknown Point %d", (int)p); else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, v, NULL, NULL); + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, v, NULL, NULL); List_Add(THEM->Metric->Attractors, &a); } } + List_Delete(yyvsp[-9].l); + // dummy values + yyval.s.Type = 0; + yyval.s.Num = 0; ; break;} -case 232: -#line 1567 "Gmsh.y" +case 234: +#line 1609 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + double d; List_Read(yyvsp[-3].l, i, &d); Vertex *v = FindPoint((int)d, THEM); if(!v) @@ -6067,323 +6128,593 @@ case 232: else v->lc = yyvsp[-1].d; } - ; - break;} -case 233: -#line 1581 "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 234: -#line 1587 "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; + List_Delete(yyvsp[-3].l); + // dummy values + yyval.s.Type = 0; + yyval.s.Num = 0; ; break;} case 235: -#line 1593 "Gmsh.y" +#line 1628 "Gmsh.y" { - Curve *c; - Attractor *a; - double p; - int ip; - for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){ - List_Read(yyvsp[-9].l, i, &p); - ip = (int)p; - c = FindCurve(ip, THEM); - if(!c) - yymsg(WARNING, "Unknown Curve %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, NULL, c, NULL); - List_Add(THEM->Metric->Attractors, &a); - } + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_LINE; + yyval.s.Num = num; ; break;} case 236: -#line 1612 "Gmsh.y" +#line 1646 "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; + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_SPLN; + yyval.s.Num = num; ; break;} case 237: -#line 1618 "Gmsh.y" +#line 1664 "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; + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_CIRC; + yyval.s.Num = num; ; break;} case 238: -#line 1624 "Gmsh.y" +#line 1682 "Gmsh.y" { - List_T *temp; - int i, j; - double d; - temp = List_Create(List_Nbr(yyvsp[-3].l), 1, sizeof(int)); - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ - List_Read(yyvsp[-3].l, i, &d); - j = (int)d; - List_Add(temp, &j); + int num = (int)yyvsp[-6].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-3].l); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + c->Circle.n[0] = yyvsp[-1].v[0]; + c->Circle.n[1] = yyvsp[-1].v[1]; + c->Circle.n[2] = yyvsp[-1].v[2]; + End_Curve(c); + Tree_Add(THEM->Curves, &c); + Curve *rc = CreateReversedCurve(THEM, c); + rc->Circle.n[0] = yyvsp[-1].v[0]; + rc->Circle.n[1] = yyvsp[-1].v[1]; + rc->Circle.n[2] = yyvsp[-1].v[2]; + End_Curve(rc); + List_Delete(temp); } - AddCircleInDataBase ((int) yyvsp[-6].d, MSH_SEGM_CIRC, temp, yyvsp[-1].v); - List_Delete(temp); - yyval.s.Type = MSH_SEGM_CIRC ; - yyval.s.Num = (int)yyvsp[-6].d; + List_Delete(yyvsp[-3].l); + yyval.s.Type = MSH_SEGM_CIRC; + yyval.s.Num = num; ; break;} case 239: -#line 1641 "Gmsh.y" +#line 1708 "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; + int num = (int)yyvsp[-4].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_ELLI; + yyval.s.Num = num; ; break;} case 240: -#line 1647 "Gmsh.y" +#line 1727 "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; + int num = (int)yyvsp[-14].d; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + Curve *c = Create_Curve(num, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, + -1, -1, yyvsp[-10].d, yyvsp[-8].d); + strcpy(c->functu, yyvsp[-6].c); + strcpy(c->functv, yyvsp[-4].c); + strcpy(c->functw, yyvsp[-2].c); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + } + yyval.s.Type = MSH_SEGM_PARAMETRIC; + yyval.s.Num = num; ; break;} case 241: -#line 1653 "Gmsh.y" +#line 1745 "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; + int num = (int)yyvsp[-4].d; + if(List_Nbr(yyvsp[-1].l) < 4){ + yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", num, + List_Nbr(yyvsp[-1].l)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_BSPLN; + yyval.s.Num = num; ; break;} case 242: -#line 1659 "Gmsh.y" +#line 1769 "Gmsh.y" { - if(List_Nbr(yyvsp[-1].l) > 3){ - 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; - } - else - yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", (int)yyvsp[-4].d, + int num = (int)yyvsp[-4].d; + if(List_Nbr(yyvsp[-1].l) < 4){ + yymsg(GERROR, "Too few control points for Bezier curve %d (%d < 4)", num, List_Nbr(yyvsp[-1].l)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_BEZIER; + yyval.s.Num = num; ; break;} case 243: -#line 1670 "Gmsh.y" +#line 1793 "Gmsh.y" { - if(List_Nbr(yyvsp[-1].l) > 3){ - Cdbseg101((int)yyvsp[-4].d, MSH_SEGM_BEZIER, 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; + int num = (int)yyvsp[-8].d; + if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){ + yymsg(GERROR, "Wrong definition of Nurbs Curve %d: " + "got %d knots, need N + D + 1 = %d + %d + 1 = %d", + (int)yyvsp[-8].d, List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1); } - else - yymsg(GERROR, "Too few control points for Bezier %d (%d < 4)", (int)yyvsp[-4].d, - List_Nbr(yyvsp[-1].l)); + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-5].l); + Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)yyvsp[-1].d, temp, yyvsp[-3].l, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete(yyvsp[-5].l); + List_Delete(yyvsp[-3].l); + yyval.s.Type = MSH_SEGM_NURBS; + yyval.s.Num = num; ; break;} case 244: -#line 1681 "Gmsh.y" +#line 1819 "Gmsh.y" { - List_T *Temp; - int i; - double d; - if(List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1 != List_Nbr(yyvsp[-3].l)){ - yymsg(GERROR, "Wrong definition of Nurbs Curve %d: " - "got %d Knots, need N + D + 1 = %d + %d + 1 = %d", - (int)yyvsp[-8].d, - List_Nbr(yyvsp[-3].l), List_Nbr(yyvsp[-5].l), (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l) + (int)yyvsp[-1].d + 1); + int num = (int)yyvsp[-4].d; + if(FindEdgeLoop(num, THEM)){ + yymsg(GERROR, "Line loop %d already exists", num); } else{ - Temp = List_Create(List_Nbr(yyvsp[-5].l), 1, sizeof(int)); - for(i = 0; i < List_Nbr(yyvsp[-5].l); i++) { - List_Read(yyvsp[-5].l, i, &d); - j = (int)d; - List_Add(Temp, &j); - } - AddCurveInDataBase ((int)yyvsp[-8].d, MSH_SEGM_NURBS, (int)yyvsp[-1].d, Temp, yyvsp[-3].l, -1, -1, 0., 1.); - List_Delete(Temp); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + sortEdgesInLoop(num, temp); + EdgeLoop *l = Create_EdgeLoop(num, temp); + Tree_Add(THEM->EdgeLoops, &l); + List_Delete(temp); } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SEGM_LOOP; + yyval.s.Num = num; ; break;} case 245: -#line 1706 "Gmsh.y" +#line 1836 "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; + for(int i = 0; i < List_Nbr(yyvsp[-9].l); i++){ + double p; + List_Read(yyvsp[-9].l, i, &p); + Curve *c = FindCurve((int)p, THEM); + if(!c) + yymsg(WARNING, "Unknown Curve %d", (int)p); + else{ + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d, NULL, c, NULL); + List_Add(THEM->Metric->Attractors, &a); + } + } + // dummy values + yyval.s.Type = 0; + yyval.s.Num = 0; ; break;} case 246: -#line 1712 "Gmsh.y" +#line 1854 "Gmsh.y" { - Surface *s,*support; - support = FindSurface((int)yyvsp[-4].d, THEM); - if(!support) - yymsg(GERROR, "Unknown Surface %d", (int)yyvsp[-4].d); + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE, THEM)){ + yymsg(GERROR, "Physical line %d already exists", num); + } else{ - Cdbz101((int)yyvsp[-8].d, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, yyvsp[-2].l, NULL); - s = FindSurface((int)yyvsp[-8].d, THEM); - if(!s) - yymsg(GERROR, "Unknown Surface %d", (int)yyvsp[-8].d); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_PHYSICAL_LINE; + yyval.s.Num = num; + ; + break;} +case 247: +#line 1873 "Gmsh.y" +{ + int num = (int)yyvsp[-4].d; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + Surface *s = Create_Surface(num, MSH_SURF_PLAN); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SURF_PLAN; + yyval.s.Num = num; + ; + break;} +case 248: +#line 1892 "Gmsh.y" +{ + int num = (int)yyvsp[-4].d, type = 0; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + double d; + List_Read(yyvsp[-1].l, 0, &d); + EdgeLoop *el = FindEdgeLoop((int)d, THEM); + if(!el){ + yymsg(GERROR, "Unknown Line Loop %d", (int)d); + } + else{ + int j = List_Nbr(el->Curves); + if(j == 4){ + type = MSH_SURF_REGL; + } + else if(j == 3){ + type = MSH_SURF_TRIC; + } + else{ + yymsg(GERROR, "Wrong definition of Ruled Surface %d: " + "%d borders instead of 3 or 4", num, j); + type = MSH_SURF_PLAN; + } + Surface *s = Create_Surface(num, type); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = type; + yyval.s.Num = num; + ; + break;} +case 249: +#line 1931 "Gmsh.y" +{ + int num = (int)yyvsp[-8].d; + Surface *support = FindSurface((int)yyvsp[-4].d, THEM); + if(!support){ + yymsg(GERROR, "Unknown support surface %d", (int)yyvsp[-4].d); + } + else{ + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } else{ - s->Typ = MSH_SURF_TRIMMED; + Surface *s = Create_Surface(num, MSH_SURF_TRIMMED); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-2].l); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); s->Support = support; - yyval.s.Type = MSH_SURF_TRIMMED; - yyval.s.Num = (int)yyvsp[-8].d; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); } } + List_Delete(yyvsp[-2].l); + yyval.s.Type = MSH_SURF_TRIMMED; + yyval.s.Num = num; + ; + break;} +case 250: +#line 1957 "Gmsh.y" +{ + int num = (int)yyvsp[-10].d, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); + } + else{ + // FIXME: parameters not used; undocumented + POLY_rep *rep = new POLY_rep(yyvsp[-2].l, yyvsp[-1].l); + s->thePolyRep = rep; + type = s->Typ; + } + //FIXME: do you copy the data? + //List_Delete($12); + //List_Delete($13); + yyval.s.Type = type; + yyval.s.Num = (int)yyvsp[-10].d; ; break;} -case 247: -#line 1731 "Gmsh.y" +case 251: +#line 1979 "Gmsh.y" { - List_Read(yyvsp[-1].l, 0, &d); - i = (int)d; - EdgeLoop *el = FindEdgeLoop(i, THEM); - if(!el) - yymsg(GERROR, "Unknown Line Loop %d", i); + int num = (int)yyvsp[-10].d, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); + } else{ - j = List_Nbr(el->Curves); - if(j==4) - yyval.s.Type = MSH_SURF_REGL; - else if(j==3) - yyval.s.Type = MSH_SURF_TRIC; - else - yymsg(GERROR, "Wrong definition of Ruled Surface %d: " - "%d borders instead of 3 or 4", - (int)yyvsp[-4].d, j); - 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; + POLY_rep *rep = new POLY_rep(yyvsp[-2].l, yyvsp[-1].l); + s->thePolyRep = rep; + type = s->Typ; } + yyval.s.Type = type; + yyval.s.Num = (int)yyvsp[-10].d; ; break;} -case 248: -#line 1753 "Gmsh.y" -{ - AddTriangulationToSurface ((int) yyvsp[-10].d, (int) yyvsp[-6].d, (int) yyvsp[-4].d, yyvsp[-2].l, yyvsp[-1].l); - yyval.s.Num = (int)yyvsp[-10].d; - ; - break;} -case 249: -#line 1761 "Gmsh.y" +case 252: +#line 1996 "Gmsh.y" { - CreateNurbsSurface ((int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + int num = (int)yyvsp[-16].d; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurface(num, (int)yyvsp[-4].d, (int)yyvsp[-2].d, yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + } + for(int i = 0; i < List_Nbr(yyvsp[-13].l); i++) + List_Delete((List_T*)List_Pointer(yyvsp[-13].l, i)); + List_Delete(yyvsp[-13].l); + List_Delete(yyvsp[-10].l); + List_Delete(yyvsp[-8].l); yyval.s.Type = MSH_SURF_NURBS; - yyval.s.Num = (int)yyvsp[-16].d; + yyval.s.Num = num; ; break;} -case 250: -#line 1769 "Gmsh.y" +case 253: +#line 2015 "Gmsh.y" { - CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + int num = (int)yyvsp[-16].d; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurfaceSupport(num, (int)yyvsp[-4].d, (int)yyvsp[-2].d, yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); + } + for(int i = 0; i < List_Nbr(yyvsp[-13].l); i++) + List_Delete((List_T*)List_Pointer(yyvsp[-13].l, i)); + List_Delete(yyvsp[-13].l); + List_Delete(yyvsp[-10].l); + List_Delete(yyvsp[-8].l); + yyval.s.Type = MSH_SURF_NURBS; + yyval.s.Num = num; ; break;} -case 251: -#line 1773 "Gmsh.y" +case 254: +#line 2032 "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; + int num = (int)yyvsp[-4].d; + if(FindSurfaceLoop(num, THEM)){ + yymsg(GERROR, "Surface loop %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + SurfaceLoop *l = Create_SurfaceLoop(num, temp); + Tree_Add(THEM->SurfaceLoops, &l); + List_Delete(temp); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_SURF_LOOP; + yyval.s.Num = num; ; break;} -case 252: -#line 1779 "Gmsh.y" +case 255: +#line 2048 "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; + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE, THEM)){ + yymsg(GERROR, "Physical surface %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); + yyval.s.Type = MSH_PHYSICAL_SURFACE; + yyval.s.Num = num; ; break;} -case 253: -#line 1788 "Gmsh.y" +case 256: +#line 2067 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 254: -#line 1794 "Gmsh.y" +case 257: +#line 2084 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 255: -#line 1800 "Gmsh.y" +case 258: +#line 2101 "Gmsh.y" { - Cdbz101((int)yyvsp[-4].d, MSH_PHYSICAL_VOLUME, 0, 0, 0, 0, 0, NULL, yyvsp[-1].l, NULL); + int num = (int)yyvsp[-4].d; + if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME, THEM)){ + yymsg(GERROR, "Physical volume %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt(yyvsp[-1].l); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete(yyvsp[-1].l); yyval.s.Type = MSH_PHYSICAL_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; + yyval.s.Num = num; ; break;} -case 256: -#line 1811 "Gmsh.y" +case 259: +#line 2122 "Gmsh.y" { - TranslateShapes (yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l, 1); + TranslateShapes(yyvsp[-3].v[0], yyvsp[-3].v[1], yyvsp[-3].v[2], yyvsp[-1].l, 1); yyval.l = yyvsp[-1].l; ; break;} -case 257: -#line 1816 "Gmsh.y" +case 260: +#line 2127 "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, 1); yyval.l = yyvsp[-1].l; ; break;} -case 258: -#line 1821 "Gmsh.y" +case 261: +#line 2132 "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 259: -#line 1826 "Gmsh.y" +case 262: +#line 2137 "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 260: -#line 1833 "Gmsh.y" +case 263: +#line 2144 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 261: -#line 1834 "Gmsh.y" +case 264: +#line 2145 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 262: -#line 1835 "Gmsh.y" +case 265: +#line 2146 "Gmsh.y" { yyval.l = yyvsp[0].l; ; break;} -case 263: -#line 1840 "Gmsh.y" +case 266: +#line 2151 "Gmsh.y" { yyval.l = List_Create(3, 3, sizeof(Shape)); ; break;} -case 264: -#line 1844 "Gmsh.y" +case 267: +#line 2155 "Gmsh.y" { List_Add(yyval.l, &yyvsp[0].s); ; break;} -case 265: -#line 1848 "Gmsh.y" +case 268: +#line 2159 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Vertex *v = FindPoint(TheShape.Num, THEM); if(!v) @@ -6395,11 +6726,13 @@ case 265: } ; break;} -case 266: -#line 1862 "Gmsh.y" +case 269: +#line 2175 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Curve *c = FindCurve(TheShape.Num, THEM); if(!c) @@ -6411,11 +6744,13 @@ case 266: } ; break;} -case 267: -#line 1876 "Gmsh.y" +case 270: +#line 2191 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Surface *s = FindSurface(TheShape.Num, THEM); if(!s) @@ -6427,11 +6762,13 @@ case 267: } ; break;} -case 268: -#line 1890 "Gmsh.y" +case 271: +#line 2207 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + double d; List_Read(yyvsp[-2].l, i, &d); + Shape TheShape; TheShape.Num = (int)d; Volume *v = FindVolume(TheShape.Num, THEM); if(!v) @@ -6443,102 +6780,119 @@ case 268: } ; break;} -case 269: -#line 1909 "Gmsh.y" +case 272: +#line 2228 "Gmsh.y" { yyval.l = List_Create(3, 3, sizeof(Shape)); - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); + int j; CopyShape(TheShape.Type, TheShape.Num, &j); TheShape.Num = j; List_Add(yyval.l, &TheShape); } + List_Delete(yyvsp[-1].l); ; break;} -case 270: -#line 1919 "Gmsh.y" +case 273: +#line 2241 "Gmsh.y" { if(!strcmp(yyvsp[-4].c, "View")) DuplicateView((int)yyvsp[-2].d, 0); yyval.l = NULL; ; break;} -case 271: -#line 1930 "Gmsh.y" +case 274: +#line 2252 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); DeleteShape(TheShape.Type, TheShape.Num); } + List_Delete(yyvsp[-1].l); ; break;} -case 272: -#line 1937 "Gmsh.y" +case 275: +#line 2261 "Gmsh.y" { if(!strcmp(yyvsp[-4].c, "View")) RemoveViewByIndex((int)yyvsp[-2].d); ; break;} -case 273: -#line 1941 "Gmsh.y" +case 276: +#line 2265 "Gmsh.y" { if(!strcmp(yyvsp[-1].c, "Meshes") || !strcmp(yyvsp[-1].c, "All")) Init_Mesh(THEM); ; break;} -case 274: -#line 1951 "Gmsh.y" +case 277: +#line 2275 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); ColorShape(TheShape.Type, TheShape.Num, yyvsp[-3].u); } + List_Delete(yyvsp[-1].l); ; break;} -case 275: -#line 1963 "Gmsh.y" +case 278: +#line 2289 "Gmsh.y" { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber(yyvsp[-1].c, i, m); ; break;} -case 276: -#line 1970 "Gmsh.y" +case 279: +#line 2296 "Gmsh.y" { - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber(yyvsp[-1].c, i, 0); ; break;} -case 277: -#line 1975 "Gmsh.y" +case 280: +#line 2301 "Gmsh.y" { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, m); } + List_Delete(yyvsp[-1].l); ; break;} -case 278: -#line 1984 "Gmsh.y" +case 281: +#line 2312 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ - List_Read (yyvsp[-1].l, i, &TheShape); + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + Shape TheShape; + List_Read(yyvsp[-1].l, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, 0); } + List_Delete(yyvsp[-1].l); ; break;} -case 279: -#line 1996 "Gmsh.y" +case 282: +#line 2326 "Gmsh.y" { if(!strcmp(yyvsp[-2].c, "Include")){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); + // Warning: we *don't* close included files. If you need to + // include many files, use "Merge" instead: some OSes limit + // the number of files a process can open simultaneously (500 + // for OS X) ParseFile(tmpstring, 0, 0); } else if(!strcmp(yyvsp[-2].c, "Print")){ #if defined(HAVE_FLTK) if(!CTX.batch){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); CreateOutputFile(tmpstring, CTX.print.format); } @@ -6546,15 +6900,18 @@ case 279: } else if(!strcmp(yyvsp[-2].c, "Save")){ #if defined(HAVE_FLTK) + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); CreateOutputFile(tmpstring, CTX.mesh.format); #endif } else if(!strcmp(yyvsp[-2].c, "Merge")){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); MergeProblem(tmpstring); } else if(!strcmp(yyvsp[-2].c, "MergeWithBoundingBox")){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); MergeProblemWithBoundingBox(tmpstring); } @@ -6566,12 +6923,13 @@ case 279: } ; break;} -case 280: -#line 2031 "Gmsh.y" +case 283: +#line 2370 "Gmsh.y" { if(!strcmp(yyvsp[-6].c, "Save") && !strcmp(yyvsp[-5].c, "View")){ Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)yyvsp[-3].d); if(v){ + char tmpstring[1024]; FixRelativePath(yyvsp[-1].c, tmpstring); WriteView(v, tmpstring, 0, 0); } @@ -6581,8 +6939,8 @@ case 280: } ; break;} -case 281: -#line 2044 "Gmsh.y" +case 284: +#line 2384 "Gmsh.y" { if(!strcmp(yyvsp[-2].c, "Sleep")){ long sleep_time = GetTime(); @@ -6591,8 +6949,6 @@ case 281: } } else if(!strcmp(yyvsp[-2].c, "Mesh")){ - //Maillage_Dimension_0(THEM); - //mai3d(THEM, (int)$2); yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts"); } else{ @@ -6600,19 +6956,19 @@ case 281: } ; break;} -case 282: -#line 2061 "Gmsh.y" +case 285: +#line 2399 "Gmsh.y" { try { GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0); } - catch (...) { + catch(...) { yymsg(WARNING, "Unknown action '%s' or plugin '%s'", yyvsp[-1].c, yyvsp[-4].c); } ; break;} -case 283: -#line 2070 "Gmsh.y" +case 286: +#line 2408 "Gmsh.y" { if(!strcmp(yyvsp[-1].c, "Views")) CombineViews(1, 0); @@ -6622,14 +6978,14 @@ case 283: yymsg(GERROR, "Unknown Combine command"); ; break;} -case 284: -#line 2079 "Gmsh.y" +case 287: +#line 2417 "Gmsh.y" { exit(0); ; break;} -case 285: -#line 2083 "Gmsh.y" +case 288: +#line 2421 "Gmsh.y" { #if defined(HAVE_FLTK) if(!CTX.batch){ // we're in interactive mode @@ -6646,39 +7002,48 @@ case 285: #endif ; break;} -case 286: -#line 2105 "Gmsh.y" +case 289: +#line 2443 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 287: -#line 2115 "Gmsh.y" +case 290: +#line 2457 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 288: -#line 2125 "Gmsh.y" +case 291: +#line 2471 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c ; - + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c; + Symbol TheSymbol; TheSymbol.Name = yyvsp[-6].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &yyvsp[-3].d); @@ -6687,21 +7052,25 @@ case 288: else{ List_Write(pSymbol->val, 0, &yyvsp[-3].d); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 289: -#line 2146 "Gmsh.y" +case 292: +#line 2496 "Gmsh.y" { - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ; - LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c ; - + LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d; + LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d; + LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d; + LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c; + Symbol TheSymbol; TheSymbol.Name = yyvsp[-8].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &yyvsp[-5].d); @@ -6710,72 +7079,82 @@ case 289: else{ List_Write(pSymbol->val, 0, &yyvsp[-5].d); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } ; break;} -case 290: -#line 2167 "Gmsh.y" +case 293: +#line 2521 "Gmsh.y" { if(LoopControlVariablesTab[ImbricatedLoop-1][1] > LoopControlVariablesTab[ImbricatedLoop-1][0]){ LoopControlVariablesTab[ImbricatedLoop-1][0] += LoopControlVariablesTab[ImbricatedLoop-1][2]; - if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){ + Symbol TheSymbol; TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1]; - pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol); - *(double*)List_Pointer_Fast(pSymbol->val, 0) += - LoopControlVariablesTab[ImbricatedLoop-1][2] ; + Symbol *pSymbol; + if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) + yymsg(GERROR, "Unknown loop variable"); + else + *(double*)List_Pointer_Fast(pSymbol->val, 0) += + LoopControlVariablesTab[ImbricatedLoop-1][2]; } - fsetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]); yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1]; } else{ ImbricatedLoop--; + if(ImbricatedLoop < 0){ + yymsg(GERROR, "Problem with imbricated loops"); + ImbricatedLoop = 0; + } } ; break;} -case 291: -#line 2188 "Gmsh.y" +case 294: +#line 2548 "Gmsh.y" { if(!FunctionManager::Instance()->createFunction(yyvsp[0].c, yyin, yyname, yylineno)) yymsg(GERROR, "Redefinition of function %s", yyvsp[0].c); skip_until(NULL, "Return"); ; break;} -case 292: -#line 2194 "Gmsh.y" +case 295: +#line 2554 "Gmsh.y" { if(!FunctionManager::Instance()->leaveFunction(&yyin, yyname, yylineno)) yymsg(GERROR, "Error while exiting function"); ; break;} -case 293: -#line 2199 "Gmsh.y" +case 296: +#line 2559 "Gmsh.y" { if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c, &yyin, yyname, yylineno)) yymsg(GERROR, "Unknown function %s", yyvsp[-1].c); ; break;} -case 294: -#line 2204 "Gmsh.y" +case 297: +#line 2564 "Gmsh.y" { if(!yyvsp[-1].d) skip_until("If", "EndIf"); ; break;} -case 295: -#line 2208 "Gmsh.y" +case 298: +#line 2568 "Gmsh.y" { ; break;} -case 296: -#line 2219 "Gmsh.y" +case 299: +#line 2579 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, NULL); @@ -6784,10 +7163,11 @@ case 296: List_Add(yyval.l, &TheShape); ; break;} -case 297: -#line 2229 "Gmsh.y" +case 300: +#line 2590 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)yyvsp[-8].d, 0., 0., 0., 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, 1, NULL); @@ -6796,10 +7176,11 @@ case 297: List_Add(yyval.l, &TheShape); ; break;} -case 298: -#line 2239 "Gmsh.y" +case 301: +#line 2601 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)yyvsp[-10].d, 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].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, &pc, &prc, 1, NULL); @@ -6808,17 +7189,18 @@ case 298: List_Add(yyval.l, &TheShape); ; break;} -case 299: -#line 2249 "Gmsh.y" +case 302: +#line 2612 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 300: -#line 2254 "Gmsh.y" +case 303: +#line 2617 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, &extr); @@ -6827,17 +7209,18 @@ case 300: List_Add(yyval.l, &TheShape); ; break;} -case 301: -#line 2264 "Gmsh.y" +case 304: +#line 2628 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 302: -#line 2269 "Gmsh.y" +case 305: +#line 2633 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)yyvsp[-12].d, 0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &pc, &prc, 1, &extr); @@ -6846,17 +7229,18 @@ case 302: List_Add(yyval.l, &TheShape); ; break;} -case 303: -#line 2279 "Gmsh.y" +case 306: +#line 2644 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 304: -#line 2284 "Gmsh.y" +case 307: +#line 2649 "Gmsh.y" { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &pc, &prc, 1, &extr); @@ -6865,10 +7249,11 @@ case 304: List_Add(yyval.l, &TheShape); ; break;} -case 305: -#line 2296 "Gmsh.y" +case 308: +#line 2662 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, NULL); @@ -6884,10 +7269,11 @@ case 305: List_Add(yyval.l, &TheShape); ; break;} -case 306: -#line 2313 "Gmsh.y" +case 309: +#line 2680 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)yyvsp[-8].d, 0., 0., 0., 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, &ps, 1, NULL); @@ -6903,10 +7289,11 @@ case 306: List_Add(yyval.l, &TheShape); ; break;} -case 307: -#line 2330 "Gmsh.y" +case 310: +#line 2698 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)yyvsp[-10].d, 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].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, &ps, 1, NULL); @@ -6922,17 +7309,18 @@ case 307: List_Add(yyval.l, &TheShape); ; break;} -case 308: -#line 2347 "Gmsh.y" +case 311: +#line 2716 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 309: -#line 2352 "Gmsh.y" +case 312: +#line 2721 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, &extr); @@ -6948,17 +7336,18 @@ case 309: List_Add(yyval.l, &TheShape); ; break;} -case 310: -#line 2369 "Gmsh.y" +case 313: +#line 2739 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 311: -#line 2374 "Gmsh.y" +case 314: +#line 2744 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)yyvsp[-12].d, 0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &ps, 1, &extr); @@ -6974,17 +7363,18 @@ case 311: List_Add(yyval.l, &TheShape); ; break;} -case 312: -#line 2391 "Gmsh.y" +case 315: +#line 2762 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 313: -#line 2396 "Gmsh.y" +case 316: +#line 2767 "Gmsh.y" { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, &ps, 1, &extr); @@ -7000,9 +7390,10 @@ case 313: List_Add(yyval.l, &TheShape); ; break;} -case 314: -#line 2416 "Gmsh.y" +case 317: +#line 2788 "Gmsh.y" { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2], 0., 0., 0., 0., 0., 0., 0., 0, NULL); @@ -7018,9 +7409,10 @@ case 314: List_Add(yyval.l, &TheShape); ; break;} -case 315: -#line 2432 "Gmsh.y" +case 318: +#line 2805 "Gmsh.y" { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)yyvsp[-8].d, 0., 0., 0., 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); @@ -7036,9 +7428,10 @@ case 315: List_Add(yyval.l, &TheShape); ; break;} -case 316: -#line 2448 "Gmsh.y" +case 319: +#line 2822 "Gmsh.y" { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)yyvsp[-10].d, 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].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d, 0, NULL); @@ -7054,20 +7447,20 @@ case 316: List_Add(yyval.l, &TheShape); ; break;} -case 317: -#line 2464 "Gmsh.y" +case 320: +#line 2839 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 318: -#line 2469 "Gmsh.y" +case 321: +#line 2844 "Gmsh.y" { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], 0., 0., 0., 0., 0., 0., 0., - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -7080,20 +7473,20 @@ case 318: List_Add(yyval.l, &TheShape); ; break;} -case 319: -#line 2486 "Gmsh.y" +case 322: +#line 2861 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 320: -#line 2492 "Gmsh.y" +case 323: +#line 2867 "Gmsh.y" { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)yyvsp[-12].d, 0., 0., 0., yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -7106,20 +7499,20 @@ case 320: List_Add(yyval.l, &TheShape); ; break;} -case 321: -#line 2509 "Gmsh.y" +case 324: +#line 2884 "Gmsh.y" { extr.mesh.ExtrudeMesh = false; extr.mesh.Recombine = false; ; break;} -case 322: -#line 2515 "Gmsh.y" +case 325: +#line 2890 "Gmsh.y" { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2], yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -7132,18 +7525,18 @@ case 322: List_Add(yyval.l, &TheShape); ; break;} -case 323: -#line 2535 "Gmsh.y" +case 326: +#line 2910 "Gmsh.y" { ; break;} -case 324: -#line 2538 "Gmsh.y" +case 327: +#line 2913 "Gmsh.y" { ; break;} -case 325: -#line 2544 "Gmsh.y" +case 328: +#line 2919 "Gmsh.y" { double d; extr.mesh.ExtrudeMesh = true; @@ -7170,8 +7563,8 @@ case 325: List_Delete(yyvsp[-2].l); ; break;} -case 326: -#line 2570 "Gmsh.y" +case 329: +#line 2945 "Gmsh.y" { double d; extr.mesh.ExtrudeMesh = true; @@ -7196,20 +7589,20 @@ case 326: List_Delete(yyvsp[-2].l); ; break;} -case 327: -#line 2594 "Gmsh.y" +case 330: +#line 2969 "Gmsh.y" { extr.mesh.Recombine = true; ; break;} -case 328: -#line 2603 "Gmsh.y" +case 331: +#line 2978 "Gmsh.y" { - Curve *c; - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + double d; List_Read(yyvsp[-3].l, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -7222,14 +7615,14 @@ case 328: List_Delete(yyvsp[-3].l); ; break;} -case 329: -#line 2621 "Gmsh.y" +case 332: +#line 2996 "Gmsh.y" { - Curve *c; - for(i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + double d; List_Read(yyvsp[-6].l, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -7242,14 +7635,14 @@ case 329: List_Delete(yyvsp[-6].l); ; break;} -case 330: -#line 2639 "Gmsh.y" +case 333: +#line 3014 "Gmsh.y" { - Curve *c; - for(i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){ + double d; List_Read(yyvsp[-6].l, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -7262,23 +7655,24 @@ case 330: List_Delete(yyvsp[-6].l); ; break;} -case 331: -#line 2657 "Gmsh.y" +case 334: +#line 3032 "Gmsh.y" { Surface *s = FindSurface((int)yyvsp[-4].d, THEM); if(!s) yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d); else{ s->Method = TRANSFINI; - k = List_Nbr(yyvsp[-1].l); - if(k!=3 && k!=4){ + int k = List_Nbr(yyvsp[-1].l); + if(k != 3 && k != 4){ yymsg(GERROR, "Wrong definition of Transfinite Surface %d: " - "%d points instead of 3 or 4" , yyvsp[-4].d, k) ; + "%d points instead of 3 or 4" , yyvsp[-4].d, k); } else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -7286,22 +7680,23 @@ case 331: List_Delete(yyvsp[-1].l); ; break;} -case 332: -#line 2679 "Gmsh.y" +case 335: +#line 3055 "Gmsh.y" { Surface *s = FindSurface((int)yyvsp[-4].d, THEM); if(!s) yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d); else{ s->Method = ELLIPTIC; - k = List_Nbr(yyvsp[-1].l); + int k = List_Nbr(yyvsp[-1].l); if(k != 4) yymsg(GERROR, "Wrong definition of Elliptic Surface %d: " - "%d points instead of 4" , yyvsp[-4].d, k) ; + "%d points instead of 4" , yyvsp[-4].d, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -7309,22 +7704,23 @@ case 332: List_Delete(yyvsp[-1].l); ; break;} -case 333: -#line 2700 "Gmsh.y" +case 336: +#line 3077 "Gmsh.y" { Volume *v = FindVolume((int)yyvsp[-4].d, THEM); if(!v) yymsg(WARNING, "Unknown Volume %d", (int)yyvsp[-4].d); else{ v->Method = TRANSFINI; - k = List_Nbr(yyvsp[-1].l); + int k = List_Nbr(yyvsp[-1].l); if(k != 6 && k != 8) yymsg(GERROR, "Wrong definition of Transfinite Volume %d: " - "%d points instead of 6 or 8" , yyvsp[-4].d, k) ; + "%d points instead of 6 or 8" , yyvsp[-4].d, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); v->ipar[i] = j; } } @@ -7332,14 +7728,14 @@ case 333: List_Delete(yyvsp[-1].l); ; break;} -case 334: -#line 2721 "Gmsh.y" +case 337: +#line 3099 "Gmsh.y" { - Surface *s; - for(i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){ + double d; List_Read(yyvsp[-3].l, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = (yyvsp[-1].d > 0 && yyvsp[-1].d < 90) ? yyvsp[-1].d : 90; @@ -7348,14 +7744,14 @@ case 334: List_Delete(yyvsp[-3].l); ; break;} -case 335: -#line 2735 "Gmsh.y" +case 338: +#line 3113 "Gmsh.y" { - Surface *s; - for(i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){ + double d; List_Read(yyvsp[-1].l, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = 30.; @@ -7364,857 +7760,896 @@ case 335: List_Delete(yyvsp[-1].l); ; break;} -case 336: -#line 2755 "Gmsh.y" +case 339: +#line 3133 "Gmsh.y" { ReplaceAllDuplicates(THEM); ; break;} -case 337: -#line 2759 "Gmsh.y" +case 340: +#line 3137 "Gmsh.y" { IntersectAllSegmentsTogether(); ; break;} -case 338: -#line 2768 "Gmsh.y" -{yyval.i = 1;; - break;} -case 339: -#line 2769 "Gmsh.y" -{yyval.i = 0;; - break;} -case 340: -#line 2770 "Gmsh.y" -{yyval.i = -1;; - break;} case 341: -#line 2771 "Gmsh.y" -{yyval.i = -1;; +#line 3146 "Gmsh.y" +{yyval.i = 1;; break;} case 342: -#line 2772 "Gmsh.y" -{yyval.i = -1;; +#line 3147 "Gmsh.y" +{yyval.i = 0;; break;} case 343: -#line 2776 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; +#line 3148 "Gmsh.y" +{yyval.i = -1;; break;} case 344: -#line 2777 "Gmsh.y" -{ yyval.d = yyvsp[-1].d ; ; +#line 3149 "Gmsh.y" +{yyval.i = -1;; break;} case 345: -#line 2778 "Gmsh.y" -{ yyval.d = -yyvsp[0].d ; ; +#line 3150 "Gmsh.y" +{yyval.i = -1;; break;} case 346: -#line 2779 "Gmsh.y" +#line 3154 "Gmsh.y" { yyval.d = yyvsp[0].d; ; break;} case 347: -#line 2780 "Gmsh.y" -{ yyval.d = !yyvsp[0].d ; ; +#line 3155 "Gmsh.y" +{ yyval.d = yyvsp[-1].d; ; break;} case 348: -#line 2781 "Gmsh.y" -{ yyval.d = yyvsp[-2].d - yyvsp[0].d ; ; +#line 3156 "Gmsh.y" +{ yyval.d = -yyvsp[0].d; ; break;} case 349: -#line 2782 "Gmsh.y" -{ yyval.d = yyvsp[-2].d + yyvsp[0].d ; ; +#line 3157 "Gmsh.y" +{ yyval.d = yyvsp[0].d; ; break;} case 350: -#line 2783 "Gmsh.y" -{ yyval.d = yyvsp[-2].d * yyvsp[0].d ; ; +#line 3158 "Gmsh.y" +{ yyval.d = !yyvsp[0].d; ; break;} case 351: -#line 2785 "Gmsh.y" -{ - if(!yyvsp[0].d) - yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d); - else - yyval.d = yyvsp[-2].d / yyvsp[0].d ; - ; +#line 3159 "Gmsh.y" +{ yyval.d = yyvsp[-2].d - yyvsp[0].d; ; break;} case 352: -#line 2791 "Gmsh.y" -{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ; ; +#line 3160 "Gmsh.y" +{ yyval.d = yyvsp[-2].d + yyvsp[0].d; ; break;} case 353: -#line 2792 "Gmsh.y" -{ yyval.d = pow(yyvsp[-2].d, yyvsp[0].d) ; ; +#line 3161 "Gmsh.y" +{ yyval.d = yyvsp[-2].d * yyvsp[0].d; ; break;} case 354: -#line 2793 "Gmsh.y" -{ yyval.d = yyvsp[-2].d < yyvsp[0].d ; ; +#line 3163 "Gmsh.y" +{ + if(!yyvsp[0].d) + yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d); + else + yyval.d = yyvsp[-2].d / yyvsp[0].d; + ; break;} case 355: -#line 2794 "Gmsh.y" -{ yyval.d = yyvsp[-2].d > yyvsp[0].d ; ; +#line 3169 "Gmsh.y" +{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d; ; break;} case 356: -#line 2795 "Gmsh.y" -{ yyval.d = yyvsp[-2].d <= yyvsp[0].d ; ; +#line 3170 "Gmsh.y" +{ yyval.d = pow(yyvsp[-2].d, yyvsp[0].d); ; break;} case 357: -#line 2796 "Gmsh.y" -{ yyval.d = yyvsp[-2].d >= yyvsp[0].d ; ; +#line 3171 "Gmsh.y" +{ yyval.d = yyvsp[-2].d < yyvsp[0].d; ; break;} case 358: -#line 2797 "Gmsh.y" -{ yyval.d = yyvsp[-2].d == yyvsp[0].d ; ; +#line 3172 "Gmsh.y" +{ yyval.d = yyvsp[-2].d > yyvsp[0].d; ; break;} case 359: -#line 2798 "Gmsh.y" -{ yyval.d = yyvsp[-2].d != yyvsp[0].d ; ; +#line 3173 "Gmsh.y" +{ yyval.d = yyvsp[-2].d <= yyvsp[0].d; ; break;} case 360: -#line 2799 "Gmsh.y" -{ yyval.d = yyvsp[-2].d && yyvsp[0].d ; ; +#line 3174 "Gmsh.y" +{ yyval.d = yyvsp[-2].d >= yyvsp[0].d; ; break;} case 361: -#line 2800 "Gmsh.y" -{ yyval.d = yyvsp[-2].d || yyvsp[0].d ; ; +#line 3175 "Gmsh.y" +{ yyval.d = yyvsp[-2].d == yyvsp[0].d; ; break;} case 362: -#line 2801 "Gmsh.y" -{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ; +#line 3176 "Gmsh.y" +{ yyval.d = yyvsp[-2].d != yyvsp[0].d; ; break;} case 363: -#line 2802 "Gmsh.y" -{ yyval.d = exp(yyvsp[-1].d); ; +#line 3177 "Gmsh.y" +{ yyval.d = yyvsp[-2].d && yyvsp[0].d; ; break;} case 364: -#line 2803 "Gmsh.y" -{ yyval.d = log(yyvsp[-1].d); ; +#line 3178 "Gmsh.y" +{ yyval.d = yyvsp[-2].d || yyvsp[0].d; ; break;} case 365: -#line 2804 "Gmsh.y" -{ yyval.d = log10(yyvsp[-1].d); ; +#line 3179 "Gmsh.y" +{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d; ; break;} case 366: -#line 2805 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-1].d); ; +#line 3180 "Gmsh.y" +{ yyval.d = exp(yyvsp[-1].d); ; break;} case 367: -#line 2806 "Gmsh.y" -{ yyval.d = sin(yyvsp[-1].d); ; +#line 3181 "Gmsh.y" +{ yyval.d = log(yyvsp[-1].d); ; break;} case 368: -#line 2807 "Gmsh.y" -{ yyval.d = asin(yyvsp[-1].d); ; +#line 3182 "Gmsh.y" +{ yyval.d = log10(yyvsp[-1].d); ; break;} case 369: -#line 2808 "Gmsh.y" -{ yyval.d = cos(yyvsp[-1].d); ; +#line 3183 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-1].d); ; break;} case 370: -#line 2809 "Gmsh.y" -{ yyval.d = acos(yyvsp[-1].d); ; +#line 3184 "Gmsh.y" +{ yyval.d = sin(yyvsp[-1].d); ; break;} case 371: -#line 2810 "Gmsh.y" -{ yyval.d = tan(yyvsp[-1].d); ; +#line 3185 "Gmsh.y" +{ yyval.d = asin(yyvsp[-1].d); ; break;} case 372: -#line 2811 "Gmsh.y" -{ yyval.d = atan(yyvsp[-1].d); ; +#line 3186 "Gmsh.y" +{ yyval.d = cos(yyvsp[-1].d); ; break;} case 373: -#line 2812 "Gmsh.y" -{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3187 "Gmsh.y" +{ yyval.d = acos(yyvsp[-1].d); ; break;} case 374: -#line 2813 "Gmsh.y" -{ yyval.d = sinh(yyvsp[-1].d); ; +#line 3188 "Gmsh.y" +{ yyval.d = tan(yyvsp[-1].d); ; break;} case 375: -#line 2814 "Gmsh.y" -{ yyval.d = cosh(yyvsp[-1].d); ; +#line 3189 "Gmsh.y" +{ yyval.d = atan(yyvsp[-1].d); ; break;} case 376: -#line 2815 "Gmsh.y" -{ yyval.d = tanh(yyvsp[-1].d); ; +#line 3190 "Gmsh.y" +{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);; break;} case 377: -#line 2816 "Gmsh.y" -{ yyval.d = fabs(yyvsp[-1].d); ; +#line 3191 "Gmsh.y" +{ yyval.d = sinh(yyvsp[-1].d); ; break;} case 378: -#line 2817 "Gmsh.y" -{ yyval.d = floor(yyvsp[-1].d); ; +#line 3192 "Gmsh.y" +{ yyval.d = cosh(yyvsp[-1].d); ; break;} case 379: -#line 2818 "Gmsh.y" -{ yyval.d = ceil(yyvsp[-1].d); ; +#line 3193 "Gmsh.y" +{ yyval.d = tanh(yyvsp[-1].d); ; break;} case 380: -#line 2819 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3194 "Gmsh.y" +{ yyval.d = fabs(yyvsp[-1].d); ; break;} case 381: -#line 2820 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3195 "Gmsh.y" +{ yyval.d = floor(yyvsp[-1].d); ; break;} case 382: -#line 2821 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; +#line 3196 "Gmsh.y" +{ yyval.d = ceil(yyvsp[-1].d); ; break;} case 383: -#line 2822 "Gmsh.y" -{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; +#line 3197 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 384: -#line 2824 "Gmsh.y" -{ yyval.d = exp(yyvsp[-1].d); ; +#line 3198 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 385: -#line 2825 "Gmsh.y" -{ yyval.d = log(yyvsp[-1].d); ; +#line 3199 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; break;} case 386: -#line 2826 "Gmsh.y" -{ yyval.d = log10(yyvsp[-1].d); ; +#line 3200 "Gmsh.y" +{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; break;} case 387: -#line 2827 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-1].d); ; +#line 3202 "Gmsh.y" +{ yyval.d = exp(yyvsp[-1].d); ; break;} case 388: -#line 2828 "Gmsh.y" -{ yyval.d = sin(yyvsp[-1].d); ; +#line 3203 "Gmsh.y" +{ yyval.d = log(yyvsp[-1].d); ; break;} case 389: -#line 2829 "Gmsh.y" -{ yyval.d = asin(yyvsp[-1].d); ; +#line 3204 "Gmsh.y" +{ yyval.d = log10(yyvsp[-1].d); ; break;} case 390: -#line 2830 "Gmsh.y" -{ yyval.d = cos(yyvsp[-1].d); ; +#line 3205 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-1].d); ; break;} case 391: -#line 2831 "Gmsh.y" -{ yyval.d = acos(yyvsp[-1].d); ; +#line 3206 "Gmsh.y" +{ yyval.d = sin(yyvsp[-1].d); ; break;} case 392: -#line 2832 "Gmsh.y" -{ yyval.d = tan(yyvsp[-1].d); ; +#line 3207 "Gmsh.y" +{ yyval.d = asin(yyvsp[-1].d); ; break;} case 393: -#line 2833 "Gmsh.y" -{ yyval.d = atan(yyvsp[-1].d); ; +#line 3208 "Gmsh.y" +{ yyval.d = cos(yyvsp[-1].d); ; break;} case 394: -#line 2834 "Gmsh.y" -{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3209 "Gmsh.y" +{ yyval.d = acos(yyvsp[-1].d); ; break;} case 395: -#line 2835 "Gmsh.y" -{ yyval.d = sinh(yyvsp[-1].d); ; +#line 3210 "Gmsh.y" +{ yyval.d = tan(yyvsp[-1].d); ; break;} case 396: -#line 2836 "Gmsh.y" -{ yyval.d = cosh(yyvsp[-1].d); ; +#line 3211 "Gmsh.y" +{ yyval.d = atan(yyvsp[-1].d); ; break;} case 397: -#line 2837 "Gmsh.y" -{ yyval.d = tanh(yyvsp[-1].d); ; +#line 3212 "Gmsh.y" +{ yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);; break;} case 398: -#line 2838 "Gmsh.y" -{ yyval.d = fabs(yyvsp[-1].d); ; +#line 3213 "Gmsh.y" +{ yyval.d = sinh(yyvsp[-1].d); ; break;} case 399: -#line 2839 "Gmsh.y" -{ yyval.d = floor(yyvsp[-1].d); ; +#line 3214 "Gmsh.y" +{ yyval.d = cosh(yyvsp[-1].d); ; break;} case 400: -#line 2840 "Gmsh.y" -{ yyval.d = ceil(yyvsp[-1].d); ; +#line 3215 "Gmsh.y" +{ yyval.d = tanh(yyvsp[-1].d); ; break;} case 401: -#line 2841 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3216 "Gmsh.y" +{ yyval.d = fabs(yyvsp[-1].d); ; break;} case 402: -#line 2842 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; +#line 3217 "Gmsh.y" +{ yyval.d = floor(yyvsp[-1].d); ; break;} case 403: -#line 2843 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; +#line 3218 "Gmsh.y" +{ yyval.d = ceil(yyvsp[-1].d); ; break;} case 404: -#line 2844 "Gmsh.y" -{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; +#line 3219 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 405: -#line 2853 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; +#line 3220 "Gmsh.y" +{ yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ; break;} case 406: -#line 2854 "Gmsh.y" -{ yyval.d = 3.141592653589793; ; +#line 3221 "Gmsh.y" +{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; break;} case 407: -#line 2855 "Gmsh.y" -{ yyval.d = ParUtil::Instance()->rank(); ; +#line 3222 "Gmsh.y" +{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; break;} case 408: -#line 2856 "Gmsh.y" -{ yyval.d = ParUtil::Instance()->size(); ; +#line 3231 "Gmsh.y" +{ yyval.d = yyvsp[0].d; ; break;} case 409: -#line 2861 "Gmsh.y" +#line 3232 "Gmsh.y" +{ yyval.d = 3.141592653589793; ; + break;} +case 410: +#line 3233 "Gmsh.y" +{ yyval.d = ParUtil::Instance()->rank(); ; + break;} +case 411: +#line 3234 "Gmsh.y" +{ yyval.d = ParUtil::Instance()->size(); ; + break;} +case 412: +#line 3239 "Gmsh.y" { - TheSymbol.Name = yyvsp[0].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[0].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[0].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[0].c); + yyval.d = 0.; } else - yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0) ; + yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0); ; break;} -case 410: -#line 2872 "Gmsh.y" +case 413: +#line 3251 "Gmsh.y" { - TheSymbol.Name = yyvsp[-3].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-3].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-3].c); + yyval.d = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-1].d))) - yyval.d = *pd ; + yyval.d = *pd; else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d) ; - yyval.d = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d); + yyval.d = 0.; } } ; break;} -case 411: -#line 2889 "Gmsh.y" +case 414: +#line 3270 "Gmsh.y" { - TheSymbol.Name = yyvsp[-2].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); + yyval.d = 0.; } else{ yyval.d = List_Nbr(pSymbol->val); } ; break;} -case 412: -#line 2901 "Gmsh.y" +case 415: +#line 3283 "Gmsh.y" { - TheSymbol.Name = yyvsp[-1].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-1].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-1].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-1].c); + yyval.d = 0.; } else - yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i) ; + yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i); ; break;} -case 413: -#line 2912 "Gmsh.y" +case 416: +#line 3295 "Gmsh.y" { - TheSymbol.Name = yyvsp[-4].c ; + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-4].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-4].c) ; - yyval.d = 0. ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-4].c); + yyval.d = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-2].d))) - yyval.d = (*pd += yyvsp[0].i) ; + yyval.d = (*pd += yyvsp[0].i); else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d) ; - yyval.d = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d); + yyval.d = 0.; } } ; break;} -case 414: -#line 2931 "Gmsh.y" +case 417: +#line 3317 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-2].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-2].c, yyvsp[0].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt(0, GMSH_GET, 0); } ; break;} -case 415: -#line 2947 "Gmsh.y" +case 418: +#line 3334 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-5].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-5].c, (int)yyvsp[-3].d, yyvsp[0].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt((int)yyvsp[-3].d, GMSH_GET, 0); } ; break;} -case 416: -#line 2963 "Gmsh.y" +case 419: +#line 3351 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-3].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[0].i); } ; break;} -case 417: -#line 2979 "Gmsh.y" +case 420: +#line 3368 "Gmsh.y" { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){ yymsg(GERROR, "Unknown numeric option class '%s'", yyvsp[-6].c); - yyval.d = 0. ; + yyval.d = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c); - yyval.d = 0. ; + yyval.d = 0.; } else yyval.d = pNumOpt((int)yyvsp[-4].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-4].d, GMSH_GET, 0)+yyvsp[0].i); } ; break;} -case 418: -#line 2997 "Gmsh.y" -{ - memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ; - ; - break;} -case 419: -#line 3001 "Gmsh.y" -{ - for(i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i] ; - ; - break;} -case 420: -#line 3005 "Gmsh.y" -{ - for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i]; - ; - break;} case 421: -#line 3009 "Gmsh.y" -{ - for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ; +#line 3388 "Gmsh.y" +{ + memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)); ; break;} case 422: -#line 3013 "Gmsh.y" +#line 3392 "Gmsh.y" { - for(i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ; + for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i]; ; break;} case 423: -#line 3020 "Gmsh.y" +#line 3396 "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; + for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i]; ; break;} case 424: -#line 3024 "Gmsh.y" +#line 3400 "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; + for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i]; ; break;} case 425: -#line 3028 "Gmsh.y" +#line 3404 "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; + for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i]; ; break;} case 426: -#line 3032 "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; +#line 3411 "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 427: -#line 3039 "Gmsh.y" -{ +#line 3415 "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 428: -#line 3042 "Gmsh.y" +#line 3419 "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 429: -#line 3048 "Gmsh.y" +#line 3423 "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 430: -#line 3051 "Gmsh.y" +#line 3430 "Gmsh.y" { ; break;} case 431: -#line 3057 "Gmsh.y" +#line 3433 "Gmsh.y" { ; break;} case 432: -#line 3060 "Gmsh.y" +#line 3439 "Gmsh.y" { - yyval.l = yyvsp[-1].l; ; break;} case 433: -#line 3064 "Gmsh.y" +#line 3442 "Gmsh.y" { - yyval.l = yyvsp[-1].l; ; break;} case 434: -#line 3071 "Gmsh.y" +#line 3448 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(List_T*)) ; - List_Add(yyval.l, &(yyvsp[0].l)) ; ; break;} case 435: -#line 3076 "Gmsh.y" +#line 3451 "Gmsh.y" { - List_Add(yyval.l, &(yyvsp[0].l)) ; + yyval.l = yyvsp[-1].l; ; break;} case 436: -#line 3084 "Gmsh.y" +#line 3455 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - List_Add(yyval.l, &(yyvsp[0].d)) ; + yyval.l = yyvsp[-1].l; ; break;} case 437: -#line 3089 "Gmsh.y" +#line 3462 "Gmsh.y" { - yyval.l = yyvsp[0].l ; + yyval.l = List_Create(2, 1, sizeof(List_T*)); + List_Add(yyval.l, &(yyvsp[0].l)); ; break;} case 438: -#line 3093 "Gmsh.y" +#line 3467 "Gmsh.y" { - yyval.l = yyvsp[-1].l; + List_Add(yyval.l, &(yyvsp[0].l)); ; break;} case 439: -#line 3097 "Gmsh.y" +#line 3475 "Gmsh.y" +{ + yyval.l = List_Create(2, 1, sizeof(double)); + List_Add(yyval.l, &(yyvsp[0].d)); + ; + break;} +case 440: +#line 3480 "Gmsh.y" +{ + yyval.l = yyvsp[0].l; + ; + break;} +case 441: +#line 3484 "Gmsh.y" +{ + yyval.l = yyvsp[-1].l; + ; + break;} +case 442: +#line 3488 "Gmsh.y" { yyval.l = yyvsp[-1].l; - for(i = 0; i < List_Nbr(yyval.l); i++){ + double *pd; + for(int i = 0; i < List_Nbr(yyval.l); i++){ pd = (double*)List_Pointer(yyval.l, i); (*pd) = - (*pd); } ; break;} -case 440: -#line 3108 "Gmsh.y" +case 443: +#line 3500 "Gmsh.y" { - yyval.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(yyval.l, &d) ; + yyval.l = List_Create(2, 1, sizeof(double)); + for(double 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(yyval.l, &d); ; break;} -case 441: -#line 3114 "Gmsh.y" +case 444: +#line 3506 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; + yyval.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)){ - yymsg(GERROR, "Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d) ; - List_Add(yyval.l, &(yyvsp[-4].d)) ; + yymsg(GERROR, "Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d); + List_Add(yyval.l, &(yyvsp[-4].d)); } else - for(d = yyvsp[-4].d; (yyvsp[0].d > 0) ? (d <= yyvsp[-2].d) : (d >= yyvsp[-2].d); d += yyvsp[0].d) - List_Add(yyval.l, &d) ; + for(double d = yyvsp[-4].d; (yyvsp[0].d > 0) ? (d <= yyvsp[-2].d) : (d >= yyvsp[-2].d); d += yyvsp[0].d) + List_Add(yyval.l, &d); ; break;} -case 442: -#line 3125 "Gmsh.y" +case 445: +#line 3517 "Gmsh.y" { // Returns the coordinates of a point and fills a list with it. // This allows to ensure e.g. that relative point positions are // always conserved Vertex *v = FindPoint((int)yyvsp[-1].d, THEM); - yyval.l = List_Create(3, 1, sizeof(double)) ; + yyval.l = List_Create(3, 1, sizeof(double)); if(!v) { - yymsg(GERROR, "Unknown point '%d'", (int) yyvsp[-1].d) ; - double d = 0.0 ; + yymsg(GERROR, "Unknown point '%d'", (int) yyvsp[-1].d); + double d = 0.0; List_Add(yyval.l, &d); List_Add(yyval.l, &d); List_Add(yyval.l, &d); } else{ - List_Add(yyval.l, &v->Pos.X) ; - List_Add(yyval.l, &v->Pos.Y) ; - List_Add(yyval.l, &v->Pos.Z) ; + List_Add(yyval.l, &v->Pos.X); + List_Add(yyval.l, &v->Pos.Y); + List_Add(yyval.l, &v->Pos.Z); } ; break;} -case 443: -#line 3145 "Gmsh.y" +case 446: +#line 3537 "Gmsh.y" { - yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ; + yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)); for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i); double d = s->Num; List_Add(yyval.l, &d); } + List_Delete(yyvsp[0].l); ; break;} -case 444: -#line 3154 "Gmsh.y" +case 447: +#line 3547 "Gmsh.y" { - yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ; + yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)); for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i); double d = s->Num; List_Add(yyval.l, &d); } + List_Delete(yyvsp[0].l); ; break;} -case 445: -#line 3163 "Gmsh.y" +case 448: +#line 3557 "Gmsh.y" { // FIXME: The syntax for this is ugly: we get double semi-colons // at the end of the line - yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)) ; + yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double)); for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ Shape *s = (Shape*) List_Pointer(yyvsp[0].l, i); double d = s->Num; List_Add(yyval.l, &d); } + List_Delete(yyvsp[0].l); ; break;} -case 446: -#line 3174 "Gmsh.y" +case 449: +#line 3569 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-2].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++) - List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i)) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++) + List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i)); } ; break;} -case 447: -#line 3188 "Gmsh.y" +case 450: +#line 3585 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-2].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-2].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-2].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++){ - d = - *(double*)List_Pointer_Fast(pSymbol->val, i); - List_Add(yyval.l, &d) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++){ + double d = - *(double*)List_Pointer_Fast(pSymbol->val, i); + List_Add(yyval.l, &d); } } ; break;} -case 448: -#line 3204 "Gmsh.y" +case 451: +#line 3603 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-5].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ - j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + int j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))) - List_Add(yyval.l, pd) ; + List_Add(yyval.l, pd); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j); } } List_Delete(yyvsp[-2].l); ; break;} -case 449: -#line 3224 "Gmsh.y" +case 452: +#line 3626 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = yyvsp[-5].c ; + yyval.l = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = yyvsp[-5].c; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", yyvsp[-5].c); + double d = 0.0; List_Add(yyval.l, &d); } else{ - for(i = 0; i < List_Nbr(yyvsp[-2].l); i++){ - j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + for(int i = 0; i < List_Nbr(yyvsp[-2].l); i++){ + int j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - d = - *pd; - List_Add(yyval.l, &d) ; + double d = - *pd; + List_Add(yyval.l, &d); } else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", yyvsp[-5].c, j); } } List_Delete(yyvsp[-2].l); ; break;} -case 450: -#line 3249 "Gmsh.y" +case 453: +#line 3654 "Gmsh.y" { - yyval.l = List_Create(2, 1, sizeof(double)) ; - List_Add(yyval.l, &(yyvsp[0].d)) ; + yyval.l = List_Create(2, 1, sizeof(double)); + List_Add(yyval.l, &(yyvsp[0].d)); ; break;} -case 451: -#line 3254 "Gmsh.y" +case 454: +#line 3659 "Gmsh.y" { - yyval.l = yyvsp[0].l ; + yyval.l = yyvsp[0].l; ; break;} -case 452: -#line 3258 "Gmsh.y" +case 455: +#line 3663 "Gmsh.y" { - List_Add(yyval.l, &(yyvsp[0].d)) ; + List_Add(yyval.l, &(yyvsp[0].d)); ; break;} -case 453: -#line 3262 "Gmsh.y" +case 456: +#line 3667 "Gmsh.y" { - for(i = 0; i < List_Nbr(yyvsp[0].l); i++){ - List_Read(yyvsp[0].l, i, &d) ; - List_Add(yyval.l, &d) ; + for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){ + double d; + List_Read(yyvsp[0].l, i, &d); + List_Add(yyval.l, &d); } List_Delete(yyvsp[0].l); ; break;} -case 454: -#line 3274 "Gmsh.y" +case 457: +#line 3680 "Gmsh.y" { yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d); ; break;} -case 455: -#line 3278 "Gmsh.y" +case 458: +#line 3684 "Gmsh.y" { yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255); ; break;} -case 456: -#line 3289 "Gmsh.y" +case 459: +#line 3696 "Gmsh.y" { + int flag; yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag); if(flag) yymsg(GERROR, "Unknown color '%s'", yyvsp[0].c); ; break;} -case 457: -#line 3294 "Gmsh.y" +case 460: +#line 3702 "Gmsh.y" { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){ yymsg(GERROR, "Unknown color option class '%s'", yyvsp[-4].c); - yyval.u = 0 ; + yyval.u = 0; } else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[0].c, pColCat))){ yymsg(GERROR, "Unknown color option '%s.Color.%s'", yyvsp[-4].c, yyvsp[0].c); - yyval.u = 0 ; + yyval.u = 0; } else{ - yyval.u = pColOpt(0, GMSH_GET, 0) ; + yyval.u = pColOpt(0, GMSH_GET, 0); } } ; break;} -case 458: -#line 3313 "Gmsh.y" +case 461: +#line 3723 "Gmsh.y" { yyval.l = yyvsp[-1].l; ; break;} -case 459: -#line 3317 "Gmsh.y" +case 462: +#line 3727 "Gmsh.y" { - yyval.l = List_Create(256, 10, sizeof(unsigned int)) ; + yyval.l = List_Create(256, 10, sizeof(unsigned int)); GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d); if(!ct) yymsg(GERROR, "View[%d] does not exist", (int)yyvsp[-3].d); else{ - for(i = 0; i < ct->size; i++) + for(int i = 0; i < ct->size; i++) List_Add(yyval.l, &ct->table[i]); } ; break;} -case 460: -#line 3331 "Gmsh.y" +case 463: +#line 3741 "Gmsh.y" { - yyval.l = List_Create(256, 10, sizeof(unsigned int)) ; - List_Add(yyval.l, &(yyvsp[0].u)) ; + yyval.l = List_Create(256, 10, sizeof(unsigned int)); + List_Add(yyval.l, &(yyvsp[0].u)); ; break;} -case 461: -#line 3336 "Gmsh.y" +case 464: +#line 3746 "Gmsh.y" { - List_Add(yyval.l, &(yyvsp[0].u)) ; + List_Add(yyval.l, &(yyvsp[0].u)); ; break;} -case 462: -#line 3343 "Gmsh.y" +case 465: +#line 3753 "Gmsh.y" { yyval.c = yyvsp[0].c; ; break;} -case 463: -#line 3347 "Gmsh.y" +case 466: +#line 3757 "Gmsh.y" { - yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ; - strcpy(yyval.c, yyvsp[-3].c) ; - strcat(yyval.c, yyvsp[-1].c) ; + yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)); + strcpy(yyval.c, yyvsp[-3].c); + strcat(yyval.c, yyvsp[-1].c); Free(yyvsp[-3].c); Free(yyvsp[-1].c); ; break;} -case 464: -#line 3355 "Gmsh.y" +case 467: +#line 3765 "Gmsh.y" { - yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ; + yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)); + int i; for(i = strlen(yyvsp[-1].c)-1; i >= 0; i--){ if(yyvsp[-1].c[i] == '.'){ strncpy(yyval.c, yyvsp[-1].c, i); @@ -8226,16 +8661,17 @@ case 464: Free(yyvsp[-1].c); ; break;} -case 465: -#line 3368 "Gmsh.y" +case 468: +#line 3779 "Gmsh.y" { yyval.c = yyvsp[-1].c; ; break;} -case 466: -#line 3372 "Gmsh.y" +case 469: +#line 3783 "Gmsh.y" { - i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring); if(i < 0){ yymsg(GERROR, "Too few arguments in Sprintf"); yyval.c = yyvsp[-3].c; @@ -8252,32 +8688,36 @@ case 466: List_Delete(yyvsp[-1].l); ; break;} -case 467: -#line 3390 "Gmsh.y" +case 470: +#line 3802 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-3].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c); else{ - str = pStrOpt(0, GMSH_GET, NULL) ; + char *str = pStrOpt(0, GMSH_GET, NULL); yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy(yyval.c, str); } } ; break;} -case 468: -#line 3404 "Gmsh.y" +case 471: +#line 3818 "Gmsh.y" { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c))) yymsg(GERROR, "Unknown string option class '%s'", yyvsp[-6].c); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c); else{ - str = pStrOpt((int)yyvsp[-4].d, GMSH_GET, NULL) ; + char *str = pStrOpt((int)yyvsp[-4].d, GMSH_GET, NULL); yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy(yyval.c, str); } @@ -8506,7 +8946,7 @@ yyerrhandle: } return 1; } -#line 3419 "Gmsh.y" +#line 3835 "Gmsh.y" void DeleteSymbol(void *a, void *b){ @@ -8528,14 +8968,14 @@ void InitSymbols(void){ } int PrintListOfDouble(char *format, List_T *list, char *buffer){ - int i, j, k; + int j, k; char tmp1[256], tmp2[256]; - j=0; + j = 0; while(j < (int)strlen(format) && format[j]!='%') j++; strncpy(buffer, format, j); buffer[j]='\0'; - for(i = 0; i < List_Nbr(list); i++){ + for(int i = 0; i < List_Nbr(list); i++){ k = j; j++; if(j < (int)strlen(format)){ @@ -8577,5 +9017,3 @@ void yymsg(int type, char *fmt, ...){ if(type == GERROR) yyerrorstate=1; } - - diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y index d7a9993904a575180fa7ca3b1c1b8c418cfb7941..b67061ef82f8f6681efd268ecaeafc1f3ba69ca7 100644 --- a/Parser/Gmsh.y +++ b/Parser/Gmsh.y @@ -1,5 +1,5 @@ -%{ -// $Id: Gmsh.y,v 1.160 2004-02-07 01:40:23 geuzaine Exp $ +%{ +// $Id: Gmsh.y,v 1.161 2004-02-28 00:48:52 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -27,8 +27,9 @@ #include "Numeric.h" #include "Context.h" #include "Geo.h" +#include "GeoUtils.h" +#include "Nurbs.h" #include "CAD.h" -#include "DataBase.h" #include "Mesh.h" #include "Draw.h" #include "Create.h" @@ -46,32 +47,25 @@ #include "STL.h" #include "Visibility.h" +// FIXME: most tSTRING and tBIGSTRING are leaked: Free() them! + Tree_T *Symbol_T = NULL; extern Context_T CTX; extern Mesh *THEM; -static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES]; -static int yylinenoImbricatedLoopsTab[MAX_OPEN_FILES]; -static double LoopControlVariablesTab[MAX_OPEN_FILES][3]; -static char *LoopControlVariablesNameTab[MAX_OPEN_FILES]; -static char tmpstring[1024]; -static Symbol TheSymbol, *pSymbol; -static Surface *STL_Surf; -static Shape TheShape; -static int i, j, k, flag, ImbricatedLoop = 0; static int Last_NumberOfPoints = 0; -static double d, *pd; +static Surface *STL_Surf; static ExtrudeParams extr; -static char *str; -static StringXString *pStrCat; -static StringXNumber *pNumCat; -static StringXColor *pColCat; -static double (*pNumOpt)(int num, int action, double value); -static char* (*pStrOpt)(int num, int action, char *value); -static unsigned int (*pColOpt)(int num, int action, unsigned int value); static Post_View *View; +#define MAX_RECUR_LOOPS 100 +static int ImbricatedLoop = 0; +static fpos_t yyposImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static int yylinenoImbricatedLoopsTab[MAX_RECUR_LOOPS]; +static double LoopControlVariablesTab[MAX_RECUR_LOOPS][3]; +static char *LoopControlVariablesNameTab[MAX_RECUR_LOOPS]; + char *strsave (char *ptr); void yyerror (char *s); void yymsg (int type, char *fmt, ...); @@ -166,9 +160,9 @@ int PrintListOfDouble (char *format, List_T *list, char *buffer); All : StepFormatItems - | STLFormatItem - | GeomFormatList - | error tEND { yyerrok ; return 1; } + | StlFormatItems + | GeoFormatItems + | error tEND { yyerrok; return 1; } ; // S T E R E O L I T H O G R A P H Y ( S T L ) @@ -178,11 +172,16 @@ SignedDouble : | '-' tDOUBLE { $$ = -$2; } ; -STLFormatItem : +StlFormatItems : + // nothing + | StlFormatItems StlFormatItem +; + +StlFormatItem : tSolid { - yymsg(INFO, "STL file format"); - STL_Surf = Create_Surface(1, MSH_SURF_STL); + yymsg(INFO, "Reading STL solid"); + STL_Surf = Create_Surface(NEWSURFACE(), MSH_SURF_STL); STL_Surf->STL = new STL_Data; return 1; } @@ -197,21 +196,28 @@ STLFormatItem : { STL_Surf->STL->Add_Facet($9, $10, $11, $13, $14, $15, - $17, $18, $19); + $17, $18, $19, CTX.geom.stl_create_elementary); return 1; } | tEndSolid { - yymsg(INFO, "STL file format read"); - Tree_Add(THEM->Surfaces, &STL_Surf); + if(CTX.geom.stl_create_elementary){ + STL_Surf->STL->ReplaceDuplicate(); + if(CTX.geom.stl_create_physical) + STL_Surf->STL->CreatePhysicalSurface(); + } + else{ + Tree_Add(THEM->Surfaces, &STL_Surf); + } + yymsg(INFO, "Read STL solid"); return 1; } ; -// S T E P I S O - 1 0 3 0 3 - 2 1 F I L E F O R M A T +// S T E P I S O - 1 0 3 0 3 - 2 1 F I L E F O R M A T StepFormatItems : - /* nothing */ + // nothing | StepFormatItems StepFormatItem ; @@ -224,13 +230,13 @@ StepFormatItem : StepSpecial : tISO tEND { - yymsg(INFO, "Step Iso-10303-21 file format"); + yymsg(INFO, "Reading Step Iso-10303-21 data"); Create_Step_Solid_BRep(); } | tENDISO tEND { - yymsg(INFO, "Step Iso-10303-21 file format read"); Resolve_BREP (); + yymsg(INFO, "Read Step Iso-10303-21 data"); } | tDATA tEND | tENDSEC tEND @@ -382,28 +388,23 @@ StepDataItem : // G E O F I L E F O R M A T -GeomFormatList : - /* none*/ - { - } - | GeomFormatList GeomFormat - { - yymsg(INFO, "Gmsh file format read"); - } +GeoFormatItems : + // nothing + | GeoFormatItems GeoFormatItem ; -GeomFormat : +GeoFormatItem : View { return 1; } | Printf { return 1; } | Affectation { return 1; } | Shape { return 1; } - | Transform { return 1; } - | Duplicata { return 1; } + | Transform { List_Delete($1); return 1; } + | Duplicata { List_Delete($1); return 1; } | Delete { return 1; } | Colorify { return 1; } | Visibility { return 1; } - | Extrude { return 1; } - | Transfini { return 1; } + | Extrude { List_Delete($1); return 1; } + | Transfinite { return 1; } | Coherence { return 1; } | Loop { return 1; } | Command { return 1; } @@ -416,7 +417,8 @@ Printf : } | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND { - i = PrintListOfDouble($3, $5, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble($3, $5, tmpstring); if(i < 0) yymsg(GERROR, "Too few arguments in Printf"); else if(i > 0) @@ -441,7 +443,7 @@ View : ; Views : - /* none */ + // nothing { View = BeginView(1); } @@ -475,10 +477,10 @@ Views : ScalarPointValues : FExpr - { List_Add(View->SP, &$1) ; } + { List_Add(View->SP, &$1); } | ScalarPointValues ',' FExpr - { List_Add(View->SP, &$3) ; } - ; + { List_Add(View->SP, &$3); } +; ScalarPoint : tScalarPoint '(' FExpr ',' FExpr ',' FExpr ')' @@ -488,16 +490,16 @@ ScalarPoint : } '{' ScalarPointValues '}' tEND { - View->NbSP++ ; + View->NbSP++; } ; VectorPointValues : FExpr - { List_Add(View->VP, &$1) ; } + { List_Add(View->VP, &$1); } | VectorPointValues ',' FExpr - { List_Add(View->VP, &$3) ; } - ; + { List_Add(View->VP, &$3); } +; VectorPoint : tVectorPoint '(' FExpr ',' FExpr ',' FExpr ')' @@ -507,16 +509,16 @@ VectorPoint : } '{' VectorPointValues '}' tEND { - View->NbVP++ ; + View->NbVP++; } ; TensorPointValues : FExpr - { List_Add(View->TP, &$1) ; } + { List_Add(View->TP, &$1); } | TensorPointValues ',' FExpr - { List_Add(View->TP, &$3) ; } - ; + { List_Add(View->TP, &$3); } +; TensorPoint : tTensorPoint '(' FExpr ',' FExpr ',' FExpr ')' @@ -526,16 +528,16 @@ TensorPoint : } '{' TensorPointValues '}' tEND { - View->NbTP++ ; + View->NbTP++; } ; ScalarLineValues : FExpr - { List_Add(View->SL, &$1) ; } + { List_Add(View->SL, &$1); } | ScalarLineValues ',' FExpr - { List_Add(View->SL, &$3) ; } - ; + { List_Add(View->SL, &$3); } +; ScalarLine : tScalarLine '(' FExpr ',' FExpr ',' FExpr ',' @@ -547,16 +549,16 @@ ScalarLine : } '{' ScalarLineValues '}' tEND { - View->NbSL++ ; + View->NbSL++; } ; VectorLineValues : FExpr - { List_Add(View->VL, &$1) ; } + { List_Add(View->VL, &$1); } | VectorLineValues ',' FExpr - { List_Add(View->VL, &$3) ; } - ; + { List_Add(View->VL, &$3); } +; VectorLine : tVectorLine '(' FExpr ',' FExpr ',' FExpr ',' @@ -568,16 +570,16 @@ VectorLine : } '{' VectorLineValues '}' tEND { - View->NbVL++ ; + View->NbVL++; } ; TensorLineValues : FExpr - { List_Add(View->TL, &$1) ; } + { List_Add(View->TL, &$1); } | TensorLineValues ',' FExpr - { List_Add(View->TL, &$3) ; } - ; + { List_Add(View->TL, &$3); } +; TensorLine : tTensorLine '(' FExpr ',' FExpr ',' FExpr ',' @@ -589,16 +591,16 @@ TensorLine : } '{' TensorLineValues '}' tEND { - View->NbTL++ ; + View->NbTL++; } ; ScalarTriangleValues : FExpr - { List_Add(View->ST, &$1) ; } + { List_Add(View->ST, &$1); } | ScalarTriangleValues ',' FExpr - { List_Add(View->ST, &$3) ; } - ; + { List_Add(View->ST, &$3); } +; ScalarTriangle : tScalarTriangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -614,16 +616,16 @@ ScalarTriangle : } '{' ScalarTriangleValues '}' tEND { - View->NbST++ ; + View->NbST++; } ; VectorTriangleValues : FExpr - { List_Add(View->VT, &$1) ; } + { List_Add(View->VT, &$1); } | VectorTriangleValues ',' FExpr - { List_Add(View->VT, &$3) ; } - ; + { List_Add(View->VT, &$3); } +; VectorTriangle : tVectorTriangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -639,16 +641,16 @@ VectorTriangle : } '{' VectorTriangleValues '}' tEND { - View->NbVT++ ; + View->NbVT++; } ; TensorTriangleValues : FExpr - { List_Add(View->TT, &$1) ; } + { List_Add(View->TT, &$1); } | TensorTriangleValues ',' FExpr - { List_Add(View->TT, &$3) ; } - ; + { List_Add(View->TT, &$3); } +; TensorTriangle : tTensorTriangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -664,16 +666,16 @@ TensorTriangle : } '{' TensorTriangleValues '}' tEND { - View->NbTT++ ; + View->NbTT++; } ; ScalarQuadrangleValues : FExpr - { List_Add(View->SQ, &$1) ; } + { List_Add(View->SQ, &$1); } | ScalarQuadrangleValues ',' FExpr - { List_Add(View->SQ, &$3) ; } - ; + { List_Add(View->SQ, &$3); } +; ScalarQuadrangle : tScalarQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -690,16 +692,16 @@ ScalarQuadrangle : } '{' ScalarQuadrangleValues '}' tEND { - View->NbSQ++ ; + View->NbSQ++; } ; VectorQuadrangleValues : FExpr - { List_Add(View->VQ, &$1) ; } + { List_Add(View->VQ, &$1); } | VectorQuadrangleValues ',' FExpr - { List_Add(View->VQ, &$3) ; } - ; + { List_Add(View->VQ, &$3); } +; VectorQuadrangle : tVectorQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -716,16 +718,16 @@ VectorQuadrangle : } '{' VectorQuadrangleValues '}' tEND { - View->NbVQ++ ; + View->NbVQ++; } ; TensorQuadrangleValues : FExpr - { List_Add(View->TQ, &$1) ; } + { List_Add(View->TQ, &$1); } | TensorQuadrangleValues ',' FExpr - { List_Add(View->TQ, &$3) ; } - ; + { List_Add(View->TQ, &$3); } +; TensorQuadrangle : tTensorQuadrangle '(' FExpr ',' FExpr ',' FExpr ',' @@ -742,16 +744,16 @@ TensorQuadrangle : } '{' TensorQuadrangleValues '}' tEND { - View->NbTQ++ ; + View->NbTQ++; } ; ScalarTetrahedronValues : FExpr - { List_Add(View->SS, &$1) ; } + { List_Add(View->SS, &$1); } | ScalarTetrahedronValues ',' FExpr - { List_Add(View->SS, &$3) ; } - ; + { List_Add(View->SS, &$3); } +; ScalarTetrahedron : tScalarTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -768,16 +770,16 @@ ScalarTetrahedron : } '{' ScalarTetrahedronValues '}' tEND { - View->NbSS++ ; + View->NbSS++; } ; VectorTetrahedronValues : FExpr - { List_Add(View->VS, &$1) ; } + { List_Add(View->VS, &$1); } | VectorTetrahedronValues ',' FExpr - { List_Add(View->VS, &$3) ; } - ; + { List_Add(View->VS, &$3); } +; VectorTetrahedron : tVectorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -794,16 +796,16 @@ VectorTetrahedron : } '{' VectorTetrahedronValues '}' tEND { - View->NbVS++ ; + View->NbVS++; } ; TensorTetrahedronValues : FExpr - { List_Add(View->TS, &$1) ; } + { List_Add(View->TS, &$1); } | TensorTetrahedronValues ',' FExpr - { List_Add(View->TS, &$3) ; } - ; + { List_Add(View->TS, &$3); } +; TensorTetrahedron : tTensorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -820,16 +822,16 @@ TensorTetrahedron : } '{' TensorTetrahedronValues '}' tEND { - View->NbTS++ ; + View->NbTS++; } ; ScalarHexahedronValues : FExpr - { List_Add(View->SH, &$1) ; } + { List_Add(View->SH, &$1); } | ScalarHexahedronValues ',' FExpr - { List_Add(View->SH, &$3) ; } - ; + { List_Add(View->SH, &$3); } +; ScalarHexahedron : tScalarHexahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -856,16 +858,16 @@ ScalarHexahedron : } '{' ScalarHexahedronValues '}' tEND { - View->NbSH++ ; + View->NbSH++; } ; VectorHexahedronValues : FExpr - { List_Add(View->VH, &$1) ; } + { List_Add(View->VH, &$1); } | VectorHexahedronValues ',' FExpr - { List_Add(View->VH, &$3) ; } - ; + { List_Add(View->VH, &$3); } +; VectorHexahedron : tVectorHexahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -892,16 +894,16 @@ VectorHexahedron : } '{' VectorHexahedronValues '}' tEND { - View->NbVH++ ; + View->NbVH++; } ; TensorHexahedronValues : FExpr - { List_Add(View->TH, &$1) ; } + { List_Add(View->TH, &$1); } | TensorHexahedronValues ',' FExpr - { List_Add(View->TH, &$3) ; } - ; + { List_Add(View->TH, &$3); } +; TensorHexahedron : tTensorHexahedron '(' FExpr ',' FExpr ',' FExpr ',' @@ -928,16 +930,16 @@ TensorHexahedron : } '{' TensorHexahedronValues '}' tEND { - View->NbTH++ ; + View->NbTH++; } ; ScalarPrismValues : FExpr - { List_Add(View->SI, &$1) ; } + { List_Add(View->SI, &$1); } | ScalarPrismValues ',' FExpr - { List_Add(View->SI, &$3) ; } - ; + { List_Add(View->SI, &$3); } +; ScalarPrism : tScalarPrism '(' FExpr ',' FExpr ',' FExpr ',' @@ -959,16 +961,16 @@ ScalarPrism : } '{' ScalarPrismValues '}' tEND { - View->NbSI++ ; + View->NbSI++; } ; VectorPrismValues : FExpr - { List_Add(View->VI, &$1) ; } + { List_Add(View->VI, &$1); } | VectorPrismValues ',' FExpr - { List_Add(View->VI, &$3) ; } - ; + { List_Add(View->VI, &$3); } +; VectorPrism : tVectorPrism '(' FExpr ',' FExpr ',' FExpr ',' @@ -990,16 +992,16 @@ VectorPrism : } '{' VectorPrismValues '}' tEND { - View->NbVI++ ; + View->NbVI++; } ; TensorPrismValues : FExpr - { List_Add(View->TI, &$1) ; } + { List_Add(View->TI, &$1); } | TensorPrismValues ',' FExpr - { List_Add(View->TI, &$3) ; } - ; + { List_Add(View->TI, &$3); } +; TensorPrism : tTensorPrism '(' FExpr ',' FExpr ',' FExpr ',' @@ -1021,16 +1023,16 @@ TensorPrism : } '{' TensorPrismValues '}' tEND { - View->NbTI++ ; + View->NbTI++; } ; ScalarPyramidValues : FExpr - { List_Add(View->SY, &$1) ; } + { List_Add(View->SY, &$1); } | ScalarPyramidValues ',' FExpr - { List_Add(View->SY, &$3) ; } - ; + { List_Add(View->SY, &$3); } +; ScalarPyramid : tScalarPyramid '(' FExpr ',' FExpr ',' FExpr ',' @@ -1051,16 +1053,16 @@ ScalarPyramid : } '{' ScalarPyramidValues '}' tEND { - View->NbSY++ ; + View->NbSY++; } ; VectorPyramidValues : FExpr - { List_Add(View->VY, &$1) ; } + { List_Add(View->VY, &$1); } | VectorPyramidValues ',' FExpr - { List_Add(View->VY, &$3) ; } - ; + { List_Add(View->VY, &$3); } +; VectorPyramid : tVectorPyramid '(' FExpr ',' FExpr ',' FExpr ',' @@ -1081,16 +1083,16 @@ VectorPyramid : } '{' VectorPyramidValues '}' tEND { - View->NbVY++ ; + View->NbVY++; } ; TensorPyramidValues : FExpr - { List_Add(View->TY, &$1) ; } + { List_Add(View->TY, &$1); } | TensorPyramidValues ',' FExpr - { List_Add(View->TY, &$3) ; } - ; + { List_Add(View->TY, &$3); } +; TensorPyramid : tTensorPyramid '(' FExpr ',' FExpr ',' FExpr ',' @@ -1111,61 +1113,61 @@ TensorPyramid : } '{' TensorPyramidValues '}' tEND { - View->NbTY++ ; + View->NbTY++; } ; Text2DValues : StringExpr { - for(i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T2C, &$1[i]) ; + for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T2C, &$1[i]); Free($1); } | Text2DValues ',' StringExpr { - for(i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T2C, &$3[i]) ; + for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T2C, &$3[i]); Free($3); } - ; +; Text2D : tText2D '(' FExpr ',' FExpr ',' FExpr ')' { List_Add(View->T2D, &$3); List_Add(View->T2D, &$5); List_Add(View->T2D, &$7); - d = List_Nbr(View->T2C); + double d = List_Nbr(View->T2C); List_Add(View->T2D, &d); } '{' Text2DValues '}' tEND { - View->NbT2++ ; + View->NbT2++; } ; Text3DValues : StringExpr { - for(i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T3C, &$1[i]) ; + for(int i = 0; i < (int)strlen($1)+1; i++) List_Add(View->T3C, &$1[i]); Free($1); } | Text3DValues ',' StringExpr { - for(i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T3C, &$3[i]) ; + for(int i = 0; i < (int)strlen($3)+1; i++) List_Add(View->T3C, &$3[i]); Free($3); } - ; +; Text3D : tText3D '(' FExpr ',' FExpr ',' FExpr ',' FExpr ')' { List_Add(View->T3D, &$3); List_Add(View->T3D, &$5); List_Add(View->T3D, &$7); List_Add(View->T3D, &$9); - d = List_Nbr(View->T3C); + double d = List_Nbr(View->T3C); List_Add(View->T3D, &d); } '{' Text3DValues '}' tEND { - View->NbT3++ ; + View->NbT3++; } ; @@ -1173,16 +1175,16 @@ Text3D : // A F F E C T A T I O N NumericAffectation : - tAFFECT { $$ = 0 ; } - | tAFFECTPLUS { $$ = 1 ; } - | tAFFECTMINUS { $$ = 2 ; } - | tAFFECTTIMES { $$ = 3 ; } - | tAFFECTDIVIDE { $$ = 4 ; } + tAFFECT { $$ = 0; } + | tAFFECTPLUS { $$ = 1; } + | tAFFECTMINUS { $$ = 2; } + | tAFFECTTIMES { $$ = 3; } + | tAFFECTDIVIDE { $$ = 4; } ; NumericIncrement : - tPLUSPLUS { $$ = 1 ; } - | tMINUSMINUS { $$ = -1 ; } + tPLUSPLUS { $$ = 1; } + | tMINUSMINUS { $$ = -1; } ; Affectation : @@ -1191,7 +1193,9 @@ Affectation : tSTRING NumericAffectation FExpr tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); if(!$2){ @@ -1199,26 +1203,27 @@ Affectation : Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); } else{ - pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; + double *pd = (double*)List_Pointer_Fast(pSymbol->val, 0); switch($2){ - case 0 : *pd = $3; break ; - case 1 : *pd += $3 ; break ; - case 2 : *pd -= $3 ; break ; - case 3 : *pd *= $3 ; break ; + case 0 : *pd = $3; break; + case 1 : *pd += $3; break; + case 2 : *pd -= $3; break; + case 3 : *pd *= $3; break; case 4 : - if($3) *pd /= $3 ; + if($3) *pd /= $3; else yymsg(GERROR, "Division by zero in '%s /= %g'", $1, $3); break; } } } - | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!$5){ @@ -1226,17 +1231,18 @@ Affectation : Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))){ switch($5){ - case 0 : *pd = $6; break ; - case 1 : *pd += $6 ; break ; - case 2 : *pd -= $6 ; break ; - case 3 : *pd *= $6 ; break ; + case 0 : *pd = $6; break; + case 1 : *pd += $6; break; + case 2 : *pd -= $6; break; + case 3 : *pd *= $6; break; case 4 : - if($6) *pd /= $6 ; + if($6) *pd /= $6; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", $1, (int)$3, $6); break; } @@ -1245,41 +1251,43 @@ Affectation : if(!$5) List_Put(pSymbol->val, (int)$3, &$6); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); } } } - | tSTRING '[' '{' RecursiveListOfDouble '}' ']' NumericAffectation ListOfDouble tEND { if(List_Nbr($4) != List_Nbr($8)) yymsg(GERROR, "Incompatible array dimensions in affectation"); else{ + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); if(!$7){ - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ List_Put(TheSymbol.val, (int)(*(double*)List_Pointer($4, i)), (double*)List_Pointer($8, i)); } Tree_Add(Symbol_T, &TheSymbol); } else - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); } else{ - for(i = 0; i < List_Nbr($4); i++){ - j = (int)(*(double*)List_Pointer($4, i)) ; - d = *(double*)List_Pointer($8, i) ; + for(int i = 0; i < List_Nbr($4); i++){ + int j = (int)(*(double*)List_Pointer($4, i)); + double d = *(double*)List_Pointer($8, i); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ switch($7){ - case 0 : *pd = d; break ; - case 1 : *pd += d ; break ; - case 2 : *pd -= d ; break ; - case 3 : *pd *= d ; break ; + case 0 : *pd = d; break; + case 1 : *pd += d; break; + case 2 : *pd -= d; break; + case 3 : *pd *= d; break; case 4 : - if($8) *pd /= d ; + if($8) *pd /= d; else yymsg(GERROR, "Division by zero in '%s[%d] /= %g'", $1, j, d); break; } @@ -1288,7 +1296,7 @@ Affectation : if(!$7) List_Put(pSymbol->val, j, &d); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j); } } } @@ -1296,10 +1304,11 @@ Affectation : List_Delete($4); List_Delete($8); } - | tSTRING '[' ']' tAFFECT ListOfDouble tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(5, 5, sizeof(double)); List_Copy($5, TheSymbol.val); @@ -1311,26 +1320,29 @@ Affectation : } List_Delete($5); } - | tSTRING NumericIncrement tEND { + Symbol TheSymbol; TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); else *(double*)List_Pointer_Fast(pSymbol->val, 0) += $2; } - | tSTRING '[' FExpr ']' NumericIncrement tEND { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) - yymsg(GERROR, "Unknown variable '%s'", $1) ; + yymsg(GERROR, "Unknown variable '%s'", $1); else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - *pd += $5 ; + *pd += $5; else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); } } @@ -1338,25 +1350,28 @@ Affectation : | tSTRING '.' tSTRING tAFFECT StringExpr tEND { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($1))) yymsg(GERROR, "Unknown string option class '%s'", $1); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($3, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", $1, $3); else - pStrOpt(0, GMSH_SET|GMSH_GUI, $5) ; + pStrOpt(0, GMSH_SET|GMSH_GUI, $5); } } - | tSTRING '[' FExpr ']' '.' tSTRING tAFFECT StringExpr tEND { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($1))) yymsg(GERROR, "Unknown string option class '%s'", $1); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($6, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", $1, (int)$3, $6); else - pStrOpt((int)$3, GMSH_SET|GMSH_GUI, $8) ; + pStrOpt((int)$3, GMSH_SET|GMSH_GUI, $8); } } @@ -1364,72 +1379,79 @@ Affectation : | tSTRING '.' tSTRING NumericAffectation FExpr tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); else{ + double d = 0; switch($4){ - case 0 : d = $5 ; break ; - case 1 : d = pNumOpt(0, GMSH_GET, 0) + $5 ; break ; - case 2 : d = pNumOpt(0, GMSH_GET, 0) - $5 ; break ; - case 3 : d = pNumOpt(0, GMSH_GET, 0) * $5 ; break ; + case 0 : d = $5; break; + case 1 : d = pNumOpt(0, GMSH_GET, 0) + $5; break; + case 2 : d = pNumOpt(0, GMSH_GET, 0) - $5; break; + case 3 : d = pNumOpt(0, GMSH_GET, 0) * $5; break; case 4 : - if($5) d = pNumOpt(0, GMSH_GET, 0) / $5 ; + if($5) d = pNumOpt(0, GMSH_GET, 0) / $5; else yymsg(GERROR, "Division by zero in '%s.%s /= %g'", $1, $3, $5); break; } - pNumOpt(0, GMSH_SET|GMSH_GUI, d) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, d); } } } - | tSTRING '[' FExpr ']' '.' tSTRING NumericAffectation FExpr tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); else{ + double d = 0; switch($7){ - case 0 : d = $8; break ; - case 1 : d = pNumOpt((int)$3, GMSH_GET, 0) + $8 ; break ; - case 2 : d = pNumOpt((int)$3, GMSH_GET, 0) - $8 ; break ; - case 3 : d = pNumOpt((int)$3, GMSH_GET, 0) * $8 ; break ; + case 0 : d = $8; break; + case 1 : d = pNumOpt((int)$3, GMSH_GET, 0) + $8; break; + case 2 : d = pNumOpt((int)$3, GMSH_GET, 0) - $8; break; + case 3 : d = pNumOpt((int)$3, GMSH_GET, 0) * $8; break; case 4 : - if($8) d = pNumOpt((int)$3, GMSH_GET, 0) / $8 ; + if($8) d = pNumOpt((int)$3, GMSH_GET, 0) / $8; else yymsg(GERROR, "Division by zero in '%s[%d].%s /= %g'", $1, (int)$3, $6, $8); break; } - pNumOpt((int)$3, GMSH_SET|GMSH_GUI, d) ; + pNumOpt((int)$3, GMSH_SET|GMSH_GUI, d); } } } - | tSTRING '.' tSTRING NumericIncrement tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); else - pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4) ; + pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4); } } - | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement tEND { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))) yymsg(GERROR, "Unknown numeric option class '%s'", $1); else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))) yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); else - pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7) ; + pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7); } } @@ -1437,25 +1459,28 @@ Affectation : | tSTRING '.' tColor '.' tSTRING tAFFECT ColorExpr tEND { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory($1))) yymsg(GERROR, "Unknown color option class '%s'", $1); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))) yymsg(GERROR, "Unknown color option '%s.Color.%s'", $1, $5); else - pColOpt(0, GMSH_SET|GMSH_GUI, $7) ; + pColOpt(0, GMSH_SET|GMSH_GUI, $7); } } - | tSTRING '[' FExpr ']' '.' tColor '.' tSTRING tAFFECT ColorExpr tEND { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory($1))) yymsg(GERROR, "Unknown color option class '%s'", $1); else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($8, pColCat))) yymsg(GERROR, "Unknown color option '%s[%d].Color.%s'", $1, (int)$3, $8); else - pColOpt((int)$3, GMSH_SET|GMSH_GUI, $10) ; + pColOpt((int)$3, GMSH_SET|GMSH_GUI, $10); } } @@ -1472,7 +1497,7 @@ Affectation : yymsg(GERROR, "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]); + for(int i = 0; i < ct->size; i++) List_Read($5, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -1480,7 +1505,6 @@ Affectation : } List_Delete($5); } - | tSTRING '[' FExpr ']' '.' tColorTable tAFFECT ListOfColor tEND { GmshColorTable *ct = Get_ColorTable((int)$3); @@ -1492,7 +1516,7 @@ Affectation : yymsg(GERROR, "Too many (%d>%d) colors in View[%d].ColorTable", ct->size, COLORTABLE_NBMAX_COLOR, (int)$3); else - for(i = 0; i < ct->size; i++) List_Read($8, i, &ct->table[i]); + for(int i = 0; i < ct->size; i++) List_Read($8, i, &ct->table[i]); if(ct->size == 1){ ct->size = 2; ct->table[1] = ct->table[0]; @@ -1512,7 +1536,6 @@ Affectation : yymsg(WARNING, "Unknown option '%s' or plugin '%s'", $6, $3); } } - | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT StringExpr tEND { try { @@ -1533,39 +1556,59 @@ Shape : tPoint '(' FExpr ')' tAFFECT VExpr tEND { - Cdbpts101((int)$3, $6[0], $6[1], $6[2], $6[3], $6[4]); + int num = (int)$3; + if(FindPoint(num, THEM)){ + yymsg(GERROR, "Point %d already exists", num); + } + else{ + Vertex *v = Create_Vertex(num, CTX.geom.scaling_factor * $6[0], + CTX.geom.scaling_factor * $6[1], + CTX.geom.scaling_factor * $6[2], + CTX.geom.scaling_factor * $6[3], 1.0); + Tree_Add(THEM->Points, &v); + } $$.Type = MSH_POINT; - $$.Num = (int)$3; + $$.Num = num; } - | tPhysical tPoint '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_PHYSICAL_POINT, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT, THEM)){ + yymsg(GERROR, "Physical point %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); $$.Type = MSH_PHYSICAL_POINT; - $$.Num = (int)$4; + $$.Num = num; } | tAttractor tPoint ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND { - Vertex *v; - Attractor *a; - double p; - int ip; for(int i = 0; i < List_Nbr($3); i++){ + double p; List_Read($3, i, &p); - ip = (int)p; - v = FindPoint(ip, THEM); + Vertex *v = FindPoint((int)p, THEM); if(!v) - yymsg(WARNING, "Unknown Point %d", ip); + yymsg(WARNING, "Unknown Point %d", (int)p); else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - $6, $8, $10, v, NULL, NULL); + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + $6, $8, $10, v, NULL, NULL); List_Add(THEM->Metric->Attractors, &a); } } + List_Delete($3); + // dummy values + $$.Type = 0; + $$.Num = 0; } | tCharacteristic tLength ListOfDouble tAFFECT FExpr tEND { - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); Vertex *v = FindPoint((int)d, THEM); if(!v) @@ -1573,234 +1616,502 @@ Shape : else v->lc = $5; } + List_Delete($3); + // dummy values + $$.Type = 0; + $$.Num = 0; } // Lines | tLine '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbseg101((int)$3, MSH_SEGM_LINE, 1, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_LINE, 1, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete($6); $$.Type = MSH_SEGM_LINE; - $$.Num = (int)$3; + $$.Num = num; } | tSpline '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbseg101((int)$3, MSH_SEGM_SPLN, 3, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_SPLN, 3, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + List_Delete($6); $$.Type = MSH_SEGM_SPLN; - $$.Num = (int)$3; + $$.Num = num; } - | tAttractor tLine ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND + | tCircle '(' FExpr ')' tAFFECT ListOfDouble tEND { - Curve *c; - Attractor *a; - double p; - int ip; - for(int i = 0; i < List_Nbr($3); i++){ - List_Read($3, i, &p); - ip = (int)p; - c = FindCurve(ip, THEM); - if(!c) - yymsg(WARNING, "Unknown Curve %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - $6, $8, $10, NULL, c, NULL); - List_Add(THEM->Metric->Attractors, &a); - } + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); } + List_Delete($6); + $$.Type = MSH_SEGM_CIRC; + $$.Num = num; } - | tCircle '(' FExpr ')' tAFFECT ListOfDouble tEND + | tCircle '(' FExpr ')' tAFFECT ListOfDouble tPlane VExpr tEND { - Cdbseg101((int)$3, MSH_SEGM_CIRC, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_CIRC ; - $$.Num = (int)$3; + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_CIRC, 2, temp, NULL, + -1, -1, 0., 1.); + c->Circle.n[0] = $8[0]; + c->Circle.n[1] = $8[1]; + c->Circle.n[2] = $8[2]; + End_Curve(c); + Tree_Add(THEM->Curves, &c); + Curve *rc = CreateReversedCurve(THEM, c); + rc->Circle.n[0] = $8[0]; + rc->Circle.n[1] = $8[1]; + rc->Circle.n[2] = $8[2]; + End_Curve(rc); + List_Delete(temp); + } + List_Delete($6); + $$.Type = MSH_SEGM_CIRC; + $$.Num = num; } | tEllipse '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbseg101((int)$3, MSH_SEGM_ELLI, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_ELLI ; - $$.Num = (int)$3; - } - | tCircle '(' FExpr ')' tAFFECT ListOfDouble tPlane VExpr tEND - { - List_T *temp; - int i, j; - double d; - temp = List_Create(List_Nbr($6), 1, sizeof(int)); - for(i = 0; i < List_Nbr($6); i++){ - List_Read($6, i, &d); - j = (int)d; - List_Add(temp, &j); + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_ELLI, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); } - AddCircleInDataBase ((int) $3, MSH_SEGM_CIRC, temp, $8); - List_Delete(temp); - $$.Type = MSH_SEGM_CIRC ; - $$.Num = (int)$3; + List_Delete($6); + $$.Type = MSH_SEGM_ELLI; + $$.Num = num; } | tParametric '(' FExpr ')' tAFFECT '{' FExpr ',' FExpr ',' tBIGSTR ',' tBIGSTR ',' tBIGSTR '}' tEND { - Cdbseg101((int)$3, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, -1, -1, $7, $9, $11, $13, $15); - $$.Type = MSH_SEGM_PARAMETRIC ; - $$.Num = (int)$3; - } - | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4, MSH_PHYSICAL_LINE, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Type = MSH_PHYSICAL_LINE; - $$.Num = (int)$4; - } - | tLine tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND - { - $$.Type = MSH_SEGM_LOOP; - Cdbz101((int)$4, $$.Type, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Num = (int)$4; + int num = (int)$3; + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + Curve *c = Create_Curve(num, MSH_SEGM_PARAMETRIC, 2, NULL, NULL, + -1, -1, $7, $9); + strcpy(c->functu, $11); + strcpy(c->functv, $13); + strcpy(c->functw, $15); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + } + $$.Type = MSH_SEGM_PARAMETRIC; + $$.Num = num; } | tBSpline '(' FExpr ')' tAFFECT ListOfDouble tEND { - if(List_Nbr($6) > 3){ - Cdbseg101((int)$3, MSH_SEGM_BSPLN, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_BSPLN; - $$.Num = (int)$3; - } - else - yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", (int)$3, + int num = (int)$3; + if(List_Nbr($6) < 4){ + yymsg(GERROR, "Too few control points for BSpline %d (%d < 4)", num, List_Nbr($6)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_BSPLN, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete($6); + $$.Type = MSH_SEGM_BSPLN; + $$.Num = num; } | tBezier '(' FExpr ')' tAFFECT ListOfDouble tEND { - if(List_Nbr($6) > 3){ - Cdbseg101((int)$3, MSH_SEGM_BEZIER, 2, $6, NULL, -1, -1, 0., 1., NULL, NULL, NULL); - $$.Type = MSH_SEGM_BSPLN; - $$.Num = (int)$3; - } - else - yymsg(GERROR, "Too few control points for Bezier %d (%d < 4)", (int)$3, + int num = (int)$3; + if(List_Nbr($6) < 4){ + yymsg(GERROR, "Too few control points for Bezier curve %d (%d < 4)", num, List_Nbr($6)); + } + else{ + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_BEZIER, 2, temp, NULL, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); + } + } + List_Delete($6); + $$.Type = MSH_SEGM_BEZIER; + $$.Num = num; } | tNurbs '(' FExpr ')' tAFFECT ListOfDouble tKnots ListOfDouble tOrder FExpr tEND { - List_T *Temp; - int i; - double d; + int num = (int)$3; if(List_Nbr($6) + (int)$10 + 1 != List_Nbr($8)){ yymsg(GERROR, "Wrong definition of Nurbs Curve %d: " - "got %d Knots, need N + D + 1 = %d + %d + 1 = %d", - (int)$3, - List_Nbr($8), List_Nbr($6), (int)$10, List_Nbr($6) + (int)$10 + 1); + "got %d knots, need N + D + 1 = %d + %d + 1 = %d", + (int)$3, List_Nbr($8), List_Nbr($6), (int)$10, List_Nbr($6) + (int)$10 + 1); } else{ - Temp = List_Create(List_Nbr($6), 1, sizeof(int)); - for(i = 0; i < List_Nbr($6); i++) { - List_Read($6, i, &d); - j = (int)d; - List_Add(Temp, &j); + if(FindCurve(num, THEM)){ + yymsg(GERROR, "Curve %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($6); + Curve *c = Create_Curve(num, MSH_SEGM_NURBS, (int)$10, temp, $8, + -1, -1, 0., 1.); + Tree_Add(THEM->Curves, &c); + CreateReversedCurve(THEM, c); + List_Delete(temp); } - AddCurveInDataBase ((int)$3, MSH_SEGM_NURBS, (int)$10, Temp, $8, -1, -1, 0., 1.); - List_Delete(Temp); } + List_Delete($6); + List_Delete($8); + $$.Type = MSH_SEGM_NURBS; + $$.Num = num; + } + | tLine tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4; + if(FindEdgeLoop(num, THEM)){ + yymsg(GERROR, "Line loop %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + sortEdgesInLoop(num, temp); + EdgeLoop *l = Create_EdgeLoop(num, temp); + Tree_Add(THEM->EdgeLoops, &l); + List_Delete(temp); + } + List_Delete($7); + $$.Type = MSH_SEGM_LOOP; + $$.Num = num; + } + | tAttractor tLine ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND + { + for(int i = 0; i < List_Nbr($3); i++){ + double p; + List_Read($3, i, &p); + Curve *c = FindCurve((int)p, THEM); + if(!c) + yymsg(WARNING, "Unknown Curve %d", (int)p); + else{ + Attractor *a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, + $6, $8, $10, NULL, c, NULL); + List_Add(THEM->Metric->Attractors, &a); + } + } + // dummy values + $$.Type = 0; + $$.Num = 0; + } + | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE, THEM)){ + yymsg(GERROR, "Physical line %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); + $$.Type = MSH_PHYSICAL_LINE; + $$.Num = num; } // Surfaces | tPlane tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + Surface *s = Create_Surface(num, MSH_SURF_PLAN); + List_T *temp = ListOfDouble2ListOfInt($7); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + List_Delete($7); $$.Type = MSH_SURF_PLAN; - $$.Num = (int)$4; + $$.Num = num; + } + | tRuled tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4, type = 0; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + double d; + List_Read($7, 0, &d); + EdgeLoop *el = FindEdgeLoop((int)d, THEM); + if(!el){ + yymsg(GERROR, "Unknown Line Loop %d", (int)d); + } + else{ + int j = List_Nbr(el->Curves); + if(j == 4){ + type = MSH_SURF_REGL; + } + else if(j == 3){ + type = MSH_SURF_TRIC; + } + else{ + yymsg(GERROR, "Wrong definition of Ruled Surface %d: " + "%d borders instead of 3 or 4", num, j); + type = MSH_SURF_PLAN; + } + Surface *s = Create_Surface(num, type); + List_T *temp = ListOfDouble2ListOfInt($7); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); + s->Support = s; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); + } + } + List_Delete($7); + $$.Type = type; + $$.Num = num; } | tTrimmed tSurface '(' FExpr ')' tAFFECT '{' FExpr ',' ListOfDouble '}' tEND { - Surface *s,*support; - support = FindSurface((int)$8, THEM); - if(!support) - yymsg(GERROR, "Unknown Surface %d", (int)$8); + int num = (int)$4; + Surface *support = FindSurface((int)$8, THEM); + if(!support){ + yymsg(GERROR, "Unknown support surface %d", (int)$8); + } else{ - Cdbz101((int)$4, MSH_SURF_PLAN, 0, 0, 0, 0, 0, NULL, $10, NULL); - s = FindSurface((int)$4, THEM); - if(!s) - yymsg(GERROR, "Unknown Surface %d", (int)$4); + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } else{ - s->Typ = MSH_SURF_TRIMMED; + Surface *s = Create_Surface(num, MSH_SURF_TRIMMED); + List_T *temp = ListOfDouble2ListOfInt($10); + setSurfaceGeneratrices(s, temp); + List_Delete(temp); s->Support = support; - $$.Type = MSH_SURF_TRIMMED; - $$.Num = (int)$4; + End_Surface(s); + Tree_Add(THEM->Surfaces, &s); } } + List_Delete($10); + $$.Type = MSH_SURF_TRIMMED; + $$.Num = num; } - | tRuled tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + | tTriangulation tSurface '{' FExpr '}' tAFFECT '(' FExpr ',' FExpr ')' + ListOfDouble ListOfDouble tEND { - List_Read($7, 0, &d); - i = (int)d; - EdgeLoop *el = FindEdgeLoop(i, THEM); - if(!el) - yymsg(GERROR, "Unknown Line Loop %d", i); - else{ - j = List_Nbr(el->Curves); - if(j==4) - $$.Type = MSH_SURF_REGL; - else if(j==3) - $$.Type = MSH_SURF_TRIC; - else - yymsg(GERROR, "Wrong definition of Ruled Surface %d: " - "%d borders instead of 3 or 4", - (int)$4, j); - Cdbz101((int)$4, $$.Type, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Num = (int)$4; + int num = (int)$4, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); } + else{ + // FIXME: parameters not used; undocumented + POLY_rep *rep = new POLY_rep($12, $13); + s->thePolyRep = rep; + type = s->Typ; + } + //FIXME: do you copy the data? + //List_Delete($12); + //List_Delete($13); + $$.Type = type; + $$.Num = (int)$4; + } + // for backward compatibility only: when we don't create a new entity, + // we should use braces (and not parentheses) + | tTriangulation tSurface '(' FExpr ')' tAFFECT '(' FExpr ',' FExpr ')' + ListOfDouble ListOfDouble tEND + { + int num = (int)$4, type = 0; + Surface *s = FindSurface(num, THEM); + if(!s) { + yymsg(GERROR, "Unknown surface %d", num); + } + else{ + POLY_rep *rep = new POLY_rep($12, $13); + s->thePolyRep = rep; + type = s->Typ; + } + $$.Type = type; + $$.Num = (int)$4; } - - | tTriangulation tSurface '(' FExpr ')' tAFFECT '(' FExpr ',' FExpr ')' ListOfDouble ListOfDouble tEND - { - AddTriangulationToSurface ((int) $4, (int) $8, (int) $10, $12, $13); - $$.Num = (int)$4; - } - | tNurbs tSurface tWith tBounds '(' FExpr ')' tAFFECT - ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' - tOrder '{' FExpr ',' FExpr '}' tEND + ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' + tOrder '{' FExpr ',' FExpr '}' tEND { - CreateNurbsSurface ((int) $6 , (int)$18 , (int)$20 , $9, $12, $14); + int num = (int)$6; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurface(num, (int)$18, (int)$20, $9, $12, $14); + } + for(int i = 0; i < List_Nbr($9); i++) + List_Delete((List_T*)List_Pointer($9, i)); + List_Delete($9); + List_Delete($12); + List_Delete($14); $$.Type = MSH_SURF_NURBS; - $$.Num = (int)$6; + $$.Num = num; } | tNurbs tSurface '(' FExpr ')' tAFFECT - ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' - tOrder '{' FExpr ',' FExpr '}' tEND - { - CreateNurbsSurfaceSupport ((int)$4, (int) $16 , (int) $18 , $7, $10, $12); - } - | tPhysical tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' + tOrder '{' FExpr ',' FExpr '}' tEND { - Cdbz101((int)$4, MSH_PHYSICAL_SURFACE, 0, 0, 0, 0, 0, NULL, $7, NULL); - $$.Type = MSH_PHYSICAL_SURFACE; - $$.Num = (int)$4; + int num = (int)$4; + if(FindSurface(num, THEM)){ + yymsg(GERROR, "Surface %d already exists", num); + } + else{ + CreateNurbsSurfaceSupport(num, (int)$16, (int)$18, $7, $10, $12); + } + for(int i = 0; i < List_Nbr($7); i++) + List_Delete((List_T*)List_Pointer($7, i)); + List_Delete($7); + List_Delete($10); + List_Delete($12); + $$.Type = MSH_SURF_NURBS; + $$.Num = num; } | tSurface tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_SURF_LOOP, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindSurfaceLoop(num, THEM)){ + yymsg(GERROR, "Surface loop %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + SurfaceLoop *l = Create_SurfaceLoop(num, temp); + Tree_Add(THEM->SurfaceLoops, &l); + List_Delete(temp); + } + List_Delete($7); $$.Type = MSH_SURF_LOOP; - $$.Num = (int)$4; + $$.Num = num; + } + | tPhysical tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND + { + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE, THEM)){ + yymsg(GERROR, "Physical surface %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); + $$.Type = MSH_PHYSICAL_SURFACE; + $$.Num = num; } // Volumes | tComplex tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt($7); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete($7); $$.Type = MSH_VOLUME; - $$.Num = (int)$4; + $$.Num = num; } | tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$3, MSH_VOLUME, 0, 0, 0, 0, 0, NULL, $6, NULL); + int num = (int)$3; + if(FindVolume(num, THEM)){ + yymsg(GERROR, "Volume %d already exists", num); + } + else{ + Volume *v = Create_Volume(num, MSH_VOLUME); + List_T *temp = ListOfDouble2ListOfInt($6); + setVolumeSurfaces(v, temp); + List_Delete(temp); + Tree_Add(THEM->Volumes, &v); + } + List_Delete($6); $$.Type = MSH_VOLUME; - $$.Num = (int)$3; + $$.Num = num; } | tPhysical tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND { - Cdbz101((int)$4, MSH_PHYSICAL_VOLUME, 0, 0, 0, 0, 0, NULL, $7, NULL); + int num = (int)$4; + if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME, THEM)){ + yymsg(GERROR, "Physical volume %d already exists", num); + } + else{ + List_T *temp = ListOfDouble2ListOfInt($7); + PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp); + List_Delete(temp); + List_Add(THEM->PhysicalGroups, &p); + } + List_Delete($7); $$.Type = MSH_PHYSICAL_VOLUME; - $$.Num = (int)$4; + $$.Num = num; } ; @@ -1809,7 +2120,7 @@ Shape : Transform : tTranslate VExpr '{' MultipleShape '}' { - TranslateShapes ($2[0], $2[1], $2[2], $4, 1); + TranslateShapes($2[0], $2[1], $2[2], $4, 1); $$ = $4; } | tRotate '{' VExpr ',' VExpr ',' FExpr '}' '{' MultipleShape '}' @@ -1836,7 +2147,7 @@ MultipleShape : ; ListOfShapes : - /* none */ + // nothing { $$ = List_Create(3, 3, sizeof(Shape)); } @@ -1846,8 +2157,10 @@ ListOfShapes : } | ListOfShapes tPoint '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Vertex *v = FindPoint(TheShape.Num, THEM); if(!v) @@ -1860,8 +2173,10 @@ ListOfShapes : } | ListOfShapes tLine '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Curve *c = FindCurve(TheShape.Num, THEM); if(!c) @@ -1874,8 +2189,10 @@ ListOfShapes : } | ListOfShapes tSurface '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Surface *s = FindSurface(TheShape.Num, THEM); if(!s) @@ -1888,8 +2205,10 @@ ListOfShapes : } | ListOfShapes tVolume '{' RecursiveListOfDouble '}' tEND { - for(i = 0; i < List_Nbr($4); i++){ + for(int i = 0; i < List_Nbr($4); i++){ + double d; List_Read($4, i, &d); + Shape TheShape; TheShape.Num = (int)d; Volume *v = FindVolume(TheShape.Num, THEM); if(!v) @@ -1908,12 +2227,15 @@ Duplicata : tDuplicata '{' ListOfShapes '}' { $$ = List_Create(3, 3, sizeof(Shape)); - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); + int j; CopyShape(TheShape.Type, TheShape.Num, &j); TheShape.Num = j; List_Add($$, &TheShape); } + List_Delete($3); } | tDuplicata tSTRING '[' FExpr ']' tEND { @@ -1928,10 +2250,12 @@ Duplicata : Delete : tDelete '{' ListOfShapes '}' { - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); DeleteShape(TheShape.Type, TheShape.Num); } + List_Delete($3); } | tDelete tSTRING '[' FExpr ']' tEND { @@ -1949,10 +2273,12 @@ Delete : Colorify : tColor ColorExpr '{' ListOfShapes '}' { - for(i = 0; i < List_Nbr($4); i++){ - List_Read ($4, i, &TheShape); + for(int i = 0; i < List_Nbr($4); i++){ + Shape TheShape; + List_Read($4, i, &TheShape); ColorShape(TheShape.Type, TheShape.Num, $2); } + List_Delete($4); } ; @@ -1963,29 +2289,33 @@ Visibility : { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber($2, i, m); } | tHide StringExpr tEND { - for(i = 2; i < 6; i++) + for(int i = 2; i < 6; i++) SetVisibilityByNumber($2, i, 0); } | tShow '{' ListOfShapes '}' { int m = (CTX.visibility_mode == 2) ? VIS_MESH : ((CTX.visibility_mode == 1) ? VIS_GEOM : VIS_GEOM|VIS_MESH); - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, m); } + List_Delete($3); } | tHide '{' ListOfShapes '}' { - for(i = 0; i < List_Nbr($3); i++){ - List_Read ($3, i, &TheShape); + for(int i = 0; i < List_Nbr($3); i++){ + Shape TheShape; + List_Read($3, i, &TheShape); VisibilityShape(TheShape.Type, TheShape.Num, 0); } + List_Delete($3); } ; @@ -1995,12 +2325,18 @@ Command : tSTRING StringExpr tEND { if(!strcmp($1, "Include")){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); + // Warning: we *don't* close included files. If you need to + // include many files, use "Merge" instead: some OSes limit + // the number of files a process can open simultaneously (500 + // for OS X) ParseFile(tmpstring, 0, 0); } else if(!strcmp($1, "Print")){ #if defined(HAVE_FLTK) if(!CTX.batch){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); CreateOutputFile(tmpstring, CTX.print.format); } @@ -2008,15 +2344,18 @@ Command : } else if(!strcmp($1, "Save")){ #if defined(HAVE_FLTK) + char tmpstring[1024]; FixRelativePath($2, tmpstring); CreateOutputFile(tmpstring, CTX.mesh.format); #endif } else if(!strcmp($1, "Merge")){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); MergeProblem(tmpstring); } else if(!strcmp($1, "MergeWithBoundingBox")){ + char tmpstring[1024]; FixRelativePath($2, tmpstring); MergeProblemWithBoundingBox(tmpstring); } @@ -2032,6 +2371,7 @@ Command : if(!strcmp($1, "Save") && !strcmp($2, "View")){ Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)$4); if(v){ + char tmpstring[1024]; FixRelativePath($6, tmpstring); WriteView(v, tmpstring, 0, 0); } @@ -2049,8 +2389,6 @@ Command : } } else if(!strcmp($1, "Mesh")){ - //Maillage_Dimension_0(THEM); - //mai3d(THEM, (int)$2); yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts"); } else{ @@ -2062,7 +2400,7 @@ Command : try { GMSH_PluginManager::instance()->action($3, $6, 0); } - catch (...) { + catch(...) { yymsg(WARNING, "Unknown action '%s' or plugin '%s'", $6, $3); } } @@ -2103,32 +2441,41 @@ Loop : tFor '(' FExpr tDOTS FExpr ')' { - LoopControlVariablesTab[ImbricatedLoop][0] = $3 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = $3; + LoopControlVariablesTab[ImbricatedLoop][1] = $5; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tFor '(' FExpr tDOTS FExpr tDOTS FExpr ')' { - LoopControlVariablesTab[ImbricatedLoop][0] = $3 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][2] = $7 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; + LoopControlVariablesTab[ImbricatedLoop][0] = $3; + LoopControlVariablesTab[ImbricatedLoop][1] = $5; + LoopControlVariablesTab[ImbricatedLoop][2] = $7; + LoopControlVariablesNameTab[ImbricatedLoop] = ""; fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tFor tSTRING tIn '{' FExpr tDOTS FExpr '}' { - LoopControlVariablesTab[ImbricatedLoop][0] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $7 ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = $2 ; - + LoopControlVariablesTab[ImbricatedLoop][0] = $5; + LoopControlVariablesTab[ImbricatedLoop][1] = $7; + LoopControlVariablesTab[ImbricatedLoop][2] = 1.0; + LoopControlVariablesNameTab[ImbricatedLoop] = $2; + Symbol TheSymbol; TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &$5); @@ -2137,19 +2484,23 @@ Loop : else{ List_Write(pSymbol->val, 0, &$5); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tFor tSTRING tIn '{' FExpr tDOTS FExpr tDOTS FExpr '}' { - LoopControlVariablesTab[ImbricatedLoop][0] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $7 ; - LoopControlVariablesTab[ImbricatedLoop][2] = $9 ; - LoopControlVariablesNameTab[ImbricatedLoop] = $2 ; - + LoopControlVariablesTab[ImbricatedLoop][0] = $5; + LoopControlVariablesTab[ImbricatedLoop][1] = $7; + LoopControlVariablesTab[ImbricatedLoop][2] = $9; + LoopControlVariablesNameTab[ImbricatedLoop] = $2; + Symbol TheSymbol; TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){ TheSymbol.val = List_Create(1, 1, sizeof(double)); List_Put(TheSymbol.val, 0, &$5); @@ -2158,10 +2509,13 @@ Loop : else{ List_Write(pSymbol->val, 0, &$5); } - fgetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop]); yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno; ImbricatedLoop++; + if(ImbricatedLoop > MAX_RECUR_LOOPS-1){ + yymsg(GERROR, "Reached maximum number of imbricated loops"); + ImbricatedLoop = MAX_RECUR_LOOPS-1; + } } | tEndFor { @@ -2169,19 +2523,25 @@ Loop : LoopControlVariablesTab[ImbricatedLoop-1][0]){ LoopControlVariablesTab[ImbricatedLoop-1][0] += LoopControlVariablesTab[ImbricatedLoop-1][2]; - if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){ + Symbol TheSymbol; TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1]; - pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol); - *(double*)List_Pointer_Fast(pSymbol->val, 0) += - LoopControlVariablesTab[ImbricatedLoop-1][2] ; + Symbol *pSymbol; + if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) + yymsg(GERROR, "Unknown loop variable"); + else + *(double*)List_Pointer_Fast(pSymbol->val, 0) += + LoopControlVariablesTab[ImbricatedLoop-1][2]; } - fsetpos(yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]); yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1]; } else{ ImbricatedLoop--; + if(ImbricatedLoop < 0){ + yymsg(GERROR, "Problem with imbricated loops"); + ImbricatedLoop = 0; + } } } | tFunction tSTRING @@ -2218,6 +2578,7 @@ Extrude : tExtrude tPoint '{' FExpr ',' VExpr '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, NULL); @@ -2228,6 +2589,7 @@ Extrude : | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &pc, &prc, 1, NULL); @@ -2238,6 +2600,7 @@ Extrude : | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr'}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &pc, &prc, 1, NULL); @@ -2253,6 +2616,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &pc, &prc, 1, &extr); @@ -2268,6 +2632,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &pc, &prc, 1, &extr); @@ -2283,6 +2648,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Curve *pc, *prc; + Shape TheShape; TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &pc, &prc, 1, &extr); @@ -2295,6 +2661,7 @@ Extrude : | tExtrude tLine '{' FExpr ',' VExpr '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, NULL); @@ -2312,6 +2679,7 @@ Extrude : | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &ps, 1, NULL); @@ -2329,6 +2697,7 @@ Extrude : | tExtrude tLine '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &ps, 1, NULL); @@ -2351,6 +2720,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., &ps, 1, &extr); @@ -2373,6 +2743,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, &ps, 1, &extr); @@ -2395,6 +2766,7 @@ Extrude : '{' ExtrudeParameters '}' tEND { Surface *ps; + Shape TheShape; TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, &ps, 1, &extr); @@ -2414,6 +2786,7 @@ Extrude : | tExtrude tSurface '{' FExpr ',' VExpr '}' tEND { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., 0, NULL); @@ -2430,6 +2803,7 @@ Extrude : } | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, 0, NULL); @@ -2446,6 +2820,7 @@ Extrude : } | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND { + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, 0, NULL); @@ -2467,10 +2842,10 @@ Extrude : } '{' ExtrudeParameters '}' tEND { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)$4, $6[0], $6[1], $6[2], 0., 0., 0., 0., 0., 0., 0., - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -2490,10 +2865,10 @@ Extrude : '{' ExtrudeParameters '}' tEND { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)$4, 0., 0., 0., $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -2513,10 +2888,10 @@ Extrude : '{' ExtrudeParameters '}' tEND { - int vol = NEWREG(); + Shape TheShape; TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)$4, $6[0], $6[1], $6[2], $8[0], $8[1], $8[2], $10[0], $10[1], $10[2], $12, - vol, &extr); + NEWREG(), &extr); Surface *s = FindSurface(TheShape.Num, THEM); if(!s){ //yymsg(WARNING, "Unknown Surface %d", TheShape.Num); @@ -2596,16 +2971,16 @@ ExtrudeParameter : } ; -// T R A N S F I N I +// T R A N S F I N I T E -Transfini : +Transfinite : tTransfinite tLine ListOfDouble tAFFECT FExpr tEND { - Curve *c; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -2619,11 +2994,11 @@ Transfini : } | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tProgression FExpr tEND { - Curve *c; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -2637,11 +3012,11 @@ Transfini : } | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tBump FExpr tEND { - Curve *c; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)fabs(d); - c = FindCurve(j, THEM); + int j = (int)fabs(d); + Curve *c = FindCurve(j, THEM); if(!c) yymsg(WARNING, "Unknown Curve %d", j); else{ @@ -2660,15 +3035,16 @@ Transfini : yymsg(WARNING, "Unknown Surface %d", (int)$4); else{ s->Method = TRANSFINI; - k = List_Nbr($7); - if(k!=3 && k!=4){ + int k = List_Nbr($7); + if(k != 3 && k != 4){ yymsg(GERROR, "Wrong definition of Transfinite Surface %d: " - "%d points instead of 3 or 4" , $4, k) ; + "%d points instead of 3 or 4" , $4, k); } else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read($7, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -2682,14 +3058,15 @@ Transfini : yymsg(WARNING, "Unknown Surface %d", (int)$4); else{ s->Method = ELLIPTIC; - k = List_Nbr($7); + int k = List_Nbr($7); if(k != 4) yymsg(GERROR, "Wrong definition of Elliptic Surface %d: " - "%d points instead of 4" , $4, k) ; + "%d points instead of 4" , $4, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read($7, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); s->ipar[i] = j; } } @@ -2703,14 +3080,15 @@ Transfini : yymsg(WARNING, "Unknown Volume %d", (int)$4); else{ v->Method = TRANSFINI; - k = List_Nbr($7); + int k = List_Nbr($7); if(k != 6 && k != 8) yymsg(GERROR, "Wrong definition of Transfinite Volume %d: " - "%d points instead of 6 or 8" , $4, k) ; + "%d points instead of 6 or 8" , $4, k); else{ - for(i = 0; i < k; i++){ + for(int i = 0; i < k; i++){ + double d; List_Read($7, i, &d); - j = (int)fabs(d); + int j = (int)fabs(d); v->ipar[i] = j; } } @@ -2719,11 +3097,11 @@ Transfini : } | tRecombine tSurface ListOfDouble tAFFECT FExpr tEND { - Surface *s; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = ($5 > 0 && $5 < 90) ? $5 : 90; @@ -2733,11 +3111,11 @@ Transfini : } | tRecombine tSurface ListOfDouble tEND { - Surface *s; - for(i = 0; i < List_Nbr($3); i++){ + for(int i = 0; i < List_Nbr($3); i++){ + double d; List_Read($3, i, &d); - j = (int)d; - s = FindSurface(j, THEM); + int j = (int)d; + Surface *s = FindSurface(j, THEM); if(s){ s->Recombine = 1; s->RecombineAngle = 30.; @@ -2770,35 +3148,35 @@ BoolExpr : | tUNSPECIFIED {$$ = -1;} | tU {$$ = -1;} | tV {$$ = -1;} - ; +; FExpr : FExpr_Single { $$ = $1; } - | '(' FExpr ')' { $$ = $2 ; } - | '-' FExpr %prec UNARYPREC { $$ = -$2 ; } + | '(' FExpr ')' { $$ = $2; } + | '-' FExpr %prec UNARYPREC { $$ = -$2; } | '+' FExpr %prec UNARYPREC { $$ = $2; } - | '!' FExpr { $$ = !$2 ; } - | FExpr '-' FExpr { $$ = $1 - $3 ; } - | FExpr '+' FExpr { $$ = $1 + $3 ; } - | FExpr '*' FExpr { $$ = $1 * $3 ; } + | '!' FExpr { $$ = !$2; } + | FExpr '-' FExpr { $$ = $1 - $3; } + | FExpr '+' FExpr { $$ = $1 + $3; } + | FExpr '*' FExpr { $$ = $1 * $3; } | FExpr '/' FExpr { if(!$3) yymsg(GERROR, "Division by zero in '%g / %g'", $1, $3); else - $$ = $1 / $3 ; - } - | FExpr '%' FExpr { $$ = (int)$1 % (int)$3 ; } - | FExpr '^' FExpr { $$ = pow($1, $3) ; } - | FExpr '<' FExpr { $$ = $1 < $3 ; } - | FExpr '>' FExpr { $$ = $1 > $3 ; } - | FExpr tLESSOREQUAL FExpr { $$ = $1 <= $3 ; } - | FExpr tGREATEROREQUAL FExpr { $$ = $1 >= $3 ; } - | FExpr tEQUAL FExpr { $$ = $1 == $3 ; } - | FExpr tNOTEQUAL FExpr { $$ = $1 != $3 ; } - | FExpr tAND FExpr { $$ = $1 && $3 ; } - | FExpr tOR FExpr { $$ = $1 || $3 ; } - | FExpr '?' FExpr tDOTS FExpr { $$ = $1? $3 : $5 ; } + $$ = $1 / $3; + } + | FExpr '%' FExpr { $$ = (int)$1 % (int)$3; } + | FExpr '^' FExpr { $$ = pow($1, $3); } + | FExpr '<' FExpr { $$ = $1 < $3; } + | FExpr '>' FExpr { $$ = $1 > $3; } + | FExpr tLESSOREQUAL FExpr { $$ = $1 <= $3; } + | FExpr tGREATEROREQUAL FExpr { $$ = $1 >= $3; } + | FExpr tEQUAL FExpr { $$ = $1 == $3; } + | FExpr tNOTEQUAL FExpr { $$ = $1 != $3; } + | FExpr tAND FExpr { $$ = $1 && $3; } + | FExpr tOR FExpr { $$ = $1 || $3; } + | FExpr '?' FExpr tDOTS FExpr { $$ = $1? $3 : $5; } | tExp '(' FExpr ')' { $$ = exp($3); } | tLog '(' FExpr ')' { $$ = log($3); } | tLog10 '(' FExpr ')' { $$ = log10($3); } @@ -2809,15 +3187,15 @@ FExpr : | tAcos '(' FExpr ')' { $$ = acos($3); } | tTan '(' FExpr ')' { $$ = tan($3); } | tAtan '(' FExpr ')' { $$ = atan($3); } - | tAtan2 '(' FExpr ',' FExpr ')' { $$ = atan2($3, $5); } + | tAtan2 '(' FExpr ',' FExpr ')' { $$ = atan2($3, $5);} | tSinh '(' FExpr ')' { $$ = sinh($3); } | tCosh '(' FExpr ')' { $$ = cosh($3); } | tTanh '(' FExpr ')' { $$ = tanh($3); } | tFabs '(' FExpr ')' { $$ = fabs($3); } | tFloor '(' FExpr ')' { $$ = floor($3); } | tCeil '(' FExpr ')' { $$ = ceil($3); } - | tFmod '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } - | tModulo '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } + | tFmod '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } + | tModulo '(' FExpr ',' FExpr ')' { $$ = fmod($3, $5); } | tHypot '(' FExpr ',' FExpr ')' { $$ = sqrt($3*$3+$5*$5); } | tRand '(' FExpr ')' { $$ = $3*(double)rand()/(double)RAND_MAX; } // The following is for GetDP compatibility @@ -2831,15 +3209,15 @@ FExpr : | tAcos '[' FExpr ']' { $$ = acos($3); } | tTan '[' FExpr ']' { $$ = tan($3); } | tAtan '[' FExpr ']' { $$ = atan($3); } - | tAtan2 '[' FExpr ',' FExpr ']' { $$ = atan2($3, $5); } + | tAtan2 '[' FExpr ',' FExpr ']' { $$ = atan2($3, $5);} | tSinh '[' FExpr ']' { $$ = sinh($3); } | tCosh '[' FExpr ']' { $$ = cosh($3); } | tTanh '[' FExpr ']' { $$ = tanh($3); } | tFabs '[' FExpr ']' { $$ = fabs($3); } | tFloor '[' FExpr ']' { $$ = floor($3); } | tCeil '[' FExpr ']' { $$ = ceil($3); } - | tFmod '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } - | tModulo '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } + | tFmod '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } + | tModulo '[' FExpr ',' FExpr ']' { $$ = fmod($3, $5); } | tHypot '[' FExpr ',' FExpr ']' { $$ = sqrt($3*$3+$5*$5); } | tRand '[' FExpr ']' { $$ = $3*(double)rand()/(double)RAND_MAX; } ; @@ -2859,68 +3237,76 @@ FExpr_Single : | tSTRING { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else - $$ = *(double*)List_Pointer_Fast(pSymbol->val, 0) ; + $$ = *(double*)List_Pointer_Fast(pSymbol->val, 0); } - | tSTRING '[' FExpr ']' { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - $$ = *pd ; + $$ = *pd; else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; - $$ = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); + $$ = 0.; } } } - | '#' tSTRING '[' ']' { - TheSymbol.Name = $2 ; + Symbol TheSymbol; + TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $2) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $2); + $$ = 0.; } else{ $$ = List_Nbr(pSymbol->val); } } - | tSTRING NumericIncrement { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else - $$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2) ; + $$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2); } - | tSTRING '[' FExpr ']' NumericIncrement { - TheSymbol.Name = $1 ; + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - $$ = 0. ; + yymsg(GERROR, "Unknown variable '%s'", $1); + $$ = 0.; } else{ + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - $$ = (*pd += $5) ; + $$ = (*pd += $5); else{ - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3) ; - $$ = 0. ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, (int)$3); + $$ = 0.; } } } @@ -2929,62 +3315,67 @@ FExpr_Single : | tSTRING '.' tSTRING { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt(0, GMSH_GET, 0); } } - | tSTRING '[' FExpr ']' '.' tSTRING { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt((int)$3, GMSH_GET, 0); } } - | tSTRING '.' tSTRING NumericIncrement { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s.%s'", $1, $3); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4); } } - | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement { + double (*pNumOpt)(int num, int action, double value); + StringXNumber *pNumCat; if(!(pNumCat = Get_NumberOptionCategory($1))){ yymsg(GERROR, "Unknown numeric option class '%s'", $1); - $$ = 0. ; + $$ = 0.; } else{ if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){ yymsg(GERROR, "Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - $$ = 0. ; + $$ = 0.; } else $$ = pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7); @@ -2995,23 +3386,23 @@ FExpr_Single : VExpr : VExpr_Single { - memcpy($$, $1, 5*sizeof(double)) ; + memcpy($$, $1, 5*sizeof(double)); } | '-' VExpr %prec UNARYPREC { - for(i = 0; i < 5; i++) $$[i] = -$2[i] ; + for(int i = 0; i < 5; i++) $$[i] = -$2[i]; } | '+' VExpr %prec UNARYPREC { - for(i = 0; i < 5; i++) $$[i] = $2[i]; + for(int i = 0; i < 5; i++) $$[i] = $2[i]; } | VExpr '-' VExpr { - for(i = 0; i < 5; i++) $$[i] = $1[i] - $3[i] ; + for(int i = 0; i < 5; i++) $$[i] = $1[i] - $3[i]; } | VExpr '+' VExpr { - for(i = 0; i < 5; i++) $$[i] = $1[i] + $3[i] ; + for(int i = 0; i < 5; i++) $$[i] = $1[i] + $3[i]; } ; @@ -3035,7 +3426,7 @@ VExpr_Single : ; ListOfStrings : - /* none */ + // nothing { } | '(' RecursiveListOfStrings ')' @@ -3053,7 +3444,7 @@ RecursiveListOfStrings : ; ListOfListOfDouble : - /* none */ + // nothing { } | '{' RecursiveListOfListOfDouble '}' @@ -3069,12 +3460,12 @@ ListOfListOfDouble : RecursiveListOfListOfDouble : ListOfDouble { - $$ = List_Create(2, 1, sizeof(List_T*)) ; - List_Add($$, &($1)) ; + $$ = List_Create(2, 1, sizeof(List_T*)); + List_Add($$, &($1)); } | RecursiveListOfListOfDouble ',' ListOfDouble { - List_Add($$, &($3)) ; + List_Add($$, &($3)); } ; @@ -3082,12 +3473,12 @@ RecursiveListOfListOfDouble : ListOfDouble : FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; - List_Add($$, &($1)) ; + $$ = List_Create(2, 1, sizeof(double)); + List_Add($$, &($1)); } | FExpr_Multi { - $$ = $1 ; + $$ = $1; } | '{' RecursiveListOfDouble '}' { @@ -3096,7 +3487,8 @@ ListOfDouble : | '-' '{' RecursiveListOfDouble '}' { $$ = $3; - for(i = 0; i < List_Nbr($$); i++){ + double *pd; + for(int i = 0; i < List_Nbr($$); i++){ pd = (double*)List_Pointer($$, i); (*pd) = - (*pd); } @@ -3106,20 +3498,20 @@ ListOfDouble : FExpr_Multi : FExpr tDOTS FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; - for(d = $1; ($1 < $3) ? (d <= $3) : (d >= $3); ($1 < $3) ? (d += 1.) : (d -= 1.)) - List_Add($$, &d) ; + $$ = List_Create(2, 1, sizeof(double)); + for(double d = $1; ($1 < $3) ? (d <= $3) : (d >= $3); ($1 < $3) ? (d += 1.) : (d -= 1.)) + List_Add($$, &d); } | FExpr tDOTS FExpr tDOTS FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; + $$ = List_Create(2, 1, sizeof(double)); if(!$5 || ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)){ - yymsg(GERROR, "Wrong increment in '%g:%g:%g'", $1, $3, $5) ; - List_Add($$, &($1)) ; + yymsg(GERROR, "Wrong increment in '%g:%g:%g'", $1, $3, $5); + List_Add($$, &($1)); } else - for(d = $1; ($5 > 0) ? (d <= $3) : (d >= $3); d += $5) - List_Add($$, &d) ; + for(double d = $1; ($5 > 0) ? (d <= $3) : (d >= $3); d += $5) + List_Add($$, &d); } | tPoint '{' FExpr '}' { @@ -3127,117 +3519,130 @@ FExpr_Multi : // This allows to ensure e.g. that relative point positions are // always conserved Vertex *v = FindPoint((int)$3, THEM); - $$ = List_Create(3, 1, sizeof(double)) ; + $$ = List_Create(3, 1, sizeof(double)); if(!v) { - yymsg(GERROR, "Unknown point '%d'", (int) $3) ; - double d = 0.0 ; + yymsg(GERROR, "Unknown point '%d'", (int) $3); + double d = 0.0; List_Add($$, &d); List_Add($$, &d); List_Add($$, &d); } else{ - List_Add($$, &v->Pos.X) ; - List_Add($$, &v->Pos.Y) ; - List_Add($$, &v->Pos.Z) ; + List_Add($$, &v->Pos.X); + List_Add($$, &v->Pos.Y); + List_Add($$, &v->Pos.Z); } } | Transform { - $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ; + $$ = List_Create(List_Nbr($1), 1, sizeof(double)); for(int i = 0; i < List_Nbr($1); i++){ Shape *s = (Shape*) List_Pointer($1, i); double d = s->Num; List_Add($$, &d); } + List_Delete($1); } | Duplicata { - $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ; + $$ = List_Create(List_Nbr($1), 1, sizeof(double)); for(int i = 0; i < List_Nbr($1); i++){ Shape *s = (Shape*) List_Pointer($1, i); double d = s->Num; List_Add($$, &d); } + List_Delete($1); } | Extrude { // FIXME: The syntax for this is ugly: we get double semi-colons // at the end of the line - $$ = List_Create(List_Nbr($1), 1, sizeof(double)) ; + $$ = List_Create(List_Nbr($1), 1, sizeof(double)); for(int i = 0; i < List_Nbr($1); i++){ Shape *s = (Shape*) List_Pointer($1, i); double d = s->Num; List_Add($$, &d); } + List_Delete($1); } | tSTRING '[' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $1 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $1); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++) - List_Add($$, (double*)List_Pointer_Fast(pSymbol->val, i)) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++) + List_Add($$, (double*)List_Pointer_Fast(pSymbol->val, i)); } } | '-' tSTRING '[' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $2 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $2) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $2); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr(pSymbol->val); i++){ - d = - *(double*)List_Pointer_Fast(pSymbol->val, i); - List_Add($$, &d) ; + for(int i = 0; i < List_Nbr(pSymbol->val); i++){ + double d = - *(double*)List_Pointer_Fast(pSymbol->val, i); + List_Add($$, &d); } } } | tSTRING '[' '{' RecursiveListOfDouble '}' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $1 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $1; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $1) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $1); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr($4); i++){ - j = (int)(*(double*)List_Pointer_Fast($4, i)); + for(int i = 0; i < List_Nbr($4); i++){ + int j = (int)(*(double*)List_Pointer_Fast($4, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))) - List_Add($$, pd) ; + List_Add($$, pd); else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $1, j); } } List_Delete($4); } | '-' tSTRING '[' '{' RecursiveListOfDouble '}' ']' { - $$ = List_Create(2, 1, sizeof(double)) ; - TheSymbol.Name = $2 ; + $$ = List_Create(2, 1, sizeof(double)); + Symbol TheSymbol; + TheSymbol.Name = $2; + Symbol *pSymbol; if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))) { - yymsg(GERROR, "Unknown variable '%s'", $2) ; - d = 0.0 ; + yymsg(GERROR, "Unknown variable '%s'", $2); + double d = 0.0; List_Add($$, &d); } else{ - for(i = 0; i < List_Nbr($5); i++){ - j = (int)(*(double*)List_Pointer_Fast($5, i)); + for(int i = 0; i < List_Nbr($5); i++){ + int j = (int)(*(double*)List_Pointer_Fast($5, i)); + double *pd; if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - d = - *pd; - List_Add($$, &d) ; + double d = - *pd; + List_Add($$, &d); } else - yymsg(GERROR, "Uninitialized variable '%s[%d]'", $2, j) ; + yymsg(GERROR, "Uninitialized variable '%s[%d]'", $2, j); } } List_Delete($5); @@ -3247,22 +3652,23 @@ FExpr_Multi : RecursiveListOfDouble : FExpr { - $$ = List_Create(2, 1, sizeof(double)) ; - List_Add($$, &($1)) ; + $$ = List_Create(2, 1, sizeof(double)); + List_Add($$, &($1)); } | FExpr_Multi { - $$ = $1 ; + $$ = $1; } | RecursiveListOfDouble ',' FExpr { - List_Add($$, &($3)) ; + List_Add($$, &($3)); } | RecursiveListOfDouble ',' FExpr_Multi { - for(i = 0; i < List_Nbr($3); i++){ - List_Read($3, i, &d) ; - List_Add($$, &d) ; + for(int i = 0; i < List_Nbr($3); i++){ + double d; + List_Read($3, i, &d); + List_Add($$, &d); } List_Delete($3); } @@ -3281,28 +3687,32 @@ ColorExpr : /* shift/reduce conflict | '{' tSTRING ',' FExpr '}' { + int flag; $$ = Get_ColorForString(ColorString, (int)$4, $2, &flag); if(flag) yymsg(GERROR, "Unknown color '%s'", $2); } */ | tSTRING { + int flag; $$ = Get_ColorForString(ColorString, -1, $1, &flag); if(flag) yymsg(GERROR, "Unknown color '%s'", $1); } | tSTRING '.' tColor '.' tSTRING { + unsigned int (*pColOpt)(int num, int action, unsigned int value); + StringXColor *pColCat; if(!(pColCat = Get_ColorOptionCategory($1))){ yymsg(GERROR, "Unknown color option class '%s'", $1); - $$ = 0 ; + $$ = 0; } else{ if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))){ yymsg(GERROR, "Unknown color option '%s.Color.%s'", $1, $5); - $$ = 0 ; + $$ = 0; } else{ - $$ = pColOpt(0, GMSH_GET, 0) ; + $$ = pColOpt(0, GMSH_GET, 0); } } } @@ -3315,12 +3725,12 @@ ListOfColor : } | tSTRING '[' FExpr ']' '.' tColorTable { - $$ = List_Create(256, 10, sizeof(unsigned int)) ; + $$ = List_Create(256, 10, sizeof(unsigned int)); GmshColorTable *ct = Get_ColorTable((int)$3); if(!ct) yymsg(GERROR, "View[%d] does not exist", (int)$3); else{ - for(i = 0; i < ct->size; i++) + for(int i = 0; i < ct->size; i++) List_Add($$, &ct->table[i]); } } @@ -3329,12 +3739,12 @@ ListOfColor : RecursiveListOfColor : ColorExpr { - $$ = List_Create(256, 10, sizeof(unsigned int)) ; - List_Add($$, &($1)) ; + $$ = List_Create(256, 10, sizeof(unsigned int)); + List_Add($$, &($1)); } | RecursiveListOfColor ',' ColorExpr { - List_Add($$, &($3)) ; + List_Add($$, &($3)); } ; @@ -3345,15 +3755,16 @@ StringExpr : } | tStrCat '(' StringExpr ',' StringExpr ')' { - $$ = (char *)Malloc((strlen($3)+strlen($5)+1)*sizeof(char)) ; - strcpy($$, $3) ; - strcat($$, $5) ; + $$ = (char *)Malloc((strlen($3)+strlen($5)+1)*sizeof(char)); + strcpy($$, $3); + strcat($$, $5); Free($3); Free($5); } | tStrPrefix '(' StringExpr ')' { - $$ = (char *)Malloc((strlen($3)+1)*sizeof(char)) ; + $$ = (char *)Malloc((strlen($3)+1)*sizeof(char)); + int i; for(i = strlen($3)-1; i >= 0; i--){ if($3[i] == '.'){ strncpy($$, $3, i); @@ -3370,7 +3781,8 @@ StringExpr : } | tSprintf '(' StringExpr ',' RecursiveListOfDouble ')' { - i = PrintListOfDouble($3, $5, tmpstring); + char tmpstring[1024]; + int i = PrintListOfDouble($3, $5, tmpstring); if(i < 0){ yymsg(GERROR, "Too few arguments in Sprintf"); $$ = $3; @@ -3388,13 +3800,15 @@ StringExpr : } | tSprintf '(' tSTRING '.' tSTRING ')' { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($3))) yymsg(GERROR, "Unknown string option class '%s'", $3); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($5, pStrCat))) yymsg(GERROR, "Unknown string option '%s.%s'", $3, $5); else{ - str = pStrOpt(0, GMSH_GET, NULL) ; + char *str = pStrOpt(0, GMSH_GET, NULL); $$ = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy($$, str); } @@ -3402,13 +3816,15 @@ StringExpr : } | tSprintf '(' tSTRING '[' FExpr ']' '.' tSTRING ')' { + char* (*pStrOpt)(int num, int action, char *value); + StringXString *pStrCat; if(!(pStrCat = Get_StringOptionCategory($3))) yymsg(GERROR, "Unknown string option class '%s'", $3); else{ if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($8, pStrCat))) yymsg(GERROR, "Unknown string option '%s[%d].%s'", $3, (int)$5, $8); else{ - str = pStrOpt((int)$5, GMSH_GET, NULL) ; + char *str = pStrOpt((int)$5, GMSH_GET, NULL); $$ = (char*)Malloc((strlen(str)+1)*sizeof(char)); strcpy($$, str); } @@ -3437,14 +3853,14 @@ void InitSymbols(void){ } int PrintListOfDouble(char *format, List_T *list, char *buffer){ - int i, j, k; + int j, k; char tmp1[256], tmp2[256]; - j=0; + j = 0; while(j < (int)strlen(format) && format[j]!='%') j++; strncpy(buffer, format, j); buffer[j]='\0'; - for(i = 0; i < List_Nbr(list); i++){ + for(int i = 0; i < List_Nbr(list); i++){ k = j; j++; if(j < (int)strlen(format)){ @@ -3486,5 +3902,3 @@ void yymsg(int type, char *fmt, ...){ if(type == GERROR) yyerrorstate=1; } - - diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp index 3fe55afa1b8f4aa693803f854d93f7a1f52a7ba7..f65103ed55a00ef907b0208ae22488b43a22783f 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.180 2004-02-07 01:40:26 geuzaine Exp $ + * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.181 2004-02-28 00:48:55 geuzaine Exp $ */ #define FLEX_SCANNER @@ -1014,8 +1014,7 @@ char *yytext; #line 1 "Gmsh.l" #define INITIAL 0 #line 2 "Gmsh.l" - -// $Id: Gmsh.yy.cpp,v 1.180 2004-02-07 01:40:26 geuzaine Exp $ +// $Id: Gmsh.yy.cpp,v 1.181 2004-02-28 00:48:55 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -1077,7 +1076,7 @@ void skipline(void); && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); -#line 1081 "Gmsh.yy.cpp" +#line 1080 "Gmsh.yy.cpp" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1228,10 +1227,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 82 "Gmsh.l" +#line 81 "Gmsh.l" -#line 1235 "Gmsh.yy.cpp" +#line 1234 "Gmsh.yy.cpp" if ( yy_init ) { @@ -1316,1036 +1315,1036 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 84 "Gmsh.l" +#line 83 "Gmsh.l" /* none */; YY_BREAK case 2: YY_RULE_SETUP -#line 85 "Gmsh.l" +#line 84 "Gmsh.l" return tEND; YY_BREAK case 3: YY_RULE_SETUP -#line 86 "Gmsh.l" +#line 85 "Gmsh.l" skipcomments(); YY_BREAK case 4: YY_RULE_SETUP -#line 87 "Gmsh.l" +#line 86 "Gmsh.l" skipline(); YY_BREAK case 5: YY_RULE_SETUP -#line 88 "Gmsh.l" +#line 87 "Gmsh.l" {parsestring('\"'); return tBIGSTR;} YY_BREAK case 6: YY_RULE_SETUP -#line 89 "Gmsh.l" +#line 88 "Gmsh.l" {parsestring('\''); return tBIGSTR;} YY_BREAK case 7: YY_RULE_SETUP -#line 90 "Gmsh.l" +#line 89 "Gmsh.l" {yylval.d = NEWREG(); return tDOUBLE;} YY_BREAK case 8: YY_RULE_SETUP -#line 91 "Gmsh.l" +#line 90 "Gmsh.l" {yylval.d = NEWPOINT(); return tDOUBLE;} YY_BREAK case 9: YY_RULE_SETUP -#line 92 "Gmsh.l" +#line 91 "Gmsh.l" {yylval.d = NEWLINE(); return tDOUBLE;} YY_BREAK case 10: YY_RULE_SETUP -#line 93 "Gmsh.l" +#line 92 "Gmsh.l" {yylval.d = NEWLINE(); return tDOUBLE;} YY_BREAK case 11: YY_RULE_SETUP -#line 94 "Gmsh.l" +#line 93 "Gmsh.l" {yylval.d = NEWSURFACE(); return tDOUBLE;} YY_BREAK case 12: YY_RULE_SETUP -#line 95 "Gmsh.l" +#line 94 "Gmsh.l" {yylval.d = NEWVOLUME(); return tDOUBLE;} YY_BREAK case 13: YY_RULE_SETUP -#line 96 "Gmsh.l" +#line 95 "Gmsh.l" return tAFFECT; YY_BREAK case 14: YY_RULE_SETUP -#line 97 "Gmsh.l" +#line 96 "Gmsh.l" return tAFFECTPLUS; YY_BREAK case 15: YY_RULE_SETUP -#line 98 "Gmsh.l" +#line 97 "Gmsh.l" return tAFFECTMINUS; YY_BREAK case 16: YY_RULE_SETUP -#line 99 "Gmsh.l" +#line 98 "Gmsh.l" return tAFFECTTIMES; YY_BREAK case 17: YY_RULE_SETUP -#line 100 "Gmsh.l" +#line 99 "Gmsh.l" return tAFFECTDIVIDE; YY_BREAK case 18: YY_RULE_SETUP -#line 101 "Gmsh.l" +#line 100 "Gmsh.l" return tDOTS; YY_BREAK case 19: YY_RULE_SETUP -#line 102 "Gmsh.l" +#line 101 "Gmsh.l" return tDOTS; YY_BREAK case 20: YY_RULE_SETUP -#line 103 "Gmsh.l" +#line 102 "Gmsh.l" return tCROSSPRODUCT; YY_BREAK case 21: YY_RULE_SETUP -#line 104 "Gmsh.l" +#line 103 "Gmsh.l" return tOR; YY_BREAK case 22: YY_RULE_SETUP -#line 105 "Gmsh.l" +#line 104 "Gmsh.l" return tAND; YY_BREAK case 23: YY_RULE_SETUP -#line 106 "Gmsh.l" +#line 105 "Gmsh.l" return tPLUSPLUS; YY_BREAK case 24: YY_RULE_SETUP -#line 107 "Gmsh.l" +#line 106 "Gmsh.l" return tMINUSMINUS; YY_BREAK case 25: YY_RULE_SETUP -#line 108 "Gmsh.l" +#line 107 "Gmsh.l" return tEQUAL; YY_BREAK case 26: YY_RULE_SETUP -#line 109 "Gmsh.l" +#line 108 "Gmsh.l" return tNOTEQUAL; YY_BREAK case 27: YY_RULE_SETUP -#line 110 "Gmsh.l" +#line 109 "Gmsh.l" return tAPPROXEQUAL; YY_BREAK case 28: YY_RULE_SETUP -#line 111 "Gmsh.l" +#line 110 "Gmsh.l" return tLESSOREQUAL; YY_BREAK case 29: YY_RULE_SETUP -#line 112 "Gmsh.l" +#line 111 "Gmsh.l" return tGREATEROREQUAL; YY_BREAK case 30: YY_RULE_SETUP -#line 114 "Gmsh.l" +#line 113 "Gmsh.l" return tAcos; YY_BREAK case 31: YY_RULE_SETUP -#line 115 "Gmsh.l" +#line 114 "Gmsh.l" return tAcos; YY_BREAK case 32: YY_RULE_SETUP -#line 116 "Gmsh.l" +#line 115 "Gmsh.l" return tAsin; YY_BREAK case 33: YY_RULE_SETUP -#line 117 "Gmsh.l" +#line 116 "Gmsh.l" return tAsin; YY_BREAK case 34: YY_RULE_SETUP -#line 118 "Gmsh.l" +#line 117 "Gmsh.l" return tAtan; YY_BREAK case 35: YY_RULE_SETUP -#line 119 "Gmsh.l" +#line 118 "Gmsh.l" return tAtan; YY_BREAK case 36: YY_RULE_SETUP -#line 120 "Gmsh.l" +#line 119 "Gmsh.l" return tAtan2; YY_BREAK case 37: YY_RULE_SETUP -#line 121 "Gmsh.l" +#line 120 "Gmsh.l" return tAtan2; YY_BREAK case 38: YY_RULE_SETUP -#line 122 "Gmsh.l" +#line 121 "Gmsh.l" return tAttractor; YY_BREAK case 39: YY_RULE_SETUP -#line 124 "Gmsh.l" +#line 123 "Gmsh.l" return tBezier; YY_BREAK case 40: YY_RULE_SETUP -#line 125 "Gmsh.l" +#line 124 "Gmsh.l" return tBump; YY_BREAK case 41: YY_RULE_SETUP -#line 126 "Gmsh.l" +#line 125 "Gmsh.l" return tBSpline; YY_BREAK case 42: YY_RULE_SETUP -#line 127 "Gmsh.l" +#line 126 "Gmsh.l" return tBounds; YY_BREAK case 43: YY_RULE_SETUP -#line 129 "Gmsh.l" +#line 128 "Gmsh.l" return tCeil; YY_BREAK case 44: YY_RULE_SETUP -#line 130 "Gmsh.l" +#line 129 "Gmsh.l" return tCombine; YY_BREAK case 45: YY_RULE_SETUP -#line 131 "Gmsh.l" +#line 130 "Gmsh.l" return tCosh; YY_BREAK case 46: YY_RULE_SETUP -#line 132 "Gmsh.l" +#line 131 "Gmsh.l" return tCos; YY_BREAK case 47: YY_RULE_SETUP -#line 133 "Gmsh.l" +#line 132 "Gmsh.l" return tCharacteristic; YY_BREAK case 48: YY_RULE_SETUP -#line 134 "Gmsh.l" +#line 133 "Gmsh.l" return tCircle; YY_BREAK case 49: YY_RULE_SETUP -#line 135 "Gmsh.l" +#line 134 "Gmsh.l" return tCoherence; YY_BREAK case 50: YY_RULE_SETUP -#line 136 "Gmsh.l" +#line 135 "Gmsh.l" return tComplex; YY_BREAK case 51: YY_RULE_SETUP -#line 137 "Gmsh.l" +#line 136 "Gmsh.l" return tColor; YY_BREAK case 52: YY_RULE_SETUP -#line 138 "Gmsh.l" +#line 137 "Gmsh.l" return tColorTable; YY_BREAK case 53: YY_RULE_SETUP -#line 139 "Gmsh.l" +#line 138 "Gmsh.l" return tSpline; YY_BREAK case 54: YY_RULE_SETUP -#line 140 "Gmsh.l" +#line 139 "Gmsh.l" return tCall; YY_BREAK case 55: YY_RULE_SETUP -#line 142 "Gmsh.l" +#line 141 "Gmsh.l" return tDelete; YY_BREAK case 56: YY_RULE_SETUP -#line 143 "Gmsh.l" +#line 142 "Gmsh.l" return tDilate; YY_BREAK case 57: YY_RULE_SETUP -#line 144 "Gmsh.l" +#line 143 "Gmsh.l" return tDuplicata; YY_BREAK case 58: YY_RULE_SETUP -#line 145 "Gmsh.l" +#line 144 "Gmsh.l" return tDraw; YY_BREAK case 59: YY_RULE_SETUP -#line 147 "Gmsh.l" +#line 146 "Gmsh.l" return tExp; YY_BREAK case 60: YY_RULE_SETUP -#line 148 "Gmsh.l" +#line 147 "Gmsh.l" return tEllipse; YY_BREAK case 61: YY_RULE_SETUP -#line 149 "Gmsh.l" +#line 148 "Gmsh.l" return tEllipse; YY_BREAK case 62: YY_RULE_SETUP -#line 150 "Gmsh.l" +#line 149 "Gmsh.l" return tExtrude; YY_BREAK case 63: YY_RULE_SETUP -#line 151 "Gmsh.l" +#line 150 "Gmsh.l" return tElliptic; YY_BREAK case 64: YY_RULE_SETUP -#line 152 "Gmsh.l" +#line 151 "Gmsh.l" return tEndFor; YY_BREAK case 65: YY_RULE_SETUP -#line 153 "Gmsh.l" +#line 152 "Gmsh.l" return tEndIf; YY_BREAK case 66: YY_RULE_SETUP -#line 154 "Gmsh.l" +#line 153 "Gmsh.l" return tExit; YY_BREAK case 67: YY_RULE_SETUP -#line 156 "Gmsh.l" +#line 155 "Gmsh.l" return tFabs; YY_BREAK case 68: YY_RULE_SETUP -#line 157 "Gmsh.l" +#line 156 "Gmsh.l" return tFloor; YY_BREAK case 69: YY_RULE_SETUP -#line 158 "Gmsh.l" +#line 157 "Gmsh.l" return tFmod; YY_BREAK case 70: YY_RULE_SETUP -#line 159 "Gmsh.l" +#line 158 "Gmsh.l" return tFor; YY_BREAK case 71: YY_RULE_SETUP -#line 160 "Gmsh.l" +#line 159 "Gmsh.l" return tFunction; YY_BREAK case 72: YY_RULE_SETUP -#line 162 "Gmsh.l" +#line 161 "Gmsh.l" return tHide; YY_BREAK case 73: YY_RULE_SETUP -#line 163 "Gmsh.l" +#line 162 "Gmsh.l" return tHypot; YY_BREAK case 74: YY_RULE_SETUP -#line 165 "Gmsh.l" +#line 164 "Gmsh.l" return tIn; YY_BREAK case 75: YY_RULE_SETUP -#line 166 "Gmsh.l" +#line 165 "Gmsh.l" return tIf; YY_BREAK case 76: YY_RULE_SETUP -#line 167 "Gmsh.l" +#line 166 "Gmsh.l" return tIntersect; YY_BREAK case 77: YY_RULE_SETUP -#line 169 "Gmsh.l" +#line 168 "Gmsh.l" return tKnots; YY_BREAK case 78: YY_RULE_SETUP -#line 171 "Gmsh.l" +#line 170 "Gmsh.l" return tLength; YY_BREAK case 79: YY_RULE_SETUP -#line 172 "Gmsh.l" +#line 171 "Gmsh.l" return tLine; YY_BREAK case 80: YY_RULE_SETUP -#line 173 "Gmsh.l" +#line 172 "Gmsh.l" return tLoop; YY_BREAK case 81: YY_RULE_SETUP -#line 174 "Gmsh.l" +#line 173 "Gmsh.l" return tLog; YY_BREAK case 82: YY_RULE_SETUP -#line 175 "Gmsh.l" +#line 174 "Gmsh.l" return tLog10; YY_BREAK case 83: YY_RULE_SETUP -#line 176 "Gmsh.l" +#line 175 "Gmsh.l" return tLayers; YY_BREAK case 84: YY_RULE_SETUP -#line 178 "Gmsh.l" +#line 177 "Gmsh.l" return tModulo; YY_BREAK case 85: YY_RULE_SETUP -#line 179 "Gmsh.l" +#line 178 "Gmsh.l" return tMPI_Rank; YY_BREAK case 86: YY_RULE_SETUP -#line 180 "Gmsh.l" +#line 179 "Gmsh.l" return tMPI_Size; YY_BREAK case 87: YY_RULE_SETUP -#line 182 "Gmsh.l" +#line 181 "Gmsh.l" return tNurbs; YY_BREAK case 88: YY_RULE_SETUP -#line 184 "Gmsh.l" +#line 183 "Gmsh.l" return tOrder; YY_BREAK case 89: YY_RULE_SETUP -#line 186 "Gmsh.l" +#line 185 "Gmsh.l" return tPhysical; YY_BREAK case 90: YY_RULE_SETUP -#line 187 "Gmsh.l" +#line 186 "Gmsh.l" return tPi; YY_BREAK case 91: YY_RULE_SETUP -#line 188 "Gmsh.l" +#line 187 "Gmsh.l" return tPlane; YY_BREAK case 92: YY_RULE_SETUP -#line 189 "Gmsh.l" +#line 188 "Gmsh.l" return tPoint; YY_BREAK case 93: YY_RULE_SETUP -#line 190 "Gmsh.l" +#line 189 "Gmsh.l" return tProgression; YY_BREAK case 94: YY_RULE_SETUP -#line 191 "Gmsh.l" +#line 190 "Gmsh.l" return tProgression; YY_BREAK case 95: YY_RULE_SETUP -#line 192 "Gmsh.l" +#line 191 "Gmsh.l" return tParametric; YY_BREAK case 96: YY_RULE_SETUP -#line 193 "Gmsh.l" +#line 192 "Gmsh.l" return tPrintf; YY_BREAK case 97: YY_RULE_SETUP -#line 194 "Gmsh.l" +#line 193 "Gmsh.l" return tPlugin; YY_BREAK case 98: YY_RULE_SETUP -#line 196 "Gmsh.l" +#line 195 "Gmsh.l" return tRecombine; YY_BREAK case 99: YY_RULE_SETUP -#line 197 "Gmsh.l" +#line 196 "Gmsh.l" return tRotate; YY_BREAK case 100: YY_RULE_SETUP -#line 198 "Gmsh.l" +#line 197 "Gmsh.l" return tRuled; YY_BREAK case 101: YY_RULE_SETUP -#line 199 "Gmsh.l" +#line 198 "Gmsh.l" return tRand; YY_BREAK case 102: YY_RULE_SETUP -#line 200 "Gmsh.l" +#line 199 "Gmsh.l" return tReturn; YY_BREAK case 103: YY_RULE_SETUP -#line 202 "Gmsh.l" +#line 201 "Gmsh.l" return tSqrt; YY_BREAK case 104: YY_RULE_SETUP -#line 203 "Gmsh.l" +#line 202 "Gmsh.l" return tSin; YY_BREAK case 105: YY_RULE_SETUP -#line 204 "Gmsh.l" +#line 203 "Gmsh.l" return tSinh; YY_BREAK case 106: YY_RULE_SETUP -#line 205 "Gmsh.l" +#line 204 "Gmsh.l" return tSpline; YY_BREAK case 107: YY_RULE_SETUP -#line 206 "Gmsh.l" +#line 205 "Gmsh.l" return tSurface; YY_BREAK case 108: YY_RULE_SETUP -#line 207 "Gmsh.l" +#line 206 "Gmsh.l" return tSymmetry; YY_BREAK case 109: YY_RULE_SETUP -#line 208 "Gmsh.l" +#line 207 "Gmsh.l" return tSprintf; YY_BREAK case 110: YY_RULE_SETUP -#line 209 "Gmsh.l" +#line 208 "Gmsh.l" return tStrCat; YY_BREAK case 111: YY_RULE_SETUP -#line 210 "Gmsh.l" +#line 209 "Gmsh.l" return tStrPrefix; YY_BREAK case 112: YY_RULE_SETUP -#line 211 "Gmsh.l" +#line 210 "Gmsh.l" return tShow; YY_BREAK case 113: YY_RULE_SETUP -#line 213 "Gmsh.l" +#line 212 "Gmsh.l" return tTriangulation; YY_BREAK case 114: YY_RULE_SETUP -#line 214 "Gmsh.l" +#line 213 "Gmsh.l" return tTransfinite; YY_BREAK case 115: YY_RULE_SETUP -#line 215 "Gmsh.l" +#line 214 "Gmsh.l" return tTranslate; YY_BREAK case 116: YY_RULE_SETUP -#line 216 "Gmsh.l" +#line 215 "Gmsh.l" return tTanh; YY_BREAK case 117: YY_RULE_SETUP -#line 217 "Gmsh.l" +#line 216 "Gmsh.l" return tTan; YY_BREAK case 118: YY_RULE_SETUP -#line 218 "Gmsh.l" +#line 217 "Gmsh.l" return tTrimmed; YY_BREAK case 119: YY_RULE_SETUP -#line 220 "Gmsh.l" +#line 219 "Gmsh.l" return tUsing; YY_BREAK case 120: YY_RULE_SETUP -#line 222 "Gmsh.l" +#line 221 "Gmsh.l" return tVolume; YY_BREAK case 121: YY_RULE_SETUP -#line 224 "Gmsh.l" +#line 223 "Gmsh.l" return tWith; YY_BREAK case 122: YY_RULE_SETUP -#line 226 "Gmsh.l" +#line 225 "Gmsh.l" return tScalarPoint; YY_BREAK case 123: YY_RULE_SETUP -#line 227 "Gmsh.l" +#line 226 "Gmsh.l" return tVectorPoint; YY_BREAK case 124: YY_RULE_SETUP -#line 228 "Gmsh.l" +#line 227 "Gmsh.l" return tTensorPoint; YY_BREAK case 125: YY_RULE_SETUP -#line 229 "Gmsh.l" +#line 228 "Gmsh.l" return tScalarLine; YY_BREAK case 126: YY_RULE_SETUP -#line 230 "Gmsh.l" +#line 229 "Gmsh.l" return tVectorLine; YY_BREAK case 127: YY_RULE_SETUP -#line 231 "Gmsh.l" +#line 230 "Gmsh.l" return tTensorLine; YY_BREAK case 128: YY_RULE_SETUP -#line 232 "Gmsh.l" +#line 231 "Gmsh.l" return tScalarTriangle; YY_BREAK case 129: YY_RULE_SETUP -#line 233 "Gmsh.l" +#line 232 "Gmsh.l" return tVectorTriangle; YY_BREAK case 130: YY_RULE_SETUP -#line 234 "Gmsh.l" +#line 233 "Gmsh.l" return tTensorTriangle; YY_BREAK case 131: YY_RULE_SETUP -#line 235 "Gmsh.l" +#line 234 "Gmsh.l" return tScalarQuadrangle; YY_BREAK case 132: YY_RULE_SETUP -#line 236 "Gmsh.l" +#line 235 "Gmsh.l" return tVectorQuadrangle; YY_BREAK case 133: YY_RULE_SETUP -#line 237 "Gmsh.l" +#line 236 "Gmsh.l" return tTensorQuadrangle; YY_BREAK case 134: YY_RULE_SETUP -#line 238 "Gmsh.l" +#line 237 "Gmsh.l" return tScalarTetrahedron; YY_BREAK case 135: YY_RULE_SETUP -#line 239 "Gmsh.l" +#line 238 "Gmsh.l" return tVectorTetrahedron; YY_BREAK case 136: YY_RULE_SETUP -#line 240 "Gmsh.l" +#line 239 "Gmsh.l" return tTensorTetrahedron; YY_BREAK case 137: YY_RULE_SETUP -#line 241 "Gmsh.l" +#line 240 "Gmsh.l" return tScalarHexahedron; YY_BREAK case 138: YY_RULE_SETUP -#line 242 "Gmsh.l" +#line 241 "Gmsh.l" return tVectorHexahedron; YY_BREAK case 139: YY_RULE_SETUP -#line 243 "Gmsh.l" +#line 242 "Gmsh.l" return tTensorHexahedron; YY_BREAK case 140: YY_RULE_SETUP -#line 244 "Gmsh.l" +#line 243 "Gmsh.l" return tScalarPrism; YY_BREAK case 141: YY_RULE_SETUP -#line 245 "Gmsh.l" +#line 244 "Gmsh.l" return tVectorPrism; YY_BREAK case 142: YY_RULE_SETUP -#line 246 "Gmsh.l" +#line 245 "Gmsh.l" return tTensorPrism; YY_BREAK case 143: YY_RULE_SETUP -#line 247 "Gmsh.l" +#line 246 "Gmsh.l" return tScalarPyramid; YY_BREAK case 144: YY_RULE_SETUP -#line 248 "Gmsh.l" +#line 247 "Gmsh.l" return tVectorPyramid; YY_BREAK case 145: YY_RULE_SETUP -#line 249 "Gmsh.l" +#line 248 "Gmsh.l" return tTensorPyramid; YY_BREAK case 146: YY_RULE_SETUP -#line 250 "Gmsh.l" +#line 249 "Gmsh.l" return tText2D; YY_BREAK case 147: YY_RULE_SETUP -#line 251 "Gmsh.l" +#line 250 "Gmsh.l" return tText3D; YY_BREAK case 148: YY_RULE_SETUP -#line 254 "Gmsh.l" +#line 253 "Gmsh.l" return tCARTESIAN_POINT; YY_BREAK case 149: YY_RULE_SETUP -#line 255 "Gmsh.l" +#line 254 "Gmsh.l" return tB_SPLINE_SURFACE_WITH_KNOTS; YY_BREAK case 150: YY_RULE_SETUP -#line 256 "Gmsh.l" +#line 255 "Gmsh.l" return tB_SPLINE_CURVE_WITH_KNOTS; YY_BREAK case 151: YY_RULE_SETUP -#line 257 "Gmsh.l" +#line 256 "Gmsh.l" return tUNSPECIFIED; YY_BREAK case 152: YY_RULE_SETUP -#line 258 "Gmsh.l" +#line 257 "Gmsh.l" return tCONTINUOUS; YY_BREAK case 153: YY_RULE_SETUP -#line 259 "Gmsh.l" +#line 258 "Gmsh.l" return tFALSE; YY_BREAK case 154: YY_RULE_SETUP -#line 260 "Gmsh.l" +#line 259 "Gmsh.l" return tTRUE; YY_BREAK case 155: YY_RULE_SETUP -#line 261 "Gmsh.l" +#line 260 "Gmsh.l" return tU; YY_BREAK case 156: YY_RULE_SETUP -#line 262 "Gmsh.l" +#line 261 "Gmsh.l" return tV; YY_BREAK case 157: YY_RULE_SETUP -#line 263 "Gmsh.l" +#line 262 "Gmsh.l" return tORIENTED_EDGE; YY_BREAK case 158: YY_RULE_SETUP -#line 264 "Gmsh.l" +#line 263 "Gmsh.l" return tEDGE_CURVE; YY_BREAK case 159: YY_RULE_SETUP -#line 265 "Gmsh.l" +#line 264 "Gmsh.l" return tEDGE_LOOP; YY_BREAK case 160: YY_RULE_SETUP -#line 266 "Gmsh.l" +#line 265 "Gmsh.l" return tELLIPSE; YY_BREAK case 161: YY_RULE_SETUP -#line 267 "Gmsh.l" +#line 266 "Gmsh.l" return tVERTEX_POINT; YY_BREAK case 162: YY_RULE_SETUP -#line 268 "Gmsh.l" +#line 267 "Gmsh.l" return tFACE_OUTER_BOUND; YY_BREAK case 163: YY_RULE_SETUP -#line 269 "Gmsh.l" +#line 268 "Gmsh.l" return tFACE_BOUND; YY_BREAK case 164: YY_RULE_SETUP -#line 270 "Gmsh.l" +#line 269 "Gmsh.l" return tADVANCED_FACE; YY_BREAK case 165: YY_RULE_SETUP -#line 271 "Gmsh.l" +#line 270 "Gmsh.l" return tLine; YY_BREAK case 166: YY_RULE_SETUP -#line 272 "Gmsh.l" +#line 271 "Gmsh.l" return tVECTOR; YY_BREAK case 167: YY_RULE_SETUP -#line 273 "Gmsh.l" +#line 272 "Gmsh.l" return tDIRECTION; YY_BREAK case 168: YY_RULE_SETUP -#line 274 "Gmsh.l" +#line 273 "Gmsh.l" return tAXIS2_PLACEMENT_3D; YY_BREAK case 169: YY_RULE_SETUP -#line 275 "Gmsh.l" +#line 274 "Gmsh.l" return tPLANE; YY_BREAK case 170: YY_RULE_SETUP -#line 276 "Gmsh.l" +#line 275 "Gmsh.l" return tHEADER; YY_BREAK case 171: YY_RULE_SETUP -#line 277 "Gmsh.l" +#line 276 "Gmsh.l" return tDATA; YY_BREAK case 172: YY_RULE_SETUP -#line 278 "Gmsh.l" +#line 277 "Gmsh.l" return tFILE_SCHEMA; YY_BREAK case 173: YY_RULE_SETUP -#line 279 "Gmsh.l" +#line 278 "Gmsh.l" return tFILE_NAME; YY_BREAK case 174: YY_RULE_SETUP -#line 280 "Gmsh.l" +#line 279 "Gmsh.l" return tFILE_DESCRIPTION; YY_BREAK case 175: YY_RULE_SETUP -#line 281 "Gmsh.l" +#line 280 "Gmsh.l" return tISO; YY_BREAK case 176: YY_RULE_SETUP -#line 282 "Gmsh.l" +#line 281 "Gmsh.l" return tENDISO; YY_BREAK case 177: YY_RULE_SETUP -#line 283 "Gmsh.l" +#line 282 "Gmsh.l" return tENDSEC; YY_BREAK case 178: YY_RULE_SETUP -#line 284 "Gmsh.l" +#line 283 "Gmsh.l" return tCLOSED_SHELL; YY_BREAK case 179: YY_RULE_SETUP -#line 285 "Gmsh.l" +#line 284 "Gmsh.l" return tADVANCED_BREP_SHAPE_REPRESENTATION; YY_BREAK case 180: YY_RULE_SETUP -#line 286 "Gmsh.l" +#line 285 "Gmsh.l" return tMANIFOLD_SOLID_BREP; YY_BREAK case 181: YY_RULE_SETUP -#line 287 "Gmsh.l" +#line 286 "Gmsh.l" return tCYLINDRICAL_SURFACE; YY_BREAK case 182: YY_RULE_SETUP -#line 288 "Gmsh.l" +#line 287 "Gmsh.l" return tCONICAL_SURFACE; YY_BREAK case 183: YY_RULE_SETUP -#line 289 "Gmsh.l" +#line 288 "Gmsh.l" return tTOROIDAL_SURFACE; YY_BREAK case 184: YY_RULE_SETUP -#line 290 "Gmsh.l" +#line 289 "Gmsh.l" return tCIRCLE; YY_BREAK case 185: YY_RULE_SETUP -#line 291 "Gmsh.l" +#line 290 "Gmsh.l" return tTRIMMED_CURVE; YY_BREAK case 186: YY_RULE_SETUP -#line 292 "Gmsh.l" +#line 291 "Gmsh.l" return tGEOMETRIC_SET; YY_BREAK case 187: YY_RULE_SETUP -#line 293 "Gmsh.l" +#line 292 "Gmsh.l" return tCOMPOSITE_CURVE_SEGMENT; YY_BREAK case 188: YY_RULE_SETUP -#line 294 "Gmsh.l" +#line 293 "Gmsh.l" return tCOMPOSITE_CURVE; YY_BREAK case 189: YY_RULE_SETUP -#line 295 "Gmsh.l" +#line 294 "Gmsh.l" return tPRODUCT_DEFINITION; YY_BREAK case 190: YY_RULE_SETUP -#line 296 "Gmsh.l" +#line 295 "Gmsh.l" return tPRODUCT_DEFINITION_SHAPE; YY_BREAK case 191: YY_RULE_SETUP -#line 297 "Gmsh.l" +#line 296 "Gmsh.l" return tSHAPE_DEFINITION_REPRESENTATION; YY_BREAK case 192: YY_RULE_SETUP -#line 299 "Gmsh.l" +#line 298 "Gmsh.l" return tVertex; YY_BREAK case 193: YY_RULE_SETUP -#line 300 "Gmsh.l" +#line 299 "Gmsh.l" return tFacet; YY_BREAK case 194: YY_RULE_SETUP -#line 301 "Gmsh.l" +#line 300 "Gmsh.l" return tNormal; YY_BREAK case 195: YY_RULE_SETUP -#line 302 "Gmsh.l" +#line 301 "Gmsh.l" return tOuter; YY_BREAK case 196: YY_RULE_SETUP -#line 303 "Gmsh.l" +#line 302 "Gmsh.l" return tLoopSTL; YY_BREAK case 197: YY_RULE_SETUP -#line 304 "Gmsh.l" +#line 303 "Gmsh.l" return tEndLoop; YY_BREAK case 198: YY_RULE_SETUP -#line 305 "Gmsh.l" +#line 304 "Gmsh.l" return tEndFacet; YY_BREAK case 199: YY_RULE_SETUP -#line 306 "Gmsh.l" +#line 305 "Gmsh.l" {skipline();return tEndSolid;} YY_BREAK case 200: YY_RULE_SETUP -#line 307 "Gmsh.l" +#line 306 "Gmsh.l" {skipline();return tSolid;} YY_BREAK case 201: YY_RULE_SETUP -#line 309 "Gmsh.l" +#line 308 "Gmsh.l" {yylval.d = (double)atoi((char*)(yytext+1)); return tDOUBLE;} YY_BREAK case 202: -#line 312 "Gmsh.l" +#line 311 "Gmsh.l" case 203: -#line 313 "Gmsh.l" +#line 312 "Gmsh.l" case 204: -#line 314 "Gmsh.l" +#line 313 "Gmsh.l" case 205: YY_RULE_SETUP -#line 314 "Gmsh.l" +#line 313 "Gmsh.l" {yylval.d = atof((char *)yytext); return tDOUBLE;} YY_BREAK case 206: YY_RULE_SETUP -#line 316 "Gmsh.l" +#line 315 "Gmsh.l" {yylval.c = strsave((char*)yytext); return tSTRING;} YY_BREAK case 207: YY_RULE_SETUP -#line 318 "Gmsh.l" +#line 317 "Gmsh.l" return yytext[0]; YY_BREAK case 208: YY_RULE_SETUP -#line 320 "Gmsh.l" +#line 319 "Gmsh.l" ECHO; YY_BREAK -#line 2349 "Gmsh.yy.cpp" +#line 2348 "Gmsh.yy.cpp" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -3231,7 +3230,7 @@ int main() return 0; } #endif -#line 320 "Gmsh.l" +#line 319 "Gmsh.l" #undef yywrap diff --git a/Parser/Makefile b/Parser/Makefile index 92f568f36062242a78b529aafe15c3356f24e9d7..15ace3f2790415abd5601d049401817aa3d7f6f4 100644 --- a/Parser/Makefile +++ b/Parser/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.54 2004-02-07 01:40:26 geuzaine Exp $ +# $Id: Makefile,v 1.55 2004-02-28 00:48:55 geuzaine Exp $ # # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle # @@ -73,12 +73,13 @@ Gmsh.tab.o: Gmsh.tab.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ ../Common/ColorTable.h ../DataStr/List.h ../Parallel/ParUtil.h \ ../Common/Gmsh.h ../DataStr/Malloc.h ../DataStr/Tree.h ../DataStr/avl.h \ ../DataStr/Tools.h ../Numeric/Numeric.h ../Common/Context.h \ - ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ + ../Geo/Geo.h ../Geo/GeoUtils.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/STL.h \ - ../Mesh/Metric.h ../Mesh/Matrix.h ../Geo/DataBase.h ../Graphics/Draw.h \ - ../Mesh/Create.h ../Geo/StepGeomDatabase.h ../Common/Colors.h Parser.h \ - OpenFile.h ../Common/CommandLine.h FunctionManager.h ../Common/Timer.h \ - ../Graphics/CreateFile.h ../Common/Visibility.h + ../Mesh/Metric.h ../Mesh/Matrix.h ../Mesh/Nurbs.h ../Geo/CAD.h \ + ../Graphics/Draw.h ../Mesh/Create.h ../Geo/StepGeomDatabase.h \ + ../Common/Colors.h Parser.h OpenFile.h ../Common/CommandLine.h \ + FunctionManager.h ../Common/Timer.h ../Graphics/CreateFile.h \ + ../Common/Visibility.h OpenFile.o: OpenFile.cpp ../Common/Gmsh.h ../Common/Message.h \ ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ ../DataStr/avl.h ../DataStr/Tools.h ../Numeric/Numeric.h \ diff --git a/TODO b/TODO index 46254647dce4dee73adc450e15f9cb6c89244440..e6c819dc861fd972594c4a1030507f79e8c59b63 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,9 @@ -$Id: TODO,v 1.32 2004-02-20 17:57:58 geuzaine Exp $ +$Id: TODO,v 1.33 2004-02-28 00:48:47 geuzaine Exp $ + +should save only those options that differ from the default values (or +at least make this behaviour optional) + +******************************************************************** degre2: remove from after each 1d/2d/3d step, and add a global "add_degre2_nodes" and "remove_degre2_nodes" menu @@ -39,20 +44,16 @@ The "Symmetry" operation should be renamed "Reflection" ******************************************************************** -We sould somehow keep track (or compute) the min/max for each time -step. - -******************************************************************** - Memory leaks, memory leaks - start with mesh_domain() and the parser - check all calls to Tree_Replace: we shouldn't use it with trees of -pointers, since we loose the original pointer when we actually do a -'replace' + pointers, since we loose the original pointer when we actually do a + 'replace' -- check all calls to Tree_Insert, and test the return value +- check all calls to Tree_Insert, and test the return value (if we + don't do the insert, free the data!) ******************************************************************** diff --git a/benchmarks/2d/machine/Rotor.geo b/benchmarks/2d/machine/Rotor.geo index ed8c11cdd10bad164e70048ebad847483d6886a9..24fbe473cb1f9cb6b1c742489abf6080ef4166f5 100644 --- a/benchmarks/2d/machine/Rotor.geo +++ b/benchmarks/2d/machine/Rotor.geo @@ -5,8 +5,8 @@ NbrSect_ = NbrSect; NbrLine_ = NbrLine; L_[]=L[]; Printf("Copy lines"); Call CopyLines; -LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening; dPhysNum_ = 0; -Printf("Rotor slot openings : physical surface %g", PhysNum_); +LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = RotorSlotOpening; dPhysNum_ = 1; +Printf("Rotor slot openings"); Call CopySlot; geuz1[{0:NbrSect_-1}] = geuz[{0:NbrSect_-1}]; diff --git a/benchmarks/2d/machine/Rotor3kW.geo b/benchmarks/2d/machine/Rotor3kW.geo index a064cfa4ea095140eb74383e8e0f917b5ad94705..9b62c472626be50fcf7fadc9cc37eca44b7014a1 100644 --- a/benchmarks/2d/machine/Rotor3kW.geo +++ b/benchmarks/2d/machine/Rotor3kW.geo @@ -49,8 +49,7 @@ RR = (h2-Rsl*(1+1/Sin(Pi/NbrSect)))/(1-1/Sin(Pi/NbrSect)); RX2 = RR*Cos(Pi/NbrSect) ; RY2 = RR*Sin(Pi/NbrSect) ; - -Point(0) = {0,0,0,p}; +//Point(0) = {0,0,0,p}; dP=newp-1; Point(dP+1) = {d1/2,Y1,0,pslo}; diff --git a/benchmarks/2d/machine/Stator.geo b/benchmarks/2d/machine/Stator.geo index 06b1cb8135fd519881e55d0b763ea3c05ca1b8b6..c64f7749588e40f7f50fe55fbd75bec7fb9f11ad 100644 --- a/benchmarks/2d/machine/Stator.geo +++ b/benchmarks/2d/machine/Stator.geo @@ -10,8 +10,8 @@ Printf("Stator conductors : physical ssurfaces %g to %g", PhysNum_, PhysNum_+(Nb Call CopySlot; -LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = StatorSlotOpening; dPhysNum_ = 0; -Printf("Stator slot openings : physical surface %g", PhysNum_); +LineLoop_[] = LineLoop3[] ; NbrLines_ = NbrLines3; PhysNum_ = StatorSlotOpening; dPhysNum_ = 1; +Printf("Stator slot openings"); Call CopySlot; diff --git a/benchmarks/2d/machine2/Stator1.geo b/benchmarks/2d/machine2/Stator1.geo index ccc87ef7f566b21442c9fcf1e6b143149361dae8..887cc0b36473a51d2598dbba55fabd305b386d60 100644 --- a/benchmarks/2d/machine2/Stator1.geo +++ b/benchmarks/2d/machine2/Stator1.geo @@ -36,7 +36,7 @@ R_=54.9; //R_=54.3; -Point(0) = {0,0,0,psl}; +//Point(0) = {0,0,0,psl}; For i In {0:NbrSect-1} For j In {0:1} diff --git a/benchmarks/3d/p19.geo b/benchmarks/3d/p19.geo index e8946cf4d66dbe6c34a6b22fbc53a0c33084ea17..ac2e2e30d75552adc616309dff69cf5cd52c1cea 100644 --- a/benchmarks/3d/p19.geo +++ b/benchmarks/3d/p19.geo @@ -1,6 +1,6 @@ // This factor has to be modified in // order to control mesh size -fact = .1 ; +fact = 0.5 ; rondelle = fact * 0.01; iris = fact * 0.004; @@ -108,7 +108,7 @@ Coherence; //Characteristic Length {58,71} = 0.01; -Point(85) = {0.0,0.0,0.0,1.0}; +//Point(85) = {0.0,0.0,0.0,1.0}; Surface Loop(158) = {67,27,43,47,51,55,59,63,68}; Volume(159) = {158}; Surface Loop(159) = {112,29,84,67,125,92,96,100,104,108,116,120,124}; diff --git a/benchmarks/3d/solid1.geo b/benchmarks/3d/solid1.geo index 4f90879d24b4602e0b735ca8372b401687ce216e..9d223ba2f76464824110de10fc156f971d0a6644 100644 --- a/benchmarks/3d/solid1.geo +++ b/benchmarks/3d/solid1.geo @@ -2761,7 +2761,7 @@ Line Loop (72) = {5353,5348,-5352,-5368}; Plane Surface (5316) = {72}; Line Loop (73) = {5364,5349,-5353,-5369}; Plane Surface (5321) = {73}; -Triangulation Surface (6477) = (120,40) +Triangulation Surface {6477} = (120,40) { -1.04534E+00, 6.28618E-02, 1.20650E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, -9.70797E-01, 1.37391E-01, 1.20650E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -2926,7 +2926,7 @@ Triangulation Surface (6477) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (6487) = (237,79) +Triangulation Surface {6487} = (237,79) { -1.12851E+00, 1.93246E-01, 9.93140E-01, 1.04528E-01,-9.94522E-01,-0.00000E+00, -1.10820E+00, 1.94310E-01, 9.93140E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00, @@ -3247,7 +3247,7 @@ Triangulation Surface (6487) = (237,79) 3,231,232,233, 3,234,235,236 }; -Triangulation Surface (6338) = (216,72) +Triangulation Surface {6338} = (216,72) { -1.19710E+00, 2.77556E-17, 1.20650E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.19033E+00, 3.40206E-02, 1.20650E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00, @@ -3540,7 +3540,7 @@ Triangulation Surface (6338) = (216,72) 3,210,211,212, 3,213,214,215 }; -Triangulation Surface (6207) = (240,80) +Triangulation Surface {6207} = (240,80) { -2.07293E-01, 1.42240E-01, 1.12395E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, 1.27000E-01, 1.42240E-01, 1.12395E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, @@ -3865,7 +3865,7 @@ Triangulation Surface (6207) = (240,80) 3,234,235,236, 3,237,238,239 }; -Triangulation Surface (6200) = (168,56) +Triangulation Surface {6200} = (168,56) { -9.14406E-01, 1.09649E-01, 1.22805E+00,-1.88488E-16, 5.70204E-01,-8.21503E-01, -9.33188E-01, 8.44194E-02, 1.20650E+00,-2.39940E-01, 7.89082E-01,-5.65489E-01, @@ -4094,7 +4094,7 @@ Triangulation Surface (6200) = (168,56) 3,162,163,164, 3,165,166,167 }; -Triangulation Surface (6204) = (42,14) +Triangulation Surface {6204} = (42,14) { 1.27000E-01, 1.64110E-01, 1.12830E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, 1.27000E-01, 8.94403E-02, 1.20297E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, @@ -4155,7 +4155,7 @@ Triangulation Surface (6204) = (42,14) 3,36,37,38, 3,39,40,41 }; -Triangulation Surface (5444) = (498,166) +Triangulation Surface {5444} = (498,166) { -1.35255E-01, 0.00000E+00, 7.93064E-02, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.35255E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, @@ -4824,7 +4824,7 @@ Triangulation Surface (5444) = (498,166) 3,492,493,494, 3,495,496,497 }; -Triangulation Surface (6158) = (204,68) +Triangulation Surface {6158} = (204,68) { -7.11640E-01,-2.92913E-02, 1.29383E+00,-3.11752E-01, 7.81831E-01,-5.39954E-01, -7.27489E-01,-3.65257E-02, 1.26638E+00, 1.11263E-01, 9.74928E-01, 1.92707E-01, @@ -5101,7 +5101,7 @@ Triangulation Surface (6158) = (204,68) 3,198,199,200, 3,201,202,203 }; -Triangulation Surface (6111) = (120,40) +Triangulation Surface {6111} = (120,40) { -1.51714E+00,-6.81022E-17, 9.93140E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, -1.30251E+00,-3.23591E-17, 9.93140E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -5266,7 +5266,7 @@ Triangulation Surface (6111) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (6117) = (216,72) +Triangulation Surface {6117} = (216,72) { -6.99262E-01, 0.00000E+00, 9.93140E-01,-1.00000E+00,-0.00000E+00,-0.00000E+00, -7.15827E-01, 1.15212E-01, 9.93140E-01,-9.59493E-01,-2.81733E-01,-0.00000E+00, @@ -5559,7 +5559,7 @@ Triangulation Surface (6117) = (216,72) 3,210,211,212, 3,213,214,215 }; -Triangulation Surface (6078) = (96,32) +Triangulation Surface {6078} = (96,32) { -1.02655E+00, 1.97119E-01, 1.63830E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, -1.07418E+00, 8.21329E-02, 1.63830E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, @@ -5692,7 +5692,7 @@ Triangulation Surface (6078) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (6084) = (96,32) +Triangulation Surface {6084} = (96,32) { -1.32156E+00, 0.00000E+00, 1.63830E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.30532E+00, 8.16493E-02, 1.63830E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00, @@ -5825,7 +5825,7 @@ Triangulation Surface (6084) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (5499) = (96,32) +Triangulation Surface {5499} = (96,32) { -1.89551E-01, 7.85146E-02, 1.49352E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, -1.24959E-01, 5.17598E-02, 1.49352E+00,-0.00000E+00,-0.00000E+00, 1.00000E+00, @@ -5958,7 +5958,7 @@ Triangulation Surface (5499) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (5505) = (192,64) +Triangulation Surface {5505} = (192,64) { -2.05169E-01, 0.00000E+00, 1.49352E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.89551E-01, 7.85146E-02, 1.49352E+00, 9.23880E-01,-3.82683E-01,-0.00000E+00, @@ -6219,7 +6219,7 @@ Triangulation Surface (5505) = (192,64) 3,186,187,188, 3,189,190,191 }; -Triangulation Surface (1) = (138,46) +Triangulation Surface {1} = (138,46) { 2.81940E-01,-6.37540E-01, 1.45034E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, 4.53523E-01,-4.73034E-01, 1.45034E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -6408,7 +6408,7 @@ Triangulation Surface (1) = (138,46) 3,132,133,134, 3,135,136,137 }; -Triangulation Surface (114) = (75,25) +Triangulation Surface {114} = (75,25) { -5.49570E-01,-3.56956E-01, 8.50900E-01,-8.38628E-01,-5.44705E-01, 0.00000E+00, -4.53523E-01,-4.73034E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01,-0.00000E+00, @@ -6513,7 +6513,7 @@ Triangulation Surface (114) = (75,25) 3,69,70,71, 3,72,73,74 }; -Triangulation Surface (374) = (318,106) +Triangulation Surface {374} = (318,106) { -3.11150E-01, 0.00000E+00, 2.71272E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, -2.94291E-01, 1.01030E-01, 2.71272E+00,-9.45817E-01, 3.24699E-01, 0.00000E+00, @@ -6942,7 +6942,7 @@ Triangulation Surface (374) = (318,106) 3,312,313,314, 3,315,316,317 }; -Triangulation Surface (380) = (96,32) +Triangulation Surface {380} = (96,32) { 8.63615E-17,-3.11150E-01, 2.71272E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, 1.19072E-01,-2.87465E-01, 2.71272E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -7075,7 +7075,7 @@ Triangulation Surface (380) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (333) = (96,32) +Triangulation Surface {333} = (96,32) { 2.42018E-01, 2.42018E-01, 1.60274E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, 2.20016E-01, 2.20016E-01, 1.60274E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -7208,7 +7208,7 @@ Triangulation Surface (333) = (96,32) 3,90,91,92, 3,93,94,95 }; -Triangulation Surface (327) = (192,64) +Triangulation Surface {327} = (192,64) { -3.42265E-01, 0.00000E+00, 1.60274E+00,-1.00000E+00, 0.00000E+00, 0.00000E+00, -3.25513E-01, 1.05766E-01, 1.60274E+00,-9.51057E-01, 3.09017E-01, 0.00000E+00, @@ -7469,7 +7469,7 @@ Triangulation Surface (327) = (192,64) 3,186,187,188, 3,189,190,191 }; -Triangulation Surface (283) = (120,40) +Triangulation Surface {283} = (120,40) { -3.79571E-01, 1.57224E-01, 5.46100E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00, -3.12880E-01, 2.57034E-01, 5.46100E-01, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -7634,7 +7634,7 @@ Triangulation Surface (283) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (272) = (120,40) +Triangulation Surface {272} = (120,40) { -4.07731E-01,-1.68888E-01, 0.00000E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, -1.24959E-01,-5.17598E-02, 0.00000E+00,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -7799,7 +7799,7 @@ Triangulation Surface (272) = (120,40) 3,114,115,116, 3,117,118,119 }; -Triangulation Surface (277) = (228,76) +Triangulation Surface {277} = (228,76) { -4.41325E-01, 0.00000E+00, 5.46100E-01,-1.00000E+00, 0.00000E+00, 0.00000E+00, -4.24959E-01, 1.19068E-01, 5.46100E-01,-9.62917E-01, 2.69797E-01, 0.00000E+00, @@ -8108,7 +8108,7 @@ Triangulation Surface (277) = (228,76) 3,222,223,224, 3,225,226,227 }; -Triangulation Surface (76) = (114,38) +Triangulation Surface {76} = (114,38) { 6.46815E-01, 1.05239E-01, 8.50900E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, 3.97007E-01, 6.95668E-02, 8.50900E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -8265,7 +8265,7 @@ Triangulation Surface (76) = (114,38) 3,108,109,110, 3,111,112,113 }; -Triangulation Surface (132) = (6,2) +Triangulation Surface {132} = (6,2) { -2.81940E-01,-6.37540E-01, 1.45034E+00, 0.00000E+00,-1.00000E+00, 0.00000E+00, -2.81940E-01,-6.37540E-01, 8.50900E-01, 0.00000E+00,-1.00000E+00, 0.00000E+00, @@ -8278,7 +8278,7 @@ Triangulation Surface (132) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (129) = (6,2) +Triangulation Surface {129} = (6,2) { 2.81940E-01,-6.37540E-01, 8.50900E-01, 6.92064E-01,-7.21836E-01, 0.00000E+00, 4.53523E-01,-4.73034E-01, 8.50900E-01, 6.92064E-01,-7.21836E-01, 0.00000E+00, @@ -8291,7 +8291,7 @@ Triangulation Surface (129) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (126) = (66,22) +Triangulation Surface {126} = (66,22) { 4.53523E-01, 4.73034E-01, 1.45034E+00, 6.92064E-01, 7.21836E-01, 0.00000E+00, 5.49570E-01, 3.56956E-01, 1.45034E+00, 8.38628E-01, 5.44705E-01, 0.00000E+00, @@ -8384,7 +8384,7 @@ Triangulation Surface (126) = (66,22) 3,60,61,62, 3,63,64,65 }; -Triangulation Surface (123) = (6,2) +Triangulation Surface {123} = (6,2) { 4.53523E-01, 4.73034E-01, 8.50900E-01, 6.92064E-01, 7.21836E-01, 0.00000E+00, 2.81940E-01, 6.37540E-01, 8.50900E-01, 6.92064E-01, 7.21836E-01, 0.00000E+00, @@ -8397,7 +8397,7 @@ Triangulation Surface (123) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (120) = (6,2) +Triangulation Surface {120} = (6,2) { -2.81940E-01, 6.37540E-01, 8.50900E-01, 0.00000E+00, 1.00000E+00, 0.00000E+00, -2.81940E-01, 6.37540E-01, 1.45034E+00, 0.00000E+00, 1.00000E+00, 0.00000E+00, @@ -8410,7 +8410,7 @@ Triangulation Surface (120) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (117) = (6,2) +Triangulation Surface {117} = (6,2) { -2.81940E-01, 6.37540E-01, 8.50900E-01,-6.92064E-01, 7.21836E-01, 0.00000E+00, -4.53523E-01, 4.73034E-01, 8.50900E-01,-6.92064E-01, 7.21836E-01, 0.00000E+00, @@ -8423,7 +8423,7 @@ Triangulation Surface (117) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (71) = (6,2) +Triangulation Surface {71} = (6,2) { -4.53523E-01,-4.73034E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01, 0.00000E+00, -2.81940E-01,-6.37540E-01, 8.50900E-01,-6.92064E-01,-7.21836E-01, 0.00000E+00, @@ -8436,7 +8436,7 @@ Triangulation Surface (71) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (229) = (216,72) +Triangulation Surface {229} = (216,72) { -4.10845E-01, 0.00000E+00, 8.50900E-01,-1.00000E+00, 0.00000E+00, 0.00000E+00, -3.94203E-01, 1.15748E-01, 8.50900E-01,-9.59493E-01, 2.81733E-01, 0.00000E+00, @@ -8729,7 +8729,7 @@ Triangulation Surface (229) = (216,72) 3,210,211,212, 3,213,214,215 }; -Triangulation Surface (5266) = (105,35) +Triangulation Surface {5266} = (105,35) { -1.06301E+00, 4.26720E-01, 9.01700E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, -4.97347E-01, 4.26720E-01, 9.01700E-01,-0.00000E+00,-0.00000E+00,-1.00000E+00, @@ -8874,7 +8874,7 @@ Triangulation Surface (5266) = (105,35) 3,99,100,101, 3,102,103,104 }; -Triangulation Surface (5271) = (6,2) +Triangulation Surface {5271} = (6,2) { -4.95300E-01,-4.26720E-01, 1.45034E+00, 9.51597E-01,-3.07347E-01, 0.00000E+00, -4.49983E-01,-2.86411E-01, 1.45034E+00, 9.51597E-01,-3.07347E-01, 0.00000E+00, @@ -8887,7 +8887,7 @@ Triangulation Surface (5271) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (5276) = (6,2) +Triangulation Surface {5276} = (6,2) { -4.49983E-01, 2.86411E-01, 1.45034E+00, 9.51597E-01, 3.07347E-01, 0.00000E+00, -4.95300E-01, 4.26720E-01, 1.45034E+00, 9.51597E-01, 3.07347E-01, 0.00000E+00, @@ -8900,7 +8900,7 @@ Triangulation Surface (5276) = (6,2) 3,0,1,2, 3,3,4,5 }; -Triangulation Surface (5281) = (42,14) +Triangulation Surface {5281} = (42,14) { -4.49983E-01,-2.86411E-01, 1.45034E+00, 8.43612E-01, 5.36953E-01, 0.00000E+00, -5.02849E-01,-1.77928E-01, 1.45034E+00, 9.42724E-01, 3.33574E-01,-0.00000E+00, @@ -8961,7 +8961,7 @@ Triangulation Surface (5281) = (42,14) 3,36,37,38, 3,39,40,41 }; -Triangulation Surface (5286) = (30,10) +Triangulation Surface {5286} = (30,10) { -5.45113E-01,-4.26720E-01, 9.01700E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00, -5.45113E-01,-4.26720E-01, 1.40970E+00,-0.00000E+00,-1.00000E+00,-0.00000E+00, @@ -9006,7 +9006,7 @@ Triangulation Surface (5286) = (30,10) 3,24,25,26, 3,27,28,29 }; -Triangulation Surface (5291) = (30,10) +Triangulation Surface {5291} = (30,10) { -5.45113E-01, 4.26720E-01, 1.91770E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, -5.45113E-01, 4.26720E-01, 1.40970E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, @@ -9051,7 +9051,7 @@ Triangulation Surface (5291) = (30,10) 3,24,25,26, 3,27,28,29 }; -Triangulation Surface (5296) = (108,36) +Triangulation Surface {5296} = (108,36) { -4.95300E-01,-4.26720E-01, 1.91770E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, -9.57334E-01,-1.50868E-01, 1.91770E+00, 0.00000E+00, 0.00000E+00, 1.00000E+00, @@ -9200,7 +9200,7 @@ Triangulation Surface (5296) = (108,36) 3,102,103,104, 3,105,106,107 }; -Triangulation Surface (5301) = (12,4) +Triangulation Surface {5301} = (12,4) { -1.25222E+00,-4.26720E-01, 9.01700E-01, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.25222E+00,-4.26720E-01, 1.40970E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, @@ -9221,7 +9221,7 @@ Triangulation Surface (5301) = (12,4) 3,6,7,8, 3,9,10,11 }; -Triangulation Surface (5306) = (12,4) +Triangulation Surface {5306} = (12,4) { -1.25222E+00,-5.35940E-01, 9.01700E-01,-0.00000E+00,-1.00000E+00,-0.00000E+00, -1.25222E+00,-5.35940E-01, 1.40970E+00,-0.00000E+00,-1.00000E+00,-0.00000E+00, @@ -9242,7 +9242,7 @@ Triangulation Surface (5306) = (12,4) 3,6,7,8, 3,9,10,11 }; -Triangulation Surface (5311) = (24,8) +Triangulation Surface {5311} = (24,8) { -1.63551E+00, 5.35940E-01, 1.91770E+00,-1.00000E+00,-0.00000E+00,-0.00000E+00, -1.63551E+00, 5.35940E-01, 1.40970E+00,-1.00000E+00,-0.00000E+00,-0.00000E+00, @@ -9279,7 +9279,7 @@ Triangulation Surface (5311) = (24,8) 3,18,19,20, 3,21,22,23 }; -Triangulation Surface (5316) = (12,4) +Triangulation Surface {5316} = (12,4) { -1.25222E+00, 5.35940E-01, 1.91770E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, -1.25222E+00, 5.35940E-01, 1.40970E+00,-0.00000E+00, 1.00000E+00,-0.00000E+00, @@ -9300,7 +9300,7 @@ Triangulation Surface (5316) = (12,4) 3,6,7,8, 3,9,10,11 }; -Triangulation Surface (5321) = (12,4) +Triangulation Surface {5321} = (12,4) { -1.25222E+00, 5.35940E-01, 9.01700E-01, 1.00000E+00,-0.00000E+00,-0.00000E+00, -1.25222E+00, 5.35940E-01, 1.40970E+00, 1.00000E+00,-0.00000E+00,-0.00000E+00, diff --git a/benchmarks/3d/solid2.geo b/benchmarks/3d/solid2.geo index 8a9496ff81009eb81686c06c1dacef1c78f46ca6..568524e23d9d2bccae820f6fb4881d0ed6c71899 100644 --- a/benchmarks/3d/solid2.geo +++ b/benchmarks/3d/solid2.geo @@ -359,7 +359,7 @@ Plane Surface (92) = {13,14}; Line Loop (15) = {61}; Line Loop (16) = {62}; Plane Surface (104) = {15,16}; -Triangulation Surface (2) = (11592,3864) +Triangulation Surface {2} = (11592,3864) { 4.53788E-01, 2.09945E-01,-6.12303E-17,-9.07575E-01,-4.19889E-01,-1.22461E-16, 4.28429E-01, 2.57777E-01,-6.12303E-17,-8.56857E-01,-5.15554E-01,-1.22461E-16, @@ -15820,7 +15820,7 @@ Triangulation Surface (2) = (11592,3864) 3,11586,11587,11588, 3,11589,11590,11591 }; -Triangulation Surface (122) = (303,101) +Triangulation Surface {122} = (303,101) { 1.15853E+00,-1.98904E-01, 2.09057E-02,-0.00000E+00, 9.94522E-01,-1.04528E-01, 1.15853E+00,-1.90211E-01,-6.18034E-02,-0.00000E+00, 9.51057E-01, 3.09017E-01, @@ -16229,7 +16229,7 @@ Triangulation Surface (122) = (303,101) 3,297,298,299, 3,300,301,302 }; -Triangulation Surface (116) = (360,120) +Triangulation Surface {116} = (360,120) { -2.20717E-01, 1.09959E+00,-2.03184E-01, 7.35724E-01,-0.00000E+00, 6.77282E-01, -1.83178E-01, 5.29249E-01,-2.37583E-01, 6.10593E-01,-0.00000E+00, 7.91944E-01, @@ -16714,7 +16714,7 @@ Triangulation Surface (116) = (360,120) 3,354,355,356, 3,357,358,359 }; -Triangulation Surface (92) = (360,120) +Triangulation Surface {92} = (360,120) { -1.42784E-01,-7.69678E-01,-2.63842E-01, 4.75947E-01,-0.00000E+00, 8.79474E-01, -1.26073E-01,-1.41379E+00,-2.72223E-01, 4.20245E-01,-0.00000E+00, 9.07411E-01, @@ -17199,7 +17199,7 @@ Triangulation Surface (92) = (360,120) 3,354,355,356, 3,357,358,359 }; -Triangulation Surface (104) = (303,101) +Triangulation Surface {104} = (303,101) { -7.85971E-01,-1.90211E-01,-6.18034E-02,-0.00000E+00, 9.51057E-01, 3.09017E-01, -7.85971E-01,-1.48629E-01,-1.33826E-01,-0.00000E+00, 7.43145E-01, 6.69131E-01, diff --git a/benchmarks/3d/surface3113.geo b/benchmarks/3d/surface3113.geo index e57c0588d5a9c82407606530772053ee430a7476..b28d8680fd88f47024dc1d2de610adc2bfad7ec5 100644 --- a/benchmarks/3d/surface3113.geo +++ b/benchmarks/3d/surface3113.geo @@ -108,5 +108,3 @@ Circle (2214) = {2213,2211,2214} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; Circle (2215) = {2214,2211,2215} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215}; Plane Surface (3113) = {1003113}; -Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215}; -Plane Surface (3113) = {1003113}; diff --git a/benchmarks/misc/500views.geo b/benchmarks/misc/500views.geo index 233757d77883777d5ec498a3ccdbf5238e5e0299..e1601849ba2eada29b69310441facffd4efb903b 100644 --- a/benchmarks/misc/500views.geo +++ b/benchmarks/misc/500views.geo @@ -6,7 +6,8 @@ View.Visible = 0; For i In {1:250} -Include "../../tutorial/view1.pos" ; -Include "../../tutorial/view2.pos" ; +Printf("i=%g", i); +Merge "../../tutorial/view1.pos" ; +Merge "../../tutorial/view2.pos" ; EndFor diff --git a/benchmarks/stl/Coupe.stl.gz b/benchmarks/stl/Coupe.stl.gz new file mode 100644 index 0000000000000000000000000000000000000000..8a93b20ce0a723107282f8ece9adf44ac27aa52b Binary files /dev/null and b/benchmarks/stl/Coupe.stl.gz differ diff --git a/benchmarks/stl/TwoObjects.stl.gz b/benchmarks/stl/TwoObjects.stl.gz new file mode 100644 index 0000000000000000000000000000000000000000..510ba10412c285527e3c4aa213cf2b4ab4a1e523 Binary files /dev/null and b/benchmarks/stl/TwoObjects.stl.gz differ diff --git a/doc/CREDITS b/doc/CREDITS index 2d89cbd527c8065ef5d2b27e3a7a65c0ae6168a9..bc8b93bcfb480665d63b68fef6bdee81b71f4636 100644 --- a/doc/CREDITS +++ b/doc/CREDITS @@ -1,4 +1,4 @@ -$Id: CREDITS,v 1.10 2004-02-20 17:58:01 geuzaine Exp $ +$Id: CREDITS,v 1.11 2004-02-28 00:48:57 geuzaine Exp $ Gmsh is copyright (C) 1997-2004 @@ -54,9 +54,10 @@ Special thanks to David Colignon <David.Colignon at univ.u-3mrs.fr> for new colormaps; Patrick Dular <patrick.dular at ulg.ac.be> for transfinite mesh bug fixes; Laurent Stainier <l.stainier at ulg.ac.be> for the Mac OS port and the tensor display code; Nicolas Tardieu -<nicolas.tardieu at edf.fr> and Pierre Badel <badel at freesurf.fr> -for help with the GSL integration and Marc Ume <Marc.Ume at -digitalgraphics.be> for the original list code. +<nicolas.tardieu at edf.fr> for help with the GSL integration and the +new STL to elementary geometry interface; Pierre Badel <badel at +freesurf.fr> for help with the GSL integration; and Marc Ume <Marc.Ume +at digitalgraphics.be> for the original list code. Special thanks also to Bill Spitzak <spitzak at users.sourceforge.net>, Michael Sweet <easysw at diff --git a/doc/VERSIONS b/doc/VERSIONS index b347d4a3a6241a16b2f83d1e636c1f49292ec029..c6040da26c6909ccff2bac66278d7dfdde5740ed 100644 --- a/doc/VERSIONS +++ b/doc/VERSIONS @@ -1,4 +1,4 @@ -$Id: VERSIONS,v 1.185 2004-02-20 17:58:01 geuzaine Exp $ +$Id: VERSIONS,v 1.186 2004-02-28 00:48:57 geuzaine Exp $ New in 1.51: initial support for visualizing mesh partitions; integrated version 2.0 of the MSH mesh file format; new option to @@ -6,8 +6,11 @@ compute post-processing ranges (min/max) per time step; Multiple views can now be combined into multi time step ones (e.g. for programs that generate data one time step at a time); new syntax: #var[] returns the size of the list var[]; enhanced "gmsh -convert"; temporary and error -files are now created in home directory to avoid file permission -issues; new 3D arrows; better lighting support; +files are now created in the home directory to avoid file permission +issues; new 3D arrows; better lighting support; STL facets can now be +converted into individual geometrical surfaces; many other small +improvements and bug fixes (multi timestep tensors, color by physical +entity, parser cleanup, etc.); New in 1.50: small changes to the visibility browser + made visibility scriptable (new Show/Hide commands); fixed (rare) crash when deleting diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi index 5a8ebd42b04e2dc0ffd5d81d66e233bfdeee15a7..1b1878704ea3b5a72115a5c37c42060c80991b56 100644 --- a/doc/texinfo/gmsh.texi +++ b/doc/texinfo/gmsh.texi @@ -1,5 +1,5 @@ \input texinfo.tex @c -*-texinfo-*- -@c $Id: gmsh.texi,v 1.98 2004-02-07 01:40:34 geuzaine Exp $ +@c $Id: gmsh.texi,v 1.99 2004-02-28 00:48:57 geuzaine Exp $ @c @c Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle @c @@ -1512,12 +1512,8 @@ the ruled surface's identification number; the @var{expression-list} on the right hand side should the identification number of a single line loop, composed of either three or four elementary lines. -@c todo: -@c @item Triangulation Surface ( @var{expression} ) = ( @var{expression}, @var{expression} ) @{ @var{expression-list} @} @{ @var{expression-list} @}; - @c todo: @c @item Trimmed Surface ( @var{expression} ) = @{ @var{expression}, @{ @var{expression-list} @} @}; - @item Surface Loop ( @var{expression} ) = @{ @var{expression-list} @}; Creates a surface loop (a shell). The @var{expression} inside the parentheses is the surface loop's identification number; the @@ -1704,6 +1700,12 @@ Show the entity @var{char-expression}, if @code{General.VisibilityMode} is set to @code{0} or @code{1} (@var{char-expression} can for example be @code{"*"}). +@c @item Triangulation Surface @{ @var{expression} @} = ( @var{expression}, @var{expression} ) @{ @var{expression-list} @} @{ @var{expression-list} @}; +@c Adds a triangulation to the surface @var{expression}, originally defined by +@c a list of edge loops (see @ref{Surfaces}; the surface may be planar or +@c anything else). The triangulation is used to represent the shape of the +@c surface. + @c todo: @c @item Intersect; @c Intersects all lines. diff --git a/doc/texinfo/opt_geometry.texi b/doc/texinfo/opt_geometry.texi index 4f84c1600c66ea65814dcb61a869f9b51da86d06..67a8e3a2982a34ad9b689e119b4c65083ed96c7a 100644 --- a/doc/texinfo/opt_geometry.texi +++ b/doc/texinfo/opt_geometry.texi @@ -104,6 +104,16 @@ Global geometry scaling factor@* Default value: @code{1}@* Saved in: @code{General.OptionsFileName} +@item Geometry.StlCreateElementary +Treat each STL input face as a new geometrical surface@* +Default value: @code{1}@* +Saved in: @code{General.OptionsFileName} + +@item Geometry.StlCreatePhysical +Automatically create physical entities when importing STL faces as geometrical surfaces@* +Default value: @code{1}@* +Saved in: @code{General.OptionsFileName} + @item Geometry.Surfaces Display geometry surfaces?@* Default value: @code{0}@* diff --git a/doc/texinfo/opt_mesh.texi b/doc/texinfo/opt_mesh.texi index 2d4d75f6dc28da30ca013299aadff437077957ba..496096198627ce047b8c1d19b95b5fc6a4f1f595 100644 --- a/doc/texinfo/opt_mesh.texi +++ b/doc/texinfo/opt_mesh.texi @@ -20,7 +20,7 @@ Default value: @code{1}@* Saved in: @code{General.OptionsFileName} @item Mesh.ColorCarousel -Use a `color by region' coloring scheme (0=no, 1=by geometrical entity, 2=by partition)@* +Color mesh by region? (0=no, 1=by elementary entity, 2=by physical entity, 3=by partition)@* Default value: @code{1}@* Saved in: @code{General.OptionsFileName}