cp-tree.h (flag_access_control): Declare.
authorMark Mitchell <mark@markmitchell.com>
Tue, 9 Mar 1999 23:02:42 +0000 (23:02 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 9 Mar 1999 23:02:42 +0000 (23:02 +0000)
* cp-tree.h (flag_access_control): Declare.
(TREE_VIA_PPUBLIC): Document.
(DECL_NONSTATIC_MEMBER_P): New macro.
(enforce_access): Return an indication of whether or not access
was permitted.
(build_self_reference): Change prototype.
(compute_access): Replace with ...
(accessible_p): New function.
(dfs_walk): Change prototype.
(dfs_unmark): Likewise.
(markedp): Likewise.
* call.c (enforce_access): Use accessible_p.
* class.c (build_self_reference): Insert the declaration into the
list of members for this type, and make it public.
* decl.c (xref_basetypes): Avoid ill-timed recursion.
* init.c (build_offset_ref): Use lookup_member, not three separate
name-lookups.  Call enforce_access rather than checking for
illegal accesses here.
(resolve_offset_ref): Likewise.
* lex.c (do_identifier): Likewise.
* method.c (hack_identifier): Likewise.
* parse.y (self_reference): Remove.
(opt_component_decl_list): Don't use it.
* parse.c: Regenerated.
* pt.c (print_candidates): Generalize to handle lists of
overloaded functions.
(instantiate_class_template): Don't rely on TREE_VIA_PRIVATE; it's
not set.
(get_template_base): Use new calling convention for dfs_walk.
* search.c: Include varray.h.  Add prototypes.
(dfs_walk): Accept a data pointer to pass to the work functions.
All callers changed.  All work functions changed.
(breadth_first_search): Rename to bfs_walk, and make consistent
with dfs_walk.
(dfs_walk_real): New function.
(canonical_binfo): New function.
(context_for_name_lookup): Likewise.
(shared_marked_p): Likewise.
(shared_unmarked_p): Likewise.
(lokup_field_queue_p): Likewise.
(lookup_field_r): Generalize to handle both functions and fields.
(lookup_field): Just call lookup_member.
(lookup_fnfields): Likewise.
(lookup_member): Move body of lookup_field here and generalize.
(dfs_accessible_queue_p): Likewise.
(dfs_accessible_p): Likewise.
(dfs_access_in_type): Likewise.
(access_in_type): Likewise.
(compute_access): Remove, and replace with ...
(accessible_p): New function.
(vbase_types): Remove.
(vbase_decl_ptr_intermediate): Likewise.
(vbase_decl_ptr): Likewise.
(vbase_init_result): Likewise.
(closed_envelopes): Likewise.
(bvtable): Likewise.

From-SVN: r25661

43 files changed:
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/init.c
gcc/cp/lex.c
gcc/cp/method.c
gcc/cp/parse.c
gcc/cp/parse.y
gcc/cp/pt.c
gcc/cp/search.c
gcc/testsuite/g++.old-deja/g++.brendan/crash11.C
gcc/testsuite/g++.old-deja/g++.brendan/crash19.C
gcc/testsuite/g++.old-deja/g++.brendan/enum6.C
gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C
gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C
gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C
gcc/testsuite/g++.old-deja/g++.jason/access17.C
gcc/testsuite/g++.old-deja/g++.jason/access23.C
gcc/testsuite/g++.old-deja/g++.law/arm14.C
gcc/testsuite/g++.old-deja/g++.law/union2.C
gcc/testsuite/g++.old-deja/g++.law/visibility12.C
gcc/testsuite/g++.old-deja/g++.law/visibility13.C
gcc/testsuite/g++.old-deja/g++.law/visibility16.C
gcc/testsuite/g++.old-deja/g++.law/visibility18.C
gcc/testsuite/g++.old-deja/g++.law/visibility19.C
gcc/testsuite/g++.old-deja/g++.law/visibility4.C
gcc/testsuite/g++.old-deja/g++.law/visibility8.C
gcc/testsuite/g++.old-deja/g++.law/visibility9.C
gcc/testsuite/g++.old-deja/g++.mike/p8785.C
gcc/testsuite/g++.old-deja/g++.other/access3.C
gcc/testsuite/g++.old-deja/g++.other/access4.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/access5.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/access6.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/ambig1.C
gcc/testsuite/g++.old-deja/g++.other/crash7.C
gcc/testsuite/g++.old-deja/g++.other/friend1.C
gcc/testsuite/g++.old-deja/g++.other/friend4.C
gcc/testsuite/g++.old-deja/g++.pt/derived2.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/friend11.C
gcc/testsuite/g++.old-deja/g++.pt/friend21.C
gcc/testsuite/g++.old-deja/g++.pt/friend3.C

index 3ec99ada9e1db3587c5ea139d82057f5b65d408d..7dcdfeae0526da42cb8106f779db23499ef8abd0 100644 (file)
@@ -1,3 +1,62 @@
+1999-03-09  Mark Mitchell  <mark@markmitchell.com>
+
+       * cp-tree.h (flag_access_control): Declare.
+       (TREE_VIA_PPUBLIC): Document.
+       (DECL_NONSTATIC_MEMBER_P): New macro.
+       (enforce_access): Return an indication of whether or not access
+       was permitted.
+       (build_self_reference): Change prototype.
+       (compute_access): Replace with ...
+       (accessible_p): New function.
+       (dfs_walk): Change prototype.
+       (dfs_unmark): Likewise.
+       (markedp): Likewise.
+       * call.c (enforce_access): Use accessible_p.
+       * class.c (build_self_reference): Insert the declaration into the
+       list of members for this type, and make it public.
+       * decl.c (xref_basetypes): Avoid ill-timed recursion.
+       * init.c (build_offset_ref): Use lookup_member, not three separate
+       name-lookups.  Call enforce_access rather than checking for
+       illegal accesses here.
+       (resolve_offset_ref): Likewise.
+       * lex.c (do_identifier): Likewise.
+       * method.c (hack_identifier): Likewise.
+       * parse.y (self_reference): Remove.
+       (opt_component_decl_list): Don't use it.
+       * parse.c: Regenerated.
+       * pt.c (print_candidates): Generalize to handle lists of
+       overloaded functions.
+       (instantiate_class_template): Don't rely on TREE_VIA_PRIVATE; it's
+       not set.
+       (get_template_base): Use new calling convention for dfs_walk.
+       * search.c: Include varray.h.  Add prototypes.
+       (dfs_walk): Accept a data pointer to pass to the work functions. 
+       All callers changed.  All work functions changed.
+       (breadth_first_search): Rename to bfs_walk, and make consistent
+       with dfs_walk.
+       (dfs_walk_real): New function.
+       (canonical_binfo): New function.
+       (context_for_name_lookup): Likewise.
+       (shared_marked_p): Likewise.
+       (shared_unmarked_p): Likewise.
+       (lokup_field_queue_p): Likewise.
+       (lookup_field_r): Generalize to handle both functions and fields.
+       (lookup_field): Just call lookup_member.
+       (lookup_fnfields): Likewise.
+       (lookup_member): Move body of lookup_field here and generalize.
+       (dfs_accessible_queue_p): Likewise.
+       (dfs_accessible_p): Likewise.
+       (dfs_access_in_type): Likewise.
+       (access_in_type): Likewise.
+       (compute_access): Remove, and replace with ...
+       (accessible_p): New function.
+       (vbase_types): Remove.
+       (vbase_decl_ptr_intermediate): Likewise.
+       (vbase_decl_ptr): Likewise.
+       (vbase_init_result): Likewise.
+       (closed_envelopes): Likewise.
+       (bvtable): Likewise.
+
 1999-03-09  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (add_function_candidate): Check for proper number of args
index e6b11251457519f2dc8ccaf32c2cb295b4bc40b6..1376303140ad0a08781e38992aa605d31bb4853d 100644 (file)
@@ -3029,28 +3029,30 @@ build_op_delete_call (code, addr, size, flags, placement)
 }
 
 /* If the current scope isn't allowed to access DECL along
-   BASETYPE_PATH, give an error.  */
+   BASETYPE_PATH, give an error.  The most derived class in
+   BASETYPE_PATH is the one used to qualify DECL.  */
 
-void
+int
 enforce_access (basetype_path, decl)
-     tree basetype_path, decl;
+     tree basetype_path;
+     tree decl;
 {
-  tree access = compute_access (basetype_path, decl);
+  int accessible;
 
-  if (access == access_private_node)
-    {
-      cp_error_at ("`%+#D' is %s", decl, 
-                  TREE_PRIVATE (decl) ? "private"
-                  : "from private base class");
-      error ("within this context");
-    }
-  else if (access == access_protected_node)
+  accessible = accessible_p (basetype_path, decl);
+  if (!accessible)
     {
-      cp_error_at ("`%+#D' %s", decl,
-                  TREE_PROTECTED (decl) ? "is protected"
-                  : "has protected accessibility");
-      error ("within this context");
+      if (TREE_PRIVATE (decl))
+       cp_error_at ("`%+#D' is private", decl);
+      else if (TREE_PROTECTED (decl))
+       cp_error_at ("`%+#D' is protected", decl);
+      else
+       cp_error_at ("`%+#D' is inaccessible", decl);
+      cp_error ("within this context");
+      return 0;
     }
+
+  return 1;
 }
 
 /* Perform the conversions in CONVS on the expression EXPR.  */
index 5e71c41e04cbd33dd4324d35f4f799cb85674bbb..6d8a4d61e507256c0eed653b4733a2b7eadcea92 100644 (file)
@@ -1440,7 +1440,6 @@ alter_access (t, binfo, fdecl, access)
   else
     {
       enforce_access (binfo, fdecl);
-
       DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
       return 1;
     }
@@ -5548,18 +5547,24 @@ maybe_push_cache_obstack ()
    into  the scope of the class itself.  For purposes of access checking,
    the inserted class name is treated as if it were a public member name.  */
 
-tree
+void
 build_self_reference ()
 {
   tree name = constructor_name (current_class_type);
   tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
+  tree saved_cas;
+
   DECL_NONLOCAL (value) = 1;
   DECL_CONTEXT (value) = current_class_type;
   DECL_CLASS_CONTEXT (value) = current_class_type;
   DECL_ARTIFICIAL (value) = 1;
 
   pushdecl_class_level (value);
-  return value;
+
+  saved_cas = current_access_specifier;
+  current_access_specifier = access_public_node;
+  finish_member_declaration (value);
+  current_access_specifier = saved_cas;
 }
 
 /* Returns 1 if TYPE contains only padding bytes.  */
index a6f438bf63de1910d95dfebf332bfd3684e22310..551803bb6add82530eee471dd89e9efe5f2351bf 100644 (file)
@@ -549,6 +549,11 @@ extern int flag_vtable_gc;
 /* Nonzero means make the default pedwarns warnings instead of errors.
    The value of this flag is ignored if -pedantic is specified.  */
 extern int flag_permissive;
+
+/* Nonzero if we want to obey access control semantics.  */
+
+extern int flag_access_control;
+
 \f
 /* C++ language-specific tree codes.  */
 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
@@ -1086,11 +1091,16 @@ struct lang_type
    gcc/tree.h.  In particular if D is derived from B then the BINFO
    for B (in D) will have a BINFO_INHERITANCE_CHAIN pointing to
    D.  In tree.h, this pointer is described as pointing in other
-   direction.  
+   direction.  There is a different BINFO for each path to a virtual
+   base; BINFOs for virtual bases are not shared.  In addition, shared
+   versions of each of the virtual class BINFOs are stored in
+   CLASSTYPE_VBASECLASSES.
 
-   After a call to get_vbase_types, the vbases are chained together in
-   depth-first order via TREE_CHAIN.  Other than that, TREE_CHAIN is
-   unused.  */
+   We use TREE_VIA_PROTECTED and TREE_VIA_PUBLIC, but private
+   inheritance is indicated by the absence of the other two flags, not
+   by TREE_VIAR_PRIVATE, which is unused.
+
+   The TREE_CHAIN is for scratch space in search.c.  */
 
 /* Nonzero means marked by DFS or BFS search, including searches
    by `get_binfo' and `get_base_distance'.  */
@@ -1299,6 +1309,12 @@ struct lang_decl
    has `this' as volatile X *const.  */
 #define DECL_VOLATILE_MEMFUNC_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.volatile_memfunc)
 
+/* Nonzero for a DECL means that this member is a non-static member.  */
+#define DECL_NONSTATIC_MEMBER_P(NODE)          \
+  ((TREE_CODE (NODE) == FUNCTION_DECL          \
+    && DECL_NONSTATIC_MEMBER_FUNCTION_P (NODE))        \
+   || TREE_CODE (NODE) == FIELD_DECL)
+
 /* Nonzero for _DECL means that this member object type
    is mutable.  */
 #define DECL_MUTABLE_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.mutable_flag)
@@ -2653,7 +2669,7 @@ extern tree build_op_new_call                     PROTO((enum tree_code, tree, tree, int));
 extern tree build_op_delete_call               PROTO((enum tree_code, tree, tree, int, tree));
 extern int can_convert                         PROTO((tree, tree));
 extern int can_convert_arg                     PROTO((tree, tree, tree));
-extern void enforce_access                      PROTO((tree, tree));
+extern int enforce_access                       PROTO((tree, tree));
 extern tree convert_default_arg                 PROTO((tree, tree, tree));
 extern tree convert_arg_to_ellipsis             PROTO((tree));
 
@@ -2680,7 +2696,7 @@ extern tree instantiate_type                      PROTO((tree, tree, int));
 extern void print_class_statistics             PROTO((void));
 extern void maybe_push_cache_obstack           PROTO((void));
 extern unsigned HOST_WIDE_INT skip_rtti_stuff  PROTO((tree *));
-extern tree build_self_reference               PROTO((void));
+extern void build_self_reference               PROTO((void));
 extern void warn_hidden                                PROTO((tree));
 extern tree get_enclosing_class                        PROTO((tree));
 int is_base_of_enclosing_class                 PROTO((tree, tree));
@@ -3128,7 +3144,7 @@ extern int types_overlap_p                        PROTO((tree, tree));
 extern tree get_vbase                          PROTO((tree, tree));
 extern tree get_binfo                          PROTO((tree, tree, int));
 extern int get_base_distance                   PROTO((tree, tree, int, tree *));
-extern tree compute_access                     PROTO((tree, tree));
+extern int accessible_p                         PROTO((tree, tree));
 extern tree lookup_field                       PROTO((tree, tree, int, int));
 extern tree lookup_nested_field                        PROTO((tree, int));
 extern int lookup_fnfields_1                    PROTO((tree, tree));
@@ -3153,9 +3169,12 @@ extern void reinit_search_statistics             PROTO((void));
 extern tree current_scope                      PROTO((void));
 extern tree lookup_conversions                 PROTO((tree));
 extern tree binfo_for_vtable                   PROTO((tree));
-extern void dfs_walk                            PROTO((tree, void (*) (tree), int (*) (tree)));
-extern void dfs_unmark                          PROTO((tree));
-extern int  markedp                             PROTO((tree));
+extern tree dfs_walk                            PROTO((tree, 
+                                                      tree (*)(tree, void *),
+                                                      tree (*) (tree, void *),
+                                                      void *));
+extern tree dfs_unmark                          PROTO((tree, void *));
+extern tree markedp                             PROTO((tree, void *));
 
 /* in semantics.c */
 extern void finish_expr_stmt                    PROTO((tree));
index a386735b082b0c9bc090497fb731c6da91ed7eec..9a51e651404c0ed5dbee05ed786237e292152d73 100644 (file)
@@ -12383,6 +12383,8 @@ xref_basetypes (code_type_node, name, ref, binfo)
   /* In the declaration `A : X, Y, ... Z' we mark all the types
      (A, X, Y, ..., Z) so we can check for duplicates.  */
   tree binfos;
+  tree base;
+
   int i, len;
   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
 
@@ -12395,6 +12397,13 @@ xref_basetypes (code_type_node, name, ref, binfo)
   len = list_length (binfo);
   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
 
+  /* First, make sure that any templates in base-classes are
+     instantiated.  This ensures that if we call ourselves recursively
+     we do not get confused about which classes are marked and which
+     are not.  */
+  for (base = binfo; base; base = TREE_CHAIN (base))
+    complete_type (TREE_VALUE (base));
+
   SET_CLASSTYPE_MARKED (ref);
   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
 
@@ -12433,16 +12442,14 @@ xref_basetypes (code_type_node, name, ref, binfo)
 
       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
 
-#if 1
       /* This code replaces similar code in layout_basetypes.
          We put the complete_type first for implicit `typename'.  */
-      if (TYPE_SIZE (complete_type (basetype)) == NULL_TREE
+      if (TYPE_SIZE (basetype) == NULL_TREE
          && ! (current_template_parms && uses_template_parms (basetype)))
        {
          cp_error ("base class `%T' has incomplete type", basetype);
          continue;
        }
-#endif
       else
        {
          if (CLASSTYPE_MARKED (basetype))
index ea424b617801f1d81428368dd45bea745e4fdb8c..98f26f59325dca21b83fa870b922b5f97f6da2e6 100644 (file)
@@ -1490,7 +1490,8 @@ tree
 build_offset_ref (type, name)
      tree type, name;
 {
-  tree decl, fnfields, fields, t = error_mark_node;
+  tree decl, t = error_mark_node;
+  tree member;
   tree basebinfo = NULL_TREE;
   tree orig_name = name;
 
@@ -1558,17 +1559,17 @@ build_offset_ref (type, name)
 
   decl = maybe_dummy_object (type, &basebinfo);
 
-  fnfields = lookup_fnfields (basebinfo, name, 1);
-  fields = lookup_field (basebinfo, name, 0, 0);
+  member = lookup_member (basebinfo, name, 1, 0);
 
-  if (fields == error_mark_node || fnfields == error_mark_node)
+  if (member == error_mark_node)
     return error_mark_node;
 
   /* A lot of this logic is now handled in lookup_field and
      lookup_fnfield.  */
-  if (fnfields)
+  if (member && TREE_CODE (member) == TREE_LIST)
     {
       /* Go from the TREE_BASELINK to the member function info.  */
+      tree fnfields = member;
       t = TREE_VALUE (fnfields);
 
       if (TREE_CODE (orig_name) == TEMPLATE_ID_EXPR)
@@ -1596,26 +1597,13 @@ build_offset_ref (type, name)
 
       if (!really_overloaded_fn (t))
        {
-         tree access;
-
          /* Get rid of a potential OVERLOAD around it */
          t = OVL_CURRENT (t);
 
          /* unique functions are handled easily.  */
          basebinfo = TREE_PURPOSE (fnfields);
-         access = compute_access (basebinfo, t);
-         if (access == access_protected_node)
-           {
-             cp_error_at ("member function `%#D' is protected", t);
-             error ("in this context");
-             return error_mark_node;
-           }
-         if (access == access_private_node)
-           {
-             cp_error_at ("member function `%#D' is private", t);
-             error ("in this context");
-             return error_mark_node;
-           }
+         if (!enforce_access (basebinfo, t))
+           return error_mark_node;
          mark_used (t);
          if (DECL_STATIC_FUNCTION_P (t))
            return t;
@@ -1638,14 +1626,7 @@ build_offset_ref (type, name)
       return t;
     }
 
-  /* Now that we know we are looking for a field, see if we
-     have access to that field.  Lookup_field will give us the
-     error message.  */
-
-  t = lookup_field (basebinfo, name, 1, 0);
-
-  if (t == error_mark_node)
-    return error_mark_node;
+  t = member;
 
   if (t == NULL_TREE)
     {
@@ -1754,7 +1735,6 @@ resolve_offset_ref (exp)
       && (base == current_class_ref || is_dummy_object (base)))
     {
       tree basetype_path;
-      tree access;
       tree expr;
 
       if (TREE_CODE (exp) == OFFSET_REF && TREE_CODE (type) == OFFSET_TYPE)
@@ -1771,19 +1751,9 @@ resolve_offset_ref (exp)
        }
       /* Kludge: we need to use basetype_path now, because
         convert_pointer_to will bash it.  */
-      access = compute_access (basetype_path, member);
+      enforce_access (basetype_path, member);
       addr = convert_pointer_to (basetype, base);
 
-      /* Issue errors if there was an access violation.  */
-      if (access != access_public_node)
-       {
-         cp_error_at ("member `%D' is %s", 
-                      access == access_private_node 
-                      ? "private" : "protected",
-                      member);
-         cp_error ("in this context");
-       } 
-
       /* Even in the case of illegal access, we form the
         COMPONENT_REF; that will allow better error recovery than
         just feeding back error_mark_node.  */
index cff3064d3dcea872ecf7afb7c54dde0ac86abd45..6d440f424741d9f37facfa3fc47903d0d7584e53 100644 (file)
@@ -3043,14 +3043,9 @@ do_identifier (token, parsing, args)
   /* TREE_USED is set in `hack_identifier'.  */
   if (TREE_CODE (id) == CONST_DECL)
     {
+      /* Check access.  */
       if (IDENTIFIER_CLASS_VALUE (token) == id)
-       {
-         /* Check access.  */
-         tree access = compute_access (TYPE_BINFO (current_class_type), id);
-         if (access == access_private_node)
-           cp_error ("enum `%D' is private", id);
-         /* protected is OK, since it's an enum of `this'.  */
-       }
+       enforce_access (current_class_type, id);
       if (!processing_template_decl || DECL_TEMPLATE_PARM_P (id))
        id = DECL_INITIAL (id);
     }
index f5958f264f93c2dbe2008200d7da503684e3cc23..c2ac3f4e4514855ce346bf31a74a31acecfbb6e3 100644 (file)
@@ -1994,29 +1994,15 @@ hack_identifier (value, name)
       if (DECL_LANG_SPECIFIC (value)
          && DECL_CLASS_CONTEXT (value) != current_class_type)
        {
-         tree path, access;
+         tree path;
          register tree context
            = (TREE_CODE (value) == FUNCTION_DECL && DECL_VIRTUAL_P (value))
              ? DECL_CLASS_CONTEXT (value)
              : DECL_CONTEXT (value);
 
          get_base_distance (context, current_class_type, 0, &path);
-         if (path)
-           {
-             access = compute_access (path, value);
-             if (access != access_public_node)
-               {
-                 if (TREE_CODE (value) == VAR_DECL)
-                   error ("static member `%s' is %s",
-                          IDENTIFIER_POINTER (name),
-                          TREE_PRIVATE (value) ? "private"
-                                               : "from a private base class");
-                 else
-                   error ("enum `%s' is from private base class",
-                          IDENTIFIER_POINTER (name));
-                 return error_mark_node;
-               }
-           }
+         if (path && !enforce_access (current_class_type, value))
+           return error_mark_node;
        }
     }
   else if (TREE_CODE (value) == TREE_LIST && TREE_NONLOCAL_FLAG (value))
index fe1c8f4dfed66a645b224843a67103b90f40da3e..5e9600f55c87549f923e1ebaaab9d64eb36dd3ea 100644 (file)
@@ -215,11 +215,11 @@ parse_decl(declarator, specs_attrs, attributes, initialized, decl)
 
 
 
-#define        YYFINAL         1630
+#define        YYFINAL         1629
 #define        YYFLAG          -32768
 #define        YYNTBASE        112
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 342 ? yytranslate[x] : 400)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 342 ? yytranslate[x] : 399)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -313,42 +313,42 @@ static const short yyprhs[] = {     0,
   1630,  1633,  1636,  1639,  1642,  1645,  1649,  1654,  1658,  1661,
   1665,  1667,  1668,  1672,  1673,  1677,  1680,  1682,  1684,  1685,
   1688,  1692,  1694,  1699,  1701,  1705,  1707,  1709,  1714,  1719,
-  1722,  1725,  1729,  1733,  1735,  1736,  1738,  1741,  1745,  1748,
-  1751,  1753,  1756,  1759,  1762,  1765,  1768,  1771,  1774,  1776,
-  1779,  1782,  1786,  1789,  1792,  1797,  1802,  1805,  1807,  1813,
-  1818,  1820,  1821,  1823,  1827,  1828,  1830,  1834,  1836,  1838,
-  1840,  1842,  1847,  1852,  1857,  1862,  1867,  1871,  1876,  1881,
-  1886,  1891,  1895,  1897,  1901,  1903,  1907,  1910,  1912,  1920,
-  1921,  1924,  1926,  1929,  1930,  1933,  1938,  1943,  1946,  1951,
-  1955,  1959,  1962,  1965,  1969,  1971,  1973,  1976,  1978,  1980,
-  1983,  1986,  1991,  1996,  2000,  2004,  2007,  2009,  2011,  2014,
-  2018,  2022,  2025,  2028,  2032,  2034,  2038,  2042,  2045,  2048,
-  2052,  2054,  2059,  2063,  2068,  2072,  2074,  2077,  2080,  2083,
-  2086,  2089,  2091,  2094,  2099,  2104,  2107,  2109,  2111,  2113,
-  2115,  2118,  2123,  2126,  2129,  2132,  2135,  2137,  2140,  2143,
-  2146,  2149,  2153,  2155,  2158,  2162,  2167,  2170,  2173,  2176,
-  2179,  2182,  2185,  2190,  2193,  2195,  2198,  2201,  2205,  2207,
-  2211,  2214,  2218,  2221,  2224,  2228,  2230,  2234,  2239,  2243,
-  2246,  2249,  2251,  2255,  2258,  2261,  2263,  2266,  2270,  2272,
-  2276,  2278,  2285,  2290,  2295,  2299,  2305,  2309,  2313,  2317,
-  2320,  2322,  2324,  2327,  2330,  2333,  2334,  2336,  2338,  2341,
-  2345,  2347,  2350,  2351,  2355,  2356,  2357,  2363,  2365,  2366,
-  2369,  2371,  2373,  2375,  2378,  2379,  2384,  2386,  2387,  2388,
-  2394,  2395,  2396,  2404,  2405,  2406,  2407,  2408,  2421,  2422,
-  2423,  2431,  2432,  2438,  2439,  2447,  2448,  2453,  2456,  2459,
-  2462,  2466,  2473,  2482,  2493,  2506,  2511,  2515,  2518,  2521,
-  2523,  2525,  2527,  2529,  2531,  2532,  2533,  2540,  2541,  2542,
-  2548,  2550,  2553,  2554,  2555,  2561,  2563,  2565,  2569,  2573,
-  2576,  2579,  2582,  2585,  2588,  2590,  2593,  2594,  2596,  2597,
-  2599,  2601,  2602,  2604,  2606,  2610,  2615,  2617,  2621,  2622,
-  2624,  2626,  2628,  2631,  2634,  2637,  2639,  2642,  2645,  2646,
-  2650,  2652,  2654,  2656,  2659,  2662,  2665,  2670,  2673,  2676,
-  2679,  2682,  2685,  2688,  2690,  2693,  2695,  2698,  2700,  2702,
-  2703,  2704,  2706,  2707,  2712,  2715,  2717,  2719,  2723,  2724,
-  2728,  2732,  2736,  2738,  2741,  2744,  2747,  2750,  2753,  2756,
+  1722,  1725,  1729,  1733,  1735,  1736,  1738,  1742,  1745,  1748,
+  1750,  1753,  1756,  1759,  1762,  1765,  1768,  1771,  1773,  1776,
+  1779,  1783,  1786,  1789,  1794,  1799,  1802,  1804,  1810,  1815,
+  1817,  1818,  1820,  1824,  1825,  1827,  1831,  1833,  1835,  1837,
+  1839,  1844,  1849,  1854,  1859,  1864,  1868,  1873,  1878,  1883,
+  1888,  1892,  1894,  1898,  1900,  1904,  1907,  1909,  1917,  1918,
+  1921,  1923,  1926,  1927,  1930,  1935,  1940,  1943,  1948,  1952,
+  1956,  1959,  1962,  1966,  1968,  1970,  1973,  1975,  1977,  1980,
+  1983,  1988,  1993,  1997,  2001,  2004,  2006,  2008,  2011,  2015,
+  2019,  2022,  2025,  2029,  2031,  2035,  2039,  2042,  2045,  2049,
+  2051,  2056,  2060,  2065,  2069,  2071,  2074,  2077,  2080,  2083,
+  2086,  2088,  2091,  2096,  2101,  2104,  2106,  2108,  2110,  2112,
+  2115,  2120,  2123,  2126,  2129,  2132,  2134,  2137,  2140,  2143,
+  2146,  2150,  2152,  2155,  2159,  2164,  2167,  2170,  2173,  2176,
+  2179,  2182,  2187,  2190,  2192,  2195,  2198,  2202,  2204,  2208,
+  2211,  2215,  2218,  2221,  2225,  2227,  2231,  2236,  2240,  2243,
+  2246,  2248,  2252,  2255,  2258,  2260,  2263,  2267,  2269,  2273,
+  2275,  2282,  2287,  2292,  2296,  2302,  2306,  2310,  2314,  2317,
+  2319,  2321,  2324,  2327,  2330,  2331,  2333,  2335,  2338,  2342,
+  2344,  2347,  2348,  2352,  2353,  2354,  2360,  2362,  2363,  2366,
+  2368,  2370,  2372,  2375,  2376,  2381,  2383,  2384,  2385,  2391,
+  2392,  2393,  2401,  2402,  2403,  2404,  2405,  2418,  2419,  2420,
+  2428,  2429,  2435,  2436,  2444,  2445,  2450,  2453,  2456,  2459,
+  2463,  2470,  2479,  2490,  2503,  2508,  2512,  2515,  2518,  2520,
+  2522,  2524,  2526,  2528,  2529,  2530,  2537,  2538,  2539,  2545,
+  2547,  2550,  2551,  2552,  2558,  2560,  2562,  2566,  2570,  2573,
+  2576,  2579,  2582,  2585,  2587,  2590,  2591,  2593,  2594,  2596,
+  2598,  2599,  2601,  2603,  2607,  2612,  2614,  2618,  2619,  2621,
+  2623,  2625,  2628,  2631,  2634,  2636,  2639,  2642,  2643,  2647,
+  2649,  2651,  2653,  2656,  2659,  2662,  2667,  2670,  2673,  2676,
+  2679,  2682,  2685,  2687,  2690,  2692,  2695,  2697,  2699,  2700,
+  2701,  2703,  2704,  2709,  2712,  2714,  2716,  2720,  2721,  2725,
+  2729,  2733,  2735,  2738,  2741,  2744,  2747,  2750,  2753,  2756,
   2759,  2762,  2765,  2768,  2771,  2774,  2777,  2780,  2783,  2786,
-  2789,  2792,  2795,  2798,  2801,  2804,  2807,  2811,  2814,  2817,
-  2820,  2823,  2827,  2830,  2833,  2838,  2843,  2847
+  2789,  2792,  2795,  2798,  2801,  2804,  2808,  2811,  2814,  2817,
+  2820,  2824,  2827,  2830,  2835,  2840,  2844
 };
 
 static const short yyrhs[] = {    -1,
@@ -360,16 +360,16 @@ static const short yyrhs[] = {    -1,
      0,     0,    44,   163,    58,   123,   115,   109,     0,     0,
     44,    58,   124,   115,   109,     0,   125,     0,   127,    60,
      0,   129,     0,   118,   122,     0,     0,    44,   163,    64,
-   126,   132,    60,     0,    46,   314,     0,    46,   328,   314,
-     0,    46,   328,   209,     0,    46,   131,   163,     0,    46,
-   328,   163,     0,    46,   328,   131,   163,     0,     0,    46,
+   126,   132,    60,     0,    46,   313,     0,    46,   327,   313,
+     0,    46,   327,   209,     0,    46,   131,   163,     0,    46,
+   327,   163,     0,    46,   327,   131,   163,     0,     0,    46,
     44,   130,   132,    60,     0,    57,    54,     0,   131,    57,
-    54,     0,   209,     0,   314,     0,   328,   314,     0,   328,
+    54,     0,   209,     0,   313,     0,   327,   313,     0,   327,
    209,     0,    98,     0,   133,    98,     0,     0,    48,    74,
    135,   136,    75,     0,    48,    74,    75,     0,   140,     0,
    136,    59,   140,     0,   163,     0,     0,   268,   137,     0,
     45,   137,     0,   134,   268,   137,     0,   138,     0,   138,
-    64,   225,     0,   391,     0,   391,    64,   204,     0,   139,
+    64,   225,     0,   390,     0,   390,    64,   204,     0,   139,
      0,   139,    64,   184,     0,   134,   142,     0,   134,     1,
      0,   148,   147,     0,   143,     0,   141,     0,   133,   116,
    148,   117,   147,     0,   133,   116,   143,   117,     0,   118,
@@ -379,33 +379,33 @@ static const short yyrhs[] = {    -1,
    166,    60,     0,   226,    60,     0,     1,    60,     0,     1,
    109,     0,    60,     0,   220,     0,   159,     0,     0,   158,
      0,   158,    60,     0,     0,   107,     0,   154,   146,   145,
-   338,     0,   154,   146,   362,     0,   154,   146,     1,     0,
-     0,   319,     5,    93,   150,   382,   108,   300,   394,     0,
-   319,     5,    47,   300,   394,     0,     0,   328,   319,     5,
-    93,   151,   382,   108,   300,   394,     0,   328,   319,     5,
-    47,   300,   394,     0,     0,   319,   179,    93,   152,   382,
-   108,   300,   394,     0,   319,   179,    47,   300,   394,     0,
-     0,   328,   319,   179,    93,   153,   382,   108,   300,   394,
-     0,   328,   319,   179,    47,   300,   394,     0,   226,   223,
-     0,   229,   311,     0,   311,     0,   229,   149,     0,   149,
-     0,     5,    93,   382,   108,   300,   394,     0,     5,    47,
-   300,   394,     0,   179,    93,   382,   108,   300,   394,     0,
-   179,    47,   300,   394,     0,   229,   155,     0,   155,     0,
-   226,   223,     0,   229,   311,     0,   311,     0,   229,   149,
+   337,     0,   154,   146,   361,     0,   154,   146,     1,     0,
+     0,   318,     5,    93,   150,   381,   108,   299,   393,     0,
+   318,     5,    47,   299,   393,     0,     0,   327,   318,     5,
+    93,   151,   381,   108,   299,   393,     0,   327,   318,     5,
+    47,   299,   393,     0,     0,   318,   179,    93,   152,   381,
+   108,   299,   393,     0,   318,   179,    47,   299,   393,     0,
+     0,   327,   318,   179,    93,   153,   381,   108,   299,   393,
+     0,   327,   318,   179,    47,   299,   393,     0,   226,   223,
+     0,   229,   310,     0,   310,     0,   229,   149,     0,   149,
+     0,     5,    93,   381,   108,   299,   393,     0,     5,    47,
+   299,   393,     0,   179,    93,   381,   108,   299,   393,     0,
+   179,    47,   299,   393,     0,   229,   155,     0,   155,     0,
+   226,   223,     0,   229,   310,     0,   310,     0,   229,   149,
      0,   149,     0,    25,     3,     0,   157,   253,     0,   157,
     93,   196,   108,     0,   157,    47,     0,    62,   160,   161,
      0,     0,     0,   162,     0,   161,    59,   162,     0,   161,
      1,     0,    93,   196,   108,     0,    47,     0,   164,    93,
-   196,   108,     0,   164,    47,     0,   306,    93,   196,   108,
-     0,   306,    47,     0,   321,    93,   196,   108,     0,   321,
+   196,   108,     0,   164,    47,     0,   305,    93,   196,   108,
+     0,   305,    47,     0,   320,    93,   196,   108,     0,   320,
     47,     0,     3,     0,     4,     0,     5,     0,    56,     0,
     57,     0,     3,     0,    56,     0,    57,     0,   104,     0,
    103,     0,   105,     0,     0,    48,   175,   232,    60,   167,
    176,     0,     0,    48,   175,   226,   223,   168,   176,     0,
-     0,    48,   175,   311,   169,   176,     0,     0,    48,   175,
+     0,    48,   175,   310,   169,   176,     0,     0,    48,   175,
    149,   170,   176,     0,     0,     7,    48,   175,   232,    60,
    171,   176,     0,     0,     7,    48,   175,   226,   223,   172,
-   176,     0,     0,     7,    48,   175,   311,   173,   176,     0,
+   176,     0,     0,     7,    48,   175,   310,   173,   176,     0,
      0,     7,    48,   175,   149,   174,   176,     0,     0,     0,
     56,    74,   182,   181,   180,     0,     4,    74,   182,   181,
    180,     0,   179,     0,   177,     0,   163,    74,   182,    75,
@@ -415,17 +415,17 @@ static const short yyrhs[] = {    -1,
     78,     0,    86,     0,    87,     0,   110,     0,   195,     0,
    204,     0,    47,     0,    93,   186,   108,     0,    47,     0,
     93,   190,   108,     0,     0,   190,     0,     1,     0,     0,
-   372,   223,   237,   246,    64,   191,   254,     0,   186,     0,
-   109,     0,   335,   333,   109,     0,   335,   333,     1,   109,
-     0,   335,     1,   109,     0,     0,    58,   194,   192,     0,
-   347,     0,   204,    59,   204,     0,   204,    59,     1,     0,
+   371,   223,   237,   246,    64,   191,   254,     0,   186,     0,
+   109,     0,   334,   332,   109,     0,   334,   332,     1,   109,
+     0,   334,     1,   109,     0,     0,    58,   194,   192,     0,
+   346,     0,   204,    59,   204,     0,   204,    59,     1,     0,
    195,    59,   204,     0,   195,    59,     1,     0,   204,     0,
    195,     0,   214,     0,   118,   203,     0,    80,   203,     0,
     70,   203,     0,    88,   203,     0,   185,   203,     0,    67,
    163,     0,    13,   197,     0,    13,    93,   225,   108,     0,
-    29,   197,     0,    29,    93,   225,   108,     0,   216,   299,
-     0,   216,   299,   201,     0,   216,   200,   299,     0,   216,
-   200,   299,   201,     0,   216,    93,   199,   225,   198,     0,
+    29,   197,     0,    29,    93,   225,   108,     0,   216,   298,
+     0,   216,   298,   201,     0,   216,   200,   298,     0,   216,
+   200,   298,   201,     0,   216,    93,   199,   225,   198,     0,
    216,    93,   199,   225,   198,   201,     0,   216,   200,    93,
    199,   225,   198,     0,   216,   200,    93,   199,   225,   198,
    201,     0,   217,   203,     0,   217,    94,   111,   203,     0,
@@ -442,50 +442,50 @@ static const short yyrhs[] = {    -1,
    204,    74,   204,     0,   204,    75,   204,     0,   204,    72,
    204,     0,   204,    71,   204,     0,   204,    70,   204,     0,
    204,    68,   204,     0,   204,    69,   204,     0,   204,    67,
-   204,     0,   204,    66,   204,     0,   204,    65,   377,    62,
+   204,     0,   204,    66,   204,     0,   204,    65,   376,    62,
    204,     0,   204,    64,   204,     0,   204,    63,   204,     0,
-    61,     0,    61,   204,     0,    88,   392,   163,     0,    88,
-   392,   177,     0,   207,     0,   399,     0,     3,     0,    56,
+    61,     0,    61,   204,     0,    88,   391,   163,     0,    88,
+   391,   177,     0,   207,     0,   398,     0,     3,     0,    56,
      0,    57,     0,     0,     6,    74,   206,   182,   181,     0,
-   399,    74,   206,   182,   181,     0,    48,   163,    74,   182,
-   181,     0,    48,     6,    74,   182,   181,     0,    48,   399,
+   398,    74,   206,   182,   181,     0,    48,   163,    74,   182,
+   181,     0,    48,     6,    74,   182,   181,     0,    48,   398,
     74,   182,   181,     0,   205,     0,     4,     0,     5,     0,
    211,     0,   247,   211,     0,   205,     0,    80,   210,     0,
     70,   210,     0,    93,   210,   108,     0,     3,    74,   182,
-   181,     0,    57,    74,   183,   181,     0,   313,     0,   205,
+   181,     0,    57,    74,   183,   181,     0,   312,     0,   205,
      0,   212,     0,    93,   210,   108,     0,   205,     0,    10,
      0,   218,     0,   219,     0,    93,   186,   108,     0,    93,
    210,   108,     0,    93,     1,   108,     0,     0,    93,   215,
-   339,   108,     0,   205,    93,   196,   108,     0,   205,    47,
+   338,   108,     0,   205,    93,   196,   108,     0,   205,    47,
      0,   214,    93,   196,   108,     0,   214,    47,     0,   214,
     94,   186,   111,     0,   214,    86,     0,   214,    87,     0,
-    40,     0,     9,    93,   196,   108,     0,   317,     0,    50,
+    40,     0,     9,    93,   196,   108,     0,   316,     0,    50,
     74,   225,    75,    93,   186,   108,     0,    51,    74,   225,
     75,    93,   186,   108,     0,    52,    74,   225,    75,    93,
    186,   108,     0,    53,    74,   225,    75,    93,   186,   108,
      0,    49,    93,   186,   108,     0,    49,    93,   225,   108,
-     0,   328,     3,     0,   328,   207,     0,   328,   399,     0,
-   316,     0,   316,    93,   196,   108,     0,   316,    47,     0,
+     0,   327,     3,     0,   327,   207,     0,   327,   398,     0,
+   315,     0,   315,    93,   196,   108,     0,   315,    47,     0,
    221,   208,     0,   221,   208,    93,   196,   108,     0,   221,
-   208,    47,     0,   221,   209,     0,   221,   316,     0,   221,
+   208,    47,     0,   221,   209,     0,   221,   315,     0,   221,
    209,    93,   196,   108,     0,   221,   209,    47,     0,   221,
-   316,    93,   196,   108,     0,   221,   316,    47,     0,   221,
+   315,    93,   196,   108,     0,   221,   315,    47,     0,   221,
     88,     8,    47,     0,   221,     8,    54,    88,     8,    47,
-     0,   221,     1,     0,    39,     0,   328,    39,     0,    38,
-     0,   328,   217,     0,    42,     0,    43,     0,    11,     0,
+     0,   221,     1,     0,    39,     0,   327,    39,     0,    38,
+     0,   327,   217,     0,    42,     0,    43,     0,    11,     0,
    219,    11,     0,     0,   214,    92,     0,   214,    91,     0,
    232,   234,    60,     0,   226,   234,    60,     0,   229,   235,
     60,     0,   226,    60,     0,   229,    60,     0,   118,   222,
-     0,   305,     0,   311,     0,    47,     0,   224,    47,     0,
-   230,   331,     0,   301,   331,     0,   232,   331,     0,   230,
-     0,   301,     0,   230,     0,   227,     0,   229,   232,     0,
+     0,   304,     0,   310,     0,    47,     0,   224,    47,     0,
+   230,   330,     0,   300,   330,     0,   232,   330,     0,   230,
+     0,   300,     0,   230,     0,   227,     0,   229,   232,     0,
    232,   228,     0,   232,   231,   228,     0,   229,   232,   228,
      0,   229,   232,   231,     0,   229,   232,   231,   228,     0,
      7,     0,   228,   233,     0,   228,     7,     0,   228,   247,
-     0,   247,     0,   301,     0,     7,     0,   229,     9,     0,
+     0,   247,     0,   300,     0,     7,     0,   229,     9,     0,
    229,     7,     0,   229,   247,     0,   247,     0,   232,     0,
-   301,   232,     0,   232,   231,     0,   301,   232,   231,     0,
-   233,     0,   231,   233,     0,   261,     0,     8,     0,   307,
+   300,   232,     0,   232,   231,     0,   300,   232,   231,     0,
+   233,     0,   231,   233,     0,   261,     0,     8,     0,   306,
      0,    28,    93,   186,   108,     0,    28,    93,   225,   108,
      0,    30,    93,   186,   108,     0,    30,    93,   225,   108,
      0,     8,     0,     9,     0,   261,     0,   242,     0,   234,
@@ -493,8 +493,8 @@ static const short yyrhs[] = {    -1,
      0,   236,    59,   238,     0,     0,   119,    93,   219,   108,
      0,     0,   223,   237,   246,    64,   239,   254,     0,   223,
    237,   246,     0,     0,   246,    64,   241,   254,     0,   246,
-     0,   223,   237,   240,     0,   311,   237,   240,     0,     0,
-   311,   237,   245,   240,     0,   149,   237,   246,     0,     0,
+     0,   223,   237,   240,     0,   310,   237,   240,     0,     0,
+   310,   237,   245,   240,     0,   149,   237,   246,     0,     0,
    247,     0,   248,     0,   247,   248,     0,    31,    93,    93,
    249,   108,   108,     0,   250,     0,   249,    59,   250,     0,
      0,   251,     0,   251,    93,     3,   108,     0,   251,    93,
@@ -505,138 +505,138 @@ static const short yyrhs[] = {    -1,
    109,     0,     1,     0,   254,     0,   255,    59,   254,     0,
     94,   204,   111,   254,     0,   163,    62,   254,     0,   255,
     59,   163,    62,   254,     0,    97,     0,   256,   146,   145,
-   338,     0,   256,   146,   362,     0,   256,   146,     1,     0,
+   337,     0,   256,   146,   361,     0,   256,   146,     1,     0,
      0,   258,   257,   147,     0,   102,   204,   107,     0,   102,
      1,   107,     0,     0,   260,   259,     0,   260,     1,     0,
-     0,    14,   163,    58,   262,   297,   267,   109,     0,    14,
-   163,    58,   109,     0,     0,    14,    58,   263,   297,   267,
+     0,    14,   163,    58,   262,   296,   267,   109,     0,    14,
+   163,    58,   109,     0,     0,    14,    58,   263,   296,   267,
    109,     0,    14,    58,   109,     0,    14,   163,     0,    14,
-   326,     0,    45,   321,     0,     0,     0,   276,   282,   284,
+   325,     0,    45,   320,     0,     0,     0,   276,   282,   283,
    109,   246,   264,   260,   265,   258,     0,   276,     0,     0,
     59,     0,     0,    59,     0,    36,     0,   268,     7,     0,
    268,     8,     0,   268,     9,     0,   268,    36,     0,   268,
    247,     0,   268,   163,     0,   268,   165,     0,   269,    58,
-     0,   269,    62,     0,   268,   319,   163,     0,   268,   328,
-   319,   163,     0,   268,   328,   163,     0,   268,   178,     0,
-   268,   319,   178,     0,   269,     0,     0,   270,   273,   277,
+     0,   269,    62,     0,   268,   318,   163,     0,   268,   327,
+   318,   163,     0,   268,   327,   163,     0,   268,   178,     0,
+   268,   318,   178,     0,   269,     0,     0,   270,   273,   277,
      0,     0,   271,   274,   277,     0,   268,    58,     0,   275,
-     0,   272,     0,     0,    62,   392,     0,    62,   392,   278,
-     0,   279,     0,   278,    59,   392,   279,     0,   280,     0,
-   281,   392,   280,     0,   321,     0,   306,     0,    30,    93,
-   186,   108,     0,    30,    93,   225,   108,     0,    37,   392,
-     0,     7,   392,     0,   281,    37,   392,     0,   281,     7,
-   392,     0,    58,     0,     0,   283,     0,   283,   286,     0,
-   284,   285,   286,     0,   284,   285,     0,    37,    62,     0,
-   287,     0,   286,   287,     0,   288,    60,     0,   288,   109,
-     0,   156,    62,     0,   156,    95,     0,   156,    25,     0,
-   156,    58,     0,    60,     0,   118,   287,     0,   134,   287,
-     0,   134,   226,    60,     0,   226,   289,     0,   229,   290,
-     0,   311,   237,   246,   253,     0,   149,   237,   246,   253,
-     0,    62,   204,     0,     1,     0,   229,   155,   237,   246,
-   253,     0,   155,   237,   246,   253,     0,   127,     0,     0,
-   291,     0,   289,    59,   292,     0,     0,   294,     0,   290,
-    59,   296,     0,   293,     0,   294,     0,   295,     0,   296,
-     0,   305,   237,   246,   253,     0,     4,    62,   204,   246,
-     0,   311,   237,   246,   253,     0,   149,   237,   246,   253,
-     0,     3,    62,   204,   246,     0,    62,   204,   246,     0,
-   305,   237,   246,   253,     0,     4,    62,   204,   246,     0,
-   311,   237,   246,   253,     0,     3,    62,   204,   246,     0,
-    62,   204,   246,     0,   298,     0,   297,    59,   298,     0,
-   163,     0,   163,    64,   204,     0,   372,   329,     0,   372,
-     0,    93,   199,   225,   198,    94,   186,   111,     0,     0,
-   300,     9,     0,     9,     0,   301,     9,     0,     0,   302,
-   186,     0,   302,    93,   196,   108,     0,   302,    93,   382,
-   108,     0,   302,    47,     0,   302,    93,     1,   108,     0,
-    80,   301,   305,     0,    70,   301,   305,     0,    80,   305,
-     0,    70,   305,     0,   327,   300,   305,     0,   309,     0,
-   318,     0,   328,   318,     0,   306,     0,   308,     0,   328,
-   308,     0,   319,   318,     0,   309,   304,   300,   394,     0,
-   309,    94,   303,   111,     0,   309,    94,   111,     0,    93,
-   305,   108,     0,   319,   318,     0,   318,     0,   311,     0,
-   247,   311,     0,    80,   301,   310,     0,    70,   301,   310,
-     0,    80,   310,     0,    70,   310,     0,   327,   300,   310,
-     0,   213,     0,    80,   301,   310,     0,    70,   301,   310,
-     0,    80,   312,     0,    70,   312,     0,   327,   300,   310,
-     0,   313,     0,   213,   304,   300,   394,     0,    93,   312,
-   108,     0,   213,    94,   303,   111,     0,   213,    94,   111,
-     0,   315,     0,   319,   212,     0,   319,   209,     0,   319,
-   208,     0,   319,   205,     0,   319,   208,     0,   315,     0,
-   328,   315,     0,   232,    93,   196,   108,     0,   232,    93,
-   210,   108,     0,   232,   224,     0,     4,     0,     5,     0,
-   177,     0,   320,     0,   319,   320,     0,   319,    48,   325,
-    54,     0,     4,    54,     0,     5,    54,     0,    57,    54,
-     0,   177,    54,     0,   322,     0,   328,   322,     0,   323,
-   163,     0,   323,   177,     0,   323,   325,     0,   323,    48,
-   325,     0,   324,     0,   323,   324,     0,   323,   325,    54,
-     0,   323,    48,   325,    54,     0,     4,    54,     0,     5,
-    54,     0,   177,    54,     0,    56,    54,     0,     3,    54,
-     0,    57,    54,     0,   163,    74,   182,   181,     0,   328,
-   318,     0,   308,     0,   328,   308,     0,   319,    80,     0,
-   328,   319,    80,     0,    54,     0,    80,   300,   329,     0,
-    80,   300,     0,    70,   300,   329,     0,    70,   300,     0,
-   327,   300,     0,   327,   300,   329,     0,   330,     0,    94,
-   186,   111,     0,   330,    94,   303,   111,     0,    80,   301,
-   331,     0,    80,   331,     0,    80,   301,     0,    80,     0,
-    70,   301,   331,     0,    70,   331,     0,    70,   301,     0,
-    70,     0,   327,   300,     0,   327,   300,   331,     0,   332,
-     0,    93,   331,   108,     0,    90,     0,   332,    93,   382,
-   108,   300,   394,     0,   332,    47,   300,   394,     0,   332,
-    94,   303,   111,     0,   332,    94,   111,     0,    93,   383,
-   108,   300,   394,     0,   202,   300,   394,     0,   224,   300,
-   394,     0,    94,   303,   111,     0,    94,   111,     0,   346,
-     0,   334,     0,   333,   346,     0,   333,   334,     0,     1,
-    60,     0,     0,   336,     0,   337,     0,   336,   337,     0,
-    33,   252,    60,     0,   339,     0,     1,   339,     0,     0,
-    58,   340,   192,     0,     0,     0,    15,   342,   188,   343,
-   344,     0,   339,     0,     0,   345,   347,     0,   339,     0,
-   347,     0,   222,     0,   186,    60,     0,     0,   341,    16,
-   348,   344,     0,   341,     0,     0,     0,    17,   349,   188,
-   350,   193,     0,     0,     0,    18,   351,   344,    17,   352,
-   187,    60,     0,     0,     0,     0,     0,    19,   353,    93,
-   375,   354,   189,    60,   355,   377,   108,   356,   193,     0,
-     0,     0,    20,   357,    93,   190,   108,   358,   344,     0,
-     0,    21,   204,    62,   359,   346,     0,     0,    21,   204,
-    12,   204,    62,   360,   346,     0,     0,    22,    62,   361,
-   346,     0,    23,    60,     0,    24,    60,     0,    25,    60,
-     0,    25,   186,    60,     0,   119,   376,    93,   219,   108,
-    60,     0,   119,   376,    93,   219,    62,   378,   108,    60,
-     0,   119,   376,    93,   219,    62,   378,    62,   378,   108,
-    60,     0,   119,   376,    93,   219,    62,   378,    62,   378,
-    62,   381,   108,    60,     0,    26,    80,   186,    60,     0,
-    26,   163,    60,     0,   374,   346,     0,   374,   109,     0,
-    60,     0,   365,     0,   129,     0,   128,     0,   125,     0,
-     0,     0,    95,   363,   145,   339,   364,   368,     0,     0,
-     0,    95,   366,   339,   367,   368,     0,   369,     0,   368,
-   369,     0,     0,     0,    96,   370,   373,   371,   339,     0,
-   230,     0,   301,     0,    93,    12,   108,     0,    93,   391,
-   108,     0,     3,    62,     0,    56,    62,     0,     4,    62,
-     0,     5,    62,     0,   377,    60,     0,   222,     0,    58,
-   192,     0,     0,     9,     0,     0,   186,     0,     1,     0,
-     0,   379,     0,   380,     0,   379,    59,   380,     0,    11,
-    93,   186,   108,     0,    11,     0,   381,    59,    11,     0,
-     0,   383,     0,   225,     0,   387,     0,   388,    12,     0,
-   387,    12,     0,   225,    12,     0,    12,     0,   387,    62,
-     0,   225,    62,     0,     0,    64,   385,   386,     0,   101,
-     0,   254,     0,   389,     0,   391,   384,     0,   388,   390,
-     0,   388,   393,     0,   388,   393,    64,   254,     0,   387,
-    59,     0,   225,    59,     0,   227,   223,     0,   230,   223,
-     0,   232,   223,     0,   227,   331,     0,   227,     0,   229,
-   311,     0,   391,     0,   391,   384,     0,   389,     0,   225,
-     0,     0,     0,   311,     0,     0,    61,    93,   396,   108,
-     0,    61,    47,     0,   225,     0,   395,     0,   396,    59,
-   395,     0,     0,    80,   300,   397,     0,    70,   300,   397,
-     0,   327,   300,   397,     0,    41,     0,   398,    80,     0,
-   398,    81,     0,   398,    82,     0,   398,    78,     0,   398,
-    79,     0,   398,    70,     0,   398,    68,     0,   398,    69,
-     0,   398,    88,     0,   398,    59,     0,   398,    73,     0,
-   398,    74,     0,   398,    75,     0,   398,    72,     0,   398,
-    63,     0,   398,    64,     0,   398,    76,     0,   398,    77,
-     0,   398,    86,     0,   398,    87,     0,   398,    67,     0,
-   398,    66,     0,   398,   110,     0,   398,    65,    62,     0,
-   398,    71,     0,   398,    91,     0,   398,    83,     0,   398,
-    47,     0,   398,    94,   111,     0,   398,    39,     0,   398,
-    38,     0,   398,    39,    94,   111,     0,   398,    38,    94,
-   111,     0,   398,   372,   397,     0,   398,     1,     0
+     0,   272,     0,     0,    62,   391,     0,    62,   391,   278,
+     0,   279,     0,   278,    59,   391,   279,     0,   280,     0,
+   281,   391,   280,     0,   320,     0,   305,     0,    30,    93,
+   186,   108,     0,    30,    93,   225,   108,     0,    37,   391,
+     0,     7,   391,     0,   281,    37,   391,     0,   281,     7,
+   391,     0,    58,     0,     0,   285,     0,   283,   284,   285,
+     0,   283,   284,     0,    37,    62,     0,   286,     0,   285,
+   286,     0,   287,    60,     0,   287,   109,     0,   156,    62,
+     0,   156,    95,     0,   156,    25,     0,   156,    58,     0,
+    60,     0,   118,   286,     0,   134,   286,     0,   134,   226,
+    60,     0,   226,   288,     0,   229,   289,     0,   310,   237,
+   246,   253,     0,   149,   237,   246,   253,     0,    62,   204,
+     0,     1,     0,   229,   155,   237,   246,   253,     0,   155,
+   237,   246,   253,     0,   127,     0,     0,   290,     0,   288,
+    59,   291,     0,     0,   293,     0,   289,    59,   295,     0,
+   292,     0,   293,     0,   294,     0,   295,     0,   304,   237,
+   246,   253,     0,     4,    62,   204,   246,     0,   310,   237,
+   246,   253,     0,   149,   237,   246,   253,     0,     3,    62,
+   204,   246,     0,    62,   204,   246,     0,   304,   237,   246,
+   253,     0,     4,    62,   204,   246,     0,   310,   237,   246,
+   253,     0,     3,    62,   204,   246,     0,    62,   204,   246,
+     0,   297,     0,   296,    59,   297,     0,   163,     0,   163,
+    64,   204,     0,   371,   328,     0,   371,     0,    93,   199,
+   225,   198,    94,   186,   111,     0,     0,   299,     9,     0,
+     9,     0,   300,     9,     0,     0,   301,   186,     0,   301,
+    93,   196,   108,     0,   301,    93,   381,   108,     0,   301,
+    47,     0,   301,    93,     1,   108,     0,    80,   300,   304,
+     0,    70,   300,   304,     0,    80,   304,     0,    70,   304,
+     0,   326,   299,   304,     0,   308,     0,   317,     0,   327,
+   317,     0,   305,     0,   307,     0,   327,   307,     0,   318,
+   317,     0,   308,   303,   299,   393,     0,   308,    94,   302,
+   111,     0,   308,    94,   111,     0,    93,   304,   108,     0,
+   318,   317,     0,   317,     0,   310,     0,   247,   310,     0,
+    80,   300,   309,     0,    70,   300,   309,     0,    80,   309,
+     0,    70,   309,     0,   326,   299,   309,     0,   213,     0,
+    80,   300,   309,     0,    70,   300,   309,     0,    80,   311,
+     0,    70,   311,     0,   326,   299,   309,     0,   312,     0,
+   213,   303,   299,   393,     0,    93,   311,   108,     0,   213,
+    94,   302,   111,     0,   213,    94,   111,     0,   314,     0,
+   318,   212,     0,   318,   209,     0,   318,   208,     0,   318,
+   205,     0,   318,   208,     0,   314,     0,   327,   314,     0,
+   232,    93,   196,   108,     0,   232,    93,   210,   108,     0,
+   232,   224,     0,     4,     0,     5,     0,   177,     0,   319,
+     0,   318,   319,     0,   318,    48,   324,    54,     0,     4,
+    54,     0,     5,    54,     0,    57,    54,     0,   177,    54,
+     0,   321,     0,   327,   321,     0,   322,   163,     0,   322,
+   177,     0,   322,   324,     0,   322,    48,   324,     0,   323,
+     0,   322,   323,     0,   322,   324,    54,     0,   322,    48,
+   324,    54,     0,     4,    54,     0,     5,    54,     0,   177,
+    54,     0,    56,    54,     0,     3,    54,     0,    57,    54,
+     0,   163,    74,   182,   181,     0,   327,   317,     0,   307,
+     0,   327,   307,     0,   318,    80,     0,   327,   318,    80,
+     0,    54,     0,    80,   299,   328,     0,    80,   299,     0,
+    70,   299,   328,     0,    70,   299,     0,   326,   299,     0,
+   326,   299,   328,     0,   329,     0,    94,   186,   111,     0,
+   329,    94,   302,   111,     0,    80,   300,   330,     0,    80,
+   330,     0,    80,   300,     0,    80,     0,    70,   300,   330,
+     0,    70,   330,     0,    70,   300,     0,    70,     0,   326,
+   299,     0,   326,   299,   330,     0,   331,     0,    93,   330,
+   108,     0,    90,     0,   331,    93,   381,   108,   299,   393,
+     0,   331,    47,   299,   393,     0,   331,    94,   302,   111,
+     0,   331,    94,   111,     0,    93,   382,   108,   299,   393,
+     0,   202,   299,   393,     0,   224,   299,   393,     0,    94,
+   302,   111,     0,    94,   111,     0,   345,     0,   333,     0,
+   332,   345,     0,   332,   333,     0,     1,    60,     0,     0,
+   335,     0,   336,     0,   335,   336,     0,    33,   252,    60,
+     0,   338,     0,     1,   338,     0,     0,    58,   339,   192,
+     0,     0,     0,    15,   341,   188,   342,   343,     0,   338,
+     0,     0,   344,   346,     0,   338,     0,   346,     0,   222,
+     0,   186,    60,     0,     0,   340,    16,   347,   343,     0,
+   340,     0,     0,     0,    17,   348,   188,   349,   193,     0,
+     0,     0,    18,   350,   343,    17,   351,   187,    60,     0,
+     0,     0,     0,     0,    19,   352,    93,   374,   353,   189,
+    60,   354,   376,   108,   355,   193,     0,     0,     0,    20,
+   356,    93,   190,   108,   357,   343,     0,     0,    21,   204,
+    62,   358,   345,     0,     0,    21,   204,    12,   204,    62,
+   359,   345,     0,     0,    22,    62,   360,   345,     0,    23,
+    60,     0,    24,    60,     0,    25,    60,     0,    25,   186,
+    60,     0,   119,   375,    93,   219,   108,    60,     0,   119,
+   375,    93,   219,    62,   377,   108,    60,     0,   119,   375,
+    93,   219,    62,   377,    62,   377,   108,    60,     0,   119,
+   375,    93,   219,    62,   377,    62,   377,    62,   380,   108,
+    60,     0,    26,    80,   186,    60,     0,    26,   163,    60,
+     0,   373,   345,     0,   373,   109,     0,    60,     0,   364,
+     0,   129,     0,   128,     0,   125,     0,     0,     0,    95,
+   362,   145,   338,   363,   367,     0,     0,     0,    95,   365,
+   338,   366,   367,     0,   368,     0,   367,   368,     0,     0,
+     0,    96,   369,   372,   370,   338,     0,   230,     0,   300,
+     0,    93,    12,   108,     0,    93,   390,   108,     0,     3,
+    62,     0,    56,    62,     0,     4,    62,     0,     5,    62,
+     0,   376,    60,     0,   222,     0,    58,   192,     0,     0,
+     9,     0,     0,   186,     0,     1,     0,     0,   378,     0,
+   379,     0,   378,    59,   379,     0,    11,    93,   186,   108,
+     0,    11,     0,   380,    59,    11,     0,     0,   382,     0,
+   225,     0,   386,     0,   387,    12,     0,   386,    12,     0,
+   225,    12,     0,    12,     0,   386,    62,     0,   225,    62,
+     0,     0,    64,   384,   385,     0,   101,     0,   254,     0,
+   388,     0,   390,   383,     0,   387,   389,     0,   387,   392,
+     0,   387,   392,    64,   254,     0,   386,    59,     0,   225,
+    59,     0,   227,   223,     0,   230,   223,     0,   232,   223,
+     0,   227,   330,     0,   227,     0,   229,   310,     0,   390,
+     0,   390,   383,     0,   388,     0,   225,     0,     0,     0,
+   310,     0,     0,    61,    93,   395,   108,     0,    61,    47,
+     0,   225,     0,   394,     0,   395,    59,   394,     0,     0,
+    80,   299,   396,     0,    70,   299,   396,     0,   326,   299,
+   396,     0,    41,     0,   397,    80,     0,   397,    81,     0,
+   397,    82,     0,   397,    78,     0,   397,    79,     0,   397,
+    70,     0,   397,    68,     0,   397,    69,     0,   397,    88,
+     0,   397,    59,     0,   397,    73,     0,   397,    74,     0,
+   397,    75,     0,   397,    72,     0,   397,    63,     0,   397,
+    64,     0,   397,    76,     0,   397,    77,     0,   397,    86,
+     0,   397,    87,     0,   397,    67,     0,   397,    66,     0,
+   397,   110,     0,   397,    65,    62,     0,   397,    71,     0,
+   397,    91,     0,   397,    83,     0,   397,    47,     0,   397,
+    94,   111,     0,   397,    39,     0,   397,    38,     0,   397,
+    39,    94,   111,     0,   397,    38,    94,   111,     0,   397,
+   371,   396,     0,   397,     1,     0
 };
 
 #endif
@@ -695,42 +695,42 @@ static const short yyrline[] = { 0,
   2189,  2193,  2201,  2204,  2206,  2210,  2216,  2221,  2226,  2228,
   2232,  2235,  2239,  2245,  2248,  2270,  2276,  2278,  2281,  2284,
   2286,  2290,  2292,  2296,  2301,  2307,  2310,  2311,  2332,  2355,
-  2357,  2361,  2372,  2386,  2391,  2398,  2400,  2401,  2402,  2405,
-  2420,  2425,  2431,  2433,  2438,  2440,  2442,  2444,  2446,  2448,
-  2451,  2461,  2468,  2493,  2499,  2502,  2505,  2507,  2518,  2523,
-  2526,  2531,  2534,  2541,  2551,  2554,  2561,  2571,  2573,  2576,
-  2578,  2581,  2588,  2596,  2603,  2609,  2615,  2623,  2627,  2632,
-  2636,  2639,  2648,  2650,  2654,  2657,  2662,  2666,  2672,  2683,
-  2686,  2690,  2694,  2702,  2707,  2713,  2716,  2718,  2720,  2726,
-  2729,  2731,  2733,  2735,  2739,  2742,  2760,  2770,  2772,  2773,
-  2777,  2782,  2785,  2787,  2789,  2791,  2795,  2801,  2803,  2811,
-  2814,  2816,  2818,  2820,  2824,  2827,  2830,  2832,  2834,  2836,
-  2840,  2843,  2846,  2848,  2850,  2852,  2854,  2861,  2865,  2870,
-  2874,  2879,  2881,  2885,  2888,  2890,  2893,  2895,  2896,  2899,
-  2901,  2903,  2909,  2924,  2930,  2936,  2950,  2952,  2956,  2970,
-  2972,  2974,  2978,  2984,  2997,  2999,  3003,  3016,  3022,  3024,
-  3025,  3026,  3034,  3039,  3048,  3049,  3053,  3056,  3062,  3068,
-  3071,  3073,  3075,  3077,  3081,  3085,  3089,  3092,  3097,  3100,
-  3102,  3104,  3106,  3108,  3110,  3112,  3114,  3118,  3122,  3126,
-  3130,  3131,  3133,  3135,  3137,  3139,  3141,  3143,  3145,  3147,
-  3155,  3157,  3158,  3159,  3162,  3168,  3170,  3175,  3177,  3180,
-  3194,  3197,  3200,  3204,  3207,  3214,  3216,  3219,  3221,  3223,
-  3226,  3229,  3232,  3235,  3237,  3240,  3244,  3246,  3252,  3254,
-  3255,  3257,  3262,  3264,  3266,  3268,  3270,  3273,  3274,  3276,
-  3279,  3280,  3283,  3283,  3286,  3286,  3289,  3289,  3291,  3293,
-  3295,  3297,  3303,  3309,  3312,  3315,  3321,  3323,  3325,  3329,
-  3331,  3332,  3333,  3335,  3338,  3345,  3350,  3356,  3360,  3362,
-  3365,  3367,  3370,  3374,  3376,  3379,  3381,  3384,  3401,  3407,
-  3415,  3417,  3419,  3423,  3426,  3427,  3435,  3439,  3443,  3446,
-  3447,  3453,  3456,  3459,  3461,  3465,  3470,  3473,  3483,  3488,
-  3489,  3496,  3499,  3502,  3504,  3507,  3509,  3519,  3533,  3537,
-  3540,  3542,  3546,  3550,  3553,  3556,  3558,  3562,  3564,  3571,
-  3578,  3581,  3584,  3588,  3592,  3598,  3602,  3607,  3609,  3612,
-  3617,  3623,  3634,  3637,  3639,  3643,  3648,  3650,  3657,  3660,
-  3662,  3664,  3670,  3675,  3678,  3680,  3682,  3684,  3686,  3688,
-  3690,  3692,  3694,  3696,  3698,  3700,  3702,  3704,  3706,  3708,
-  3710,  3712,  3714,  3716,  3718,  3720,  3722,  3724,  3726,  3728,
-  3730,  3732,  3734,  3736,  3738,  3740,  3743,  3745
+  2357,  2361,  2372,  2386,  2391,  2392,  2393,  2394,  2397,  2412,
+  2417,  2423,  2425,  2430,  2432,  2434,  2436,  2438,  2440,  2443,
+  2453,  2460,  2485,  2491,  2494,  2497,  2499,  2510,  2515,  2518,
+  2523,  2526,  2533,  2543,  2546,  2553,  2563,  2565,  2568,  2570,
+  2573,  2580,  2588,  2595,  2601,  2607,  2615,  2619,  2624,  2628,
+  2631,  2640,  2642,  2646,  2649,  2654,  2658,  2664,  2675,  2678,
+  2682,  2686,  2694,  2699,  2705,  2708,  2710,  2712,  2718,  2721,
+  2723,  2725,  2727,  2731,  2734,  2752,  2762,  2764,  2765,  2769,
+  2774,  2777,  2779,  2781,  2783,  2787,  2793,  2795,  2803,  2806,
+  2808,  2810,  2812,  2816,  2819,  2822,  2824,  2826,  2828,  2832,
+  2835,  2838,  2840,  2842,  2844,  2846,  2853,  2857,  2862,  2866,
+  2871,  2873,  2877,  2880,  2882,  2885,  2887,  2888,  2891,  2893,
+  2895,  2901,  2916,  2922,  2928,  2942,  2944,  2948,  2962,  2964,
+  2966,  2970,  2976,  2989,  2991,  2995,  3008,  3014,  3016,  3017,
+  3018,  3026,  3031,  3040,  3041,  3045,  3048,  3054,  3060,  3063,
+  3065,  3067,  3069,  3073,  3077,  3081,  3084,  3089,  3092,  3094,
+  3096,  3098,  3100,  3102,  3104,  3106,  3110,  3114,  3118,  3122,
+  3123,  3125,  3127,  3129,  3131,  3133,  3135,  3137,  3139,  3147,
+  3149,  3150,  3151,  3154,  3160,  3162,  3167,  3169,  3172,  3186,
+  3189,  3192,  3196,  3199,  3206,  3208,  3211,  3213,  3215,  3218,
+  3221,  3224,  3227,  3229,  3232,  3236,  3238,  3244,  3246,  3247,
+  3249,  3254,  3256,  3258,  3260,  3262,  3265,  3266,  3268,  3271,
+  3272,  3275,  3275,  3278,  3278,  3281,  3281,  3283,  3285,  3287,
+  3289,  3295,  3301,  3304,  3307,  3313,  3315,  3317,  3321,  3323,
+  3324,  3325,  3327,  3330,  3337,  3342,  3348,  3352,  3354,  3357,
+  3359,  3362,  3366,  3368,  3371,  3373,  3376,  3393,  3399,  3407,
+  3409,  3411,  3415,  3418,  3419,  3427,  3431,  3435,  3438,  3439,
+  3445,  3448,  3451,  3453,  3457,  3462,  3465,  3475,  3480,  3481,
+  3488,  3491,  3494,  3496,  3499,  3501,  3511,  3525,  3529,  3532,
+  3534,  3538,  3542,  3545,  3548,  3550,  3554,  3556,  3563,  3570,
+  3573,  3576,  3580,  3584,  3590,  3594,  3599,  3601,  3604,  3609,
+  3615,  3626,  3629,  3631,  3635,  3640,  3642,  3649,  3652,  3654,
+  3656,  3662,  3667,  3670,  3672,  3674,  3676,  3678,  3680,  3682,
+  3684,  3686,  3688,  3690,  3692,  3694,  3696,  3698,  3700,  3702,
+  3704,  3706,  3708,  3710,  3712,  3714,  3716,  3718,  3720,  3722,
+  3724,  3726,  3728,  3730,  3732,  3735,  3737
 };
 #endif
 
@@ -781,29 +781,28 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "aggr","named_class_head_sans_basetype","named_class_head_sans_basetype_defn",
 "named_complex_class_head_sans_basetype","named_class_head","@30","@31","unnamed_class_head",
 "class_head","maybe_base_class_list","base_class_list","base_class","base_class.1",
-"base_class_access_list","left_curly","self_reference","opt.component_decl_list",
-"access_specifier","component_decl_list","component_decl","component_decl_1",
-"components","notype_components","component_declarator0","component_declarator",
-"after_type_component_declarator0","notype_component_declarator0","after_type_component_declarator",
-"notype_component_declarator","enumlist","enumerator","new_type_id","cv_qualifiers",
-"nonempty_cv_qualifiers","suspend_mom","nonmomentary_expr","maybe_parmlist",
-"after_type_declarator","nonnested_type","complete_type_name","nested_type",
-"direct_after_type_declarator","notype_declarator_intern","notype_declarator",
-"complex_notype_declarator","complex_direct_notype_declarator","qualified_id",
-"notype_qualified_id","overqualified_id","functional_cast","type_name","nested_name_specifier",
-"nested_name_specifier_1","typename_sub","typename_sub0","typename_sub1","typename_sub2",
-"explicit_template_type","complex_type_name","ptr_to_mem","global_scope","new_declarator",
-"direct_new_declarator","absdcl","direct_abstract_declarator","stmts","errstmt",
-"maybe_label_decls","label_decls","label_decl","compstmt_or_error","compstmt",
-"@32","simple_if","@33","@34","implicitly_scoped_stmt","@35","stmt","simple_stmt",
-"@36","@37","@38","@39","@40","@41","@42","@43","@44","@45","@46","@47","@48",
-"@49","function_try_block","@50","@51","try_block","@52","@53","handler_seq",
-"handler","@54","@55","type_specifier_seq","handler_args","label_colon","for.init.statement",
-"maybe_cv_qualifier","xexpr","asm_operands","nonnull_asm_operands","asm_operand",
-"asm_clobbers","parmlist","complex_parmlist","defarg","@56","defarg1","parms",
-"parms_comma","named_parm","full_parm","parm","see_typename","bad_parm","exception_specification_opt",
-"ansi_raise_identifier","ansi_raise_identifiers","conversion_declarator","operator",
-"operator_name", NULL
+"base_class_access_list","left_curly","opt.component_decl_list","access_specifier",
+"component_decl_list","component_decl","component_decl_1","components","notype_components",
+"component_declarator0","component_declarator","after_type_component_declarator0",
+"notype_component_declarator0","after_type_component_declarator","notype_component_declarator",
+"enumlist","enumerator","new_type_id","cv_qualifiers","nonempty_cv_qualifiers",
+"suspend_mom","nonmomentary_expr","maybe_parmlist","after_type_declarator","nonnested_type",
+"complete_type_name","nested_type","direct_after_type_declarator","notype_declarator_intern",
+"notype_declarator","complex_notype_declarator","complex_direct_notype_declarator",
+"qualified_id","notype_qualified_id","overqualified_id","functional_cast","type_name",
+"nested_name_specifier","nested_name_specifier_1","typename_sub","typename_sub0",
+"typename_sub1","typename_sub2","explicit_template_type","complex_type_name",
+"ptr_to_mem","global_scope","new_declarator","direct_new_declarator","absdcl",
+"direct_abstract_declarator","stmts","errstmt","maybe_label_decls","label_decls",
+"label_decl","compstmt_or_error","compstmt","@32","simple_if","@33","@34","implicitly_scoped_stmt",
+"@35","stmt","simple_stmt","@36","@37","@38","@39","@40","@41","@42","@43","@44",
+"@45","@46","@47","@48","@49","function_try_block","@50","@51","try_block","@52",
+"@53","handler_seq","handler","@54","@55","type_specifier_seq","handler_args",
+"label_colon","for.init.statement","maybe_cv_qualifier","xexpr","asm_operands",
+"nonnull_asm_operands","asm_operand","asm_clobbers","parmlist","complex_parmlist",
+"defarg","@56","defarg1","parms","parms_comma","named_parm","full_parm","parm",
+"see_typename","bad_parm","exception_specification_opt","ansi_raise_identifier",
+"ansi_raise_identifiers","conversion_declarator","operator","operator_name", NULL
 };
 #endif
 
@@ -860,42 +859,42 @@ static const short yyr1[] = {     0,
    268,   269,   270,   270,   270,   271,   271,   271,   271,   271,
    272,   273,   272,   274,   272,   275,   276,   276,   277,   277,
    277,   278,   278,   279,   279,   280,   280,   280,   280,   281,
-   281,   281,   281,   282,   283,   284,   284,   284,   284,   285,
-   286,   286,   287,   287,   287,   287,   287,   287,   287,   287,
-   287,   287,   288,   288,   288,   288,   288,   288,   288,   288,
-   288,   289,   289,   289,   290,   290,   290,   291,   291,   292,
-   292,   293,   293,   294,   294,   294,   294,   295,   295,   296,
-   296,   296,   297,   297,   298,   298,   299,   299,   299,   300,
-   300,   301,   301,   302,   303,   304,   304,   304,   304,   305,
-   305,   305,   305,   305,   305,   306,   306,   307,   307,   307,
-   308,   309,   309,   309,   309,   309,   309,   310,   310,   311,
-   311,   311,   311,   311,   311,   312,   312,   312,   312,   312,
-   312,   313,   313,   313,   313,   313,   313,   314,   314,   315,
-   315,   316,   316,   317,   317,   317,   318,   318,   318,   319,
-   319,   319,   320,   320,   320,   320,   321,   321,   322,   322,
-   322,   322,   323,   323,   323,   323,   324,   324,   324,   324,
-   324,   324,   325,   326,   326,   326,   327,   327,   328,   329,
-   329,   329,   329,   329,   329,   329,   330,   330,   331,   331,
+   281,   281,   281,   282,   283,   283,   283,   283,   284,   285,
+   285,   286,   286,   286,   286,   286,   286,   286,   286,   286,
+   286,   287,   287,   287,   287,   287,   287,   287,   287,   287,
+   288,   288,   288,   289,   289,   289,   290,   290,   291,   291,
+   292,   292,   293,   293,   293,   293,   294,   294,   295,   295,
+   295,   296,   296,   297,   297,   298,   298,   298,   299,   299,
+   300,   300,   301,   302,   303,   303,   303,   303,   304,   304,
+   304,   304,   304,   304,   305,   305,   306,   306,   306,   307,
+   308,   308,   308,   308,   308,   308,   309,   309,   310,   310,
+   310,   310,   310,   310,   311,   311,   311,   311,   311,   311,
+   312,   312,   312,   312,   312,   312,   313,   313,   314,   314,
+   315,   315,   316,   316,   316,   317,   317,   317,   318,   318,
+   318,   319,   319,   319,   319,   320,   320,   321,   321,   321,
+   321,   322,   322,   322,   322,   323,   323,   323,   323,   323,
+   323,   324,   325,   325,   325,   326,   326,   327,   328,   328,
+   328,   328,   328,   328,   328,   329,   329,   330,   330,   330,
+   330,   330,   330,   330,   330,   330,   330,   330,   331,   331,
    331,   331,   331,   331,   331,   331,   331,   331,   331,   332,
-   332,   332,   332,   332,   332,   332,   332,   332,   332,   332,
-   333,   333,   333,   333,   334,   335,   335,   336,   336,   337,
-   338,   338,   340,   339,   342,   343,   341,   344,   345,   344,
-   346,   346,   347,   347,   348,   347,   347,   349,   350,   347,
-   351,   352,   347,   353,   354,   355,   356,   347,   357,   358,
-   347,   359,   347,   360,   347,   361,   347,   347,   347,   347,
-   347,   347,   347,   347,   347,   347,   347,   347,   347,   347,
-   347,   347,   347,   347,   363,   364,   362,   366,   367,   365,
-   368,   368,   370,   371,   369,   372,   372,   373,   373,   374,
-   374,   374,   374,   375,   375,   375,   376,   376,   377,   377,
-   377,   378,   378,   379,   379,   380,   381,   381,   382,   382,
-   382,   383,   383,   383,   383,   383,   383,   383,   385,   384,
-   386,   386,   387,   387,   387,   387,   387,   388,   388,   389,
-   389,   389,   389,   389,   389,   390,   390,   391,   391,   392,
-   393,   393,   394,   394,   394,   395,   396,   396,   397,   397,
-   397,   397,   398,   399,   399,   399,   399,   399,   399,   399,
-   399,   399,   399,   399,   399,   399,   399,   399,   399,   399,
-   399,   399,   399,   399,   399,   399,   399,   399,   399,   399,
-   399,   399,   399,   399,   399,   399,   399,   399
+   332,   332,   332,   333,   334,   334,   335,   335,   336,   337,
+   337,   339,   338,   341,   342,   340,   343,   344,   343,   345,
+   345,   346,   346,   347,   346,   346,   348,   349,   346,   350,
+   351,   346,   352,   353,   354,   355,   346,   356,   357,   346,
+   358,   346,   359,   346,   360,   346,   346,   346,   346,   346,
+   346,   346,   346,   346,   346,   346,   346,   346,   346,   346,
+   346,   346,   346,   362,   363,   361,   365,   366,   364,   367,
+   367,   369,   370,   368,   371,   371,   372,   372,   373,   373,
+   373,   373,   374,   374,   374,   375,   375,   376,   376,   376,
+   377,   377,   378,   378,   379,   380,   380,   381,   381,   381,
+   382,   382,   382,   382,   382,   382,   382,   384,   383,   385,
+   385,   386,   386,   386,   386,   386,   387,   387,   388,   388,
+   388,   388,   388,   388,   389,   389,   390,   390,   391,   392,
+   392,   393,   393,   393,   394,   395,   395,   396,   396,   396,
+   396,   397,   398,   398,   398,   398,   398,   398,   398,   398,
+   398,   398,   398,   398,   398,   398,   398,   398,   398,   398,
+   398,   398,   398,   398,   398,   398,   398,   398,   398,   398,
+   398,   398,   398,   398,   398,   398,   398
 };
 
 static const short yyr2[] = {     0,
@@ -951,1382 +950,1429 @@ static const short yyr2[] = {     0,
      2,     2,     2,     2,     2,     3,     4,     3,     2,     3,
      1,     0,     3,     0,     3,     2,     1,     1,     0,     2,
      3,     1,     4,     1,     3,     1,     1,     4,     4,     2,
-     2,     3,     3,     1,     0,     1,     2,     3,     2,     2,
-     1,     2,     2,     2,     2,     2,     2,     2,     1,     2,
-     2,     3,     2,     2,     4,     4,     2,     1,     5,     4,
-     1,     0,     1,     3,     0,     1,     3,     1,     1,     1,
-     1,     4,     4,     4,     4,     4,     3,     4,     4,     4,
-     4,     3,     1,     3,     1,     3,     2,     1,     7,     0,
-     2,     1,     2,     0,     2,     4,     4,     2,     4,     3,
-     3,     2,     2,     3,     1,     1,     2,     1,     1,     2,
-     2,     4,     4,     3,     3,     2,     1,     1,     2,     3,
-     3,     2,     2,     3,     1,     3,     3,     2,     2,     3,
-     1,     4,     3,     4,     3,     1,     2,     2,     2,     2,
-     2,     1,     2,     4,     4,     2,     1,     1,     1,     1,
-     2,     4,     2,     2,     2,     2,     1,     2,     2,     2,
-     2,     3,     1,     2,     3,     4,     2,     2,     2,     2,
-     2,     2,     4,     2,     1,     2,     2,     3,     1,     3,
-     2,     3,     2,     2,     3,     1,     3,     4,     3,     2,
-     2,     1,     3,     2,     2,     1,     2,     3,     1,     3,
-     1,     6,     4,     4,     3,     5,     3,     3,     3,     2,
-     1,     1,     2,     2,     2,     0,     1,     1,     2,     3,
-     1,     2,     0,     3,     0,     0,     5,     1,     0,     2,
-     1,     1,     1,     2,     0,     4,     1,     0,     0,     5,
-     0,     0,     7,     0,     0,     0,     0,    12,     0,     0,
-     7,     0,     5,     0,     7,     0,     4,     2,     2,     2,
-     3,     6,     8,    10,    12,     4,     3,     2,     2,     1,
-     1,     1,     1,     1,     0,     0,     6,     0,     0,     5,
-     1,     2,     0,     0,     5,     1,     1,     3,     3,     2,
-     2,     2,     2,     2,     1,     2,     0,     1,     0,     1,
-     1,     0,     1,     1,     3,     4,     1,     3,     0,     1,
-     1,     1,     2,     2,     2,     1,     2,     2,     0,     3,
-     1,     1,     1,     2,     2,     2,     4,     2,     2,     2,
-     2,     2,     2,     1,     2,     1,     2,     1,     1,     0,
-     0,     1,     0,     4,     2,     1,     1,     3,     0,     3,
-     3,     3,     1,     2,     2,     2,     2,     2,     2,     2,
+     2,     3,     3,     1,     0,     1,     3,     2,     2,     1,
+     2,     2,     2,     2,     2,     2,     2,     1,     2,     2,
+     3,     2,     2,     4,     4,     2,     1,     5,     4,     1,
+     0,     1,     3,     0,     1,     3,     1,     1,     1,     1,
+     4,     4,     4,     4,     4,     3,     4,     4,     4,     4,
+     3,     1,     3,     1,     3,     2,     1,     7,     0,     2,
+     1,     2,     0,     2,     4,     4,     2,     4,     3,     3,
+     2,     2,     3,     1,     1,     2,     1,     1,     2,     2,
+     4,     4,     3,     3,     2,     1,     1,     2,     3,     3,
+     2,     2,     3,     1,     3,     3,     2,     2,     3,     1,
+     4,     3,     4,     3,     1,     2,     2,     2,     2,     2,
+     1,     2,     4,     4,     2,     1,     1,     1,     1,     2,
+     4,     2,     2,     2,     2,     1,     2,     2,     2,     2,
+     3,     1,     2,     3,     4,     2,     2,     2,     2,     2,
+     2,     4,     2,     1,     2,     2,     3,     1,     3,     2,
+     3,     2,     2,     3,     1,     3,     4,     3,     2,     2,
+     1,     3,     2,     2,     1,     2,     3,     1,     3,     1,
+     6,     4,     4,     3,     5,     3,     3,     3,     2,     1,
+     1,     2,     2,     2,     0,     1,     1,     2,     3,     1,
+     2,     0,     3,     0,     0,     5,     1,     0,     2,     1,
+     1,     1,     2,     0,     4,     1,     0,     0,     5,     0,
+     0,     7,     0,     0,     0,     0,    12,     0,     0,     7,
+     0,     5,     0,     7,     0,     4,     2,     2,     2,     3,
+     6,     8,    10,    12,     4,     3,     2,     2,     1,     1,
+     1,     1,     1,     0,     0,     6,     0,     0,     5,     1,
+     2,     0,     0,     5,     1,     1,     3,     3,     2,     2,
+     2,     2,     2,     1,     2,     0,     1,     0,     1,     1,
+     0,     1,     1,     3,     4,     1,     3,     0,     1,     1,
+     1,     2,     2,     2,     1,     2,     2,     0,     3,     1,
+     1,     1,     2,     2,     2,     4,     2,     2,     2,     2,
+     2,     2,     1,     2,     1,     2,     1,     1,     0,     0,
+     1,     0,     4,     2,     1,     1,     3,     0,     3,     3,
+     3,     1,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     3,     2,     2,     2,
-     2,     3,     2,     2,     4,     4,     3,     2
+     2,     2,     2,     2,     2,     3,     2,     2,     2,     2,
+     3,     2,     2,     4,     4,     3,     2
 };
 
 static const short yydefact[] = {     3,
-    12,    12,     5,     0,     4,     0,   281,   637,   638,     0,
-   388,   400,   582,     0,    11,     0,     0,     0,    10,   486,
-   843,     0,     0,     0,   167,   669,   282,   283,    83,     0,
-     0,   830,     0,    45,     0,     0,    13,    25,     0,    27,
-     8,     0,    16,    15,    89,   110,    86,     0,   639,   171,
-   302,   279,   303,   615,     0,   375,     0,   374,   393,     0,
+    12,    12,     5,     0,     4,     0,   281,   636,   637,     0,
+   388,   400,   581,     0,    11,     0,     0,     0,    10,   486,
+   842,     0,     0,     0,   167,   668,   282,   283,    83,     0,
+     0,   829,     0,    45,     0,     0,    13,    25,     0,    27,
+     8,     0,    16,    15,    89,   110,    86,     0,   638,   171,
+   302,   279,   303,   614,     0,   375,     0,   374,   393,     0,
    413,   392,   430,   399,     0,   501,   502,   504,   508,   507,
-   481,   387,   598,   401,   599,   108,   301,   626,   596,     0,
-   640,   580,     0,     0,   280,    81,    82,   178,   643,   178,
-   644,   178,   284,   167,   140,   141,   142,   143,   144,   472,
-   475,     0,   665,     0,   476,     0,     0,     0,     0,   141,
+   481,   387,   597,   401,   598,   108,   301,   625,   595,     0,
+   639,   579,     0,     0,   280,    81,    82,   178,   642,   178,
+   643,   178,   284,   167,   140,   141,   142,   143,   144,   472,
+   475,     0,   664,     0,   476,     0,     0,     0,     0,   141,
    142,   143,   144,    23,     0,     0,     0,     0,     0,     0,
-     0,   477,   647,     0,   653,     0,     0,     0,    37,     0,
-     0,    31,     0,     0,    47,     0,   178,   645,     0,     0,
-     0,   613,   608,     0,     0,     0,   612,     0,     0,     0,
-     0,   302,     0,   293,   584,     0,     0,   301,   580,    28,
+     0,   477,   646,     0,   652,     0,     0,     0,    37,     0,
+     0,    31,     0,     0,    47,     0,   178,   644,     0,     0,
+     0,   612,   607,     0,     0,     0,   611,     0,     0,     0,
+     0,   302,     0,   293,   583,     0,     0,   301,   579,    28,
      0,    26,     3,    46,     0,    64,   388,     0,     0,     8,
     67,    63,    66,    89,     0,     0,     0,   399,    90,    14,
-     0,   428,     0,     0,   446,    87,    79,   646,   584,     0,
-   580,    80,     0,     0,     0,   106,     0,   409,   365,   595,
-   366,   607,     0,   580,   390,   389,    78,   109,   376,     0,
+     0,   428,     0,     0,   446,    87,    79,   645,   583,     0,
+   579,    80,     0,     0,     0,   106,     0,   409,   365,   594,
+   366,   606,     0,   579,   390,   389,    78,   109,   376,     0,
    411,   391,   107,   382,   406,   407,   377,   395,   397,   386,
    408,     0,    75,   431,   487,   488,   489,   490,   506,   149,
    148,   150,   492,   493,   172,   499,   491,     0,     0,   494,
-   495,   509,   509,   524,   525,   583,   394,     0,   425,   638,
-     0,   667,   171,   630,   631,   627,   601,   641,     0,   600,
-   597,     0,   878,   874,   873,   871,   853,   858,   859,     0,
-   865,   864,   850,   851,   849,   868,   857,   854,   855,   856,
-   860,   861,   847,   848,   844,   845,   846,   870,   862,   863,
-   852,   869,     0,   866,   776,   393,   777,   839,   284,   281,
-   582,   306,   354,     0,     0,     0,     0,   350,   348,   321,
+   495,   509,   509,   524,     0,   582,   394,     0,   425,   637,
+     0,   666,   171,   629,   630,   626,   600,   640,     0,   599,
+   596,     0,   877,   873,   872,   870,   852,   857,   858,     0,
+   864,   863,   849,   850,   848,   867,   856,   853,   854,   855,
+   859,   860,   846,   847,   843,   844,   845,   869,   861,   862,
+   851,   868,     0,   865,   775,   393,   776,   838,   284,   281,
+   581,   306,   354,     0,     0,     0,     0,   350,   348,   321,
    352,   353,     0,     0,     0,     0,     0,   282,   283,   275,
      0,     0,   186,   185,     0,   187,   188,     0,     0,   189,
      0,     0,   179,   180,     0,   249,     0,   252,   184,   305,
    215,     0,     0,   307,   308,     0,   182,   372,   393,   373,
-   632,   333,   323,     0,     0,     0,     0,   178,     0,   474,
-     0,   469,     0,   666,   664,     0,   190,   191,     0,     0,
-     0,   435,     3,    21,    29,   661,   657,   658,   660,   662,
-   659,   140,   141,   142,     0,   143,   144,   649,   650,   654,
-   651,   648,     0,   291,   292,   290,   629,   628,    33,    32,
-    49,     0,   157,     0,     0,   393,   155,     0,     0,   609,
-   611,     0,   610,   141,   142,   277,   278,   297,     0,   619,
-   296,     0,   618,     0,   304,   282,   283,     0,     0,     0,
-   295,   294,   623,     0,     0,    12,     0,   167,     9,     9,
+   631,   333,   323,     0,     0,     0,     0,   178,     0,   474,
+     0,   469,     0,   665,   663,     0,   190,   191,     0,     0,
+     0,   435,     3,    21,    29,   660,   656,   657,   659,   661,
+   658,   140,   141,   142,     0,   143,   144,   648,   649,   653,
+   650,   647,     0,   291,   292,   290,   628,   627,    33,    32,
+    49,     0,   157,     0,     0,   393,   155,     0,     0,   608,
+   610,     0,   609,   141,   142,   277,   278,   297,     0,   618,
+   296,     0,   617,     0,   304,   282,   283,     0,     0,     0,
+   295,   294,   622,     0,     0,    12,     0,   167,     9,     9,
     70,     0,    65,     0,     0,    71,    74,     0,   427,   429,
-   122,    93,   127,   765,     0,    85,    84,    92,   125,     0,
-     0,   123,    88,   625,     0,     0,   588,     0,   833,     0,
-   593,     0,   592,     0,     0,     0,     0,   580,   428,     0,
-    77,   584,   580,   606,     0,   379,   380,     0,    76,   428,
+   122,    93,   127,   764,     0,    85,    84,    92,   125,     0,
+     0,   123,    88,   624,     0,     0,   587,     0,   832,     0,
+   592,     0,   591,     0,     0,     0,     0,   579,   428,     0,
+    77,   583,   579,   605,     0,   379,   380,     0,    76,   428,
    384,   383,   385,   378,   398,   415,   414,   178,   496,   500,
-   498,     0,   830,   503,   505,     0,     0,   396,   428,   580,
-    94,     0,     0,     0,     0,   580,   100,   581,   614,   638,
-   668,   171,     0,     0,   867,   872,   395,   580,   580,     0,
-   580,   877,   178,     0,     0,     0,   222,     0,     0,   224,
-   237,   238,     0,     0,     0,     0,     0,   276,   221,   218,
-   217,   219,     0,     0,     0,     0,     0,   305,     0,     0,
-     0,   216,   176,   177,   299,     0,   220,     0,     0,   250,
+   498,     0,   829,   503,   505,   547,   637,     0,   538,     0,
+     0,   550,     0,   121,   116,     0,   171,   551,   554,     0,
+     0,   530,     0,   119,   396,   428,   579,    94,     0,     0,
+     0,     0,   579,   100,   580,   613,   637,   667,   171,     0,
+     0,   866,   871,   395,   579,   579,     0,   579,   876,   178,
+     0,     0,     0,   222,     0,     0,   224,   237,   238,     0,
+     0,     0,     0,     0,   276,   221,   218,   217,   219,     0,
+     0,     0,     0,     0,   305,     0,     0,     0,   216,   176,
+   177,   299,     0,   220,     0,     0,   250,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   315,     0,   317,   319,   320,   358,   357,     0,
-     0,   240,   240,     0,   226,   578,     0,   234,   355,   347,
-     0,     0,   830,   336,   339,   340,     0,     0,   367,   686,
-   682,   691,     0,   584,   580,   580,   580,   369,   689,     0,
-   636,   371,     0,     0,   370,   335,     0,   330,   349,   331,
-   351,   633,     0,   332,   175,   175,     0,   165,     0,   393,
-   163,   575,   484,   573,   471,     0,     0,   402,     0,     0,
-   403,   404,   405,   441,   442,   443,   440,     0,   433,   436,
-     0,     3,     0,   652,   178,   655,     0,    41,    42,     0,
-    53,     0,     0,    57,    61,    50,   829,   824,     0,   372,
-   393,    53,   373,   828,    59,   168,   153,   151,   168,   175,
-   300,   617,   616,   304,     0,   620,     0,    18,    20,    89,
-     9,     9,    73,    72,     0,   128,   356,     0,   713,    91,
-   711,   452,     0,   448,   447,   214,     0,   213,   585,   624,
-     0,   806,     0,   801,   393,     0,   800,   802,   831,   813,
-     0,     0,   622,   591,   590,     0,     0,   605,     0,   423,
-   422,   410,   604,     0,   833,   594,   381,   412,   424,   428,
-     0,   497,   510,   548,   638,     0,   539,     0,     0,   551,
-     0,   121,   116,     0,   171,   552,   555,     0,   531,     0,
-   119,     0,   428,     0,   426,   833,   799,   178,   178,   642,
-   178,   833,   799,   580,    97,   580,   103,   876,   875,   839,
-   839,   839,     0,     0,     0,     0,   636,     0,     0,     0,
-     0,   393,     0,     0,     0,   311,     0,   309,   310,     0,
-   247,   181,   281,   637,   638,   282,   283,     0,     0,   453,
-   482,     0,   274,   273,   791,   790,     0,   271,   270,   268,
-   269,   267,   266,   265,   262,   263,   264,   260,   261,   255,
-   256,   257,   258,   259,   253,   254,     0,     0,     0,     0,
-     0,   240,   228,   244,     0,     0,   227,   580,   580,     0,
-   580,   577,   676,     0,     0,     0,     0,     0,   338,     0,
-   342,     0,   344,     0,   685,   684,   681,   680,   829,     0,
-     0,   700,     0,     0,   833,   368,   833,   687,   580,   799,
-   584,   686,   682,     0,     0,   580,     0,   392,     0,     0,
-     0,     0,   170,   174,   285,   168,   161,   159,   168,     0,
-   485,     0,   484,   212,   211,   210,   209,   435,     0,     0,
-    24,     0,     0,   656,     0,    38,    44,    43,    55,    52,
-    53,     0,    48,     0,     0,   686,   682,     0,   820,   580,
-   823,   825,     0,   821,   822,    54,   492,     0,   158,   168,
-   168,   156,   169,   298,    17,    19,    69,    89,   416,   145,
-   637,   638,   133,   146,   147,     0,   126,   129,     0,   639,
-     0,     0,     0,     0,   712,   706,   449,     0,   124,   589,
-   586,   805,   819,   808,     0,   587,   804,   818,   807,   803,
-   832,   815,   826,   816,   809,   814,   835,     0,   420,   603,
-   602,   419,   175,   830,     0,   830,   511,   512,   514,   830,
-   517,   516,   580,   799,   547,   540,   552,   541,   428,   428,
-   537,   538,   535,   536,   580,   799,   281,   637,     0,   415,
-   117,   543,   553,   558,   559,   415,   415,     0,     0,   415,
-   115,   544,   556,   415,   532,   533,   534,   428,   530,   478,
-     0,    96,     0,     0,     0,     0,   102,     0,   833,   799,
-   833,   799,   841,   840,   842,   286,   322,   223,   225,   328,
-   329,     0,     0,     0,     0,   310,   313,     0,     0,     0,
-     0,   248,     0,   314,   316,   318,     0,     0,     0,     0,
-   229,   246,     0,     0,   673,   671,     0,   674,   584,   235,
-     0,     0,   178,   345,     0,     0,     0,   683,   679,   690,
-   580,   699,   697,   698,   688,   833,     0,   695,     0,   634,
-   635,     0,   334,   166,   168,   168,   164,   576,   574,   473,
-     0,   434,   432,   281,     0,    22,    30,   663,    56,    51,
-    58,    62,   685,   681,   686,   682,     0,   596,     0,   580,
-   687,    60,   154,   152,    68,     0,   131,     0,   135,     0,
-   137,     0,   139,     0,   766,     0,   202,   714,     0,   707,
-   708,     0,   450,   686,   682,     0,   305,     0,   632,   827,
-     0,     0,   836,   837,     0,     0,   417,   173,   521,     0,
-   520,   830,   830,   830,     0,   833,     0,   542,   446,   446,
-   833,     0,     0,     0,   428,   428,     0,   428,   428,     0,
-   428,     0,   446,   466,   580,   288,   287,   289,   580,    99,
-     0,   105,     0,     0,     0,     0,     0,     0,   456,     0,
-   454,   251,   272,   242,   241,   239,   230,     0,   243,   245,
-   672,   670,   677,   675,     0,   236,     0,     0,   337,   341,
-   343,   833,   693,   580,   694,   162,   160,   470,     0,   437,
-   439,   685,   681,   601,   687,   132,   130,     0,     0,     0,
-     0,   444,     0,     0,   281,   637,   638,   715,   728,   731,
-   734,   739,     0,     0,     0,     0,     0,     0,     0,     0,
-   282,   760,   768,     0,   787,   764,   763,   762,     0,   723,
-     0,     0,   393,     0,   702,   721,   727,   701,   722,   761,
-     0,   709,   451,     0,   635,   817,   811,   812,   810,     0,
-   834,   421,     0,     0,     0,     0,   523,   522,   515,   112,
-   580,   546,   550,   114,   580,   428,   428,   567,   446,   281,
-   637,     0,   554,   560,   561,   415,   415,   446,   446,     0,
-   446,   557,   545,     0,   833,   833,   580,   580,     0,     0,
-     0,     0,   455,     0,     0,   231,   232,   678,   346,   287,
-   696,   833,     0,   134,   136,   138,   773,   767,   771,     0,
-   710,   705,   205,   780,   782,   783,     0,     0,   719,     0,
-     0,     0,   746,   748,   749,   750,     0,     0,     0,     0,
-     0,     0,     0,   781,     0,   364,   788,     0,   724,   362,
-   415,     0,   363,     0,   415,     0,     0,     0,   203,   704,
-   703,   725,   759,   758,   310,   838,   418,   518,   519,   513,
-   833,   833,   566,   563,   565,     0,     0,   428,   428,   428,
-   562,   564,   549,   468,     0,   467,   462,    95,   101,   833,
-   833,   324,   325,   326,   327,   457,     0,   233,   692,   438,
-     0,   772,   445,   194,     0,   716,   729,   718,     0,     0,
-     0,     0,     0,   742,     0,   751,     0,   757,    39,   144,
-    34,   144,     0,    35,   769,     0,   360,   361,     0,     0,
-     0,   359,   204,   719,   111,   113,   428,   428,   572,   446,
-   446,     0,     0,   480,    98,   104,   579,     0,   774,   201,
-     0,   393,     0,   719,     0,   732,   720,   706,   785,   735,
-     0,     0,     0,     0,   747,   756,    40,    36,     0,     0,
-   726,   571,   569,   568,   570,   465,   464,   458,    86,    89,
-     0,     0,     0,   195,   415,   717,   206,   730,   208,     0,
-   786,     0,   784,   740,   744,   743,   770,   792,     0,     0,
-   463,   778,   779,   775,   428,   706,   192,     0,     0,   198,
-     0,   197,   719,     0,     0,     0,   793,   794,   752,   461,
-     0,   460,     0,   207,     0,   733,   736,   741,   745,     0,
-   792,     0,     0,   459,   199,   193,     0,     0,     0,   753,
-   795,     0,     0,   796,     0,     0,   200,   737,   797,     0,
-   754,     0,     0,     0,   738,   798,   755,     0,     0,     0
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   315,
+     0,   317,   319,   320,   358,   357,     0,     0,   240,   240,
+     0,   226,   577,     0,   234,   355,   347,     0,     0,   829,
+   336,   339,   340,     0,     0,   367,   685,   681,   690,     0,
+   583,   579,   579,   579,   369,   688,     0,   635,   371,     0,
+     0,   370,   335,     0,   330,   349,   331,   351,   632,     0,
+   332,   175,   175,     0,   165,     0,   393,   163,   574,   484,
+   572,   471,     0,     0,   402,     0,     0,   403,   404,   405,
+   441,   442,   443,   440,     0,   433,   436,     0,     3,     0,
+   651,   178,   654,     0,    41,    42,     0,    53,     0,     0,
+    57,    61,    50,   828,   823,     0,   372,   393,    53,   373,
+   827,    59,   168,   153,   151,   168,   175,   300,   616,   615,
+   304,     0,   619,     0,    18,    20,    89,     9,     9,    73,
+    72,     0,   128,   356,     0,   712,    91,   710,   452,     0,
+   448,   447,   214,     0,   213,   584,   623,     0,   805,     0,
+   800,   393,     0,   799,   801,   830,   812,     0,     0,   621,
+   590,   589,     0,     0,   604,     0,   423,   422,   410,   603,
+     0,   832,   593,   381,   412,   424,   428,     0,   497,   510,
+   579,   798,   546,   539,   551,   540,   428,   428,   536,   537,
+   534,   535,   579,   798,   281,   636,     0,   415,   117,   542,
+   552,   557,   558,   415,   415,     0,     0,   415,   115,   543,
+   555,   415,     0,   428,     0,   531,   532,   533,   428,   426,
+   832,   798,   178,   178,   641,   178,   832,   798,   579,    97,
+   579,   103,   875,   874,   838,   838,   838,     0,     0,     0,
+     0,   635,     0,     0,     0,     0,   393,     0,     0,     0,
+   311,     0,   309,   310,     0,   247,   181,   281,   636,   637,
+   282,   283,     0,     0,   453,   482,     0,   274,   273,   790,
+   789,     0,   271,   270,   268,   269,   267,   266,   265,   262,
+   263,   264,   260,   261,   255,   256,   257,   258,   259,   253,
+   254,     0,     0,     0,     0,     0,   240,   228,   244,     0,
+     0,   227,   579,   579,     0,   579,   576,   675,     0,     0,
+     0,     0,     0,   338,     0,   342,     0,   344,     0,   684,
+   683,   680,   679,   828,     0,     0,   699,     0,     0,   832,
+   368,   832,   686,   579,   798,   583,   685,   681,     0,     0,
+   579,     0,   392,     0,     0,     0,     0,   170,   174,   285,
+   168,   161,   159,   168,     0,   485,     0,   484,   212,   211,
+   210,   209,   435,     0,     0,    24,     0,     0,   655,     0,
+    38,    44,    43,    55,    52,    53,     0,    48,     0,     0,
+   685,   681,     0,   819,   579,   822,   824,     0,   820,   821,
+    54,   492,     0,   158,   168,   168,   156,   169,   298,    17,
+    19,    69,    89,   416,   145,   636,   637,   133,   146,   147,
+     0,   126,   129,     0,   638,     0,     0,     0,     0,   711,
+   705,   449,     0,   124,   588,   585,   804,   818,   807,     0,
+   586,   803,   817,   806,   802,   831,   814,   825,   815,   808,
+   813,   834,     0,   420,   602,   601,   419,   175,   829,     0,
+   829,   511,   512,   514,   829,   517,   516,   832,     0,   541,
+   446,   446,   832,     0,     0,     0,   428,   428,     0,   428,
+   428,     0,   428,     0,   529,   478,     0,   446,    96,     0,
+     0,     0,     0,   102,     0,   832,   798,   832,   798,   840,
+   839,   841,   286,   322,   223,   225,   328,   329,     0,     0,
+     0,     0,   310,   313,     0,     0,     0,     0,   248,     0,
+   314,   316,   318,     0,     0,     0,     0,   229,   246,     0,
+     0,   672,   670,     0,   673,   583,   235,     0,     0,   178,
+   345,     0,     0,     0,   682,   678,   689,   579,   698,   696,
+   697,   687,   832,     0,   694,     0,   633,   634,     0,   334,
+   166,   168,   168,   164,   575,   573,   473,     0,   434,   432,
+   281,     0,    22,    30,   662,    56,    51,    58,    62,   684,
+   680,   685,   681,     0,   595,     0,   579,   686,    60,   154,
+   152,    68,     0,   131,     0,   135,     0,   137,     0,   139,
+     0,   765,     0,   202,   713,     0,   706,   707,     0,   450,
+   685,   681,     0,   305,     0,   631,   826,     0,     0,   835,
+   836,     0,     0,   417,   173,   521,     0,   520,   829,   829,
+   829,     0,   112,   579,   545,   549,   114,   579,   428,   428,
+   566,   446,   281,   636,     0,   553,   559,   560,   415,   415,
+   446,   446,     0,   446,   556,   466,   544,   579,   288,   287,
+   289,   579,    99,     0,   105,     0,     0,     0,     0,     0,
+     0,   456,     0,   454,   251,   272,   242,   241,   239,   230,
+     0,   243,   245,   671,   669,   676,   674,     0,   236,     0,
+     0,   337,   341,   343,   832,   692,   579,   693,   162,   160,
+   470,     0,   437,   439,   684,   680,   600,   686,   132,   130,
+     0,     0,     0,     0,   444,     0,     0,   281,   636,   637,
+   714,   727,   730,   733,   738,     0,     0,     0,     0,     0,
+     0,     0,     0,   282,   759,   767,     0,   786,   763,   762,
+   761,     0,   722,     0,     0,   393,     0,   701,   720,   726,
+   700,   721,   760,     0,   708,   451,     0,   634,   816,   810,
+   811,   809,     0,   833,   421,     0,     0,     0,     0,   523,
+   522,   515,   832,   832,   565,   562,   564,     0,     0,   428,
+   428,   428,   561,   563,   548,     0,   832,   832,   579,   579,
+     0,     0,     0,     0,   455,     0,     0,   231,   232,   677,
+   346,   287,   695,   832,     0,   134,   136,   138,   772,   766,
+   770,     0,   709,   704,   205,   779,   781,   782,     0,     0,
+   718,     0,     0,     0,   745,   747,   748,   749,     0,     0,
+     0,     0,     0,     0,     0,   780,     0,   364,   787,     0,
+   723,   362,   415,     0,   363,     0,   415,     0,     0,     0,
+   203,   703,   702,   724,   758,   757,   310,   837,   418,   518,
+   519,   513,   111,   113,   428,   428,   571,   446,   446,   468,
+     0,   467,   462,    95,   101,   832,   832,   324,   325,   326,
+   327,   457,     0,   233,   691,   438,     0,   771,   445,   194,
+     0,   715,   728,   717,     0,     0,     0,     0,     0,   741,
+     0,   750,     0,   756,    39,   144,    34,   144,     0,    35,
+   768,     0,   360,   361,     0,     0,     0,   359,   204,   718,
+   570,   568,   567,   569,     0,     0,   480,    98,   104,   578,
+     0,   773,   201,     0,   393,     0,   718,     0,   731,   719,
+   705,   784,   734,     0,     0,     0,     0,   746,   755,    40,
+    36,     0,     0,   725,   465,   464,   458,    86,    89,     0,
+     0,     0,   195,   415,   716,   206,   729,   208,     0,   785,
+     0,   783,   739,   743,   742,   769,   791,     0,     0,   463,
+   777,   778,   774,   428,   705,   192,     0,     0,   198,     0,
+   197,   718,     0,     0,     0,   792,   793,   751,   461,     0,
+   460,     0,   207,     0,   732,   735,   740,   744,     0,   791,
+     0,     0,   459,   199,   193,     0,     0,     0,   752,   794,
+     0,     0,   795,     0,     0,   200,   736,   796,     0,   753,
+     0,     0,     0,   737,   797,   754,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1628,
-   436,     2,   437,   165,   709,   331,   181,     3,     4,    37,
-   672,   373,  1306,   673,   770,  1307,  1308,   393,  1412,   677,
-    41,   771,   402,   683,   939,   684,   685,   686,    43,   172,
-   173,    44,   455,   184,   180,    45,    46,   787,  1070,   793,
-  1072,    47,   773,   774,   185,   186,   456,   716,   977,   978,
-   652,   979,   234,    48,   961,   960,   699,   696,  1136,  1135,
-   919,   916,   136,   959,    49,   236,    50,   913,   565,   332,
-   333,   334,   335,  1309,  1579,  1476,  1581,  1521,  1612,  1178,
-  1558,  1576,   367,   905,   336,  1247,   860,   604,   867,   337,
-   338,   368,   340,   358,    52,   255,   678,   418,   154,    53,
-    54,   341,   560,   342,   343,   344,   345,   457,   346,  1310,
-   496,   626,   347,  1311,    56,   217,   689,   348,   218,   538,
-   219,   197,   210,    60,   479,   497,  1333,   750,  1196,   198,
-   211,    61,   509,   751,    62,    63,   668,   669,   670,  1283,
-   462,   830,   831,  1549,  1550,  1514,  1456,  1364,    64,   656,
-   361,  1224,  1457,  1091,   922,    65,    66,    67,    68,    69,
-   242,   243,    70,    71,   504,  1017,  1018,  1019,  1020,   245,
-   506,   507,   784,   778,   779,   780,  1042,  1052,  1043,  1353,
-  1044,  1045,  1354,  1355,   653,   654,   605,   895,   350,   465,
-   466,   191,   199,    73,    74,    75,   200,   142,   143,   157,
-    77,   132,   351,   352,   353,    79,   354,    81,  1022,   123,
-   124,   125,   514,   105,    82,   355,   872,   873,   890,   629,
-  1314,  1315,  1179,  1180,  1181,   720,  1316,   986,  1317,  1397,
-  1524,  1479,  1480,  1318,  1319,  1504,  1398,  1525,  1399,  1560,
-  1400,  1562,  1607,  1622,  1401,  1583,  1534,  1584,  1485,   458,
-   717,  1281,  1320,  1415,  1539,  1388,  1389,  1471,  1553,  1523,
-  1519,  1321,  1530,  1418,   837,  1586,  1587,  1588,  1620,   736,
-   737,  1006,  1192,  1329,   738,   739,   740,  1002,   741,   148,
-  1004,   743,  1194,  1195,   532,    84,    85
+static const short yydefgoto[] = {  1627,
+   436,     2,   437,   165,   726,   331,   181,     3,     4,    37,
+   689,   373,  1329,   690,   512,  1330,  1331,   393,  1424,   694,
+    41,   513,   402,   700,   974,   701,   702,   703,    43,   172,
+   173,    44,   455,   184,   180,    45,    46,   822,  1087,   828,
+  1089,    47,   515,   516,   185,   186,   456,   733,  1012,  1013,
+   669,  1014,   234,    48,   996,   995,   716,   713,  1153,  1152,
+   954,   951,   136,   994,    49,   236,    50,   948,   582,   332,
+   333,   334,   335,  1332,  1578,  1482,  1580,  1524,  1611,  1195,
+  1557,  1575,   367,   940,   336,  1270,   895,   621,   902,   337,
+   338,   368,   340,   358,    52,   255,   695,   418,   154,    53,
+    54,   341,   577,   342,   343,   344,   345,   457,   346,  1333,
+   496,   643,   347,  1334,    56,   217,   706,   348,   218,   555,
+   219,   197,   210,    60,   479,   497,  1356,   767,  1213,   198,
+   211,    61,   526,   768,    62,    63,   685,   686,   687,  1306,
+   462,   865,   866,  1548,  1549,  1517,  1462,  1376,    64,   673,
+   361,  1246,  1463,  1108,   957,    65,    66,    67,    68,    69,
+   242,   243,    70,    71,   504,  1052,  1053,  1054,  1055,   245,
+   520,   815,   521,   522,   523,   800,   810,   801,  1236,   802,
+   803,  1237,  1238,   670,   671,   622,   930,   350,   465,   466,
+   191,   199,    73,    74,    75,   200,   142,   143,   157,    77,
+   132,   351,   352,   353,    79,   354,    81,  1057,   123,   124,
+   125,   531,   105,    82,   355,   907,   908,   925,   646,  1337,
+  1338,  1196,  1197,  1198,   737,  1339,  1021,  1340,  1409,  1527,
+  1485,  1486,  1341,  1342,  1510,  1410,  1528,  1411,  1559,  1412,
+  1561,  1606,  1621,  1413,  1582,  1537,  1583,  1491,   458,   734,
+  1304,  1343,  1427,  1542,  1400,  1401,  1477,  1552,  1526,  1522,
+  1344,  1533,  1430,   872,  1585,  1586,  1587,  1619,   753,   754,
+  1041,  1209,  1352,   755,   756,   757,  1037,   758,   148,  1039,
+   760,  1211,  1212,   549,    84,    85
 };
 
-static const short yypact[] = {   113,
-   134,-32768,-32768, 10501,-32768,    45,    86,   454,   528,   151,
-   179,-32768,-32768,   625,-32768,   162,   167,   199,-32768,-32768,
--32768,  1379,   744,   462,   231,-32768,   246,   543,-32768,  1936,
-  1936,-32768,  2838,-32768, 10501,   281,-32768,-32768,   332,-32768,
-   250, 10579,-32768,-32768,   270,   939,   377,   391,   420,-32768,
--32768,-32768,-32768,   406,  3929,-32768, 10820,-32768,  1921,   529,
--32768,   460,-32768,-32768,  1389,   411,-32768,-32768,-32768,-32768,
-   440,  2961,-32768,-32768,-32768,   921,-32768,-32768,-32768,   617,
--32768,-32768,   362,  8032,   431,-32768,-32768,  9567,-32768,  9567,
--32768,  9567,-32768,-32768,-32768,   454,   528,   246,   470,   452,
-   469,   420,-32768,   366,-32768,   362,  9653,  9653,   517,-32768,
--32768,-32768,-32768,-32768,   675,   570,   544,   557,   585,   587,
-   618,-32768,-32768,  1050,-32768,  1205,   454,   528,-32768,   246,
-   470,-32768,  1385,  1043,   611, 11006,  9567,-32768,  9567,  3466,
-  2560,-32768,-32768,   688,   874,  2560,-32768,  1242,  3626,  3626,
-  2838,   554,   601,-32768,   533,   930,   630,   632,-32768,-32768,
-   747,-32768,   586,-32768, 10706,-32768,-32768,   231,  5117,   666,
--32768,-32768,-32768,   270,  4845, 11061,   776,   715,-32768,-32768,
-   716,   460,   778,   156,   344,   753,-32768,-32768,   706,    65,
--32768,-32768,  4597,  4597,  4660,   921,   832,-32768,-32768,   501,
--32768,-32768,  1098,-32768,-32768,-32768,-32768,-32768,  1921,   865,
--32768,   460,   921,-32768,-32768,-32768,  2025,  1921,-32768,   460,
--32768,  4845,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   768,-32768,   420,-32768,   460,  1592,  1265,-32768,
--32768,   785,   785,-32768,-32768,-32768,   541,   362,-32768,   339,
-   898,-32768,   201,-32768,-32768,-32768,-32768,-32768,  5823,-32768,
--32768,   722,-32768,   760,   774,-32768,-32768,-32768,-32768,   808,
+static const short yypact[] = {   136,
+   169,-32768,-32768,  5066,-32768,   203,   163,    73,    77,   190,
+   291,-32768,-32768,  1458,-32768,   259,   264,   279,-32768,-32768,
+-32768,   871,  2044,  1374,   330,-32768,   336,   320,-32768,  1976,
+  1976,-32768,  2798,-32768,  5066,   351,-32768,-32768,   355,-32768,
+    51,  3166,-32768,-32768,   344,   824,   443,   463,   483,-32768,
+-32768,-32768,-32768,   324,  5213,-32768,  5421,-32768,  2205,   804,
+-32768,   456,-32768,-32768,  1137,   623,-32768,-32768,-32768,-32768,
+   435,  3747,-32768,-32768,-32768,   198,-32768,-32768,-32768,   906,
+-32768,-32768,  1174,  8340,   481,-32768,-32768, 10037,-32768, 10037,
+-32768, 10037,-32768,-32768,-32768,    73,    77,   336,   510,   472,
+   539,   483,-32768,  1000,-32768,  1174, 10123, 10123,   509,-32768,
+-32768,-32768,-32768,-32768,   234,   550,   474,   541,   767,   554,
+   564,-32768,-32768,  1006,-32768,   305,    73,    77,-32768,   336,
+   510,-32768,  2508,  1031,   545,  5547, 10037,-32768, 10037,  4171,
+  2952,-32768,-32768,  1311,  1265,  2952,-32768,   664,  3604,  3604,
+  2798,   517,   538,-32768,   559,   876,   562,   592,-32768,-32768,
+   700,-32768,   630,-32768,  3999,-32768,-32768,   330,  3843,   643,
+-32768,-32768,-32768,   344,  6652,  6133,   836,   690,-32768,-32768,
+   684,   456,   778,   176,   458,   728,-32768,-32768,   691,    69,
+-32768,-32768,  3940,  3940,  6529,   198,   864,-32768,-32768,   546,
+-32768,-32768,  1679,-32768,-32768,-32768,-32768,-32768,  2205,   883,
+-32768,   456,   198,-32768,-32768,-32768,  2251,  2205,-32768,   456,
+-32768,  6652,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   749,-32768,   483,-32768,   456,  2169,   910,-32768,
+-32768,   766,   766,-32768,  4696,-32768,   715,  1174,-32768,   784,
+  1757,-32768,   366,-32768,-32768,-32768,-32768,-32768,  4100,-32768,
+-32768,   769,-32768,   740,   758,-32768,-32768,-32768,-32768,   781,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   770,-32768,-32768,   541,  2961,   889,-32768,-32768,
-   781,-32768,-32768, 10261, 10347, 10433, 10433,-32768,-32768,-32768,
--32768,-32768,   791,   824,   834,   836,   839,   984,   470,  9739,
-  1344, 10433,-32768,-32768, 10433,-32768,-32768, 10433,  7140,-32768,
- 10433,   783,   847,-32768, 10433,-32768,  9825,-32768, 11306,   207,
-   735,  2906,  9911,-32768,   909,  1677,-32768,  1035,  2216,  2707,
--32768,   341,-32768,  1619,  1893,   783,   783,  9567, 11006,-32768,
-  1344,   820,  1344,-32768,-32768,   829,   873, 11239,   845,   850,
-   857,  1404,   586,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   570,   544,   557,  1344,   585,   587,   868,   618,-32768,
-   920,-32768,  2238,   454,   528,-32768,-32768,-32768,-32768,-32768,
--32768,  4577,-32768,  4845,  4782,  1152,-32768,   783,   437,-32768,
--32768,   807,-32768,   908,   914,-32768,-32768,-32768,  2560,-32768,
--32768,  2560,-32768,   882,-32768,-32768,-32768,   930,   930,   930,
--32768,-32768,-32768,  5823,    91,   883,   894,-32768,-32768,-32768,
--32768, 11006,-32768,   962,  1003,-32768,-32768,   747,-32768,   460,
--32768,-32768,-32768,-32768,   140,-32768,-32768,-32768,-32768,  7692,
 9739,-32768,-32768,-32768,  9739,   901,-32768,  6828,   142, 10560,
--32768, 10560,-32768, 11078, 11078,  4660,   897,-32768,   460,  4845,
--32768,   906,-32768,-32768, 11119,  2025,  1921,  4845,-32768,   460,
--32768,-32768,   460,  2025,-32768,   997,-32768,  9567,   768,-32768,
--32768,  1592,-32768,-32768,-32768,  3869,    85,   541,   460,-32768,
--32768,   954,   982,  1006,   990,-32768,-32768,-32768,-32768,   610,
--32768,   463,   925,   956,-32768,-32768,   541,-32768,-32768,   819,
--32768,-32768,  9567,  9739,   781,  7140,-32768,   479,  7140,-32768,
--32768,-32768,  9653,  3641,  3641,  3641,  3641, 11284,-32768,-32768,
--32768,-32768,   969, 10003, 10003,  7140,   971,   164,   985,  1032,
-   987,-32768,-32768,-32768,-32768,  9567,-32768,  7231,  7140,-32768,
 9739,  9739,  7783,  9739,  9739,  9739,  9739,  9739,  9739,  9739,
-  9739,  9739,  9739,  9739,  9739,  9739,  9739,  9739,  9739,  9739,
 9739,  9739,-32768,  9739,-32768,-32768,-32768,-32768,-32768,  9739,
 9739,-32768,-32768,  2543,   443,   205,  8392,-32768,-32768,-32768,
 1059,   898,  1108,   519,   559,   567,  2402,   874,-32768,  1955,
-  1955,-32768,  3205,  1007,  1031,  1080,-32768,-32768,   511,  8942,
-  1749,-32768,  1030,   362,-32768,-32768,  9739,-32768,-32768,-32768,
--32768,-32768,   441,   431,-32768,-32768,   783,-32768,  4845,  2724,
--32768,  1077,  1078,-32768,-32768,  1344,   868,-32768,  8124,  8215,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   120,-32768,  1055,
-  1034,   586,  2238,  1097,  9567,-32768,  1096,-32768,-32768,  1043,
-  1697,  1128,   471,  1101,  1103,-32768,-32768,  3099, 11061,  3099,
-  3303,  1389, 10765,-32768,  1105,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1068,  1071,-32768,  1111,-32768,-32768,   270,
--32768,-32768,-32768,-32768,    97,   400,  1118,  1032,-32768,-32768,
--32768,-32768,  7030, 11284,-32768,   873,  1079, 11239,-32768,-32768,
-  1081,-32768,  1082,   573,  4360,  1083,-32768,   112,  4465,  1117,
 1131,   568,-32768,-32768,-32768, 10560, 10560,-32768, 11119,-32768,
-  1136,-32768,-32768,  1090,   142,-32768,  2025,-32768,-32768,   460,
-  1130,-32768,  2297,-32768,   660,   789,-32768,  9739, 10638,-32768,
10638,   408,   408,   211,   603,  3889, 10879,  5499,-32768,   210,
-   408,  1144,   460,  6090,-32768,   142,  5204,  9567,  9567,-32768,
-  9567,   142,  5204,-32768,-32768,-32768,-32768,-32768,-32768,   477,
-   477,   477,   783,  1084,  1099,  9218,  1080,  1109,  1114,  1116,
-  1141,  4282,  1150,  1153,  1154,-32768,  1122,-32768,-32768,  1126,
--32768,-32768,  1157,    74,   325,   311,   172,  9739,  1174,-32768,
-  1180,  1146, 11284, 11284,-32768,-32768,  1190, 11324, 11341,  6304,
11356,  2756,  3410,  3759,  2096,  2096,  2096,  1693,  1693,   992,
-   992,   968,   968,   968,-32768,-32768,  1147,  1156,  1162,  9739,
-  9653,-32768,   443,-32768,  7692,  9739,-32768,-32768,-32768,  9739,
--32768,-32768,  1181, 10433,  1163,  1188,  1206,  1235,-32768,  9739,
--32768,  9739,-32768,  9739,  3331,-32768,  3331,-32768,   105,  1175,
-  1176,-32768,  1178,  3641,   142,-32768,   142,  4214,-32768,  5204,
 1182,  3040,  3040,  6640,  1179,  9825,  1187,   930,  1845,  1893,
-  1210,  1193,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  9739,
-  1344,  1177,  1078,-32768, 11284,-32768, 11284,  1404,  1196, 10089,
--32768,  1197,  1245,-32768,   783,-32768,-32768,-32768,-32768,-32768,
 2817,  4577,-32768,  3641,  9567,  3526,  3526,  5669,-32768,-32768,
--32768,-32768,  1098,-32768,-32768,-32768,   903,  9739,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   270,-32768,   570,
-   544,   557,-32768,   585,   587,  9739,  1250,-32768,   606,   618,
-   608,   653,  1545,  1032,-32768,    78,-32768,    59,-32768,-32768,
--32768,-32768,-32768,-32768,  9034,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1131,  1247,-32768,-32768,-32768,  3641,-32768,-32768,
--32768,  1251,-32768,-32768,  1223,-32768,  1259,-32768,-32768,   108,
--32768,-32768,-32768,  5204, 11284,-32768,  2448,-32768,   460,   460,
--32768,-32768,-32768,-32768,-32768,  5204,   604,   843,  9739,   997,
--32768,  1266,-32768,-32768,-32768,   277,   353,   617,   874,   418,
-   408,  1272,-32768,   425,-32768,-32768,-32768,   460,-32768,-32768,
-  8460,-32768,  1216,   783,   783,   783,-32768,  1224,   142,  5204,
-   142,  5204,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1241,  1244,  1249,  1252,  1068,-32768, 11172,  7692,  7325,
-  1253,-32768,  9739,-32768,-32768,-32768,  1254,  1236,  1248,  3641,
--32768,-32768,  1256,   190,   750,   750,  1239,   750,-32768,-32768,
- 10433,  1352,  9567,-32768,  1258,  1261,  1262,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   142,  1263,-32768,  1264,-32768,
--32768,  2147,-32768,-32768,-32768,-32768,-32768, 11284,-32768,-32768,
-  1267,-32768,-32768,   255,  1273,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  4152,  4152,  4986,  4986,  5669,-32768,  1098,-32768,
-  5377, 11306,-32768,-32768,-32768,  1295,-32768,   400,-32768,  9739,
--32768,  9739,-32768,  9739,-32768,  1344,-32768,-32768,  6527,  1339,
--32768,  7416,-32768,  9126,  9126,  6734,    62,  1297,    96,-32768,
 7692,  7507,-32768,-32768,   286,  7692,-32768,-32768,-32768,  9653,
--32768,-32768,-32768,-32768,  1654,   142,  1302,-32768,  1310,  1310,
-   142,  1306,  9739,  9739, 11150,   460,  4944,   460,   460,  1298,
-   460,  5233,  1310,-32768,-32768,-32768,  1325,-32768,-32768,-32768,
-  1307,-32768,  1309,  9739,  9739,  9739,  9739,  7692,-32768,  1356,
--32768,-32768, 11284,-32768,-32768,-32768,   552,  1248,-32768,-32768,
--32768,-32768,-32768,-32768,  1311,-32768,  1372,   783,-32768,-32768,
--32768,   142,-32768,-32768,-32768,-32768,-32768,-32768,  9739,-32768,
--32768,  4152,  4152,-32768,  5377,-32768,-32768,  1313,  1316,  1319,
-  1334,-32768,  1010,   298,  1376,   861,   910,-32768,-32768,-32768,
--32768,-32768,  9739,  1377,  1380,  1384,  9304,   273,  1344,   828,
-   614,-32768,-32768,  9395,  1439,-32768,-32768,-32768,  1390,-32768,
-  4718, 10947,  5938,  6261,-32768,-32768,  1435,-32768,-32768,-32768,
-  8553,-32768,-32768,  1345,   369,-32768,-32768,-32768,-32768,  3641,
--32768,-32768,  7692,  1347,  1348,  2297,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768, 11150, 11150,-32768,  1310,   628,
-   953,  9739,-32768,-32768,-32768,   997,   997,  1310,  1310,   610,
-  1310,-32768,-32768,  6395,   142,   142,-32768,-32768,  1354,  1355,
-  1359,  1360,-32768,  7692,  9739,-32768,   552,-32768,-32768,-32768,
--32768,   142,  1362,-32768,-32768,-32768,-32768,  1334,-32768,  1344,
--32768,-32768,-32768,-32768,-32768,-32768,   657,   657,  1032,  1381,
-  1386,  5708,-32768,-32768,-32768,-32768,  1392,  9739,  1412,  1418,
-  1426,  1692,  1763,-32768,  1032,-32768,-32768,  1394,-32768,-32768,
-   997,  1063,-32768,  1073,   997,  9481,  1075,   315,-32768,-32768,
--32768,-32768,-32768,-32768,   188,-32768,-32768,-32768,-32768,-32768,
-   142,   142,-32768,-32768,-32768,  9739,  9739, 11150,   460,   460,
--32768,-32768,-32768,-32768,  8306,-32768,-32768,-32768,-32768,   142,
-   142,-32768,-32768,-32768,-32768,-32768,  1374,-32768,-32768,-32768,
-  1396,-32768,-32768,-32768,  9653,-32768,-32768,-32768,  1466,  8849,
 6936,  9653,  9739,-32768,  8661,-32768,  1436,-32768,-32768,  1441,
--32768,  1426,  1692,-32768,-32768,   747,-32768,-32768, 10175, 10175,
-  7601,-32768,-32768,  1032,-32768,-32768, 11150, 11150,-32768,  1310,
-  1310,  1391, 11194,  1408,-32768,-32768,-32768,  6188,-32768,-32768,
 1399,   763,  4845,  1032,  8755,-32768,-32768,    78,-32768,-32768,
-  1450,  1405, 11262,  8661,-32768,-32768,-32768,-32768,  1334,    87,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   377,   270,
-  1407,  1410,  1032,-32768,   997,-32768,-32768,-32768,-32768,   663,
--32768,  7874,-32768,-32768,-32768,-32768,  1334,  1501,  1456,   161,
--32768,-32768,-32768,-32768,   460,    78,-32768,  9739,  1463,-32768,
-  1464,-32768,  1032,  8661,  1443,   158,  1478,-32768,-32768,-32768,
-   140,-32768,  1474,-32768,  1431,-32768,-32768,-32768,-32768,  9739,
-  1501,  1481,  1501,-32768,-32768,-32768,  7965,  1437,   649,-32768,
--32768,  7692,  1444,-32768,  1532,  1491,-32768,-32768,-32768,   317,
--32768,  8755,  1544,  1496,-32768,-32768,-32768,  1557,  1563,-32768
+-32768,-32768,   755,-32768,-32768,   715,  3747,  1632,-32768,-32768,
+   776,-32768,-32768, 10731, 10817, 10903, 10903,-32768,-32768,-32768,
+-32768,-32768,   780,   786,   797,   825,   832,  1025,   510, 10209,
+  1357, 10903,-32768,-32768, 10903,-32768,-32768, 10903,  7539,-32768,
+ 10903,    65,   849,-32768, 10903,-32768, 10295,-32768, 11119,   426,
+  1563,  3740, 10381,-32768,   919,  2567,-32768,  1700,  2285,  3286,
+-32768,   431,-32768,  3387,  1998,    65,    65, 10037,  5547,-32768,
+  1357,   827,  1357,-32768,-32768,   826,   879, 11052,   837,   842,
+   857,  1966,   630,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   550,   474,   541,  1357,   767,   554,   881,   564,-32768,
+   914,-32768,   270,    73,    77,-32768,-32768,-32768,-32768,-32768,
+-32768,  6834,-32768,  6652,  6645,   723,-32768,    65,   301,-32768,
+-32768,   811,-32768,   897,   903,-32768,-32768,-32768,  2952,-32768,
+-32768,  2952,-32768,   873,-32768,-32768,-32768,   876,   876,   876,
+-32768,-32768,-32768,  4100,   103,   875,   884,-32768,-32768,-32768,
+-32768,  5547,-32768,   900,   963,-32768,-32768,   700,-32768,   456,
+-32768,-32768,-32768,-32768,   165,-32768,-32768,-32768,-32768,  8091,
10209,-32768,-32768,-32768, 10209,   877,-32768,  5311,   240,  4742,
+-32768,  4742,-32768,  5059,  5059,  6529,   882,-32768,   456,  6652,
+-32768,   891,-32768,-32768,  5849,  2251,  2205,  6652,-32768,   456,
+-32768,-32768,   456,  2251,-32768,   981,-32768, 10037,   749,-32768,
+-32768,  2169,-32768,-32768,-32768,-32768,   807,   385,-32768, 10209,
+  1836,-32768,  1836,   219,   219,   220,   433,  3033,  4527,   108,
+  4879,-32768,   274,   219,   715,   456,-32768,-32768,   941,   944,
+   971,   955,-32768,-32768,-32768,-32768,   847,-32768,   439,   921,
+   927,-32768,-32768,   715,-32768,-32768,  1100,-32768,-32768, 10037,
+ 10209,   776,  7539,-32768,   451,  7539,-32768,-32768,-32768, 10123,
+  4970,  4970,  4970,  4970, 11097,-32768,-32768,-32768,-32768,   934,
10473, 10473,  7539,   937,   437,   939,   991,   947,-32768,-32768,
+-32768,-32768, 10037,-32768,  7630,  7539,-32768, 10209, 10209,  5654,
10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209,
10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209,-32768,
10209,-32768,-32768,-32768,-32768,-32768, 10209, 10209,-32768,-32768,
+   339,   651,  1120,  8700,-32768,-32768,-32768,   998,  1757,  1053,
+   469,   482,   581,  3585,  1265,-32768,  1659,  1659,-32768,  3502,
+   960,   982,  1043,-32768,-32768,   590,  9320,  1173,-32768,  1103,
+  1174,-32768,-32768, 10209,-32768,-32768,-32768,-32768,-32768,    90,
+   481,-32768,-32768,    65,-32768,  6652,  1444,-32768,  1014,  1034,
+-32768,-32768,  1357,   881,-32768,  8432,  8523,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   278,-32768,  1016,  1020,   630,   270,
+  1062, 10037,-32768,  1073,-32768,-32768,  1031,  2198,  1102,    71,
+  1079,  1083,-32768,-32768,  2306,  6133,  2306,  2152,  1137,  4350,
+-32768,  1094,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+  1046,  1054,-32768,  1107,-32768,-32768,   344,-32768,-32768,-32768,
+-32768,   104,  1493,  1101,   991,-32768,-32768,-32768,-32768,  7429,
11097,-32768,   879,  1064, 11052,-32768,-32768,  1067,-32768,  1089,
+    93,  3406,  1095,-32768,   571,  5919,  1140,  1145,   649,-32768,
+-32768,-32768,  4742,  4742,-32768,  5849,-32768,  1157,-32768,-32768,
 1111,   240,-32768,  2251,-32768,-32768,   456,  1109,-32768,  2385,
+-32768,  7162, 11097,-32768,  5202,-32768,   456,   456,-32768,-32768,
+-32768,-32768,-32768,  7162,   174,   966, 10209,   981,-32768,  1166,
+-32768,-32768,-32768,   485,   580,   906,  1265,   587,   219,  1177,
+-32768,   676,  1161,   456,  8768,-32768,-32768,-32768,   456,-32768,
+   240,  7162, 10037, 10037,-32768, 10037,   240,  7162,-32768,-32768,
+-32768,-32768,-32768,-32768,  1688,  1688,  1688,    65,  1136,  1143,
 9688,  1043,  1147,  1149,  1152,  1170,  2853,  1186,  1189,  1190,
+-32768,  1167,-32768,-32768,  1168,-32768,-32768,  1211,   996,  1060,
+   557,   601, 10209,  1217,-32768,  1232,  1191, 11097, 11097,-32768,
+-32768,  1235,  5746,  6217,  6158,  4780,  2387,  5364,  4442,  2354,
+  2354,  2354,  1205,  1205,  1512,  1512,  1028,  1028,  1028,-32768,
+-32768,  1192,  1194,  1183, 10209, 10123,-32768,   651,-32768,  8091,
10209,-32768,-32768,-32768, 10209,-32768,-32768,  1204, 10903,  1199,
+  1215,  1231,  1264,-32768, 10209,-32768, 10209,-32768, 10209,  2925,
+-32768,  2925,-32768,   228,  1216,  1218,-32768,  1214,  4970,   240,
+-32768,   240,  3053,-32768,  7162,  1219,  9504,  9504,  6451,  1220,
10295,  1221,   876,  2159,  1998,  1368,  1224,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768, 10209,  1357,  1225,  1034,-32768, 11097,
+-32768, 11097,  1966,  1227, 10559,-32768,  1233,  1253,-32768,    65,
+-32768,-32768,-32768,-32768,-32768,  1852,  6834,-32768,  4970, 10037,
+  1202,  1202,  4282,-32768,-32768,-32768,-32768,  1679,-32768,-32768,
+-32768,  1188, 10209,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   344,-32768,   550,   474,   541,-32768,   767,   554,
+ 10209,  1285,-32768,   672,   564,   702,   706,  1806,   991,-32768,
+    96,-32768,   171,-32768,-32768,-32768,-32768,-32768,-32768,  9412,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1145,  1283,-32768,
+-32768,-32768,  4970,-32768,-32768,-32768,  1284,-32768,-32768,  1257,
+-32768,  1294,-32768,-32768,   298,-32768,-32768,   240,  1249,-32768,
+  1305,  1305,   240,  1262, 10209, 10209,  7076,   456,  4960,   456,
+   456,  1524,   456,  6356,-32768,-32768,  8838,  1305,-32768,  1266,
+    65,    65,    65,-32768,  1267,   240,  7162,   240,  7162,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1289,  1290,
+  1291,  1293,  1046,-32768, 10985,  8091,  7724,  1280,-32768, 10209,
+-32768,-32768,-32768,  1281,  1287,  1295,  4970,-32768,-32768,  1298,
+   569,  1012,  1012,  1296,  1012,-32768,-32768, 10903,  1384, 10037,
+-32768,  1309,  1313,  1319,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   240,  1326,-32768,  1325,-32768,-32768,  2768,-32768,
+-32768,-32768,-32768,-32768, 11097,-32768,-32768,  1292,-32768,-32768,
+   292,  1330,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  2497,
+  2497,  2557,  2557,  4282,-32768,  1679,-32768,  3088, 11119,-32768,
+-32768,-32768,  1331,-32768,  1493,-32768, 10209,-32768, 10209,-32768,
10209,-32768,  1357,-32768,-32768,  7026,  1413,-32768,  7815,-32768,
+  9596,  9596,  7226,   173,  1339,   209,-32768,  8091,  7906,-32768,
+-32768,   311,  8091,-32768,-32768,-32768, 10123,-32768,-32768,-32768,
+-32768,  1848,-32768,-32768,-32768,-32768,-32768,-32768,  7076,  7076,
+-32768,  1305,   585,  1127, 10209,-32768,-32768,-32768,   981,   981,
+  1305,  1305,   847,  1305,-32768,-32768,-32768,-32768,-32768,  1395,
+-32768,-32768,-32768,  1342,-32768,  1346, 10209, 10209, 10209, 10209,
+  8091,-32768,  1393,-32768,-32768, 11097,-32768,-32768,-32768,    60,
+  1295,-32768,-32768,-32768,-32768,-32768,-32768,  1348,-32768,  1421,
+    65,-32768,-32768,-32768,   240,-32768,-32768,-32768,-32768,-32768,
+-32768, 10209,-32768,-32768,  2497,  2497,-32768,  3088,-32768,-32768,
+  1352,  1362,  1363,  1380,-32768,  1036,   321,  1407,  1164,  1165,
+-32768,-32768,-32768,-32768,-32768, 10209,  1416,  1419,  1425,  9774,
+   653,  1357,   496,   693,-32768,-32768,  9865,  1477,-32768,-32768,
+-32768,  1430,-32768,  6551,  6039,  4418,  6895,-32768,-32768,  1475,
+-32768,-32768,-32768,  8931,-32768,-32768,  1386,  1373,-32768,-32768,
+-32768,-32768,  4970,-32768,-32768,  8091,  1391,  1399,  2385,-32768,
+-32768,-32768,   240,   240,-32768,-32768,-32768, 10209, 10209,  7076,
+   456,   456,-32768,-32768,-32768,  6712,   240,   240,-32768,-32768,
+  1400,  1401,  1405,  1410,-32768,  8091, 10209,-32768,    60,-32768,
+-32768,-32768,-32768,   240,  1415,-32768,-32768,-32768,-32768,  1380,
+-32768,  1357,-32768,-32768,-32768,-32768,-32768,-32768,   711,   711,
+   991,  1432,  1433,  6200,-32768,-32768,-32768,-32768,  1467, 10209,
+  1472,  1428,  1480,  1927,  1987,-32768,   991,-32768,-32768,  1451,
+-32768,-32768,   981,  1061,-32768,  1076,   981,  9951,  1090,   322,
+-32768,-32768,-32768,-32768,-32768,-32768,   364,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  7076,  7076,-32768,  1305,  1305,-32768,
+  8614,-32768,-32768,-32768,-32768,   240,   240,-32768,-32768,-32768,
+-32768,-32768,  1434,-32768,-32768,-32768,  1459,-32768,-32768,-32768,
10123,-32768,-32768,-32768,  1538,  9227,  7336, 10123, 10209,-32768,
+  9039,-32768,  1496,-32768,-32768,  1504,-32768,  1480,  1927,-32768,
+-32768,   700,-32768,-32768, 10645, 10645,  8000,-32768,-32768,   991,
+-32768,-32768,-32768,-32768,  1452, 11007,  1463,-32768,-32768,-32768,
10990,-32768,-32768,  1455,   398,  6652,   991,  9133,-32768,-32768,
+    96,-32768,-32768,  1507,  1460, 11075,  9039,-32768,-32768,-32768,
+-32768,  1380,    76,-32768,-32768,-32768,-32768,   443,   344,  1462,
+  1466,   991,-32768,   981,-32768,-32768,-32768,-32768,   714,-32768,
+  8182,-32768,-32768,-32768,-32768,  1380,  1566,  1522,   177,-32768,
+-32768,-32768,-32768,   456,    96,-32768, 10209,  1523,-32768,  1529,
+-32768,   991,  9039,  1491,    63,  1531,-32768,-32768,-32768,   165,
+-32768,  1534,-32768,  1494,-32768,-32768,-32768,-32768, 10209,  1566,
+  1539,  1566,-32768,-32768,-32768,  8273,  1500,   572,-32768,-32768,
+  8091,  1501,-32768,  1577,  1553,-32768,-32768,-32768,   332,-32768,
+  9133,  1603,  1559,-32768,-32768,-32768,  1621,  1622,-32768
 };
 
 static const short yypgoto[] = {-32768,
-  1564,-32768,  -331,  1400,  -350,    19,     6,  1571,-32768,  1539,
--32768,-32768,   228,-32768,   229,-32768,   249,-32768,   163,   902,
-    39,    15,-32768,-32768,  -629,-32768,-32768,   636,    55,  1420,
-  1137,  1433,  -704,    42,  -173,    -6,   150,-32768,-32768,-32768,
--32768,-32768,   823,-32768,-32768,-32768,-32768,-32768,-32768,   436,
-  1148,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1511,  -651,  5827,  1369,   -47,  -586,  -227,   -68,
-  1469,  -536,-32768,   684,-32768,   212,-32768, -1387,-32768, -1289,
-   -11,-32768,  1519,  1510,  -270,   364,  -544,-32768,  -826,  2320,
-     9,  1554,  3609,  1314,  -327,   -57,   -88,   682,  -139,   -65,
-    93,-32768,-32768,-32768,  -326,-32768,  -153,-32768,-32768, -1252,
-   -48,  -338,  4854,   138,   912,  -118,    81,   102,  -203,    -4,
-  -144,  -166,  -172,    16,   -21,   145,-32768,  -370,-32768,-32768,
--32768,-32768,-32768,   213,  1308,    10,-32768,   686,-32768,-32768,
-  -768,  -377,   893,-32768,-32768,-32768,-32768,-32768,   -16,-32768,
--32768,-32768,-32768,-32768,   694,  -346,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1378,-32768,   283,   421,-32768,-32768,
--32768,-32768,-32768,   848,  -677,-32768,-32768,-32768,-32768,-32768,
--32768,   852,-32768,   412,   977,   714,  1039,  4229,    47,    21,
-  -455,  1438,  1271,  -667,-32768,     4,-32768,   822,  4045,  -147,
-   173,  -102,  4533,  1293,-32768,  4890,  2554,  1748,   -18,  -114,
--32768,  1521,   -53,-32768,  4714,  3375,  -257,-32768,  1983,-32768,
--32768,   333,-32768,-32768,   472,    63,  -439,-32768,-32768,-32768,
--32768, -1405,-32768, -1174, -1373,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    83,
--32768,-32768,-32768,-32768,-32768,   116, -1322,-32768,-32768,   -45,
--32768,-32768,-32768,-32768, -1416,    67,-32768,    53,-32768,  -723,
-  -583,   667,-32768,-32768,-32768,-32768,  -388,-32768,  -382,  -441,
--32768,  1416,   336,-32768,   -84,-32768,  -230
+  1624,-32768,  -304,  1456,  -364,    75,     2,  1623,-32768,  1593,
+-32768,-32768,   315,-32768,   373,-32768,   507,-32768,   206,   942,
+    58,    24,-32768,-32768,  -669,-32768,-32768,   657,    59,  1469,
+  1197,  1478,  -719,   111,  -173,    29,    55,-32768,-32768,-32768,
+-32768,-32768,  1125,-32768,-32768,-32768,-32768,-32768,-32768,   466,
+  1903,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1568,  -526,  6178,  1422,   -58,  -599,  -235,   -44,
+  1533,  -547,-32768,   388,-32768,   260,-32768, -1362,-32768, -1307,
+    52,-32768,  1442,  1361,  -254,   403,  -557,-32768,  -868,  3479,
+  -125,  1528,  4472,  1379,  -332,   -52,   -76,   427,  -140,   -66,
+   135,-32768,-32768,-32768,  -344,-32768,  -159,-32768,-32768, -1236,
+   -16,  -329,  1934,   530,  -150,  -166,    78,    50,  -206,    -4,
+  -145,  -165,  -171,    32,   -11,   357,-32768,  -257,-32768,-32768,
+-32768,-32768,-32768,   734,  1247,   -45,-32768,   716,-32768,-32768,
+  -765,  -399,   940,-32768,-32768,-32768,-32768,-32768,   218,-32768,
+-32768,-32768,-32768,-32768,   729,  -377,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  1447,-32768,   335,   473,-32768,-32768,
+-32768,-32768,   885,  -479,-32768,-32768,-32768,-32768,-32768,-32768,
+  1172,-32768,   624,  1030,   745,  1086,  2837,    14,    54,  -461,
+  1510,  2756,  -686,-32768,    13,-32768,   645,    20,  -142,   271,
+  -105,  5046,  1365,-32768,  5682,  2642,  1651,   -19,  -113,-32768,
+  1590,   -54,-32768,  5135,  3513,  -359,-32768,  1597,-32768,-32768,
+   381,-32768,-32768,   527,   138,  -429,-32768,-32768,-32768,-32768,
+ -1369,-32768, -1238, -1389,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   156,-32768,
+-32768,-32768,-32768,-32768,   188, -1311,-32768,-32768,   -51,-32768,
+-32768,-32768,-32768, -1385,   140,-32768,   144,-32768,  -606,  -580,
+   710,-32768,-32768,-32768,-32768,  -393,-32768,  -390,  -333,-32768,
+  1007,   397,-32768,    83,-32768,  -232
 };
 
 
-#define        YYLAST          11440
+#define        YYLAST          11203
 
 
 static const short yytable[] = {    59,
-   443,   420,   423,   445,   122,   487,   196,   435,   444,    36,
-   631,   392,   984,   694,   256,   721,   432,   103,    42,   695,
-   515,   356,    35,   357,   182,   178,   754,   640,   641,   822,
-    59,   400,   253,   537,   540,   174,  1101,    59,   298,   891,
-    36,   671,   221,   508,   398,   399,   891,   962,   981,    42,
-    72,  1416,   209,    35,   249,   692,    42,   177,   861,   914,
-   169,   763,   956,  1063,  1531,  1472,   570,   247,   408,  1068,
-   391,   224,   492,   495,   190,   397,   141,   146,   256,   296,
-   170,    72,   725,   349,    57,   349,   260,   349,    72,   710,
-   486,  1026,   527,  1028,  1532,  1021,   171,   609,  1541,   494,
-  1055,   609,   349,   349,    86,    58,  1527,   609,  -302,   364,
-  1176,   467,    -1,   963,  1203,    57,   992,  1182,  1556,   759,
-   820,   782,   176,   997,   644,   155,   196,    89,   645,   646,
-   297,   406,   349,    -2,   349,  -141,    58,   256,   785,  1431,
-   718,    55,  -626,    58,  1204,   527,  1434,    90,  1568,   224,
-   518,  1559,   178,    87,  -302,  -302,   452,   468,   440,    88,
-    59,  1590,   174,   993,    59,   224,   994,  1183,   893,  -295,
-   998,   209,    55,   999,  1582,   190,  1127,  1598,   928,   175,
-   700,   701,    72,    42,   177,   295,  1177,   169,  -626,  -626,
-  1613,   490,   221,   783,  1569,   419,   422,   719,   707,   807,
-   221,   221,   742,  -626,   969,   158,   208,   170,   127,   128,
-   593,    72,   821,  -356,   522,    72,   405,   453,  -356,  1601,
-   190,   224,   453,   171,    93,   138,    94,   929,  1529,   224,
-   221,    38,    39,  -144,  -304,  1031,   619,    58,  1561,   470,
-   472,   155,   155,   155,  1472,    57,   224,   516,  1559,   176,
-   454,   260,    40,   593,   107,   454,   594,   615,    26,   108,
-   130,   131,    38,    39,  1134,  1602,    58,  1137,  1032,  1056,
-    58,  -295,  1033,   404,   868,    95,   110,   111,   985,   221,
-  -304,  -304,   806,    40,   869,   403,  1594,   155,   614,   647,
-   679,   109,   247,   517,   715,  -298,   606,  1250,   870,   594,
-  1207,  -365,    55,    15,   135,  1034,   175,   163,  1163,  1164,
-  1535,  1149,  1212,  1269,   541,   542,   641,  1100,  1057,   137,
-   891,   158,   158,   158,   349,   208,   420,   423,   112,   113,
-   550,   674,   221,   551,  -365,   941,   552,   296,  -365,   562,
-   932,   492,   495,   567,  1330,   247,  1231,   164,  1233,   492,
-   694,   608,  1408,   349,   650,   697,  1003,  1392,   260,  1566,
-   967,   968,  1270,   495,   891,     8,     9,   158,   757,     8,
-     9,  -365,  -143,   161,  1392,  1623,   179,  -366,    91,    15,
-  -304,   515,   495,  1055,   137,   510,  -142,   636,   297,   221,
-   459,   162,    91,  1331,   449,  -304,   631,   691,    92,  -304,
-   209,   183,   970,   971,   972,    72,  1393,   460,  1152,  1599,
-  -366,   891,    92,   363,  -366,  -304,   682,   130,   131,   915,
-  1376,   130,   131,  1503,  1624,   178,  1198,  -304,  -304,   761,
-  -304,   511,  -304,   637,    15,   712,   461,    59,  -415,   405,
-  1342,  1343,  -120,   295,    15,  1129,   973,  -366,   693,  -118,
-   187,    15,  -584,    26,  1363,   974,   975,   177,   775,   224,
-    58,  -304,  -304,   735,   803,   127,   128,  -415,   240,   221,
-   221,  -415,   241,   188,   760,  -120,  -304,   221,   308,  -120,
-   127,   128,  -118,  1266,  1267,   518,  -118,  1102,    72,   864,
-    18,   221,   976,   349,    26,   566,   649,   244,  -584,   189,
-   981,    59,   224,   690,   299,   129,   865,    89,   648,   796,
-   221,   563,  -120,   564,   693,    26,  -415,   130,   131,  -118,
-   746,   747,   176,   138,   769,   619,   362,    90,   349,   942,
-    26,   349,   130,   131,   349,   866,   966,  1021,   349,   812,
-   812,   812,   812,    58,  1175,   943,   528,  -584,   215,   216,
-  1468,   349,    72,   694,    14,   797,   529,   899,   606,   695,
-   360,   349,   550,   551,   349,   879,   155,   155,   155,   690,
-   679,   806,  1199,   891,  1201,  1076,    20,   938,  1205,   175,
-  1445,    91,   640,   641,   992,    23,   777,   222,   223,  1451,
-  1452,   937,  1453,  -584,   482,   692,   138,   377,   864,   296,
-   917,    92,   891,   900,   901,   881,   935,    58,   527,   372,
-   378,   880,   492,   883,  1007,   865,   139,    90,   691,     7,
-     8,   250,    10,   376,   752,   735,   189,    95,    96,    97,
-    92,   993,   758,   221,   994,   570,  -829,   260,   379,   949,
-   380,   954,   955,   776,   866,  1375,   158,   158,   158,  1035,
-   297,   882,  1169,  1255,  1171,   772,   794,    21,   137,   884,
-  1008,  -295,   122,    91,   251,  1213,   885,   887,  1021,   693,
-   349,   381,    27,    28,   221,  1414,   693,    88,    26,   644,
-    98,    99,   100,    92,   209,   401,   955,   137,   247,  1446,
-     7,   127,   128,    10,    -7,  1036,   252,   982,  1170,  1173,
-  1172,    88,   795,  1474,    32,   295,  1023,  1148,   425,  1577,
-  1615,  1239,  1241,    91,   153,  1073,  1074,  1075,   221,  1064,
-  1065,   775,  1066,   775,   690,     8,   520,  1041,    21,   775,
-   775,   690,   374,    92,   691,   251,   775,   433,   375,  -621,
-   221,  1544,  1545,    27,    28,  1174,   116,   117,   118,  1475,
-  1029,  1030,  1024,   127,   128,  1578,  1616,   303,   518,  1058,
-  1336,  1337,  1338,   164,    59,   807,    59,   252,   432,   363,
-   215,   216,   209,    59,   447,    32,    14,   130,   131,    59,
-   451,   595,   691,   349,   349,   693,   349,   769,   691,   769,
-   366,   370,   127,   128,  1165,   221,   769,    26,    20,   119,
-   120,   521,   769,    26,  1241,   130,   131,    23,   448,   619,
-   127,   128,   463,  1326,  1328,    72,   464,    72,  1332,   868,
-   596,   597,   127,   128,    72,   598,   599,   600,   601,   869,
-    72,   421,   424,   693,   222,   446,  1226,  1227,  1228,   693,
-   690,   498,    26,   870,   130,   131,   503,  1251,  1252,   777,
-  1254,   777,   147,   523,   363,   806,   349,   563,   777,   564,
-  1373,  1104,   130,   131,   777,  1591,   363,   524,   392,   525,
-    58,   129,    58,   534,   130,   131,   153,   127,   128,    58,
-   526,    26,  1110,   543,  1411,    58,   521,   256,   690,   812,
-   480,   481,   127,   128,   690,   691,    89,   544,   252,   735,
-    95,   110,   111,   512,  1214,   566,   776,   545,  1027,   546,
-   550,   551,   547,   260,    89,   776,    90,   224,   772,   609,
-   772,   776,  1395,   488,   489,  1040,  1050,   772,   655,   130,
-   131,   659,   300,   772,    90,    10,   658,   691,    21,   812,
-   349,   675,    26,   691,   130,   131,   693,    15,   885,   887,
-   693,  -415,   661,   112,   113,  1437,   682,   662,   528,  1478,
-    18,   -52,   411,    91,   663,    15,   -52,   413,   529,  -415,
-    21,  1396,  1012,   676,   807,  1495,   498,   -52,  1041,  -415,
-  -415,    90,   256,    92,  -415,   426,   427,    92,   693,   704,
-   735,    -6,  1153,  1154,   693,  1060,  1466,  -415,  -415,   428,
-   253,   690,   708,   812,   748,   690,    89,   420,   423,   429,
-   559,   730,   557,   775,  1447,   147,   753,    32,  1216,   691,
-   480,   713,   430,    15,  1218,  1219,    90,   788,  1216,  1221,
-  1380,   691,  1219,     8,     9,   798,   420,   423,   127,   128,
-   155,   693,  -183,   690,  1258,   300,   394,   395,    10,   690,
-   591,   592,   382,   383,   384,   789,    59,   137,  -183,   790,
-  -183,   488,   714,   791,  1478,   691,   799,   691,  1390,  1391,
-   693,   588,   589,   590,   591,   592,   816,   363,   818,   769,
-   519,   619,   693,    21,  1478,   130,   131,   155,    26,   719,
-   130,   131,   819,   256,   821,   812,   690,   385,    27,   319,
-     7,     8,     9,    10,   620,   386,   387,    72,   349,   252,
-   421,   705,   876,  1574,   621,   878,   693,   892,   693,  1256,
-   158,   480,  1497,   894,   622,   690,   896,   623,   624,   694,
-    32,   488,  1498,   480,  1502,  1552,   921,   690,    21,  1424,
-   920,   777,   931,  1478,  1422,   251,  1427,   930,   729,   982,
-   934,   721,   691,    27,    28,   936,   421,   424,   214,   215,
-   216,   101,    58,    20,   944,    14,   945,   158,   958,   115,
-   965,   690,   522,   690,  1313,  -298,  1040,   252,   964,   453,
-  -828,   735,    18,   807,  1305,    32,   989,    20,   990,   991,
-   996,  1077,   550,   551,  1005,   349,    23,  1304,   776,  1009,
-  1010,  1272,  1273,   693,  1013,  1059,  1078,   116,   117,   118,
-   772,   698,   233,     8,     9,  1082,  1079,   559,  -140,   557,
-   559,  1080,   557,  1081,  1083,    72,   809,  1084,  1085,  1086,
-  1272,  1273,   693,  1087,  1617,  1089,   421,   817,  1090,   557,
-   702,  1209,  1210,   703,    95,   414,   415,   155,   155,   155,
-   559,  1093,   557,  1092,  1094,   706,   836,   363,   690,  1312,
-   119,   120,  1421,  1095,  1421,   130,   131,    95,    96,    97,
-  1223,   388,  1096,  1111,  1109,  1112,   155,   155,   155,  1113,
-    58,  1114,  1120,  1121,   859,  1140,  1130,   690,  1122,   521,
-   875,   411,  1128,   413,  1131,   416,   221,    98,   113,  1313,
-  1133,   127,  1360,  1143,  1147,  1146,   519,   209,  1168,  1313,
-  1191,   907,   562,   688,  1197,  1200,  1313,  1202,   527,  1305,
-    98,    99,  1304,  1225,  1217,   812,  1305,   158,   158,   158,
-  1222,  1229,  1304,  1234,  1449,  1450,  1235,   140,   140,  1304,
-   156,  1236,  1540,  1245,  1237,   363,    95,   110,   111,  1253,
-    72,   420,   423,   130,   131,  1246,   158,   158,   158,  1257,
-    72,  1242,  1244,  1249,   212,  1259,   220,    72,  1260,  1261,
-  1264,  1176,   237,   460,  1265,  1268,  1571,   521,  -663,   688,
-  1271,    95,   110,   111,  1312,   499,   501,   300,   394,   395,
-    10,    95,    96,    97,  1312,   225,   226,   227,   513,   112,
-   113,  1312,  1276,   490,  1325,    58,    95,   110,   111,  1341,
-   664,   665,   666,  1345,  1367,    58,  1368,  1374,  1379,    18,
-  1384,  1378,    58,  1385,   228,    21,  1386,  1348,  1349,  1387,
-  1358,  1359,   251,  1361,   112,   113,   114,  1394,  1403,  1404,
-    27,   319,    26,  1405,    98,    99,   229,  1417,   140,  1419,
-  1432,  1486,  1435,   140,  1438,  1439,   156,   156,   156,   112,
-   113,  1462,  1463,   471,   473,   477,  1464,  1465,   549,  1470,
-  1522,  1488,    32,  1481,  1555,  1313,  1313,  1522,  1482,  1489,
-  1313,   375,  1526,   212,  1517,  1305,  1496,   907,  1518,   450,
-  1305,   230,   231,   232,  1537,  1536,   349,  1546,  1304,  1304,
-   140,   140,   156,  1304,  1548,   221,  1554,   550,   551,  1563,
-   657,  1585,  1564,   691,  1572,  1589,   220,  1573,   155,   667,
-  1313,   297,  1596,  1597,   493,   220,    72,    72,   297,  1313,
-  1305,    72,   657,  1575,   688,  1600,  1603,  1605,  1606,  1305,
-  1610,   688,  1619,  1304,  1614,   746,   747,   116,   971,   972,
-  1621,  1618,  1304,  1107,  1626,  1627,  1629,  1522,  1443,  1444,
-  1312,  1312,  1630,     1,   693,  1312,   140,   702,   703,   442,
-   706,    72,     5,   160,   933,  1493,   295,  1150,   711,  1313,
-    72,    58,    58,   295,   421,   817,    58,   557,   441,  1305,
-  1570,   155,   155,   155,    95,    96,    97,   439,   158,  1051,
-   119,   120,  1304,  1277,   359,  1312,   500,   409,   297,  1477,
-  1625,  1377,   533,  1142,  1312,   988,  1141,  1313,  1440,   690,
-   505,   300,     8,     9,    10,  1339,    58,  1305,  1053,   153,
-    72,  1061,   923,  1362,  1139,    58,   156,   483,   616,   363,
-  1304,   339,   863,   339,   390,   339,  1430,    98,    99,   762,
-   688,  1322,  1592,  1604,  1567,  1611,   116,   971,   972,    21,
-  1509,  1510,  1511,   295,  1312,  1436,   251,  1609,    72,  1190,
-     0,   158,   158,   158,    27,   319,  1188,   610,     0,   300,
-   394,   395,    10,  1015,   611,    58,     0,     0,     0,     0,
-   339,     0,   339,     0,    95,   110,   111,     0,   688,   382,
-   383,   384,  1312,     0,   688,     0,    32,    26,     0,   119,
-   120,     0,   212,   220,     0,   829,     0,    21,     0,  1542,
-  1543,     0,     0,    58,   612,     0,   140,     0,     0,   140,
-    26,     0,    27,   319,     0,   156,   156,   156,     0,     0,
-   744,   140,   745,     0,   471,   473,   477,   112,  1490,     0,
-    26,     0,   386,   387,     0,   756,     0,  -580,     0,   877,
-  -580,     0,     0,     0,   613,    95,   110,   111,   147,     0,
-   586,   587,   588,   589,   590,   591,   592,   140,     0,   140,
-     0,   156,   156,   156,     0,     0,   450,  1593,     0,     0,
-     0,     0,   140,   493,   220,   896,     0,   450,     0,     0,
-     0,   493,     0,     0,     0,     0,     0,  -580,     0,  -580,
-  -580,   688,  -580,     0,     0,   688,   450,     0,   112,  1492,
-     0,     0,     0,  -580,     0,  -580,     0,   258,   940,     0,
-     0,     0,     0,     0,     0,     0,     0,   421,   424,   957,
-     0,  -580,  -580,   156,     0,     0,   156,   300,     8,     9,
-    10,   258,     0,   688,     0,     0,  -580,     0,     0,   688,
-     0,   156,   156,   156,     0,     0,   421,  1324,     0,   557,
-   829,     0,     0,   548,     0,     0,   156,     0,     0,     0,
-   258,     0,     0,  1334,     0,    21,     0,     0,     0,     0,
-     0,   258,   251,     0,     0,   638,     8,     9,    10,     0,
-    27,   319,     0,     0,     0,     0,   688,     0,     0,     0,
-     0,   339,     0,     0,     0,     0,     0,  1369,  1370,  1371,
-  1372,     0,     0,     0,   252,     0,     0,   214,   215,   216,
-   308,   639,    32,    21,    14,   688,     0,   908,     7,   127,
-   128,    10,     0,     0,    13,     0,    26,   688,   130,   131,
-   258,    18,     0,     0,     0,     0,    20,   220,   127,   128,
-     0,     0,     0,    13,     0,    23,    18,     0,     0,     0,
-   727,     0,     0,     0,   411,   413,    21,   733,     0,   726,
-  1407,   688,   519,   688,     0,   258,   726,     0,     0,    26,
-     0,    27,    28,     0,     0,     0,   212,     0,   220,   237,
-     0,   619,     0,     0,     0,    30,     0,     0,    26,   258,
-   130,   131,     0,   724,   728,    31,   744,   745,     0,   756,
-     0,   728,     0,    32,   620,     0,     0,     0,    33,     0,
-     0,   491,   215,   216,   621,     0,     0,     0,    14,     0,
-     0,     0,   220,   804,   622,     0,  1046,   623,   624,     0,
-     0,   339,   726,   140,   140,    18,   140,     0,  1467,     0,
-    20,     0,     0,     0,   493,     0,     0,   450,   688,    23,
-     0,     0,     0,     0,     0,   667,     0,     0,     0,     0,
-     0,     0,     0,     0,   212,     0,   339,   728,   940,     0,
-   450,  1487,     0,   702,   703,     0,   706,   688,     0,     0,
-     0,   258,     0,   857,     0,     0,     0,  1188,     0,   858,
-     0,     0,   726,   156,     0,     0,     0,     0,   726,   339,
-     0,   724,     0,     0,   833,   834,     0,   838,   839,   840,
-   841,   842,   843,   844,   845,   846,   847,   848,   849,   850,
-   851,   852,   853,   854,   855,   856,   912,   728,   726,   300,
-     8,     9,    10,   728,     0,   726,     0,     0,  1520,   258,
-     0,     0,     0,     0,   836,  1520,     0,     0,     0,     0,
-  1011,   584,   585,   586,   587,   588,   589,   590,   591,   592,
-     0,   421,  1324,   728,   557,     0,     0,    21,     0,     0,
-   728,     0,     0,     0,   251,     0,     0,     0,     0,     0,
-     0,  1062,    27,   319,     0,     0,     0,  1067,     0,   156,
-   156,   908,   925,   927,     0,     0,   471,   473,   477,   127,
-   128,     0,     0,   215,   216,     0,   521,     0,   339,    14,
-     0,     0,     0,     0,    32,     0,     0,  1240,     0,     0,
-   300,   394,   395,    10,     0,  1520,     0,     0,   237,   258,
-     0,    20,     0,   140,   140,   908,     0,     0,     0,     0,
-    23,  1595,   619,     0,     0,   477,     0,     0,     0,    26,
-     0,   130,   131,     0,     0,     0,   724,   258,    21,     0,
-     0,     0,     0,  1608,     0,   620,     0,     0,     0,     0,
-   836,    26,     0,    27,   319,   621,     0,  1046,     0,   116,
-   971,   972,   908,  1014,     0,   622,     0,     0,   630,   624,
-  1123,     0,  1124,     0,     0,     0,     0,     0,     0,     0,
-     0,  1025,     0,  1282,   726,    32,  1015,     0,     0,  1240,
-   628,   632,   635,  1016,     0,     0,   450,   450,     0,     0,
-     0,   339,   339,     0,   339,     0,     0,     0,     0,     0,
-    26,     0,   119,   120,     0,     0,     0,     0,     0,   728,
-     0,     0,     0,     0,   258,   450,     0,     0,     0,  1097,
-  1098,     0,     0,     0,     0,  1103,     0,     0,   726,   726,
-   258,  1088,     0,     0,   726,     0,     0,     0,     0,  1115,
-     0,  1116,     0,  1117,     0,     0,     0,     0,   726,     0,
-   726,     0,   726,     0,   300,   127,   128,    10,     0,     0,
-     0,     0,     0,   728,   728,     0,     0,     0,   724,   728,
-     0,     0,     0,   744,   745,   471,   473,   477,     0,   688,
-     0,   756,     0,   728,     0,   728,     0,   728,     0,  1145,
-     0,     0,    21,     0,     0,  1409,  1410,     0,   726,   251,
-  1037,  1038,     9,    10,   471,   473,   477,    27,   319,     0,
-   140,   140,   156,   156,   908,     0,     0,     0,   140,     0,
-     0,     0,     0,  1138,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   728,  1230,  1166,  1232,  1356,    21,    32,
-     0,   156,   156,   908,   726,     0,     0,     0,   339,     0,
-     0,    26,     0,    27,    28,     0,     0,  1208,     0,  1039,
-     0,  1162,     0,   726,     0,     0,     0,   193,     0,     0,
-     0,     0,   450,   450,     0,   450,   450,   194,   450,   728,
-     0,     0,     0,     0,     0,    32,     0,  1473,     0,     0,
-   195,  1263,   744,   745,     0,   756,     8,     9,   728,     0,
-    12,    13,     0,     0,     0,     0,    14,    80,     0,  1491,
-  1494,     0,     7,   127,   128,    10,     0,   104,   246,     0,
-    16,     0,    17,     0,     0,     0,     0,   133,    20,   140,
-   140,     0,   140,   144,   144,     0,   144,    23,    80,     0,
-    18,     0,  1215,     0,     0,    80,    26,     0,   130,   131,
-    21,     0,   886,   888,     0,     0,     0,     0,   203,     0,
-    80,     0,     0,    26,     0,    27,    28,     0,   238,   212,
-   220,  1340,     0,     0,     0,   104,  1344,     0,     0,    30,
-     0,     0,     0,     0,     0,   862,   262,   104,     0,    31,
-  1538,     0,   724,   724,     0,     0,  1243,    32,     0,     0,
-     0,     0,    33,   450,   450,     0,   258,     0,   258,   104,
-     0,     0,     0,     0,     0,     0,   339,   625,   625,   625,
-   951,     0,   628,   632,     0,   635,     0,  1381,     0,  1278,
-     0,  1279,     0,  1280,     0,     0,     0,   133,   726,    80,
-   726,     0,   726,   144,   144,     0,   477,     0,   412,   144,
-   258,     0,   144,   144,   144,     0,     0,     0,     0,     0,
-     8,     9,     0,     0,    12,   246,     0,   632,    80,     0,
-    14,     0,    80,   728,     0,   728,     0,   728,   203,    80,
-   214,   215,   216,   156,    16,   724,    17,    14,     0,     0,
-     0,     0,    20,     0,   724,   724,   203,   203,   203,   724,
-     0,    23,     0,   619,    18,   450,   450,   450,     0,    20,
-    26,     0,   130,   131,     0,     0,  1346,  1347,    23,   471,
-   473,   477,     0,     0,     0,   203,   620,     0,  1383,     0,
-  1458,  1459,     0,   918,     0,     0,   621,   726,     0,     0,
-     0,   724,   502,     0,   632,   258,   622,  1469,     0,   623,
-   624,   104,     0,     0,     0,     0,   156,   156,   156,     0,
-     0,     0,   144,     0,   450,   450,     0,     0,     0,    95,
-   110,   111,   728,   225,   226,   227,   579,   580,   581,   582,
-   583,   584,   585,   586,   587,   588,   589,   590,   591,   592,
-     7,   127,   128,    10,     0,     0,  1402,    18,     0,     0,
-   104,   530,   228,     0,     0,     0,  1505,  1506,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  1118,    18,  1119,
-     0,     0,   112,   113,     0,  1515,  1516,     0,    21,   258,
-  1125,     0,   450,     0,   886,   888,   724,     0,     0,     0,
-     0,    26,     0,    27,    28,   104,     0,     0,     0,   617,
-     0,   530,   530,   633,     0,  1448,   258,   149,     0,     8,
-     9,     0,    80,    12,    13,     0,     0,   150,     0,    14,
-     0,     0,     0,     0,     0,    32,     0,   724,   886,   888,
-   151,     0,     0,    16,     0,    17,     0,     0,     0,   625,
-   625,    20,   625,     0,   726,     0,   133,     0,     0,   906,
-    23,     0,     0,     0,     0,   104,     0,   203,   104,    26,
-     0,   130,   131,   602,     8,     9,     0,   258,    12,   246,
-     0,     0,   144,     0,    14,   144,     0,     0,     0,   728,
-     0,     0,     0,     0,     0,     0,     0,   144,    16,     0,
-    17,     0,     0,     0,     0,    80,    20,     0,   603,  1507,
-  1508,     0,     0,     0,     0,    23,     0,   625,  1513,   625,
-   625,     0,   625,     0,    26,     0,   130,   131,     0,     0,
-     0,     0,     0,   203,     0,   203,     0,   203,   203,   203,
-     0,     0,     0,   203,     0,     0,  1533,     0,   203,     0,
-     0,   203,   300,     8,     9,    10,     0,    12,   301,   302,
-   303,     0,   304,    14,   625,     0,     0,     0,     0,    80,
-     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
-    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,   619,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,   319,   104,   104,   104,
-   104,     7,     8,     9,    10,     0,   321,     0,     0,   902,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,   903,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,   622,
-     0,   625,   904,   624,     0,  1118,  1119,   886,   888,    21,
-     0,     0,     0,  1125,     0,   619,     0,     0,     0,   330,
-     0,     0,    26,     0,    27,    28,     0,   104,     0,   530,
-     0,     0,     0,     0,     0,   724,   886,   888,   946,     0,
-     0,   617,     0,   530,   530,     0,   633,     0,   947,     0,
-     0,     0,     0,   909,     0,     0,    32,   911,   622,     0,
-     0,   948,   624,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   203,     0,   625,     0,   625,     0,     8,     9,
-     0,   167,    12,    13,     0,     0,   732,   625,    14,     0,
-     0,   906,   906,   906,     0,     0,   133,     0,     0,     0,
-     0,     0,    16,   133,    17,    18,     0,     0,     0,     0,
-    20,   203,   953,   203,   203,   238,   633,     0,     0,    23,
-     0,   619,     0,     0,  1118,  1119,     0,  1125,    26,     0,
-   130,   131,     0,     0,     0,   625,   625,   625,     0,     0,
-     0,     0,     0,     0,   620,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   621,     0,     0,     0,   203,     0,
-     0,     0,   953,     0,   622,     0,     0,   623,   624,   203,
-   203,     0,   203,     0,     0,     7,     8,     9,    10,   214,
-   215,   216,     0,     0,   906,     0,    14,     0,     0,   133,
-     0,     0,    80,     0,    80,     0,     0,     0,     0,  1048,
-    80,    80,     0,    18,   127,   128,     0,    80,    20,   246,
-   104,     0,     0,    21,     0,     0,   104,    23,     0,   619,
-     0,     0,     0,   530,   530,   530,    26,     0,    27,    28,
-     0,     0,     0,     0,     0,   530,     0,     0,     0,     0,
-     0,     0,   946,     0,     0,     0,     0,   619,    83,     0,
-     0,     0,   947,     0,    26,     0,   130,   131,   106,     0,
-    32,     0,   622,     0,     0,   948,   624,   126,   134,     0,
-   620,     0,     0,     0,   145,   145,     0,   145,     0,    83,
-   621,     0,     0,     0,     0,     0,    83,     0,     0,     0,
-   622,     0,     0,   623,   624,     0,     0,     0,     0,   145,
-     0,    83,     0,     0,     0,     0,     0,     0,   530,   239,
-   530,     0,     0,     0,     0,     0,   248,   104,     0,     0,
-     0,   530,     0,   104,     0,   909,   909,   909,   248,     0,
-     0,     0,     0,  1132,     0,     0,     0,     0,     7,   127,
-   128,    10,   625,   625,   625,   625,   625,     0,     0,     0,
-   625,   580,   581,   582,   583,   584,   585,   586,   587,   588,
-   589,   590,   591,   592,     0,   104,    18,   104,     0,   203,
-   203,  1159,     0,   906,   906,   906,    21,     0,     0,     0,
-    83,     0,     0,     0,   145,   145,     0,     0,     0,    26,
-   145,    27,    28,   145,   145,   145,     0,     0,     7,     8,
-     9,    10,     0,     0,    13,    30,     0,     0,     0,    83,
-     0,     0,     0,    83,     0,    31,     0,     0,  1159,   145,
-    83,     0,     0,    32,     0,     0,    18,     0,    33,     0,
-     0,   104,     0,     0,     0,     0,    21,   145,   145,   145,
-     0,     0,   619,     0,     0,     0,     0,   104,     0,    26,
-  1048,    27,    28,     0,     0,     0,     0,     0,     0,   104,
-     0,   625,   625,     0,   625,   946,   145,     0,     0,     0,
-     0,     0,  1220,     0,     0,   947,     0,     0,     0,     0,
-     0,     0,    51,    32,    80,   622,     0,     0,   948,   624,
-     0,     0,     0,   104,     0,   104,     0,     0,     7,   127,
-   128,    10,     0,   145,    13,     0,     0,     0,    51,    51,
-     0,   152,     0,    51,     8,     9,     0,     0,    12,    13,
-    51,     0,     0,   104,    14,     0,    18,     0,   530,   530,
-     0,   530,     0,    51,     0,    51,    21,     0,    16,     0,
-    17,   248,   145,     0,     0,     0,    20,     0,     0,    26,
-     0,    27,    28,     0,     0,    23,     0,     0,   254,     0,
-     0,     0,     0,     0,    26,   149,   130,   131,     0,     0,
-     0,     0,     0,     0,     0,   150,   203,   203,   203,   203,
-  1159,     0,     0,    32,   203,     0,   248,     0,   151,     0,
-   618,     0,   145,   145,   634,     0,     0,     0,     0,   643,
-     0,     0,     0,    83,     0,     0,     0,  1159,  1159,  1159,
-     0,   396,   396,     0,    51,     0,     0,     0,    51,    51,
-     0,     0,   254,     0,    51,     0,     0,   152,   152,   152,
-     0,     0,     0,     0,   431,     0,     0,   680,     0,     0,
-   203,     0,     0,    51,     0,   144,   248,    51,   145,   248,
-     0,     0,     0,    51,    51,     0,     0,     0,     0,     0,
-     0,     0,     0,   145,     0,     0,   145,     0,     0,     0,
-     0,    51,    51,   152,     0,     0,     0,     0,   145,     0,
-     0,   254,     0,     0,     0,     0,    83,     0,     0,     0,
-     0,     0,     0,     0,     0,   203,   203,     0,   203,     0,
-    51,   581,   582,   583,   584,   585,   586,   587,   588,   589,
-   590,   591,   592,     0,   145,     0,   145,     0,   145,   145,
-   145,     0,     0,     0,   145,     0,     0,     0,     0,   145,
-     0,     0,   145,     0,   203,   953,   203,    51,     0,   764,
-     0,     7,     8,   765,    10,   167,    12,    13,     0,     0,
-    83,     0,    14,   104,     0,     0,     0,     0,     0,     0,
-     0,  1037,  1038,     9,    10,     0,    16,     0,    17,    18,
-    19,     0,     0,     0,    20,  -526,     0,     0,     0,    21,
-     0,     0,     0,    23,   766,     0,   168,     0,   248,   248,
-   248,   248,    26,     0,    27,    28,     0,     0,   767,    21,
-   768,     7,     8,     9,    10,     0,     0,   558,    30,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,    31,     0,
-  1039,     0,     0,     0,   396,     0,    32,     0,   193,     0,
-     0,    33,   254,     0,     0,     0,     0,    51,   194,    21,
-     0,     0,     0,     0,     0,     0,    32,  -526,   248,  1159,
-   145,   195,    26,     0,    27,    28,     0,     0,   192,     0,
-     0,     0,     0,     0,   145,   145,     0,   634,   193,     0,
-     0,   396,     0,     0,   910,     0,     0,     0,   194,     0,
-     0,     0,    51,     0,     0,     0,    32,   643,     0,     0,
-     0,   195,     0,   145,     0,     0,     0,    51,     0,     0,
-    51,     0,     0,     0,     0,     0,   431,   431,   431,     0,
-     0,     0,    51,     0,     0,     0,     0,   680,    76,     0,
-    51,     0,  1159,  1159,  1159,   126,     0,     0,     0,     0,
-     0,     0,   145,   634,   145,   145,   239,   634,     0,     0,
-     0,   104,     0,     0,     0,     0,   203,     0,    51,    76,
-    51,     0,   152,   152,   152,     0,    76,     0,    51,     0,
-   983,     0,     0,    51,     0,     0,    51,     0,     0,   201,
-     0,   213,     0,     0,     0,     0,     0,     0,     0,   145,
-     0,     0,     0,   634,    51,     0,     0,     0,     0,     0,
-   145,   145,     0,   145,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   983,     0,     0,
-   134,     0,     0,    83,   558,    83,     0,   558,     0,     0,
-  1049,    83,    83,     0,     7,     8,     9,    10,    83,     0,
-   246,   248,   558,   558,   558,     0,     0,   248,     0,     0,
-     0,     0,     0,     0,   145,   145,   145,   558,     0,     0,
-   407,     0,    18,     0,   410,     0,   145,     0,     0,     0,
-     0,     0,    21,     0,     0,     0,     0,     0,   619,     0,
-     0,     0,     0,     0,     0,    26,     0,    27,    28,    76,
-     0,     0,     0,    76,     0,     0,     0,   127,   128,   201,
-   213,   946,   518,     0,     0,   254,     0,     0,     0,     0,
-     0,   947,     0,     0,     0,     0,     0,     0,   558,    32,
-     0,   622,     0,     0,   948,   624,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    51,     0,   145,
-   619,   145,     0,     0,     0,     0,   201,    26,   248,   130,
-   131,     0,   145,     0,   248,     0,   910,   910,   910,     0,
-     0,   396,     0,   620,   643,   127,   128,     0,   396,   215,
-   216,     0,     0,   621,     0,    14,    51,    51,    51,    51,
-     0,     0,     0,   622,     0,     0,   623,   624,     0,     0,
-   259,     0,     0,     0,     0,     0,   248,    20,   248,     0,
-   145,   145,   634,     0,     0,     0,    23,     0,   619,     0,
-     0,     0,     0,     0,     0,    26,     0,   130,   131,     0,
-     0,     0,     0,    51,     0,     0,     0,    51,     0,     0,
-     0,   620,     0,     0,    51,    51,     0,    51,     0,     0,
-     0,   621,     7,     8,     9,    10,   214,   215,   216,   910,
-     0,   622,     0,    14,   623,   624,     0,    51,     0,    51,
-     0,     0,   248,     0,    51,    51,    51,   434,     0,     0,
-    18,     0,    51,     0,     0,    20,     0,     0,   248,     0,
-    21,  1049,     0,   651,    23,     0,   619,     0,     0,     0,
-   248,     0,     0,    26,   558,    27,    28,     0,     0,   469,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   946,
-     0,     0,   485,     0,     0,    83,     0,     0,     0,   947,
-     0,     0,     0,     0,   248,     0,   248,    32,   201,   622,
-     0,     0,   995,   624,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     7,     8,     9,
-    10,   167,    12,    13,   248,     0,  1000,     0,    14,   145,
-   145,     0,   145,     0,     0,     0,    76,     0,     0,     0,
-     0,     0,    16,     0,    17,    18,     0,     0,     0,     0,
-    20,     0,     0,     0,     0,    21,     0,     0,     0,    23,
-   558,   558,   558,     0,     0,     0,   431,   254,    26,     0,
-    27,    28,     0,     0,   201,     0,     0,   145,   145,   145,
-   145,   634,   201,     0,    30,   145,    78,     0,     0,     0,
-     0,     0,   983,     0,    31,     0,     0,     0,     0,     0,
-   781,     0,    32,     0,    51,    51,   152,    33,   910,   910,
-   910,   254,    78,    78,     0,    78,     0,    78,     0,     0,
-     0,     0,     0,     0,    78,     0,     0,     0,     0,   983,
-     8,     9,     0,   167,    12,    13,     0,    78,     0,    78,
-    14,   145,     0,     0,     0,     0,   145,     0,     0,     7,
-     8,     9,    10,  1187,    16,    13,    17,    18,     0,     0,
-     0,     0,    20,     0,     0,     0,     0,     0,     0,     0,
-     0,   681,     0,     0,   168,     0,     0,    18,     0,     0,
-    26,     0,   130,   131,     0,    51,     0,    21,     0,     0,
-     0,     0,     0,     0,     0,     0,   145,   145,     0,   145,
-    26,     0,    27,    28,     0,     0,   254,     0,     0,     0,
-     0,     0,     7,     8,     9,    10,   193,     0,    78,    51,
-     0,     0,    78,    78,  1413,     0,   194,     0,    78,     0,
-     0,    78,    78,    78,    32,   145,   634,   145,     0,   195,
-    18,     0,     0,   201,     0,     0,     0,    78,     0,     0,
-    21,    78,     0,     0,   248,     0,   749,    78,    78,     0,
-   983,   755,     0,    26,     0,    27,    28,     0,     0,     0,
-     7,     8,     9,    10,     0,    78,    78,    78,     0,   474,
-     0,     0,   201,   952,   201,   201,     0,     0,   786,   475,
-   254,     0,     0,     0,   792,     0,   159,    32,     0,     0,
-     0,     0,   476,     0,    78,     0,   800,   801,    21,   802,
-     0,    51,    51,   152,   152,   152,     0,   254,   204,    51,
-     0,    26,     0,    27,    28,     0,     0,  1420,     0,   201,
-     0,     0,     0,  1001,     0,     8,     9,   193,   205,    12,
-   206,    78,  1187,  1187,  1187,    14,     0,   194,     0,     0,
-   910,     0,     0,     0,     0,    32,     0,     0,     0,    16,
-   195,    17,    18,   781,     0,   781,     0,    20,     0,     0,
-  1047,  1054,   781,     0,     0,    51,    23,     0,   781,     0,
-    51,     0,     0,     0,     0,    26,     0,   130,   131,     0,
-     0,     0,     0,     0,     0,     0,     0,     7,     8,     9,
-    10,     0,     0,     0,   897,   898,     0,     0,     0,   897,
-     0,     0,   159,   159,   159,     0,     0,     0,     0,     0,
-     0,     0,     0,   910,   910,   910,     0,     0,     0,     0,
-    51,    51,     0,    51,     0,    21,     0,   642,   204,     0,
-     0,    78,   248,     0,     0,     0,     0,   145,    26,     0,
-    27,    28,     0,     0,     0,     0,   204,   204,   478,     0,
-     0,     0,     0,     0,   193,     0,     0,     0,     0,    51,
-    51,    51,     0,     0,   194,     0,     0,     0,     0,     0,
-     0,     0,    32,     0,     0,   204,    78,   195,     0,     0,
-     0,     0,     0,     0,   202,     0,  1350,  1351,     9,    10,
-     0,    78,     0,     0,    78,     0,     0,     0,     0,     0,
-   369,   371,     0,     0,     0,     0,    78,     0,     0,   257,
-     0,     0,   261,     0,    78,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    21,     0,     0,     0,     7,     8,
-     9,    10,     0,   257,    13,   365,     0,    26,     0,    27,
-    28,     0,    78,     0,    78,  1352,    78,    78,    78,     0,
-     0,   531,    78,   193,     0,     0,    18,    78,     0,     0,
-    78,     0,  1069,   194,  1071,     0,    21,     0,     0,     0,
-     0,    32,   619,     0,  1187,     0,   195,     0,    78,    26,
-     0,    27,    28,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,  1155,     0,     0,     0,     0,
-     0,   627,   627,   627,   202,  1156,     0,     0,     0,     0,
-     0,  1047,     0,    32,     0,   622,     0,     0,  1157,   624,
-     0,     0,   202,   202,   202,     0,     0,     0,     0,     0,
-     0,     0,   484,     0,     0,     0,  1105,  1106,     0,  1108,
-     0,     0,     0,     0,     0,   781,     0,  1187,  1187,  1187,
-     0,   202,     0,     0,     0,     0,     0,   204,     0,     7,
-     8,     9,    10,   167,    12,    13,     0,  1126,     0,     0,
-    14,    51,     0,     0,     0,     0,     0,   261,     0,     0,
-     0,     0,     0,     0,    16,     0,    17,    18,    19,     0,
-   642,   257,    20,     0,     0,     0,     0,    21,     0,     0,
-     0,    23,     0,     0,   168,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     0,     0,     0,     0,  1161,     0,
-     0,    78,   561,   204,     0,   204,    30,   478,   478,   478,
-     0,     0,     0,   204,     0,     0,    31,     0,   204,     0,
-     0,   204,     0,     0,    32,     0,     0,     8,     9,    33,
-   167,    12,    13,     0,    34,   732,     0,    14,     0,     0,
-    78,    78,    78,    78,     0,     0,     0,     0,     0,     0,
-     0,    16,     0,    17,    18,  1350,   127,   128,    10,    20,
-     0,     0,     0,   257,   261,     0,     0,     0,    23,     0,
-     0,  1206,     0,     0,     0,   687,     0,    26,     0,   130,
-   131,  1357,     0,  1211,     0,     0,  1357,    78,     0,     0,
-     0,    78,     0,    21,     0,     0,     0,     0,    78,    78,
-     0,    78,     0,     0,     0,     0,    26,     0,    27,    28,
-     0,     0,     0,   202,  1352,     0,     0,     0,     0,     0,
-     0,    78,    30,    78,     0,     0,     0,     0,    78,    78,
-    78,     0,    31,     0,     0,     0,    78,     0,     0,   871,
-    32,   734,     0,     0,     0,    33,     0,     0,     0,     0,
-     0,     0,     0,   627,   627,     0,   627,     0,     0,     0,
-     0,     0,     0,   627,     0,     0,     0,     0,     0,  1262,
-     0,     0,     0,     0,     0,   201,  1425,   201,     0,   202,
-     0,   202,   204,   202,   202,   202,     0,     0,     0,   202,
-     0,     0,     0,     0,   202,     0,     0,   202,     0,     7,
-     8,     9,    10,     0,     0,   518,     0,     0,  1275,   805,
-     0,     0,   808,     0,     0,     0,   810,   811,   813,   814,
-   815,   950,     0,   950,   950,     0,   627,    18,     0,   561,
-     0,     0,     0,     0,     0,     0,     0,    21,     0,     0,
-     0,     0,   832,   619,     0,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     0,     0,     0,     0,     0,     0,
-     0,     0,   642,     0,     0,     0,   946,     0,   950,     0,
-     0,     0,     0,  1365,     0,     0,   947,  1366,     0,   204,
-   204,     0,   204,     0,    32,     0,   622,     0,     0,   948,
-   624,     0,     0,     0,     0,     0,   889,     0,    78,    78,
-    78,     0,     0,   889,     0,     0,     0,     0,     0,   204,
-     0,     0,  1382,     0,     0,     0,     0,     0,     0,   764,
-     0,     7,     8,   765,    10,   167,    12,    13,     0,     0,
-     0,     0,    14,   531,   531,   531,     0,     0,     0,     0,
-     0,     0,   257,   261,     0,   627,    16,  1189,    17,    18,
-    19,     0,     0,     0,    20,  -527,     0,     0,   202,    21,
-     0,     0,     0,    23,   766,     0,   168,     0,     0,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,   767,    78,
-   768,     0,     0,     0,     0,     0,     0,   201,    30,  1441,
-     0,     0,     0,  1442,     0,     0,     0,   202,    31,   202,
-   202,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-     0,    33,   687,    78,     0,  1460,  1461,     0,   627,     0,
-   627,     0,     0,     0,     0,     0,     0,  -527,     0,     0,
-     0,   627,     0,     0,     0,   627,   627,   627,     0,     0,
-     0,     0,     0,     0,   202,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   202,   202,     0,   202,     0,
-   734,     0,     0,     0,     0,     0,   734,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   950,
-   950,  1160,     0,     0,     0,   202,     0,     0,     0,     0,
-     0,     7,     8,     9,    10,   167,    12,    13,     0,     0,
-   732,     0,    14,     0,     0,    78,    78,    78,    78,    78,
-     0,     0,     0,    78,     0,     0,    16,     0,    17,    18,
-     0,     0,     0,     0,    20,     0,     0,     0,  1160,    21,
-     0,     0,     0,    23,  1099,   619,  1189,  1189,  1189,  1483,
-     0,     0,    26,     0,    27,    28,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,  1155,     0,
-   204,     0,     0,     0,     0,     0,     0,   832,  1156,    78,
-     0,     0,     0,   734,    78,     0,    32,   889,   622,     0,
-     0,  1157,   624,     0,     0,     0,     0,     0,     0,  1484,
-   571,   572,   573,   574,   575,   576,   577,   578,   579,   580,
-   581,   582,   583,   584,   585,   586,   587,   588,   589,   590,
-   591,   592,     0,     0,     0,   687,     0,  1151,   257,   261,
-   257,   889,     0,     0,    78,    78,     0,    78,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   871,   871,
-     0,   871,     0,     0,     0,     7,   127,   128,    10,     0,
-     0,   518,     0,     0,     0,   202,   202,  1158,     0,     0,
-   102,     0,   257,    78,    78,    78,     0,     0,   889,   121,
-   102,     0,     0,    18,     0,     0,   102,   102,     0,   102,
-     0,  1193,     0,    21,     0,     0,   950,   950,  1160,  1160,
-  1160,     0,   261,     0,   950,     0,    26,   734,    27,    28,
-     0,     0,     0,     0,  1158,     0,     0,     0,     0,   734,
-     0,   235,    30,     0,     0,     0,     0,  1160,  1160,  1160,
-     0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-    32,     0,     0,     0,     0,    33,   202,     0,     0,     0,
-     0,     0,     0,   734,     0,   734,     0,     0,     0,     0,
-   204,     0,     0,     0,     0,     0,     0,   484,     0,     0,
-     7,     8,     9,    10,   214,   215,   216,     0,     0,     0,
-   389,    14,   121,  1248,     0,     0,     0,     0,  1189,   102,
-   102,     0,     0,     0,     0,     0,   102,   102,    18,     0,
-   102,   102,   102,    20,   417,   102,   102,   102,    21,     0,
-     0,     0,    23,     0,   619,   950,   950,     0,   950,     0,
-     0,    26,     0,    27,    28,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   193,     0,     0,
-   889,     0,     0,     0,     0,     0,     0,   194,     0,     0,
-     0,   257,     0,     0,   204,    32,   204,     0,     0,     0,
-  1426,  1189,  1189,  1189,     0,     0,     0,     0,     0,   889,
-     0,     0,   202,   202,   202,   202,  1158,     0,  1274,     0,
-   202,     0,     0,  1335,     0,    78,     0,     0,     0,     0,
-     0,     0,     0,     0,   235,   102,     0,     0,     0,     0,
-     0,     0,     0,  1158,  1158,  1158,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   102,     0,     0,     0,     0,
-   764,     0,     7,     8,   765,    10,   167,    12,    13,     0,
-     0,     0,     0,    14,     0,     0,   202,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,     0,    17,
-    18,    19,     0,     0,   102,    20,  -529,     0,     0,     0,
-    21,     0,     0,     0,    23,   766,     0,   168,     0,   478,
-     0,     0,     0,    26,     0,    27,    28,     0,     0,   767,
-     0,   768,     0,     0,     0,     0,     0,     0,     0,    30,
-     0,   202,   202,     0,   202,     0,     0,     0,     0,    31,
-     0,     0,   102,     0,   102,   102,     0,    32,     0,     0,
-     0,     0,    33,  1193,     0,     0,     0,     0,     0,     0,
-     0,     8,     9,     0,   167,    12,    13,     0,  -529,  1551,
-   202,    14,   202,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   478,   478,   478,    16,     0,    17,    18,   102,
-     0,     0,     0,    20,     0,     0,     0,     0,     0,     0,
-     0,     0,    23,     0,     0,     0,   204,     0,   102,     0,
-     0,    26,     0,   130,   131,   102,     0,     0,   102,     0,
+   443,   435,   487,   122,   445,    36,   420,   423,   711,   444,
+   658,   712,   392,   256,  1019,   432,   224,    72,   532,   648,
+   771,   253,   657,    76,   709,   738,   103,    42,   400,  1118,
+    59,   784,   298,   786,   182,   857,    36,    59,   196,   991,
+   525,   816,   486,   141,   146,   356,  1016,   357,    72,   554,
+   557,   494,   209,    58,    76,    72,   398,   399,    42,   926,
+   742,    76,   896,   949,   249,    42,   926,   247,   688,   391,
+   174,   492,   495,   177,   201,   727,   213,   256,    35,   296,
+   397,    57,   587,   349,    58,   349,   626,   349,  1478,   544,
+  1428,    58,   408,  1056,   224,   260,  1530,   297,  1443,   170,
+   171,  1534,   349,   349,  1027,  1446,   899,   190,   163,    35,
+   224,   208,    57,   626,   626,   467,   169,   998,   364,   176,
+   662,   663,   661,   900,  1600,  1535,    89,   308,  1193,   977,
+    91,   406,   349,   295,   349,    -1,   256,  1567,  1558,   580,
+  1544,   581,   544,    26,   813,   978,    90,   855,   164,    72,
+    92,  1028,   901,  1387,  1029,   407,  -828,  1555,   196,   410,
+    59,   468,   419,   422,    59,   735,   224,   155,    -2,   780,
+  1601,   209,   717,   718,   224,  1059,   452,  1589,    72,   928,
+   558,   559,    72,  1568,    76,    58,   517,  1064,    76,   997,
+   403,   224,    42,   440,   201,   213,   567,   174,  1581,   568,
+   177,   490,   569,   539,  1194,   579,   470,   472,   190,   584,
+   724,  1004,  1597,   405,    58,  1080,   814,   625,    58,  -302,
+  1612,  1085,   736,  1560,    15,   842,   170,   171,  -415,  1199,
+   208,  1558,   776,  -356,  -356,  1065,    88,   453,   453,  1027,
+    59,   201,    57,   169,   789,    15,   176,    88,   535,  -415,
+  1532,   705,  1538,   190,  1478,  -625,  -415,  -415,    72,   178,
+   260,  -415,    86,    93,   524,  -302,  -302,  1593,   820,   632,
+   454,   454,   300,   394,   395,    10,   221,   790,  -415,  1200,
+  -295,   791,  -415,   155,   155,   155,  1028,   696,   732,  1029,
+   623,   374,   247,   631,    58,  1225,  1226,   375,  1565,   514,
+   759,  -625,  -625,   158,  1220,  1020,  1166,   116,   117,   118,
+    21,    87,  1247,   664,   792,   658,  -625,   705,    38,   511,
+   774,   976,   519,    26,   349,    27,   319,  -415,  1144,   155,
+   691,   420,   423,   817,  1221,   856,   963,   296,    94,  1117,
+   492,   495,     8,     9,  1598,   247,    12,    13,   492,    38,
+  1292,   107,    14,   349,   667,   297,   108,    32,   926,   583,
+   119,   120,   711,  1002,  1003,  1038,    16,   260,    17,  1353,
+  -583,   109,    72,   138,    20,   580,    39,   581,   668,   495,
+  1404,  1404,   818,    23,   967,   964,   178,   714,   127,   128,
+  1622,   295,    26,   139,   130,   131,   532,   708,   495,  1293,
+   209,  1388,   926,   135,   224,   215,   216,    39,    58,   137,
+  -304,    14,   533,   665,   162,   710,  -583,   189,  1354,   158,
+   158,   158,   648,   201,  1151,   699,   221,  1154,   950,  1405,
+  1509,   897,  1169,    20,   221,   221,   405,    59,    26,  1623,
+   130,   131,    23,   161,   636,   567,   568,   224,  1215,   926,
+   179,   707,   517,   778,   517,    72,  -304,  -304,   534,   153,
+   517,    76,   517,   752,   221,   158,  1367,   183,  1180,  1181,
+   729,  -298,   610,   177,  1146,  1373,  1374,   653,  1375,   793,
+  1254,   710,  1256,   610,   777,   831,    18,   763,   764,   705,
+   841,    58,   244,   349,   366,   370,   705,   636,  1016,   201,
+  1119,   799,   787,   788,   459,   838,    59,   201,    59,  -365,
+    40,    15,   819,   221,   209,   914,    59,   707,   611,   176,
+  1474,   460,   187,   654,    72,   794,    72,   377,   916,   611,
+   524,   832,   524,    55,    72,  1056,   188,   805,   812,   129,
+   524,    40,  -365,   841,  -295,   349,  -365,    90,   349,    26,
+   461,   349,  1423,  1001,   299,   349,   847,   847,   847,   847,
+    58,   915,    58,   138,    55,   514,   221,   514,   349,   623,
+    58,   175,   798,   808,   917,   514,   421,   424,   349,  -365,
+   360,   349,  1032,   711,   696,   511,   712,   511,   519,  1192,
+   519,   973,  -583,   926,   378,   511,   362,   816,   519,   709,
+   658,   372,  1093,   376,  -366,   705,    15,   380,   155,   155,
+   155,  -120,   657,    15,    92,   636,   296,   381,  -143,   401,
+   972,   153,   926,   221,  -295,  1289,  1290,   918,   492,  1033,
+   137,   705,  1034,  1614,   297,   708,   934,  -366,  -583,   482,
+   544,  -366,   752,   705,  -120,   425,  1368,   970,  -120,   952,
+   920,   922,   189,   710,   138,    95,   110,   111,    88,   178,
+   710,   841,  -144,   260,  1278,   404,    95,   414,   415,   433,
+   295,   705,  1056,   919,  -366,   147,  1273,   705,   122,  1615,
+   240,  -120,   935,   936,   241,   201,   587,   349,   984,   707,
+   989,   990,  1513,  1514,    55,  1042,   707,   899,   175,  -620,
+  -118,   209,    15,   221,   221,   247,  1262,  1264,   112,   113,
+   303,   221,   661,  1017,   900,  1216,   574,  1218,  1186,    98,
+   113,  1222,   215,   216,   201,   987,   201,   201,    14,   214,
+   215,   216,  1420,  -118,  1165,   990,    14,  -118,    -7,   256,
+   164,  1043,   221,   901,   158,   158,   158,   253,  1188,   447,
+    20,   708,  1190,    18,  1426,   576,   517,  1480,    20,    23,
+  1576,   221,  1274,  1275,  1187,  1277,   137,    23,   799,   710,
+  -118,   201,     8,   537,   518,  1036,   448,   708,  1081,  1082,
+   451,  1083,   715,  1127,   705,   411,  1068,   463,   705,   708,
+   413,   842,  1070,  1071,  1189,   710,  1068,  1073,  1191,  1264,
+  1071,   464,   432,  1481,   805,   707,  1577,   710,  1349,  1351,
+    59,   567,   568,  1355,   127,   128,   363,   708,   349,   349,
+   379,   349,   498,   708,   130,   131,   705,   503,    72,  1182,
+   527,   707,   705,   540,   524,   710,   769,    91,   147,   798,
+   137,   710,   542,   707,   775,  1249,  1250,  1251,   538,  1590,
+    15,   541,   746,   781,  -415,   421,   722,    92,   363,   561,
+    91,  1385,   222,   223,    58,   543,   130,   131,   551,   514,
+   562,   707,   560,    95,   110,   111,   528,   707,   300,   705,
+    92,    10,  -415,  -415,   221,  1359,  1360,  1361,   666,   511,
+   538,   349,   519,   829,   222,   446,  1121,   224,   563,   782,
+    91,   421,   424,   536,   392,   564,    18,   583,     7,     8,
+   250,    10,    95,    96,    97,   449,    21,  1090,  1091,  1092,
+    92,   256,   480,   481,   847,   221,   112,   113,   114,   626,
+   708,   426,   427,   675,   752,   672,   705,   676,   705,   830,
+   574,   488,   489,   574,   678,   428,    21,   844,   710,   679,
+   920,   922,   710,   251,   692,   429,  1449,   260,   480,   730,
+   574,    27,    28,    32,   680,    98,    99,   693,   430,   221,
+    90,   175,   708,   574,   847,   349,    92,   871,   708,   576,
+   721,  1484,   576,    -6,   707,   252,  1472,   747,   707,   765,
+   710,   221,   725,    32,  1170,  1171,   710,  1501,   421,   852,
+   699,   770,  1279,     8,     9,   894,   842,    15,   382,   383,
+   384,   910,   576,   539,   823,   127,   128,   824,   517,    89,
+   535,   488,   731,   705,   825,   752,   707,  1066,   826,   420,
+   423,   833,   707,   300,   394,   395,    10,   834,   847,    90,
+   518,   851,   785,   710,   853,  1392,   854,   363,   736,    89,
+   518,   911,   705,   385,   856,   130,   131,  -141,   420,   423,
+   913,   386,   387,   719,   221,    26,   720,   130,   131,    90,
+   927,    21,    59,   942,   929,   567,   568,   955,   723,   707,
+  1484,   903,   708,  -183,   708,  1281,    27,   319,  1240,   931,
+    72,   904,   956,  1240,  1402,  1403,   524,  1484,   137,  -183,
+   710,  -183,   710,   127,   128,   905,     8,     9,   965,   256,
+   608,   609,   847,    91,   411,   969,   413,   155,    32,   480,
+  1503,  -142,  1573,   127,   128,   349,    58,   711,   966,   536,
+  1551,   514,   971,    92,   488,  1504,   707,    20,   707,    95,
+    96,    97,   979,   225,   226,   227,   980,   363,   480,  1508,
+   363,   511,  1484,  -298,   519,   130,   131,   993,   130,   131,
+   738,   999,   453,  1436,   155,  1017,  1000,    18,  1434,   708,
+  1439,  1024,   228,    26,  1025,   130,   131,     8,     9,   252,
+    89,  -579,   252,  1048,  -579,  1295,  1296,   710,  1369,   903,
+    26,  1336,    98,    99,   229,   842,  1026,  1328,   752,   904,
+    90,   579,  1031,  -827,     7,     8,     9,    10,  1040,    72,
+    13,  1616,   349,   905,  1295,  1296,   710,    89,    91,   931,
+  1044,  1045,  1075,   707,  1069,  1407,  1408,  1371,  1372,   130,
+   131,  -579,    18,  -579,  -579,  1074,  -579,    90,    92,   230,
+   231,   232,    21,  1094,  1099,    58,   -52,  -579,   636,  -579,
+  1095,   -52,   707,   158,  1096,    26,  1097,    27,    28,  1098,
+  1100,   498,   -52,  1101,  1102,  -579,  -579,   942,   127,   128,
+  1327,   981,  -140,  1335,  1103,  1104,   140,   140,  1106,   156,
+  -579,   982,   603,   604,   605,   606,   607,   608,   609,    32,
+  1107,   639,  1124,  1113,   983,   641,  1110,  1126,  1109,  1111,
+   158,  1112,  1129,   212,  1130,   220,   155,   155,   155,  1128,
+  1131,   237,  1164,     7,   127,   128,    10,  1433,   544,  1433,
+   130,   131,  1336,  1137,  1139,  1138,   574,  1147,  1148,  1145,
+   209,  1150,  1336,  1157,  1160,   155,   155,   155,  1328,  1336,
+    72,  1163,  1543,  1185,   518,  1328,  1208,  1214,   847,  1217,
+    72,    21,  1219,   201,  1437,   201,  1224,    72,   251,    95,
+   110,   111,   420,   423,   421,   852,    27,    28,   460,  1228,
+   705,     8,     9,  1248,  1252,  1570,    58,   127,   128,   567,
+   568,  1257,  1258,  1259,  -304,  1260,    58,   140,  1265,  1267,
+   252,  1280,   140,    58,  1268,   156,   156,   156,    32,  -304,
+  1291,  1327,  1269,  -304,  1335,  1272,  1276,   719,   720,   153,
+   723,  1327,   112,   113,  1335,   363,  1282,   129,  1327,  -304,
+  1283,  1335,   212,   130,   131,   490,  1284,    26,   450,   130,
+   131,  -304,  -304,  1287,  -304,  1288,  -304,  1294,  1299,   140,
+   140,   156,   158,   158,   158,  1193,  1348,   538,  -662,  1379,
+   214,   215,   216,  1380,  1386,   220,  1205,    14,  1390,  1396,
+    95,    96,    97,   493,   220,  -304,  -304,  1391,  1406,  1397,
+  1398,   158,   158,   158,    18,  1399,  1525,  1415,  1416,    20,
+  -304,  1336,  1336,  1525,  1417,  1429,  1336,  1328,    23,  1431,
+  1444,   375,  1328,  1447,   297,  1005,  1006,  1007,  1450,    72,
+    72,   297,   349,   953,    72,   140,  1451,  1468,  1469,  1554,
+  1047,    26,  1470,    98,    99,   100,   708,  1471,   763,   764,
+  1061,  1062,  1476,  1336,  1487,  1488,  1492,   127,  1243,  1328,
+   295,  1494,  1336,  1495,   710,    58,    58,   295,  1328,  1008,
+    58,    72,  1574,  1502,  1520,   201,    26,  1076,  1009,  1010,
+    72,  1521,  1078,   221,  1529,  1539,  1525,  1540,  1545,  1547,
+  1327,  1327,  1553,  1335,  1335,  1327,  1562,  1563,  1335,  1571,
+   707,   363,   155,  1572,   297,   156,  1584,    58,  1336,   130,
+   131,  1588,  1595,  1599,  1328,  1011,    58,  1618,  1596,  1602,
+   574,   605,   606,   607,   608,   609,    72,  1604,  1609,   421,
+   424,  1605,  1327,   538,  1357,  1335,   518,  1613,  1617,   612,
+   295,  1327,  1620,  1625,  1335,   339,  1336,   339,  1626,   339,
+  1628,  1629,  1328,     1,     5,   442,   147,   160,   421,  1347,
+  1499,   968,    58,  1167,    72,   127,   128,   441,   728,   155,
+   155,   155,   439,   809,  1381,  1382,  1383,  1384,   613,   614,
+  1300,   212,   220,   615,   616,   617,   618,  1327,  1569,   500,
+  1335,   359,   127,   128,   339,   140,   339,    13,   140,  1483,
+    58,   409,  1624,  1389,   156,   156,   156,   550,  1159,  1023,
+   140,     7,     8,     9,    10,    26,  1158,   130,   131,   505,
+   811,   127,   128,  1452,  1362,  1327,   535,  1245,  1335,  1077,
+  1156,   545,   958,   127,   128,   636,   898,  1419,   158,   483,
+   633,   546,    26,   390,   130,   131,   140,  1442,   140,    21,
+   156,   156,   156,  1345,  1591,   450,   251,  1603,   637,  1566,
+   258,   140,   493,   220,    27,    28,   450,     0,   638,  1608,
+   493,    26,   221,   130,   131,  1610,   636,  1207,   639,  1448,
+     0,   640,   641,    26,   258,   130,   131,   545,   252,    95,
+   110,   111,   529,     0,     0,   212,    32,   546,     0,   637,
+     0,     0,   450,     0,  1473,   158,   158,   158,  1046,   638,
+     0,     0,     0,   258,     0,     0,     0,     0,     0,   639,
+     0,     0,   640,   641,   258,     0,     0,    21,     0,   156,
+  1231,  1232,   156,  1241,  1242,     0,  1244,  1493,   116,  1006,
+  1007,     0,   112,   113,   411,   413,     0,   156,   156,   156,
+     0,   744,   536,     0,     0,     0,     0,  1079,   750,     0,
+     0,     0,   156,  1084,     0,     0,   506,     0,     7,     8,
+   507,    10,   167,    12,    13,     0,     0,   565,     0,    14,
+   116,  1006,  1007,   258,    95,   110,   111,     0,   225,   226,
+   227,   119,   120,    16,  1205,    17,    18,    19,  1523,     0,
+     0,    20,     0,     0,   871,  1523,    21,  1050,     0,     0,
+    23,   508,    18,   168,     0,   339,     0,   228,   258,    26,
+     0,    27,    28,   943,   574,   509,     0,   510,     0,     0,
+     0,    26,   743,   119,   120,    30,     0,   112,   113,   743,
+     0,   839,   258,   220,     0,    31,   101,     0,     0,     0,
+     0,     0,     0,    32,   115,     0,     0,     0,    33,    95,
+   110,   111,   421,  1347,     0,     0,  1140,     0,  1141,   719,
+   720,     0,   723,     0,   645,   649,   652,     0,  1523,     0,
+     0,     0,   212,     0,   220,   237,     0,     0,     0,     0,
+     0,     0,  1365,  1366,  1594,     0,     0,   233,    95,   110,
+   111,   892,   681,   682,   683,     0,     0,   893,     7,   127,
+   128,    10,   112,  1496,    13,     0,  1607,   741,   745,    95,
+   110,   111,   743,   871,     0,   745,     0,     0,   220,     0,
+   655,     8,     9,    10,   258,     0,    18,     0,     0,   140,
+   140,     0,   140,     0,   947,     0,    21,     0,     0,     0,
+   493,   112,   113,   450,     0,   339,   388,     0,     0,    26,
+     0,    27,    28,   450,   450,   308,   656,   783,    21,     0,
+   369,   371,   112,  1498,     0,    30,   116,   117,   118,     0,
+   416,    26,   743,   130,   131,    31,     0,     0,   743,     0,
+   450,     0,   258,    32,  1223,   450,     0,     0,    33,  1227,
+     0,     0,     0,     0,     0,     0,     0,   339,   745,     0,
+     0,     0,     0,     0,     0,     0,     0,   156,   743,     0,
+     0,     0,  1253,     0,  1255,   743,     0,    26,     0,   119,
+   120,     0,     0,  1457,  1458,  1459,     0,     0,     0,     0,
+   339,     0,   741,     0,     0,   868,   869,     0,   873,   874,
+   875,   876,   877,   878,   879,   880,   881,   882,   883,   884,
+   885,   886,   887,   888,   889,   890,   891,     0,   745,     0,
+   499,   501,     0,     0,   745,     0,     0,     0,     0,  1286,
+     0,     0,   258,   530,     7,     8,     9,    10,   214,   215,
+   216,   300,     8,     9,    10,    14,     0,     0,     0,     0,
+     0,    95,    96,    97,   745,     0,     0,     0,     0,     0,
+     0,   745,    18,   156,   156,   943,     0,    20,  1511,  1512,
+     0,     0,    21,     0,     0,     0,    23,   258,   636,    21,
+   382,   383,   384,   960,   962,    26,   251,    27,    28,     0,
+     0,   214,   215,   216,    27,   319,   363,     0,    14,   339,
+     0,   981,   237,   566,    98,    99,     0,   140,   140,   943,
+     0,   982,     0,   921,   923,    18,     0,     0,   252,    32,
+    20,   639,     0,     0,   983,   641,    32,     0,     0,    23,
+     0,    26,     0,   386,   387,  1114,  1115,   491,   215,   216,
+     0,  1120,   578,     0,    14,   674,     0,   741,     0,     0,
+     0,     0,     0,     0,   684,  1132,   943,  1133,     0,  1134,
+     0,    18,   743,     0,   258,     0,    20,   674,   127,   128,
+     0,  1393,   215,   216,     0,    23,     0,     0,    14,     0,
+   258,   986,     0,   645,   649,     0,   652,  1592,     7,     8,
+     9,    10,     0,   450,   450,     0,   450,   450,     0,   450,
+    20,     0,     0,     0,  1067,  1162,     0,     0,     0,    23,
+     0,   636,     0,     0,     0,   704,   743,   743,    26,     0,
+   130,   131,   743,     0,     0,     0,    21,     0,   649,     0,
+   339,   339,   636,   339,   637,     0,   743,     0,   743,    26,
+   743,    27,    28,     0,   638,     0,     0,     0,   745,  1453,
+  1454,  1183,     0,     0,   639,   981,     0,   647,   641,     0,
+     0,     0,     0,  1464,  1465,   982,     0,   116,  1006,  1007,
+  1105,  1049,     0,    32,     0,   639,     0,     0,   983,   641,
+  1475,   751,     0,     0,   779,     0,   743,     0,     0,     0,
+     0,     0,     0,     0,  1050,     0,   140,   140,   156,   156,
+   943,  1051,   745,   745,   140,     0,     0,   741,   745,   601,
+   602,   603,   604,   605,   606,   607,   608,   609,    26,     0,
+   119,   120,   745,   649,   745,     0,   745,   156,   156,   943,
+     0,     0,   743,     0,     0,     0,   258,   596,   597,   598,
+   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
+   609,   743,  1518,  1519,     0,   450,   450,     0,     0,     0,
+     0,     0,  1155,     0,     0,     0,   840,   864,     0,   843,
+     0,     0,   745,   845,   846,   848,   849,   850,     0,     7,
+     8,     9,    10,     0,     0,   246,   578,   339,     0,     0,
+   300,   394,   395,    10,     0,     0,  1135,     0,  1136,   867,
+  1179,     0,     0,     0,     0,     0,     0,    18,     0,  1142,
+     0,   912,     0,   921,   923,     0,     0,    21,   745,     0,
+     0,   140,   140,   636,   140,     0,     0,  1301,    21,  1302,
+    26,  1303,    27,    28,     0,   251,     0,   745,     0,     7,
+     8,     9,    10,    27,   319,    13,   981,   627,     0,   300,
+   394,   395,    10,   924,   628,     0,   982,   921,   923,     0,
+   924,   212,   220,     0,    32,     0,   639,    18,     0,   983,
+   641,     0,  1229,  1230,   258,    32,   258,    21,     0,     0,
+   975,     0,     0,   636,     0,     0,     0,    21,     0,     0,
+    26,   992,    27,    28,   629,     0,   450,   450,   450,     0,
+    26,     0,    27,   319,     0,     0,  1172,     0,   743,     0,
+   743,     0,   743,   741,   741,     0,  1173,  1266,   258,     0,
+     0,     0,   864,     0,    32,    80,   639,     0,     0,  1174,
+   641,     0,  1395,     0,   630,   104,     0,   339,     0,     0,
+     0,     0,     0,     0,     0,   133,     0,     0,     0,     0,
+     0,   144,   144,     0,   144,     0,    80,     0,     0,     0,
+     0,     0,     0,    80,   156,     0,     0,     0,     0,   704,
+     0,     0,     0,     0,     0,     0,   203,     0,    80,     0,
+     0,   450,   450,     0,     0,     0,   238,     0,     0,     0,
+     0,     0,     0,   104,   745,   751,   745,     0,   745,     0,
+     0,     0,   258,     0,   262,   104,   741,   751,     0,     0,
+     0,     0,     0,   743,     0,   741,   741,     0,     0,     0,
+   741,     0,     0,     0,     0,     0,     0,   104,     0,     0,
+     0,   156,   156,   156,     0,   751,     0,     0,     0,     0,
+     0,   751,  1370,     0,     0,     0,  1135,  1136,   921,   923,
+   300,     8,     9,    10,  1142,   133,     0,    80,     0,     0,
+     0,   144,   144,     0,     0,     0,   412,   144,   741,     0,
+   144,   144,   144,     0,     0,     0,     0,   921,   923,   258,
+     7,   127,   128,    10,     0,     0,    80,     0,    21,     0,
+    80,     0,     0,     0,     0,   251,   203,    80,     0,   745,
+   450,     0,     0,    27,   319,     0,   258,     0,    18,  1116,
+     0,     0,     0,     0,   203,   203,   203,     0,    21,     0,
+     0,     0,     0,  1414,     0,     0,     0,   538,     0,     0,
+     0,    26,     0,    27,    28,    32,   127,   128,     0,     0,
+   215,   216,   867,   203,     0,   684,    14,   149,   751,     0,
+     0,     0,   924,     0,     0,     0,     0,   150,   975,   743,
+   502,     0,     0,   741,     0,    32,    80,     0,    20,   104,
+   151,  1135,  1136,     0,  1142,  1455,  1456,    23,     0,   636,
+   144,     0,     0,     0,     0,     0,    26,     0,   130,   131,
+   704,     0,  1168,   741,     0,     0,   924,     0,   259,     0,
+     0,     0,   637,     0,     0,     0,     0,     0,   127,   128,
+     0,     0,   638,   246,     0,     0,     0,     0,   104,   547,
+     0,     0,   639,     0,     0,   640,   641,     0,   471,   473,
+   477,     0,     0,     0,     7,   127,   128,    10,     0,     0,
+   246,     0,     0,   924,     0,   745,     0,     0,     0,     0,
+     0,   636,     0,     0,     0,     0,  1210,     0,    26,     0,
+   130,   131,    18,   104,     0,     0,     0,   634,  1516,   547,
+   547,   650,    21,     0,   637,   434,     0,     0,     0,     0,
+    80,     0,     0,     0,   638,    26,     0,    27,    28,  1263,
+     0,     0,     0,     0,   639,     0,  1536,   640,   641,     0,
+   751,    30,   751,     0,     0,     0,     0,   469,     0,     0,
+     0,    31,     0,     0,   133,   795,   796,     9,    10,    32,
+   485,     0,     0,   104,    33,   203,   104,     0,     0,     0,
+  1271,     0,     0,     0,     0,     0,   127,   128,     0,     0,
+   144,   535,     0,   144,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    21,     0,   144,     0,     0,     0,     0,
+     0,     0,     0,    80,     0,     0,    26,     0,    27,    28,
+     7,     8,     9,    10,   797,  1305,   535,     0,     0,   636,
+     0,  1263,   193,     0,     0,     0,    26,   924,   130,   131,
+     0,   203,   194,   203,     0,   203,   203,   203,    18,     0,
+    32,   203,   637,     0,     0,   195,   203,     0,    21,   203,
+     0,     0,   638,     0,   636,     0,   924,     0,   741,     0,
+     0,    26,   639,    27,    28,   640,   641,     0,     0,   133,
+  1358,     0,    80,     0,    80,     0,     0,   981,     0,   806,
+    80,     0,    80,     0,     0,     0,   166,   982,     7,     8,
+     9,    10,   167,    12,    13,    32,     0,   639,     0,    14,
+   983,   641,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,     0,    17,    18,    19,     0,     0,
+     0,    20,   104,   104,   104,   104,    21,     0,     0,     0,
+    23,     0,     0,   168,     0,     0,     0,     0,     0,    26,
+     0,    27,    28,  1421,  1422,   761,     0,   762,     0,   471,
+   473,   477,     0,     0,     0,    30,     0,     0,     0,     0,
+   773,     0,     0,     0,     0,    31,     0,     0,     0,     0,
+     0,     0,     0,    32,     0,     0,     0,     0,    33,     0,
+     0,     0,   104,    34,   547,     0,     0,     0,     0,     0,
+     0,     0,     0,   804,     0,     0,   634,     0,   547,   547,
+     0,   650,     0,     0,     0,     0,  1210,     0,   944,     8,
+     9,     0,   946,    12,   246,     0,     0,     0,     0,    14,
+     0,     0,     0,     0,  1479,     0,     0,   203,     0,     0,
+     0,     0,     0,    16,   766,    17,     0,     0,     0,   772,
+     0,    20,     0,     0,     0,     0,  1497,  1500,     0,     0,
+    23,   133,   636,     0,     0,     0,     0,     0,   133,    26,
+     0,   130,   131,     0,     0,     0,   203,   988,   203,   203,
+   238,   650,     0,     0,     0,   637,     0,     0,     0,     0,
+     0,     0,     0,   821,     0,   638,     0,     0,     0,   827,
+     0,     0,     0,     0,     0,   639,     0,     0,   640,   641,
+     0,   835,   836,     0,   837,     0,     0,     0,     0,   300,
+     8,     9,    10,   203,     0,     0,     0,   988,     0,     0,
+     0,  1541,     0,     0,   203,   203,     0,   203,     7,     8,
+     9,    10,   214,   215,   216,     0,     0,     0,     0,    14,
+     0,     0,     0,   104,     0,     0,   806,    21,     0,     0,
+     0,     0,     0,     0,   251,   104,    18,     0,     0,     0,
+   578,    20,    27,   319,     0,     0,    21,     0,  1072,     0,
+    23,     0,   636,     0,   704,     0,    80,     0,     0,    26,
+     0,    27,    28,   104,     0,     0,     0,     0,     0,   104,
+     0,     0,     0,     0,    32,   981,   547,   547,   547,   932,
+   933,     0,     0,     0,   932,   982,     0,     0,   547,     0,
+     0,     0,     0,    32,     0,   639,     0,     0,  1030,   641,
+     0,     0,     0,     0,     0,     8,     9,     0,   167,    12,
+    13,     0,     0,   749,     0,    14,    83,     0,   761,   762,
+     0,   773,     0,     0,     0,     0,   106,     0,     0,    16,
+     0,    17,    18,     0,     0,   126,   134,    20,     0,     0,
+   804,     0,   145,   145,     0,   145,    23,    83,   636,     0,
+     0,     0,     0,     0,    83,    26,     0,   130,   131,     0,
+     0,   547,     0,   547,     0,     0,     0,   145,     0,    83,
+   104,   637,     0,     0,   547,     0,   104,   239,   944,   944,
+   944,   638,     0,     0,   248,     0,  1149,   300,   127,   128,
+    10,   639,     0,     0,   640,   641,   248,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     7,   127,   128,    10,
+     0,     0,    13,     0,     0,     0,     0,  1058,   104,     0,
+   104,     0,   203,   203,  1176,    21,     0,     0,     0,  1063,
+     0,     0,   251,     0,    18,     0,     0,     0,     0,     0,
+    27,   319,     0,     0,    21,     0,     0,     0,    83,     0,
+     0,     0,   145,   145,     0,     0,     0,    26,   145,    27,
+    28,   145,   145,   145,     0,  1086,     0,  1088,     0,     0,
+     0,  1176,    32,   149,     0,     0,     0,    83,     0,     0,
+     0,    83,     0,   150,   104,     0,     0,   145,    83,     0,
+     0,    32,     0,     0,     0,     0,   151,     0,     0,     0,
+     0,     0,     0,     0,     0,   145,   145,   145,     0,     0,
+   203,     0,     0,     0,     0,   144,     0,     0,    80,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   104,     0,
+   104,     0,     0,     0,   145,     0,   471,   473,   477,  1122,
+  1123,     0,  1125,     8,     9,     0,     0,    12,    13,     0,
+     8,     9,     0,    14,    12,   246,     0,    83,   104,     0,
+    14,     0,     0,   547,   547,     0,   547,    16,     0,    17,
+  1143,   145,     0,     0,    16,    20,    17,     0,     0,     0,
+     0,     0,    20,     0,    23,   477,     0,     0,     0,     0,
+     0,    23,     0,    26,     0,   130,   131,   619,     0,     0,
+    26,     0,   130,   131,     0,     0,     0,     0,     0,   248,
+   145,   203,   203,   203,   203,  1176,     0,     0,     0,   203,
+     0,  1178,     0,     0,  1239,     0,   642,   642,   642,     0,
+     0,     0,   620,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  1176,  1176,  1176,     7,     8,     9,    10,   167,
+    12,    13,     0,     0,   248,     0,    14,     0,   635,     0,
+   145,   145,   651,     0,     0,     0,     0,   660,     0,     0,
+    16,    83,    17,    18,    19,     0,     0,     0,    20,     0,
+     0,     0,     0,    21,     0,     0,     0,    23,     0,     0,
+   168,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     0,     0,     0,     0,     0,   697,     0,     0,     0,     0,
+     0,     0,    30,     0,   248,     0,   145,   248,     0,     0,
+     0,     0,    31,     0,     0,   761,   762,   471,   473,   477,
+    32,   145,     0,   773,   145,    33,   203,   203,     0,   203,
+    34,     0,     7,     8,     9,    10,   145,     0,    13,     0,
+     0,     0,     0,     0,    83,     0,   471,   473,   477,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   102,  1428,     0,  1285,  1286,  1287,    10,   167,    12,   301,
-   302,   303,     0,   304,    14,  1288,     0,  1289,  1290,  1291,
-  1292,  1293,  1294,  1295,  1296,  1297,  1298,    15,    16,   305,
+    18,     0,     0,     0,  1285,   203,   988,   203,     0,     0,
+    21,     0,   145,     0,   145,     0,   145,   145,   145,     0,
+     0,     0,   145,    26,   104,    27,    28,   145,     0,     6,
+   145,     7,     8,     9,    10,    11,    12,    13,     0,   193,
+     0,     0,    14,  1298,     0,     0,     0,     0,     0,   194,
+   134,     0,     0,    83,     0,    83,    16,    32,    17,    18,
+   807,    83,   195,    83,    20,     0,     0,     0,     0,    21,
+     0,     0,     0,    23,     0,     0,   438,     0,     0,     0,
+   761,   762,    26,   773,    27,    28,     0,     0,    29,     0,
+  1363,     0,     0,     0,  1364,     0,     0,     0,    30,     0,
+     0,     0,     0,   248,   248,   248,   248,     0,    31,  1176,
+     0,     0,     0,     0,  1377,     0,    32,     0,  1378,     0,
+     0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     7,   127,   128,    10,     0,     0,   535,     0,
+     0,     0,     0,     0,     0,   642,   642,     0,   642,     0,
+     0,     0,     0,  1394,     0,   941,     0,     0,     0,     0,
+    18,     0,     0,   248,     0,   145,     0,     0,     0,     0,
+    21,     0,     0,     0,     0,     0,  1176,  1176,  1176,   145,
+   145,     0,   651,    26,     0,    27,    28,     0,     0,   945,
+     0,     0,   104,     0,     0,     0,     0,   203,     0,    30,
+     0,     0,   660,     7,   127,   128,    10,     0,   145,    31,
+     0,     0,     0,   642,     0,   642,   642,    32,   642,     0,
+     0,     0,    33,   477,     0,     0,     0,     0,     0,     0,
+     0,    18,   697,     0,     0,     0,     0,     0,     0,     0,
+   126,    21,     0,     0,     0,  1466,  1467,   145,   651,   145,
+   145,   239,   651,     0,    26,     0,    27,    28,     0,     0,
+   642,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    30,     0,     0,     0,     0,  1018,     0,     0,     0,     0,
+    31,     0,     0,     0,     0,     0,     0,     0,    32,     0,
+   471,   473,   477,    33,   145,     0,     0,     0,   651,     0,
+     0,     0,     0,     0,     0,   145,   145,     0,   145,     0,
+     0,     0,     0,     0,     7,     8,     9,    10,   167,    12,
+    13,     0,  1018,   749,   248,    14,     0,   807,     0,     0,
+     0,     0,     0,     0,     0,     0,   248,     0,     0,    16,
+     0,    17,    18,     0,     0,     0,     0,    20,     0,     0,
+     0,     0,    21,     0,     0,   642,    23,    83,   636,     0,
+     0,     0,     0,     0,   248,    26,     0,    27,    28,     0,
+   248,     0,     0,     0,     0,     0,     0,   145,   145,   145,
+     0,  1172,  -387,     8,     9,  -387,  -387,    12,   246,   145,
+     0,  1173,     0,    14,     0,     0,     0,     0,     0,    32,
+     0,   639,     0,     0,  1174,   641,     0,    16,     0,    17,
+  -387,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+  -387,     0,     0,     0,    23,     0,   636,     0,   642,     0,
+   642,     0,     0,    26,     0,   130,   131,     0,     0,     0,
+     0,   642,     0,     0,     0,   941,   941,   941,     0,   637,
+     7,     8,     9,    10,   214,   215,   216,     0,     0,   638,
+     0,    14,   145,     0,   145,     0,     0,  -387,     0,   639,
+     0,   248,   640,   641,     0,   145,     0,   248,    18,   945,
+   945,   945,     0,    20,     0,     0,     0,   660,    21,   642,
+   642,   642,    23,     0,   636,     0,     0,     0,     0,     0,
+     0,    26,     0,    27,    28,    51,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   193,     0,   248,
+     0,   248,     0,   145,   145,   651,     0,   194,     0,     0,
+     0,    51,    51,     0,   152,    32,    51,     0,   941,     0,
+  1438,     0,     0,    51,   598,   599,   600,   601,   602,   603,
+   604,   605,   606,   607,   608,   609,    51,     0,    51,   795,
+     8,   507,    10,   205,    12,   206,     0,     0,     0,     0,
+    14,     0,   945,     0,     0,     0,     0,     0,     0,     0,
+     0,   254,     0,     0,    16,   248,    17,    18,     0,     0,
+     0,     0,    20,     0,     0,     0,     0,    21,     0,     0,
+     0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,   145,    27,    28,     0,     0,   145,     0,   797,    83,
+     0,     0,     0,     0,     0,     0,    30,     0,     0,   248,
+     0,   248,     0,     0,   396,   396,    31,    51,     0,     0,
+     0,    51,    51,     0,    32,   254,     0,    51,     0,    33,
+   152,   152,   152,     0,     0,     0,     0,   431,     0,   248,
+     0,     0,     0,     0,   145,   145,    51,   145,     0,     0,
+    51,     0,     0,     0,     0,     0,    51,    51,   642,   642,
+   642,   642,   642,     0,     0,     0,   642,     0,     0,     0,
+     0,     0,     0,     0,    51,    51,   152,     0,     0,     0,
+     0,     0,     0,     0,   254,     0,     0,     0,     0,   941,
+   941,   941,   145,   145,   145,   145,   651,     0,     0,     0,
+   145,     0,     0,    51,     0,     0,   506,  1018,     7,     8,
+   507,    10,   167,    12,    13,     0,     0,     0,     0,    14,
+     0,     0,     0,   945,   945,   945,    51,     0,     0,     0,
+     0,     0,     0,    16,     0,    17,    18,    19,     0,     0,
+    51,    20,  -525,     0,  1018,     0,    21,     0,     0,     0,
+    23,   508,     0,   168,     7,     8,     9,    10,     0,    26,
+   246,    27,    28,     0,     0,   509,     0,   510,     0,     0,
+     0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
+     0,     0,    18,   642,   642,    31,   642,     0,     0,     0,
+     0,     0,    21,    32,     0,     0,     0,     0,    33,     0,
+     0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
+   575,     0,     0,     0,  -525,     0,     0,   145,   145,     0,
+   145,   193,     0,     0,     0,     0,     0,   396,     0,     0,
+     0,   194,     0,     0,     0,   254,     0,     0,     0,    32,
+    51,     0,     0,     0,   195,  1425,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   145,   651,   145,   595,
+   596,   597,   598,   599,   600,   601,   602,   603,   604,   605,
+   606,   607,   608,   609,   396,   248,     0,     0,     0,     0,
+     0,  1018,     0,     0,     0,    51,     0,     0,     0,   506,
+     0,     7,     8,   507,    10,   167,    12,    13,     0,     0,
+    51,     0,    14,    51,     0,     0,     0,     0,     0,   431,
+   431,   431,     0,     0,     0,    51,    16,     0,    17,    18,
+    19,     0,     0,    51,    20,  -526,     0,     0,     0,    21,
+     0,     0,     0,    23,   508,     0,   168,     0,     0,     0,
+     0,     0,    26,     0,    27,    28,     0,     0,   509,     0,
+   510,    51,     0,    51,     0,   152,   152,   152,    30,     0,
+   945,    51,     0,     0,     0,     0,    51,     0,    31,    51,
+     0,     0,  1233,  1234,     9,    10,    32,     0,     0,     0,
+     0,    33,     0,     8,     9,     0,     0,    12,    13,     0,
+     0,     0,    51,    14,    51,     0,     0,  -526,     0,    51,
+    51,     0,    51,     0,     0,     0,     0,    16,     0,    17,
+    21,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+     0,     0,     0,    26,    23,    27,    28,   945,   945,   945,
+     0,  1235,     0,    26,   575,   130,   131,   575,     0,   193,
+     0,     0,     0,   248,     0,     0,     0,     0,   145,   194,
+     0,     0,   575,   575,   575,     0,     0,    32,     0,    78,
+     0,     0,   195,     0,     0,     0,     0,   575,     0,     0,
+     0,     7,     8,     9,    10,     0,     6,    13,     7,     8,
+     9,    10,    11,    12,    13,    78,    78,     0,    78,    14,
+    78,     0,     0,     0,     0,     0,     0,    78,     0,    18,
+     0,     0,    15,    16,     0,    17,    18,    19,     0,    21,
+    78,    20,    78,     0,     0,   254,    21,     0,     0,    22,
+    23,    24,    26,    25,    27,    28,     0,     0,   575,    26,
+     0,    27,    28,     0,     0,    29,     0,     0,   474,     0,
+     0,     0,     0,     0,     0,    30,     0,    51,   475,     0,
+     0,     0,     0,     0,     0,    31,    32,     0,     0,     0,
+     0,   476,     0,    32,     0,     0,     0,     0,    33,     0,
+     0,   396,     0,    34,     0,     0,     0,   159,   396,     0,
+     0,     0,     0,     0,     0,     0,    51,    51,    51,    51,
+     0,    78,     0,     0,     0,    78,    78,     0,     0,   204,
+     0,    78,     0,     0,    78,    78,    78,     0,     0,     0,
+     0,     0,     0,     0,   795,   796,     9,    10,     0,     0,
+    78,     0,     0,     0,    78,     7,     8,     9,    10,     0,
+    78,    78,     0,    51,     0,     0,     0,    51,     0,     0,
+     0,     0,     0,     0,    51,    51,     0,    51,    78,    78,
+    78,     0,    21,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    21,     0,    26,    51,    27,    28,     0,
+     0,  1060,     0,   797,     0,     0,    26,    78,    27,    28,
+     0,   193,   192,     0,     0,     0,     0,   254,     0,     0,
+     0,   194,   193,   159,   159,   159,    51,     0,     0,    32,
+    78,     0,   194,     0,   195,     0,     0,     0,     0,     0,
+    32,     0,     0,     0,    78,   195,     0,     0,     0,   204,
+     0,   748,   575,   300,     8,     9,    10,   167,    12,   301,
+   302,   303,   749,   304,    14,     0,     0,   204,   204,   478,
+     0,     0,     0,     0,     0,     0,     0,     0,    16,   305,
     17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,  1299,    23,  1300,     0,     0,   313,
-   314,   315,   316,   317,    26,  1158,  1301,   319,   719,     0,
-  1302,   320,     0,     0,     0,     0,     0,   321,   102,     0,
+   310,    21,   311,   312,     0,    23,   204,     0,     0,   313,
+   314,   315,   316,   317,    26,     0,    27,   319,     0,     0,
+     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
    322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
    325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,     0,   329,   561,  1303,   102,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1429,
-   330,   687,   577,   578,   579,   580,   581,   582,   583,   584,
-   585,   586,   587,   588,   589,   590,   591,   592,  1158,  1158,
-  1158,     0,     0,     0,     0,  1454,     0,  -479,  -479,  -479,
-  -479,  -479,  -479,  -479,     0,     0,  -479,     0,  -479,     0,
-     0,     0,   202,     0,     0,     0,     0,     0,     0,  -479,
-     0,  -479,     0,     0,     0,  -479,     0,     0,     0,     0,
-  -479,     0,   102,     0,     0,  -479,     0,     0,     0,  -479,
-     0,  -479,     0,   102,   102,     0,   102,   102,  -479,     0,
-  -479,  -479,  -479,  -479,  -479,     0,  -479,  -479,  -479,  -479,
+   659,     0,     0,   329,    78,     0,     0,     0,   575,   575,
+   575,     0,     0,     0,   431,   254,     0,     0,  -798,     0,
+   330,     0,     0,     7,     8,     9,    10,   205,    12,   206,
+     0,     0,   548,     0,    14,   597,   598,   599,   600,   601,
+   602,   603,   604,   605,   606,   607,   608,   609,    16,    78,
+    17,    18,    51,    51,   152,     0,    20,     0,     0,   254,
+     0,    21,     0,     0,    78,    23,     0,    78,     0,     0,
+     0,     0,     0,     0,    26,     0,    27,    28,     0,    78,
+   207,     0,   644,   644,   644,     0,     0,    78,     0,     0,
+    30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    31,  1204,     0,     0,     0,     0,     0,     0,    32,     0,
+     0,     0,     0,    33,     0,    78,     0,    78,     0,    78,
+    78,    78,     0,     0,     0,    78,     0,     0,     0,     0,
+    78,     0,     0,    78,     0,     0,     0,     0,   204,     0,
+    51,     0,     0,     0,     0,    51,     0,     0,    51,     7,
+     8,     9,    10,   167,    12,    13,    78,     0,    78,     0,
+    14,     0,     0,    78,    78,     0,    78,     0,     0,     0,
+     0,     0,     0,     0,    16,     0,    17,    18,     0,     0,
+     0,     0,    20,     0,     0,     0,     0,    21,     0,     0,
+     0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,     0,    27,    28,   204,     0,   204,     0,   478,   478,
+   478,     0,     0,     0,   204,     0,    30,     0,     0,   204,
+   254,     0,   204,     0,     0,     0,    31,     0,     0,     0,
+     0,     0,     0,     0,    32,     0,     0,     0,     0,    33,
+     0,    51,    51,   152,   152,   152,     0,   254,     0,    51,
+     0,     0,   204,     0,   870,     0,   300,     8,     9,    10,
+     0,    12,   552,   302,   303,     0,   304,    14,     0,     0,
+     0,     0,  1204,  1204,  1204,     0,     0,     0,     0,     0,
+   659,    16,   305,    17,     0,    19,     0,   306,   307,    20,
+     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
+     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
+   319,    78,     0,     0,   320,  -788,     0,     0,     0,     0,
+   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
+     0,   323,   324,   325,     0,     0,   202,     0,     0,   326,
+   327,   328,     0,     0,     0,     0,   329,     0,     0,     0,
+    78,    78,    78,    78,     0,     0,     0,   906,     0,     0,
+     0,   257,     0,   330,   261,     0,    51,    51,     0,    51,
+     0,   644,   644,     0,   644,     0,     0,     0,     0,     0,
+     0,   644,     0,     0,     0,   257,     0,   365,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    78,     0,     0,
+   204,    78,     0,     0,     0,    51,    51,    51,    78,    78,
+     0,    78,   592,   593,   594,   595,   596,   597,   598,   599,
+   600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
+    78,     0,     0,     0,     0,     0,     0,     0,     0,   985,
+     0,   985,   985,     0,   644,     0,     0,     0,     0,     0,
+     0,     7,     8,     9,    10,     0,   202,   535,     0,     0,
+    78,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   202,   202,   202,     0,     0,    18,
+     0,     0,     0,     0,   484,     0,   985,     0,     0,    21,
+     0,     0,     0,     0,     0,     0,     0,   204,   204,     0,
+   204,     0,    26,   202,    27,    28,     0,     0,     0,  1204,
+     0,     0,     0,     0,     0,     0,     0,     0,   193,   204,
+     0,     7,     8,     9,    10,   167,    12,    13,   194,   261,
+  1035,     0,    14,     0,     0,     0,    32,     0,     0,     0,
+     0,   195,     0,   257,     0,     0,    16,     0,    17,    18,
+     0,     0,     0,     0,    20,     0,     0,     0,     0,    21,
+     0,     0,     0,    23,     0,     0,     0,     0,     0,   548,
+   548,   548,    26,     0,    27,    28,  1204,  1204,  1204,     0,
+     0,   644,     0,     0,     0,     0,     0,     0,    30,     0,
+   659,     0,     0,     0,     0,     0,     0,    51,    31,     0,
+     0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
+     0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    78,    78,    78,     0,
+     0,     0,     0,     0,     0,   257,   261,     0,     0,     0,
+     0,     7,     8,     9,    10,   205,    12,   206,     0,     0,
+     0,     0,    14,     0,   644,     0,   644,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    16,   644,    17,    18,
+     0,   644,   644,   644,    20,  1206,     0,     0,     0,    21,
+     0,     0,     0,    23,     0,   202,     0,     0,     0,     0,
+     0,     0,    26,     0,    27,    28,     0,     0,  1435,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    30,     0,
+     0,     0,     0,     0,    78,   985,   985,  1177,    31,    78,
+     0,     0,    78,     0,     0,     0,    32,     0,     0,     0,
+     0,    33,     0,     0,     0,     7,     8,     9,    10,   205,
+    12,   206,     0,     0,     0,     0,    14,     0,     0,     0,
+     0,   202,     0,   202,     0,   202,   202,   202,     0,     0,
+    16,   202,    17,    18,  1177,     0,   202,     0,    20,   202,
+     0,     0,     0,    21,     0,     0,     0,    23,     0,     0,
+     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     0,   102,     0,     0,     0,     0,     0,     0,     0,   202,
+   121,   102,    30,   204,     0,     0,     0,   102,   102,     0,
+   102,  1489,    31,     0,     0,    78,    78,    78,    78,    78,
+    32,     0,     0,    78,     0,    33,   594,   595,   596,   597,
+   598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
+   608,   609,   235,     0,     0,     0,  1206,  1206,  1206,     0,
+     0,     0,     0,     0,     0,     0,   906,   906,     0,   906,
+     0,  1490,   588,   589,   590,   591,   592,   593,   594,   595,
+   596,   597,   598,   599,   600,   601,   602,   603,   604,   605,
+   606,   607,   608,   609,   593,   594,   595,   596,   597,   598,
+   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
+   609,   389,     0,   121,   985,   985,  1177,  1177,  1177,     0,
+   102,   102,   985,     0,     0,     0,     0,   102,   102,     0,
+     0,   102,   102,   102,     0,   417,   102,   102,   102,     0,
+     0,   257,   261,     0,     0,  1177,  1177,  1177,     0,     0,
+    78,    78,     0,    78,     0,     0,     0,   202,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  1233,   127,
+   128,    10,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
+    78,    78,     0,     0,     0,     0,   202,     0,   202,   202,
+     0,     0,     0,     0,     0,     0,    21,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
+     0,    27,    28,     0,     0,   235,   102,  1235,     0,     0,
+     0,     0,     0,     0,     0,    30,     0,     0,     0,   985,
+   985,     0,   985,   202,     0,    31,   102,     0,     0,     0,
+     0,     0,     0,    32,   202,   202,     0,   202,    33,     0,
+     0,   570,     0,   300,     8,     9,    10,   167,    12,   301,
+   302,   303,   749,   304,    14,     0,   202,     0,   204,     0,
+   204,     0,     0,     0,     0,   102,     0,     0,    16,   305,
+    17,    18,    19,  1206,   306,   307,    20,   484,   308,   309,
+   310,    21,   311,   312,     0,    23,     0,   636,     0,   313,
+   314,   315,   316,   317,    26,     0,    27,   319,  -312,     0,
+     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
+   937,     0,     0,   102,     0,   102,   102,     0,   323,   324,
+   938,     7,     8,     9,    10,     0,   326,   327,   328,     0,
+   639,     0,     0,   939,   641,     0,     0,     0,     0,     0,
+  1206,  1206,  1206,     7,     8,     9,    10,     0,     0,    18,
+   330,     0,     0,     0,     0,     0,     0,     0,     0,    21,
+   102,    78,   478,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    26,     0,    27,    28,     0,     0,     0,   102,
+     0,    21,     0,     0,     0,     0,   102,     0,   474,   102,
+     0,     0,     0,     0,    26,     0,    27,    28,   475,     0,
+  1432,   102,     0,     0,     0,     0,    32,     0,     0,     0,
+   193,   476,     0,     0,     0,   257,   261,   257,     0,     0,
+   194,     0,     0,     0,     0,     0,     0,     0,    32,   478,
+   478,   478,     0,   195,     0,     0,     0,     0,     8,     9,
+     0,   205,    12,   206,     7,     8,     9,    10,    14,     0,
+   204,     0,   202,   202,  1175,     0,     0,     0,     0,   257,
+     0,     0,    16,     0,    17,    18,     0,     0,     0,   102,
+    20,     0,     0,     0,     0,   102,     0,     0,     0,    23,
+     0,     0,    21,     0,     0,     0,     0,     0,    26,   261,
+   130,   131,     0,     0,     0,    26,     0,    27,    28,     0,
+     0,  1175,  1460,     0,  -479,  -479,  -479,  -479,  -479,  -479,
+  -479,   193,     0,  -479,   102,  -479,     0,     0,     0,     0,
+     0,   194,     0,     0,     0,     0,  -479,     0,  -479,    32,
+     0,     0,  -479,     0,   195,     0,     0,  -479,     0,     0,
+   202,     0,  -479,     0,     0,     0,  -479,     0,  -479,     0,
+     0,     0,     0,     0,     0,  -479,     0,  -479,  -479,  -479,
+  -479,  -479,     0,  -479,  -479,  -479,  -479,  -479,  -479,  -479,
   -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,
-  -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,     0,
-  -479,  -479,  -479,     0,  -479,  -479,  -479,  -479,  -479,  -479,
-     0,  -479,     0,     0,     0,     0,  1455,     0,     0,   102,
-     0,  -479,  -479,  -479,     0,  -479,   102,   121,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   235,     0,
-     0,     0,     0,     0,     0,     0,     0,  1284,     0,  1285,
-  1286,  1287,    10,   167,    12,   301,   302,   303,     0,   304,
-    14,  1288,   980,  1289,  1290,  1291,  1292,  1293,  1294,  1295,
-  1296,  1297,  1298,    15,    16,   305,    17,    18,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-  1299,    23,  1300,     0,     0,   313,   314,   315,   316,   317,
-    26,     0,  1301,   319,   719,     0,  1302,   320,     0,   980,
-     0,     0,   102,   321,     0,     0,   322,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,     0,     0,     0,     0,   329,
-     0,  1303,     0,     0,     0,     0,   102,   102,   102,     0,
-     0,     0,     0,     0,     0,     0,   330,     0,   102,     0,
-   553,     0,   300,     8,     9,    10,   167,    12,   301,   302,
-   303,   732,   304,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
-    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,   619,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,   319,  -312,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,   902,
-     0,   102,     0,   102,     0,     0,     0,   323,   324,   903,
-     0,     0,     0,     0,   102,   326,   327,   328,     0,   622,
-     0,     0,   904,   624,   553,     0,     7,     8,     9,    10,
-   167,    12,   301,   302,   303,   732,   304,    14,     0,   330,
+  -479,  -479,  -479,  -479,  -479,  -479,     0,  -479,  -479,  -479,
+   102,  -479,  -479,  -479,  -479,  -479,  -479,     0,  -479,     0,
+     0,   102,   102,  1461,   102,   102,     0,     0,  -479,  -479,
+  -479,     0,  -479,     0,     0,     0,     0,     0,     0,     0,
+   257,     0,     0,     0,     0,     0,     0,     8,     9,     0,
+   167,    12,    13,     0,     0,     0,     0,    14,     0,     0,
+     0,   202,   202,   202,   202,  1175,     0,  1297,     0,   202,
+     0,    16,     0,    17,    18,     0,     0,   102,     0,    20,
+     0,     0,     0,     0,   102,   121,     0,     0,   698,     0,
+     0,   168,  1175,  1175,  1175,     0,   235,    26,     0,   130,
+   131,     0,     0,     0,     0,  1440,     0,  1308,  1309,  1310,
+    10,   167,    12,   301,   302,   303,     0,   304,    14,  1311,
+  1015,  1312,  1313,  1314,  1315,  1316,  1317,  1318,  1319,  1320,
+  1321,    15,    16,   305,    17,    18,    19,     0,   306,   307,
+    20,     0,   308,   309,   310,    21,   311,   312,  1322,    23,
+  1323,     0,     0,   313,   314,   315,   316,   317,    26,     0,
+  1324,   319,   736,     0,  1325,   320,     0,  1015,     0,     0,
+     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
+     0,     0,   323,   324,   325,     0,   202,   202,     0,   202,
+   326,   327,   328,     0,   102,     0,     0,   329,     0,  1326,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   305,    17,    18,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-   619,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-    28,  -312,     0,     0,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,  1184,     0,     0,     0,     0,     0,   980,
-     0,   323,   324,  1185,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,   622,     0,     0,  1186,   624,   731,     0,
-   300,     8,     9,    10,   167,    12,   301,   302,   303,   732,
-   304,    14,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    16,   305,    17,    18,    19,
-     0,   306,   307,    20,     0,   308,   309,   310,    21,   311,
-   312,     0,    23,     0,     0,   102,   313,   314,   315,   316,
-   317,    26,     0,    27,   319,     0,     0,     0,   320,     0,
-     0,     0,     0,     0,   321,     0,     0,   322,     0,     0,
-     0,     0,     0,     0,     0,   323,   324,   325,     0,     0,
-     0,     0,     0,   326,   327,   328,     0,     0,     0,     0,
-   329,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   102,   102,     0,   102,  -799,   835,   330,   300,     8,
+     0,     0,     0,  1441,   330,     0,     0,     0,     0,     0,
+     0,     0,   102,   102,   102,   202,     0,   202,     0,     0,
+     0,     0,     0,     0,   102,     0,  1307,     0,  1308,  1309,
+  1310,    10,   167,    12,   301,   302,   303,     0,   304,    14,
+  1311,     0,  1312,  1313,  1314,  1315,  1316,  1317,  1318,  1319,
+  1320,  1321,    15,    16,   305,    17,    18,    19,     0,   306,
+   307,    20,     0,   308,   309,   310,    21,   311,   312,  1322,
+    23,  1323,     0,     0,   313,   314,   315,   316,   317,    26,
+     0,  1324,   319,   736,     0,  1325,   320,     0,     0,     0,
+     0,     0,   321,     0,     0,   322,     0,   102,     0,   102,
+     0,     0,     0,   323,   324,   325,    18,     0,     0,     0,
+   102,   326,   327,   328,     0,     0,     0,     0,   329,  1175,
+  1326,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   330,     0,     0,   588,   589,
+   590,   591,   592,   593,   594,   595,   596,   597,   598,   599,
+   600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
+     0,     0,     0,     0,     0,     8,     9,     0,   167,    12,
+    13,     0,     0,   749,     0,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,  1175,  1175,  1175,    16,
+     0,    17,    18,     0,     0,  1015,     0,    20,     0,     0,
+     0,     0,     0,     0,     0,     0,    23,   202,     0,     0,
+     0,     0,     0,     0,     0,    26,     0,   130,   131,     0,
+     0,     0,     0,     0,     0,     0,   570,     0,     7,     8,
+     9,    10,   167,    12,   301,   302,   303,   749,   304,    14,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   102,
+     0,   102,     0,    16,   305,    17,    18,    19,     0,   306,
+   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
+    23,     0,   636,     0,   313,   314,   315,   316,   317,    26,
+     0,    27,    28,  -312,     0,     0,   320,     0,     0,     0,
+     0,     0,   321,     0,     0,  1201,     0,     0,     0,   102,
+   102,     0,   102,   323,   324,  1202,     0,     0,     0,     0,
+     0,   326,   327,   328,     0,   639,     0,     0,  1203,   641,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   330,   870,     0,   300,     8,
      9,    10,   167,    12,   301,   302,   303,     0,   304,    14,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,    18,    19,     0,   306,
+     0,     0,  1015,    16,   305,    17,    18,    19,     0,   306,
    307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
     23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,  1528,   980,  -789,   320,     0,     0,     0,
+     0,    27,   319,  1531,     0,  -788,   320,     0,     0,  1015,
      0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
      0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,     0,   329,     0,
-   722,   980,   823,   824,   825,    10,     0,    12,   535,   302,
-   303,     0,   304,    14,     0,   330,   102,     0,   102,     0,
+     0,   326,   327,   328,     0,     0,     0,     0,   329,   739,
+     0,   858,   859,   860,    10,     0,    12,   552,   302,   303,
+     0,   304,    14,     0,     0,   330,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    16,   305,    17,     0,
+    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
+   311,   312,     0,    23,     0,     0,     0,   313,   314,   315,
+   316,   317,    26,     0,   861,   862,   740,     0,     0,   320,
+     0,     0,     0,     0,     0,   321,     0,     0,   322,     0,
+     0,     0,     0,     0,     0,     0,   323,   324,   325,     0,
+     0,     0,     0,     0,   326,   327,   328,     0,     0,     0,
+     0,   329,   863,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,  1015,  1022,   330,   570,
+     0,   300,     8,     9,    10,     0,    12,   301,   302,   303,
+     0,   304,    14,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    16,   305,    17,    18,
+    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
+   311,   312,     0,    23,     0,     0,     0,   313,   314,   315,
+   316,   317,    26,     0,    27,   319,  -312,     0,     0,   320,
+     0,     0,     0,     0,     0,   321,     0,     0,   571,     0,
+     0,     0,     0,     0,     0,     0,   323,   324,   572,     0,
+     0,     0,     0,     0,   326,   327,   328,     0,     0,     0,
+   739,   573,   858,   859,   860,    10,     0,    12,   552,   302,
+   303,     0,   304,    14,     0,     0,     0,     0,   330,     0,
      0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
      0,    19,     0,   306,   307,    20,     0,   308,   309,   310,
     21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,   826,   827,   723,     0,     0,
+   315,   316,   317,    26,     0,   861,   862,   740,     0,     0,
    320,     0,     0,     0,     0,     0,   321,     0,     0,   322,
      0,     0,     0,     0,     0,     0,     0,   323,   324,   325,
      0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,     0,   329,   828,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   987,   330,
-   553,     0,   300,     8,     9,    10,     0,    12,   301,   302,
-   303,     0,   304,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,   980,     0,     0,     0,     0,    16,   305,    17,
-    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,   319,  -312,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,   554,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,   555,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,   722,   556,   823,   824,   825,    10,     0,    12,   535,
-   302,   303,     0,   304,    14,     0,     0,     0,     0,   330,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   305,
-    17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,   826,   827,   723,     0,
-     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,     0,   329,   828,   722,     0,   823,   824,   825,
-    10,     0,    12,   535,   302,   303,     0,   304,    14,     0,
-   330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   329,   863,   739,     0,   858,   859,   860,    10,
+     0,    12,   552,   302,   303,     0,   304,    14,     0,   330,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
+     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
+     0,     0,   313,   314,   315,   316,   317,    26,     0,   861,
+   862,   740,     0,     0,   320,     0,     0,     0,     0,     0,
+   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
+     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
+   327,   328,     0,     0,     0,   739,   329,   858,   859,   860,
+    10,     0,    12,   552,   302,   303,     0,   304,    14,     0,
+     0,     0,  -483,   330,     0,     0,     0,     0,     0,     0,
      0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
     20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
      0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-   826,   827,   723,     0,     0,   320,     0,     0,     0,     0,
+   861,   862,   740,     0,     0,   320,     0,     0,     0,     0,
      0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
      0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     0,     0,     0,   722,   329,   823,   824,
-   825,    10,     0,    12,   535,   302,   303,     0,   304,    14,
-     0,     0,     0,  -483,   330,     0,     0,     0,     0,     0,
+   326,   327,   328,     0,     0,     0,   739,   329,   300,     8,
+     9,    10,     0,    12,   552,   302,   303,     0,   304,    14,
+     0,     0,     0,  1346,   330,     0,     0,     0,     0,     0,
      0,     0,     0,    16,   305,    17,     0,    19,     0,   306,
    307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
     23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,   826,   827,   723,     0,     0,   320,     0,     0,     0,
+     0,    27,   319,   740,     0,     0,   320,     0,     0,     0,
      0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
      0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,   722,   329,   300,
-     8,     9,    10,     0,    12,   535,   302,   303,     0,   304,
-    14,     0,     0,     0,  1323,   330,     0,     0,     0,     0,
-     0,     0,     0,     0,    16,   305,    17,     0,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-     0,    23,     0,     0,     0,   313,   314,   315,   316,   317,
-    26,     0,    27,   319,   723,     0,     0,   320,     0,     0,
-     0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,     0,     0,     0,     0,   329,
-     0,   553,     0,     7,     8,     9,    10,  1327,    12,   301,
-   302,   303,     0,   304,    14,     0,   330,     0,     0,     0,
+     0,   326,   327,   328,     0,     0,     0,     0,   329,     0,
+   570,     0,     7,     8,     9,    10,  1350,    12,   301,   302,
+   303,     0,   304,    14,     0,   330,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
+    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
+    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
+   315,   316,   317,    26,     0,    27,    28,  -312,     0,     0,
+   320,     0,     0,     0,     0,     0,   321,     0,     0,  1505,
+     0,     0,     0,     0,     0,     0,     0,   323,   324,  1506,
+     0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
+     0,   739,  1507,   300,     8,     9,    10,     0,    12,   552,
+   302,   303,     0,   304,    14,     0,     0,     0,     0,   330,
      0,     0,     0,     0,     0,     0,     0,     0,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
+    17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
    310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,    28,  -312,     0,
+   314,   315,   316,   317,    26,     0,    27,   319,   740,     0,
      0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-  1499,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-  1500,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,   722,  1501,   300,     8,     9,    10,     0,    12,
-   535,   302,   303,     0,   304,    14,     0,     0,     0,     0,
+   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
+   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
+     0,     0,  1579,   329,   300,     8,     9,    10,     0,    12,
+   301,   302,   303,     0,   304,    14,     0,     0,     0,     0,
    330,     0,     0,     0,     0,     0,     0,     0,     0,    16,
    305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
    309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,   723,
+   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
+     0,  -196,   320,     0,     0,     0,     0,     0,   321,     0,
+     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
+   324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
+     0,     0,     0,   870,   329,   300,     8,     9,    10,     0,
+    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
+     0,   330,     0,     0,     0,     0,     0,     0,     0,     0,
+    16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
+   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
+     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
+     0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
+   263,     0,   322,     8,     9,     0,     0,    12,    13,     0,
+   323,   324,   325,    14,     0,     0,     0,     0,   326,   327,
+   328,     0,     0,     0,     0,   329,     0,    16,     0,    17,
+     0,     0,     0,     0,     0,    20,     0,   264,   265,     0,
+  -788,     0,   330,     0,    23,     0,   266,     0,     0,     0,
+     0,     0,     0,    26,     0,   130,   131,     0,   267,     0,
+     0,     0,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+   286,   287,   288,     0,     0,   289,   290,   291,     0,     0,
+   292,     0,   959,   293,   300,     8,     9,    10,     0,    12,
+   552,   302,   303,     0,   304,    14,     0,     0,     0,   294,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
+   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
+   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
+   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
      0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
      0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
    324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
-     0,     0,     0,   835,   329,   300,     8,     9,    10,     0,
-    12,   535,   302,   303,     0,   304,    14,     0,     0,     0,
+     0,     0,     0,   961,   329,   300,     8,     9,    10,     0,
+    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
      0,   330,     0,     0,     0,     0,     0,     0,     0,     0,
     16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
    308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
      0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,   320,  -789,     0,     0,     0,     0,   321,
+     0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
      0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
    323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,  1580,   329,   300,     8,     9,    10,
-     0,    12,   301,   302,   303,     0,   304,    14,     0,     0,
+   328,     0,     0,     0,  1515,   329,   300,     8,     9,    10,
+     0,    12,   552,   302,   303,     0,   304,    14,     0,     0,
      0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
      0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
      0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
      0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,  -196,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,   835,   329,   300,     8,     9,
-    10,     0,    12,   535,   302,   303,     0,   304,    14,     0,
-     0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,   319,     0,     0,     0,   320,     0,     0,     0,     0,
-     0,   321,   263,     0,   322,     8,     9,     0,     0,    12,
-    13,     0,   323,   324,   325,    14,     0,     0,     0,     0,
-   326,   327,   328,     0,     0,     0,     0,   329,     0,    16,
-     0,    17,     0,     0,     0,     0,     0,    20,     0,   264,
-   265,     0,  -789,     0,   330,     0,    23,     0,   266,     0,
-     0,     0,     0,     0,     0,    26,     0,   130,   131,     0,
-   267,     0,     0,     0,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-   284,   285,   286,   287,   288,     0,     0,   289,   290,   291,
-     0,     0,   292,     0,   924,   293,   300,     8,     9,    10,
-     0,    12,   535,   302,   303,     0,   304,    14,     0,     0,
-     0,   294,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
    319,     0,     0,     0,   320,     0,     0,     0,     0,     0,
    321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
      0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,   926,   329,   300,     8,     9,
-    10,     0,    12,   535,   302,   303,     0,   304,    14,     0,
-     0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,   319,     0,     0,     0,   320,     0,     0,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     0,     0,     0,  1512,   329,   300,     8,
-     9,    10,     0,    12,   535,   302,   303,     0,   304,    14,
-     0,     0,     0,     0,   330,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,     0,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,     0,     0,     0,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,   300,     8,     9,    10,   329,    12,
-   535,   302,   303,     0,   304,    14,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,    16,
-   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
-     0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
-   764,   322,     7,     8,   765,    10,   167,    12,    13,   323,
-   324,   325,     0,    14,     0,     0,     0,   326,   327,   328,
-     0,     0,     0,     0,   329,     0,     0,    16,     0,    17,
-    18,    19,     0,     0,     0,    20,  -528,     0,     0,     0,
-    21,   330,   874,     0,    23,   766,     0,   168,     0,     0,
-     0,     0,     0,    26,     0,    27,    28,     0,     0,   767,
-     0,   768,     0,     0,     0,     0,     0,     0,     0,    30,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
-     0,     0,     0,     0,     0,     0,     0,    32,     0,     0,
-     0,     0,    33,     0,     0,  1285,  1286,  1287,    10,   167,
-    12,   301,   302,   303,     0,   304,    14,  1288,  -528,  1289,
-  1290,  1291,  1292,  1293,  1294,  1295,  1296,  1297,  1298,    15,
-    16,   305,    17,    18,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,  1299,    23,  1300,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,  1301,   319,
-   719,     0,  1302,   320,     0,     0,     0,     0,     0,   321,
-     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,     0,   329,     0,  1303,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,  1433,   330,  1285,  1286,  1287,    10,   167,    12,   301,
-   302,   303,     0,   304,    14,  1288,     0,  1289,  1290,  1291,
-  1292,  1293,  1294,  1295,  1296,  1297,  1298,    15,    16,   305,
+   327,   328,   300,     8,     9,    10,   329,    12,   552,   302,
+   303,     0,   304,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   330,     0,     0,     0,    16,   305,    17,
+     0,    19,     0,   306,   307,    20,     0,   308,   309,   310,
+    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
+   315,   316,   317,    26,     0,    27,   319,     0,     0,     0,
+   320,     0,     0,     0,     0,     0,   321,     0,   506,   322,
+     7,     8,   507,    10,   167,    12,    13,   323,   324,   325,
+     0,    14,     0,     0,     0,   326,   327,   328,     0,     0,
+     0,     0,   329,     0,     0,    16,     0,    17,    18,    19,
+     0,     0,     0,    20,  -528,     0,     0,     0,    21,   330,
+   909,     0,    23,   508,     0,   168,     0,     0,     0,     0,
+     0,    26,     0,    27,    28,     0,     0,   509,     0,   510,
+     0,     0,     0,     0,     0,     0,     0,    30,   506,     0,
+     7,     8,   507,    10,   167,    12,    13,    31,     0,     0,
+     0,    14,     0,     0,     0,    32,     0,     0,     0,     0,
+    33,     0,     0,     0,     0,    16,     0,    17,    18,    19,
+     0,     0,     0,    20,  -527,     0,  -528,     0,    21,     0,
+     0,     0,    23,   508,     0,   168,     0,     0,     0,     0,
+     0,    26,     0,    27,    28,     0,     0,   509,     0,   510,
+     0,     0,     0,     0,     0,     0,     0,    30,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+    33,     0,     0,  1308,  1309,  1310,    10,   167,    12,   301,
+   302,   303,     0,   304,    14,  1311,  -527,  1312,  1313,  1314,
+  1315,  1316,  1317,  1318,  1319,  1320,  1321,    15,    16,   305,
     17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,  1299,    23,  1300,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,  1301,   319,   719,     0,
-  1302,   320,     0,     0,     0,     0,     0,   321,     0,     0,
+   310,    21,   311,   312,  1322,    23,  1323,     0,     0,   313,
+   314,   315,   316,   317,    26,     0,  1324,   319,   736,     0,
+  1325,   320,     0,     0,     0,     0,     0,   321,     0,     0,
    322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
    325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,     0,   329,     0,  1303,     0,  1285,  1286,  1287,
-    10,   167,    12,   301,   302,   303,     0,   304,    14,  1288,
-   330,  1289,  1290,  1291,  1292,  1293,  1294,  1295,  1296,  1297,
-  1298,    15,    16,   305,    17,    18,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,  1299,    23,
-  1300,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-  1301,   319,  1557,     0,  1302,   320,     0,     0,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     0,     0,     0,     0,   329,     0,  1303,
-     0,  1285,  1286,  1287,    10,   167,    12,   301,   302,   303,
-     0,   304,    14,  1288,   330,  1289,  1290,  1291,  1292,  1293,
-  1294,  1295,  1296,  1297,  1298,    15,    16,   305,    17,    18,
+     0,     0,     0,   329,     0,  1326,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,  1445,
+   330,  1308,  1309,  1310,    10,   167,    12,   301,   302,   303,
+     0,   304,    14,  1311,     0,  1312,  1313,  1314,  1315,  1316,
+  1317,  1318,  1319,  1320,  1321,    15,    16,   305,    17,    18,
     19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
-   311,   312,  1299,    23,  1300,     0,     0,   313,   314,   315,
-   316,   317,    26,     0,  1301,   319,     0,     0,  1302,   320,
+   311,   312,  1322,    23,  1323,     0,     0,   313,   314,   315,
+   316,   317,    26,     0,  1324,   319,   736,     0,  1325,   320,
      0,     0,     0,     0,     0,   321,     0,     0,   322,     0,
      0,     0,     0,     0,     0,     0,   323,   324,   325,     0,
      0,     0,     0,     0,   326,   327,   328,     0,     0,     0,
-     0,   329,     0,  1303,   300,     8,     9,    10,   167,    12,
-   301,   302,   303,   732,   304,    14,     0,     0,   330,     0,
+     0,   329,     0,  1326,     0,  1308,  1309,  1310,    10,   167,
+    12,   301,   302,   303,     0,   304,    14,  1311,   330,  1312,
+  1313,  1314,  1315,  1316,  1317,  1318,  1319,  1320,  1321,    15,
+    16,   305,    17,    18,    19,     0,   306,   307,    20,     0,
+   308,   309,   310,    21,   311,   312,  1322,    23,  1323,     0,
+     0,   313,   314,   315,   316,   317,    26,     0,  1324,   319,
+  1556,     0,  1325,   320,     0,     0,     0,     0,     0,   321,
+     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
+   328,     0,     0,     0,     0,   329,     0,  1326,     0,  1308,
+  1309,  1310,    10,   167,    12,   301,   302,   303,     0,   304,
+    14,  1311,   330,  1312,  1313,  1314,  1315,  1316,  1317,  1318,
+  1319,  1320,  1321,    15,    16,   305,    17,    18,    19,     0,
+   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
+  1322,    23,  1323,     0,     0,   313,   314,   315,   316,   317,
+    26,     0,  1324,   319,     0,     0,  1325,   320,     0,     0,
+     0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
+     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
+     0,     0,   326,   327,   328,     0,     0,     0,     0,   329,
+     0,  1326,   300,     8,     9,    10,   167,    12,   301,   302,
+   303,   749,   304,    14,     0,     0,   330,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
+    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
+    21,   311,   312,     0,    23,     0,   636,     0,   313,   314,
+   315,   316,   317,    26,     0,    27,   319,     0,     0,     0,
+   320,     0,     0,     0,     0,     0,   321,     0,     0,   937,
+     0,     0,     0,     0,     0,     0,     0,   323,   324,   938,
+     0,     0,     0,     0,     0,   326,   327,   328,     0,   639,
+     0,     0,   939,   641,     7,     8,     9,    10,   167,    12,
+   301,   302,   303,   749,   304,    14,     0,     0,     0,   330,
      0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
    305,    17,    18,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,   619,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
+   309,   310,    21,   311,   312,     0,    23,     0,   636,     0,
+   313,   314,   315,   316,   317,    26,     0,    27,    28,     0,
      0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,   902,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   903,     0,     0,     0,     0,     0,   326,   327,   328,
-     0,   622,     0,     0,   904,   624,     7,     8,     9,    10,
-   167,    12,   301,   302,   303,   732,   304,    14,     0,     0,
+     0,  1201,     0,     0,     0,     0,     0,     0,     0,   323,
+   324,  1202,     0,     0,     0,     0,     0,   326,   327,   328,
+     0,   639,     0,     0,  1203,   641,   300,     8,     9,    10,
+     0,    12,   301,   302,   303,     0,   304,    14,     0,     0,
      0,   330,     0,     0,     0,     0,     0,     0,     0,     0,
      0,    16,   305,    17,    18,    19,     0,   306,   307,    20,
      0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-   619,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-    28,     0,     0,     0,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,  1184,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,  1185,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,   622,     0,     0,  1186,   624,     7,     8,
+   636,     0,   313,   314,   315,   316,   317,    26,     0,    27,
+   319,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   321,     0,     0,   937,     0,     0,     0,     0,     0,     0,
+     0,   323,   324,   938,     0,     0,     0,     0,     0,   326,
+   327,   328,     0,   639,     0,     0,   939,   641,     7,     8,
      9,    10,     0,    12,   301,   302,   303,     0,   304,    14,
      0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    16,   305,    17,    18,    19,     0,   306,
    307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,   619,     0,   313,   314,   315,   316,   317,    26,
+    23,     0,   636,     0,   313,   314,   315,   316,   317,    26,
      0,    27,    28,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   321,     0,     0,  1184,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,  1185,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,   622,     0,     0,  1186,   624,
-   300,     8,     9,    10,     0,    12,   535,   302,   303,     0,
+     0,     0,   321,     0,     0,  1201,     0,     0,     0,     0,
+     0,     0,     0,   323,   324,  1202,     0,     0,     0,     0,
+     0,   326,   327,   328,     0,   639,     0,     0,  1203,   641,
+   300,     8,     9,    10,     0,    12,   552,   302,   303,     0,
    304,    14,     0,     0,     0,   330,     0,     0,     0,     0,
      0,     0,     0,     0,     0,    16,   305,    17,    18,    19,
      0,   306,   307,    20,     0,   308,   309,   310,    21,   311,
    312,     0,    23,     0,     0,     0,   313,   314,   315,   316,
    317,    26,     0,    27,   319,     0,     0,     0,   320,     0,
-     0,     0,     0,     0,   321,     0,     0,   554,     0,     0,
-     0,     0,     0,     0,     0,   323,   324,   555,     0,     0,
+     0,     0,     0,     0,   321,     0,     0,   571,     0,     0,
+     0,     0,     0,     0,     0,   323,   324,   572,     0,     0,
      0,     0,     0,   326,   327,   328,   300,     8,     9,    10,
-   556,    12,   535,   302,   303,     0,   304,    14,     0,     0,
+   573,    12,   552,   302,   303,     0,   304,    14,     0,     0,
      0,     0,     0,     0,     0,     0,     0,   330,     0,     0,
      0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
      0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
      0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,  1406,   320,     0,     0,     0,     0,     0,
+   319,     0,     0,  1418,   320,     0,     0,     0,     0,     0,
    321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
      0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
    327,   328,     0,     0,     0,     0,   329,   300,     8,     9,
@@ -2338,16 +2384,16 @@ static const short yytable[] = {    59,
     27,   319,     0,     0,     0,     0,     0,     0,     0,     0,
      0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
      0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     7,     8,     9,    10,   329,    12,   535,
+   326,   327,   328,     7,     8,     9,    10,   329,    12,   552,
    302,   303,     0,   304,    14,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   330,     0,     0,     0,    16,   305,
     17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
    310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
    314,   315,   316,   317,    26,     0,    27,    28,     0,     0,
      0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-  1499,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-  1500,     0,     0,     0,     0,     0,   326,   327,   328,   300,
-     8,     9,    10,  1501,    12,   301,   302,   303,     0,   304,
+  1505,     0,     0,     0,     0,     0,     0,     0,   323,   324,
+  1506,     0,     0,     0,     0,     0,   326,   327,   328,   300,
+     8,     9,    10,  1507,    12,   301,   302,   303,     0,   304,
     14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    330,     0,     0,     0,    16,   305,    17,     0,    19,     0,
    306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
@@ -2364,7 +2410,7 @@ static const short yytable[] = {    59,
      0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
      0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
    323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,   300,     8,     9,    10,   329,    12,   535,   302,   303,
+   328,   300,     8,     9,    10,   329,    12,   552,   302,   303,
      0,   304,    14,     0,     0,     0,     0,     0,     0,     0,
      0,     0,   330,     0,     0,     0,    16,   305,    17,     0,
     19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
@@ -2373,15 +2419,15 @@ static const short yytable[] = {    59,
      0,     0,     0,     0,     0,   321,     0,     0,   322,     0,
      0,     0,     0,     0,     0,     0,   323,   324,   325,     0,
      0,     0,     0,     0,   326,   327,   328,   300,     8,     9,
-    10,   329,    12,   535,   302,   303,     0,   304,    14,     0,
+    10,   329,    12,   552,   302,   303,     0,   304,    14,     0,
      0,     0,     0,     0,     0,     0,     0,     0,   330,     0,
      0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
     20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
      0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,   319,   568,     0,     0,     0,     0,     0,     0,     0,
+    27,   319,   585,     0,     0,     0,     0,     0,     0,     0,
      0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
      0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,   300,     8,     9,    10,   569,    12,   535,
+   326,   327,   328,   300,     8,     9,    10,   586,    12,   552,
    302,   303,     0,   304,    14,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   330,     0,     0,     0,    16,   305,
     17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
@@ -2390,16 +2436,16 @@ static const short yytable[] = {    59,
      0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
    322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
    325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,     0,   329,   607,   300,     8,     9,    10,     0,
-    12,   535,   302,   303,     0,   304,    14,     0,     0,     0,
+     0,     0,     0,   329,   624,   300,     8,     9,    10,     0,
+    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
    330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     16,   305,    17,    18,    19,     0,   306,   307,    20,     0,
    308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
      0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
      0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
-     0,     0,   554,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   555,     0,     0,     0,     0,     0,   326,   327,
-   328,  1144,     8,     9,    10,   556,    12,   535,   302,   303,
+     0,     0,   571,     0,     0,     0,     0,     0,     0,     0,
+   323,   324,   572,     0,     0,     0,     0,     0,   326,   327,
+   328,  1161,     8,     9,    10,   573,    12,   552,   302,   303,
      0,   304,    14,     0,     0,     0,     0,     0,     0,     0,
      0,     0,   330,     0,     0,     0,    16,   305,    17,     0,
     19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
@@ -2414,9 +2460,9 @@ static const short yytable[] = {    59,
     20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
      0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
     27,    28,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   321,     0,     0,  1499,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,  1500,     0,     0,     0,     0,     0,
-   326,   327,   328,   300,     8,     9,    10,  1501,    12,   535,
+     0,   321,     0,     0,  1505,     0,     0,     0,     0,     0,
+     0,     0,   323,   324,  1506,     0,     0,     0,     0,     0,
+   326,   327,   328,   300,     8,     9,    10,  1507,    12,   552,
    302,   303,     0,   304,    14,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   330,     0,     0,     0,    16,   305,
     17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
@@ -2425,7 +2471,7 @@ static const short yytable[] = {    59,
      0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
    322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
    325,     0,     0,     0,     0,     0,   326,   327,   328,   300,
-     8,     9,    10,   536,    12,   535,   302,   303,     0,   304,
+     8,     9,    10,   553,    12,   552,   302,   303,     0,   304,
     14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    330,     0,     0,     0,    16,   305,    17,     0,    19,     0,
    306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
@@ -2433,815 +2479,805 @@ static const short yytable[] = {    59,
     26,     0,    27,   319,     0,     0,     0,     0,     0,     0,
      0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
      0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,   300,     8,     9,    10,   539,
-    12,   535,   302,   303,     0,   304,    14,     0,     0,     0,
+     0,     0,   326,   327,   328,   300,     8,     9,    10,   556,
+    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   330,     0,     0,     0,
     16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
    308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
      0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
      0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
-     0,     6,   322,     7,     8,     9,    10,    11,    12,    13,
-   323,   324,   325,     0,    14,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,     0,   329,     0,    15,    16,     0,
-    17,    18,    19,     0,     0,     0,    20,     0,     0,     0,
-     0,    21,   330,     0,    22,    23,    24,     0,    25,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
-    29,     0,     7,     8,     9,    10,     0,     0,   246,     0,
-    30,     0,     0,     0,     0,     0,     0,     0,     0,   166,
-    31,     7,     8,     9,    10,   167,    12,    13,    32,     0,
-    18,     0,    14,    33,     0,     0,     0,     0,    34,     0,
-    21,     0,     0,     0,     0,     0,    16,     0,    17,    18,
-    19,     0,     0,    26,    20,    27,    28,     0,     0,    21,
-     0,     0,     0,    23,     0,     0,   168,     0,     0,   193,
-     0,     0,    26,     0,    27,    28,     0,     0,   764,   194,
-     7,     8,   765,    10,   167,    12,    13,    32,    30,     0,
-     0,    14,   195,     0,     0,     0,     0,     0,    31,     0,
-     0,     0,     0,     0,     0,    16,    32,    17,    18,    19,
-     0,    33,     0,    20,     0,     0,    34,     0,    21,     0,
-     0,     0,    23,   766,     0,   168,     0,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,     0,   767,     0,   768,
-     0,     0,     0,     0,     0,     0,     6,    30,     7,     8,
-     9,    10,    11,    12,    13,     0,     0,    31,     0,    14,
-     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-    33,     0,     0,    16,     0,    17,    18,     0,     0,     0,
-     0,    20,     0,     0,     0,     0,    21,     0,     0,     0,
-    23,     0,     0,   438,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,     0,     0,    29,     0,  -387,     8,     9,
-  -387,  -387,    12,   246,     0,    30,     0,     0,    14,     0,
-     0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-     0,     0,    16,    32,    17,  -387,     0,     0,    33,     0,
-    20,     0,     0,     0,     0,  -387,     0,     0,     0,    23,
-     0,   619,     0,     0,     0,     0,     0,     0,    26,     0,
-   130,   131,     7,     8,     9,    10,   205,    12,   206,     0,
-     0,     0,     0,    14,   620,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   621,     0,     0,    16,     0,    17,
-    18,     0,  -387,     0,   622,    20,     0,   623,   624,     0,
-    21,     0,     0,     0,    23,     0,     0,     0,     0,     0,
-     0,     0,     0,    26,     0,    27,    28,     0,     0,   207,
-     0,  1037,     8,   765,    10,   205,    12,   206,     0,    30,
-     0,     0,    14,     0,     0,     0,     0,     0,     0,    31,
-     0,     0,     0,     0,     0,     0,    16,    32,    17,    18,
-     0,     0,    33,     0,    20,     0,     0,     0,     0,    21,
-     0,     0,     0,    23,     0,     0,     0,     0,     0,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,     0,     0,
-  1039,     0,     0,     0,     0,     0,     0,     0,    30,     7,
-     8,     9,    10,   205,    12,   206,     0,     0,    31,     0,
-    14,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-     0,    33,     0,     0,    16,     0,    17,    18,     0,     0,
-     0,     0,    20,     0,     0,     0,     0,    21,     0,     0,
-     0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     0,     0,  1423,     0,     7,     8,
-     9,    10,   167,    12,    13,     0,    30,     0,     0,    14,
-     0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
-     0,     0,     0,    16,    32,    17,    18,     0,     0,    33,
-     0,    20,     0,     0,     0,     0,    21,     0,     0,     0,
-    23,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,     7,     8,     9,    10,   205,    12,   206,
-     0,     0,     0,     0,    14,    30,     0,     0,     0,     0,
-     7,     8,     9,    10,     0,    31,    13,     0,    16,     0,
-    17,    18,     0,    32,     0,     0,    20,     0,    33,     0,
-     0,    21,     0,     0,     0,    23,     0,     0,    18,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,    21,     0,
-     0,     7,     8,     9,    10,     0,     0,   518,     0,     0,
-    30,    26,     0,    27,    28,     0,     0,     0,     0,     0,
-    31,     0,     0,     0,     0,     0,     0,   474,    32,    18,
-     0,     0,     0,    33,     0,     0,     0,   475,     0,    21,
-     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-   476,     0,    26,     0,    27,    28,     0,     0,     0,     0,
-    18,     0,     0,     0,     0,     0,     0,     0,   193,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   194,     0,
-     0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-     0,   195,   571,   572,   573,   574,   575,   576,   577,   578,
-   579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
-   589,   590,   591,   592,   571,   572,   573,   574,   575,   576,
-   577,   578,   579,   580,   581,   582,   583,   584,   585,   586,
-   587,   588,   589,   590,   591,   592,   571,   572,   573,   574,
-   575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
-   585,   586,   587,   588,   589,   590,   591,   592,     0,     0,
-     0,     0,  1238,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   660,     0,     0,
-  1547,   571,   572,   573,   574,   575,   576,   577,   578,   579,
-   580,   581,   582,   583,   584,   585,   586,   587,   588,   589,
-   590,   591,   592,  1565,   571,   572,   573,   574,   575,   576,
-   577,   578,   579,   580,   581,   582,   583,   584,   585,   586,
-   587,   588,   589,   590,   591,   592,   571,   572,   573,   574,
-   575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
-   585,   586,   587,   588,   589,   590,   591,   592,   571,   572,
-   573,   574,   575,   576,   577,   578,   579,   580,   581,   582,
-     0,   584,   585,   586,   587,   588,   589,   590,   591,   592,
-   575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
-   585,   586,   587,   588,   589,   590,   591,   592,   576,   577,
-   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
-   588,   589,   590,   591,   592,   578,   579,   580,   581,   582,
-   583,   584,   585,   586,   587,   588,   589,   590,   591,   592
+     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
+   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
+   328,     0,     0,     8,     9,   329,   167,    12,    13,     0,
+     0,  1550,     0,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,   330,     0,     0,     0,     0,    16,     0,    17,
+    18,     0,     0,     0,     0,    20,     0,     0,     0,     0,
+     0,     0,     0,     0,    23,     0,     0,     0,     0,     0,
+     0,     0,     0,    26,     0,   130,   131,   588,   589,   590,
+   591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
+   601,   602,   603,   604,   605,   606,   607,   608,   609,   588,
+   589,   590,   591,   592,   593,   594,   595,   596,   597,   598,
+   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
+   609,     0,     0,     0,     0,  1261,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   677,     0,     0,  1546,   588,   589,   590,   591,   592,   593,
+   594,   595,   596,   597,   598,   599,   600,   601,   602,   603,
+   604,   605,   606,   607,   608,   609,  1564,   588,   589,   590,
+   591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
+   601,   602,   603,   604,   605,   606,   607,   608,   609,   588,
+   589,   590,   591,   592,   593,   594,   595,   596,   597,   598,
+   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
+   609,   588,   589,   590,   591,   592,   593,   594,   595,   596,
+   597,   598,   599,     0,   601,   602,   603,   604,   605,   606,
+   607,   608,   609
 };
 
 static const short yycheck[] = {     4,
-   174,   149,   150,   176,    23,   209,    55,   161,   175,     4,
-   349,   126,   717,   402,    80,   455,   156,    14,     4,   402,
-   251,    90,     4,    92,    46,    42,   482,   355,   355,   566,
-    35,   134,    80,   304,   305,    42,   863,    42,    84,   623,
-    35,   373,    59,   247,   133,   134,   630,   699,   716,    35,
-     4,  1304,    57,    35,    76,   402,    42,    42,   603,   646,
-    42,   503,   692,   787,  1481,  1388,   337,    72,   137,   793,
-   124,    62,   217,   218,    54,   133,    30,    31,   144,    84,
-    42,    35,   460,    88,     4,    90,    83,    92,    42,   440,
-   209,   769,   296,   771,  1482,   763,    42,    11,  1504,   218,
-   778,    11,   107,   108,    60,     4,  1480,    11,    47,   106,
-    33,    47,     0,   700,     7,    35,    12,    59,  1524,   490,
-   560,    37,    42,    12,   355,    33,   175,    54,   356,   357,
-    84,   136,   137,     0,   139,    62,    35,   203,   509,  1314,
-     1,     4,    47,    42,    37,   349,  1321,    74,    62,   140,
-     9,  1525,   169,   109,    93,    94,     1,    93,   165,    74,
-   165,     1,   169,    59,   169,   156,    62,   109,   624,   108,
-    59,   176,    35,    62,  1562,   155,   900,  1583,    59,    42,
-   408,   409,   136,   169,   169,    84,   109,   169,    93,    94,
-  1607,   213,   209,   109,   108,   149,   150,    58,   108,   538,
-   217,   218,    61,   108,   108,    33,    57,   169,     4,     5,
-    47,   165,   108,    58,   262,   169,   136,    62,    58,    62,
-   200,   212,    62,   169,    74,    54,    48,   108,  1481,   220,
-   247,     4,     4,    62,    47,    25,    47,   136,  1528,   193,
-   194,   149,   150,   151,  1567,   165,   237,    47,  1622,   169,
-    95,   248,     4,    47,    93,    95,    93,   346,    54,    93,
-    56,    57,    35,    35,   916,   108,   165,   919,    58,    60,
-   169,   108,    62,   136,    70,     3,     4,     5,   718,   296,
-    93,    94,    93,    35,    80,   136,  1576,   195,   346,   358,
-   393,    93,   297,    93,   448,   108,   342,   108,    94,    93,
-  1024,    25,   165,    27,    74,    95,   169,    58,   960,   961,
-  1485,   941,  1036,    59,   306,   307,   643,   862,   109,    74,
-   904,   149,   150,   151,   329,   176,   474,   475,    56,    57,
-   322,   385,   349,   325,    58,   682,   328,   342,    62,   331,
-   672,   486,   487,   335,    59,   350,  1070,    98,  1072,   494,
-   739,   343,    80,   358,   359,   404,   739,    60,   355,  1534,
-   711,   712,   108,   508,   948,     4,     5,   195,   487,     4,
-     5,    95,    62,    93,    60,    59,   107,    25,    54,    27,
-    12,   612,   527,  1061,    74,    47,    62,    47,   342,   406,
-    47,    60,    54,   108,   182,    27,   735,   402,    74,    31,
-   405,    25,     3,     4,     5,   359,   109,    64,   945,  1584,
-    58,   995,    74,    48,    62,    47,   402,    56,    57,   647,
-  1247,    56,    57,   109,   108,   442,  1013,    59,    60,   498,
-    62,    93,    64,    93,    27,   442,    93,   442,    31,   359,
-  1209,  1210,    25,   342,    27,   901,    47,    95,   402,    25,
-    60,    27,    47,    54,  1223,    56,    57,   442,   506,   450,
-   359,    93,    94,   468,   533,     4,     5,    60,    58,   486,
-   487,    64,    62,    54,   496,    58,   108,   494,    38,    62,
-     4,     5,    58,  1135,  1136,     9,    62,   865,   442,    47,
-    31,   508,    93,   498,    54,    59,   359,    58,    93,    94,
-  1168,   506,   493,   402,    74,    44,    64,    54,   359,    47,
-   527,    75,    95,    77,   468,    54,   109,    56,    57,    95,
-   474,   475,   442,    54,   506,    47,    58,    74,   533,    59,
-    54,   536,    56,    57,   539,    93,   710,  1205,   543,   544,
-   545,   546,   547,   442,   984,    75,    70,    47,     8,     9,
-  1377,   556,   506,   942,    14,    93,    80,    47,   604,   942,
-   109,   566,   554,   555,   569,    47,   474,   475,   476,   468,
-   673,    93,  1014,  1157,  1016,   803,    36,   680,  1020,   442,
-  1349,    54,   910,   910,    12,    45,   506,    59,    60,  1358,
-  1359,   680,  1361,    93,    94,   942,    54,    54,    47,   604,
-   649,    74,  1186,    93,    94,    47,   675,   506,   812,    93,
-    54,    93,   757,    47,    47,    64,    74,    74,   623,     3,
-     4,     5,     6,    54,   480,   630,    94,     3,     4,     5,
-    74,    59,   488,   650,    62,   906,    64,   634,    54,   688,
-    54,   690,   691,   506,    93,    94,   474,   475,   476,    47,
-   604,    93,    47,  1109,    47,   506,    47,    41,    74,    93,
-    93,   108,   681,    54,    48,    62,   620,   621,  1336,   623,
-   675,    54,    56,    57,   691,    62,   630,    74,    54,   910,
-    56,    57,    58,    74,   689,    75,   735,    74,   693,    62,
-     3,     4,     5,     6,   109,    93,    80,   716,    93,    47,
-    93,    74,    93,    47,    88,   604,    47,   935,   108,    47,
-    62,  1089,  1090,    54,    33,   800,   801,   802,   735,   788,
-   789,   769,   791,   771,   623,     4,     5,   776,    41,   777,
-   778,   630,    58,    74,   739,    48,   784,   108,    64,   108,
-   757,  1510,  1511,    56,    57,    93,     3,     4,     5,    93,
-   772,   773,    93,     4,     5,    93,   108,    11,     9,   781,
-  1202,  1203,  1204,    98,   769,  1104,   771,    80,   908,    48,
-     8,     9,   777,   778,    60,    88,    14,    56,    57,   784,
-     3,    47,   787,   788,   789,   739,   791,   769,   793,   771,
-   107,   108,     4,     5,   968,   812,   778,    54,    36,    56,
-    57,    80,   784,    54,  1182,    56,    57,    45,    93,    47,
-     4,     5,    60,  1191,  1192,   769,   111,   771,  1196,    70,
-    86,    87,     4,     5,   778,    91,    92,    93,    94,    80,
-   784,   150,   151,   787,    59,    60,  1064,  1065,  1066,   793,
-   739,    74,    54,    94,    56,    57,    62,  1105,  1106,   769,
-  1108,   771,    31,    94,    48,    93,   861,    75,   778,    77,
-  1238,   866,    56,    57,   784,  1570,    48,    94,   983,    62,
-   769,    44,   771,    93,    56,    57,   195,     4,     5,   778,
-   111,    54,   874,    93,    57,   784,    80,   953,   787,   894,
-    59,    60,     4,     5,   793,   900,    54,    74,    80,   904,
-     3,     4,     5,     6,    62,    59,   769,    74,   771,    74,
-   902,   903,    74,   910,    54,   778,    74,   908,   769,    11,
-   771,   784,    62,    59,    60,   776,   777,   778,   109,    56,
-    57,    59,     3,   784,    74,     6,   108,   942,    41,   944,
-   945,    74,    54,   948,    56,    57,   900,    27,   902,   903,
-   904,    31,   108,    56,    57,  1333,   942,   108,    70,  1399,
-    31,    59,   141,    54,   108,    27,    64,   146,    80,    31,
-    41,    62,   760,    54,  1313,  1415,    74,    75,  1027,    59,
-    60,    74,  1048,    74,    64,    56,    57,    74,   942,   108,
-   995,   109,   946,   947,   948,   783,  1374,    59,    60,    70,
-  1048,   900,   109,  1008,   108,   904,    54,  1155,  1156,    80,
-   329,   111,   329,  1061,    62,   194,   111,    88,  1040,  1024,
-    59,    60,    93,    27,  1046,  1047,    74,    74,  1050,  1051,
-  1258,  1036,  1054,     4,     5,   111,  1184,  1185,     4,     5,
-   948,   995,    59,   942,  1113,     3,     4,     5,     6,   948,
-    83,    84,     3,     4,     5,    74,  1061,    74,    75,    54,
-    77,    59,    60,    74,  1504,  1070,   111,  1072,    59,    60,
-  1024,    80,    81,    82,    83,    84,   108,    48,   108,  1061,
-   259,    47,  1036,    41,  1524,    56,    57,   995,    54,    58,
-    56,    57,   108,  1159,   108,  1100,   995,    48,    56,    57,
-     3,     4,     5,     6,    70,    56,    57,  1061,  1113,    80,
-   429,   430,    54,  1553,    80,     8,  1070,   111,  1072,  1111,
-   948,    59,    60,    93,    90,  1024,    47,    93,    94,  1518,
-    88,    59,    60,    59,    60,  1518,    59,  1036,    41,  1312,
-    64,  1061,   109,  1583,  1311,    48,  1313,    93,   465,  1168,
-    54,  1591,  1157,    56,    57,    60,   475,   476,     7,     8,
-     9,    14,  1061,    36,    64,    14,    64,   995,    64,    22,
-    60,  1070,  1220,  1072,  1179,   108,  1027,    80,   108,    62,
-    64,  1186,    31,  1522,  1179,    88,   108,    36,   108,   108,
-   108,   108,  1184,  1185,    64,  1200,    45,  1179,  1061,    64,
-   111,  1155,  1156,  1157,    75,    62,   108,     3,     4,     5,
-  1061,    60,    65,     4,     5,    75,   108,   536,    62,   536,
-   539,   108,   539,   108,    75,  1179,   543,    75,    75,   108,
-  1184,  1185,  1186,   108,  1612,    62,   555,   556,    59,   556,
-   419,  1029,  1030,   422,     3,     4,     5,  1155,  1156,  1157,
-   569,    62,   569,   108,   108,   434,   573,    48,  1157,  1179,
-    56,    57,  1311,   108,  1313,    56,    57,     3,     4,     5,
-  1058,   124,   111,   111,    94,    88,  1184,  1185,  1186,    74,
-  1179,    47,   108,   108,   601,   109,   108,  1186,   111,    80,
-   607,   470,   111,   472,   108,   148,  1313,    56,    57,  1304,
-   108,     4,     5,   108,    60,   109,   485,  1312,    59,  1314,
-    64,   630,  1304,   402,    64,    93,  1321,    59,  1522,  1314,
-    56,    57,  1304,   108,    59,  1330,  1321,  1155,  1156,  1157,
-    59,   108,  1314,    93,  1356,  1357,    93,    30,    31,  1321,
-    33,    93,  1496,   108,    93,    48,     3,     4,     5,   111,
-  1304,  1499,  1500,    56,    57,   108,  1184,  1185,  1186,     8,
-  1314,   109,   109,   108,    57,   108,    59,  1321,   108,   108,
-   108,    33,    65,    64,   111,   109,  1550,    80,    54,   468,
-   108,     3,     4,     5,  1304,   238,   239,     3,     4,     5,
-     6,     3,     4,     5,  1314,     7,     8,     9,   251,    56,
-    57,  1321,   108,  1425,   108,  1304,     3,     4,     5,   108,
-     7,     8,     9,   108,   108,  1314,   108,    62,    47,    31,
-   108,   111,  1321,   108,    36,    41,   108,  1215,  1216,    96,
-  1218,  1219,    48,  1221,    56,    57,    58,    62,    62,    60,
-    56,    57,    54,    60,    56,    57,    58,     9,   141,    60,
-    16,    60,   108,   146,   108,   108,   149,   150,   151,    56,
-    57,   108,   108,   193,   194,   195,   108,   108,   321,   108,
-  1475,    60,    88,    93,  1523,  1480,  1481,  1482,    93,    54,
-  1485,    64,    17,   176,   111,  1480,    93,   806,    93,   182,
-  1485,   103,   104,   105,    54,    60,  1501,   107,  1480,  1481,
-   193,   194,   195,  1485,    97,  1522,   108,  1499,  1500,    60,
-   363,    11,   108,  1518,   108,    60,   209,   108,  1426,   372,
-  1525,  1475,    60,    60,   217,   218,  1480,  1481,  1482,  1534,
-  1525,  1485,   385,  1555,   623,    93,    59,    64,   108,  1534,
-    60,   630,    11,  1525,   108,  1499,  1500,     3,     4,     5,
-    60,   108,  1534,   870,    11,    60,     0,  1562,  1346,  1347,
-  1480,  1481,     0,     0,  1518,  1485,   259,   746,   747,   170,
-   749,  1525,     2,    35,   673,  1413,  1475,   942,   442,  1584,
-  1534,  1480,  1481,  1482,   903,   904,  1485,   904,   169,  1584,
-  1549,  1499,  1500,  1501,     3,     4,     5,   165,  1426,   777,
-    56,    57,  1584,  1168,    94,  1525,   238,   139,  1562,  1398,
-  1622,  1248,   299,   928,  1534,   723,   923,  1622,  1336,  1518,
-   243,     3,     4,     5,     6,  1205,  1525,  1622,   777,   948,
-  1584,   784,   656,  1222,   921,  1534,   329,   200,   346,    48,
-  1622,    88,   604,    90,   124,    92,  1314,    56,    57,   502,
-   739,  1180,  1570,  1591,  1539,  1603,     3,     4,     5,    41,
-  1448,  1449,  1450,  1562,  1584,  1330,    48,  1601,  1622,  1003,
-    -1,  1499,  1500,  1501,    56,    57,   995,     1,    -1,     3,
-     4,     5,     6,    30,     8,  1584,    -1,    -1,    -1,    -1,
-   137,    -1,   139,    -1,     3,     4,     5,    -1,   787,     3,
-     4,     5,  1622,    -1,   793,    -1,    88,    54,    -1,    56,
-    57,    -1,   405,   406,    -1,   568,    -1,    41,    -1,  1507,
-  1508,    -1,    -1,  1622,    48,    -1,   419,    -1,    -1,   422,
-    54,    -1,    56,    57,    -1,   428,   429,   430,    -1,    -1,
-   470,   434,   472,    -1,   474,   475,   476,    56,    57,    -1,
-    54,    -1,    56,    57,    -1,   485,    -1,     9,    -1,   612,
-    12,    -1,    -1,    -1,    88,     3,     4,     5,   947,    -1,
-    78,    79,    80,    81,    82,    83,    84,   470,    -1,   472,
-    -1,   474,   475,   476,    -1,    -1,   479,  1575,    -1,    -1,
-    -1,    -1,   485,   486,   487,    47,    -1,   490,    -1,    -1,
-    -1,   494,    -1,    -1,    -1,    -1,    -1,    59,    -1,    61,
-    62,   900,    64,    -1,    -1,   904,   509,    -1,    56,    57,
-    -1,    -1,    -1,    75,    -1,    77,    -1,    80,   681,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1156,  1157,   692,
-    -1,    93,    94,   536,    -1,    -1,   539,     3,     4,     5,
-     6,   104,    -1,   942,    -1,    -1,   108,    -1,    -1,   948,
-    -1,   554,   555,   556,    -1,    -1,  1185,  1186,    -1,  1186,
-   723,    -1,    -1,   320,    -1,    -1,   569,    -1,    -1,    -1,
-   133,    -1,    -1,  1200,    -1,    41,    -1,    -1,    -1,    -1,
-    -1,   144,    48,    -1,    -1,     3,     4,     5,     6,    -1,
-    56,    57,    -1,    -1,    -1,    -1,   995,    -1,    -1,    -1,
-    -1,   358,    -1,    -1,    -1,    -1,    -1,  1234,  1235,  1236,
-  1237,    -1,    -1,    -1,    80,    -1,    -1,     7,     8,     9,
-    38,    39,    88,    41,    14,  1024,    -1,   630,     3,     4,
-     5,     6,    -1,    -1,     9,    -1,    54,  1036,    56,    57,
-   203,    31,    -1,    -1,    -1,    -1,    36,   650,     4,     5,
-    -1,    -1,    -1,     9,    -1,    45,    31,    -1,    -1,    -1,
-   461,    -1,    -1,    -1,  1153,  1154,    41,   468,    -1,   461,
-  1297,  1070,  1161,  1072,    -1,   238,   468,    -1,    -1,    54,
-    -1,    56,    57,    -1,    -1,    -1,   689,    -1,   691,   692,
-    -1,    47,    -1,    -1,    -1,    70,    -1,    -1,    54,   262,
-    56,    57,    -1,   460,   461,    80,   746,   747,    -1,   749,
-    -1,   468,    -1,    88,    70,    -1,    -1,    -1,    93,    -1,
-    -1,     7,     8,     9,    80,    -1,    -1,    -1,    14,    -1,
-    -1,    -1,   735,   534,    90,    -1,   776,    93,    94,    -1,
-    -1,   498,   534,   746,   747,    31,   749,    -1,  1375,    -1,
-    36,    -1,    -1,    -1,   757,    -1,    -1,   760,  1157,    45,
-    -1,    -1,    -1,    -1,    -1,   928,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   777,    -1,   533,   534,   941,    -1,
-   783,  1408,    -1,  1272,  1273,    -1,  1275,  1186,    -1,    -1,
-    -1,   354,    -1,   594,    -1,    -1,    -1,  1426,    -1,   600,
-    -1,    -1,   594,   806,    -1,    -1,    -1,    -1,   600,   566,
-    -1,   568,    -1,    -1,   571,   572,    -1,   574,   575,   576,
-   577,   578,   579,   580,   581,   582,   583,   584,   585,   586,
-   587,   588,   589,   590,   591,   592,   637,   594,   630,     3,
-     4,     5,     6,   600,    -1,   637,    -1,    -1,  1475,   412,
-    -1,    -1,    -1,    -1,  1481,  1482,    -1,    -1,    -1,    -1,
-   755,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    -1,  1500,  1501,   630,  1501,    -1,    -1,    41,    -1,    -1,
-   637,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-    -1,   786,    56,    57,    -1,    -1,    -1,   792,    -1,   902,
-   903,   904,   659,   660,    -1,    -1,   946,   947,   948,     4,
-     5,    -1,    -1,     8,     9,    -1,    80,    -1,   675,    14,
-    -1,    -1,    -1,    -1,    88,    -1,    -1,  1090,    -1,    -1,
-     3,     4,     5,     6,    -1,  1562,    -1,    -1,   941,   502,
-    -1,    36,    -1,   946,   947,   948,    -1,    -1,    -1,    -1,
-    45,  1578,    47,    -1,    -1,   995,    -1,    -1,    -1,    54,
-    -1,    56,    57,    -1,    -1,    -1,   723,   530,    41,    -1,
-    -1,    -1,    -1,  1600,    -1,    70,    -1,    -1,    -1,    -1,
-  1607,    54,    -1,    56,    57,    80,    -1,  1027,    -1,     3,
-     4,     5,   995,     7,    -1,    90,    -1,    -1,    93,    94,
-   895,    -1,   897,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   768,    -1,  1176,   806,    88,    30,    -1,    -1,  1182,
-   348,   349,   350,    37,    -1,    -1,  1029,  1030,    -1,    -1,
-    -1,   788,   789,    -1,   791,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,   806,
-    -1,    -1,    -1,    -1,   617,  1058,    -1,    -1,    -1,   860,
-   861,    -1,    -1,    -1,    -1,   866,    -1,    -1,   860,   861,
-   633,   828,    -1,    -1,   866,    -1,    -1,    -1,    -1,   880,
-    -1,   882,    -1,   884,    -1,    -1,    -1,    -1,   880,    -1,
-   882,    -1,   884,    -1,     3,     4,     5,     6,    -1,    -1,
-    -1,    -1,    -1,   860,   861,    -1,    -1,    -1,   865,   866,
-    -1,    -1,    -1,  1153,  1154,  1155,  1156,  1157,    -1,  1518,
-    -1,  1161,    -1,   880,    -1,   882,    -1,   884,    -1,   930,
-    -1,    -1,    41,    -1,    -1,  1298,  1299,    -1,   930,    48,
-     3,     4,     5,     6,  1184,  1185,  1186,    56,    57,    -1,
-  1153,  1154,  1155,  1156,  1157,    -1,    -1,    -1,  1161,    -1,
-    -1,    -1,    -1,   920,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   930,  1069,   976,  1071,  1217,    41,    88,
-    -1,  1184,  1185,  1186,   976,    -1,    -1,    -1,   945,    -1,
-    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    62,
-    -1,   958,    -1,   995,    -1,    -1,    -1,    70,    -1,    -1,
-    -1,    -1,  1215,  1216,    -1,  1218,  1219,    80,  1221,   976,
-    -1,    -1,    -1,    -1,    -1,    88,    -1,  1390,    -1,    -1,
-    93,  1126,  1272,  1273,    -1,  1275,     4,     5,   995,    -1,
-     8,     9,    -1,    -1,    -1,    -1,    14,     4,    -1,  1412,
-  1413,    -1,     3,     4,     5,     6,    -1,    14,     9,    -1,
-    28,    -1,    30,    -1,    -1,    -1,    -1,    24,    36,  1272,
-  1273,    -1,  1275,    30,    31,    -1,    33,    45,    35,    -1,
-    31,    -1,  1039,    -1,    -1,    42,    54,    -1,    56,    57,
-    41,    -1,   620,   621,    -1,    -1,    -1,    -1,    55,    -1,
-    57,    -1,    -1,    54,    -1,    56,    57,    -1,    65,  1312,
-  1313,  1206,    -1,    -1,    -1,    72,  1211,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    93,    83,    84,    -1,    80,
-  1493,    -1,  1089,  1090,    -1,    -1,  1093,    88,    -1,    -1,
-    -1,    -1,    93,  1346,  1347,    -1,   909,    -1,   911,   106,
-    -1,    -1,    -1,    -1,    -1,    -1,  1113,   348,   349,   350,
-   688,    -1,   690,   691,    -1,   693,    -1,  1262,    -1,  1170,
-    -1,  1172,    -1,  1174,    -1,    -1,    -1,   134,  1170,   136,
-  1172,    -1,  1174,   140,   141,    -1,  1426,    -1,   145,   146,
-   953,    -1,   149,   150,   151,    -1,    -1,    -1,    -1,    -1,
-     4,     5,    -1,    -1,     8,     9,    -1,   735,   165,    -1,
-    14,    -1,   169,  1170,    -1,  1172,    -1,  1174,   175,   176,
-     7,     8,     9,  1426,    28,  1182,    30,    14,    -1,    -1,
-    -1,    -1,    36,    -1,  1191,  1192,   193,   194,   195,  1196,
-    -1,    45,    -1,    47,    31,  1448,  1449,  1450,    -1,    36,
-    54,    -1,    56,    57,    -1,    -1,  1213,  1214,    45,  1499,
-  1500,  1501,    -1,    -1,    -1,   222,    70,    -1,  1269,    -1,
-  1365,  1366,    -1,    60,    -1,    -1,    80,  1269,    -1,    -1,
-    -1,  1238,   239,    -1,   812,  1048,    90,  1382,    -1,    93,
-    94,   248,    -1,    -1,    -1,    -1,  1499,  1500,  1501,    -1,
-    -1,    -1,   259,    -1,  1507,  1508,    -1,    -1,    -1,     3,
-     4,     5,  1269,     7,     8,     9,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-     3,     4,     5,     6,    -1,    -1,  1293,    31,    -1,    -1,
-   297,   298,    36,    -1,    -1,    -1,  1441,  1442,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   885,    31,   887,
-    -1,    -1,    56,    57,    -1,  1460,  1461,    -1,    41,  1132,
-   898,    -1,  1575,    -1,   902,   903,  1333,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,   342,    -1,    -1,    -1,   346,
-    -1,   348,   349,   350,    -1,  1352,  1159,    70,    -1,     4,
-     5,    -1,   359,     8,     9,    -1,    -1,    80,    -1,    14,
-    -1,    -1,    -1,    -1,    -1,    88,    -1,  1374,   946,   947,
-    93,    -1,    -1,    28,    -1,    30,    -1,    -1,    -1,   620,
-   621,    36,   623,    -1,  1426,    -1,   393,    -1,    -1,   630,
-    45,    -1,    -1,    -1,    -1,   402,    -1,   404,   405,    54,
-    -1,    56,    57,    58,     4,     5,    -1,  1220,     8,     9,
-    -1,    -1,   419,    -1,    14,   422,    -1,    -1,    -1,  1426,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   434,    28,    -1,
-    30,    -1,    -1,    -1,    -1,   442,    36,    -1,    93,  1446,
-  1447,    -1,    -1,    -1,    -1,    45,    -1,   688,  1455,   690,
-   691,    -1,   693,    -1,    54,    -1,    56,    57,    -1,    -1,
-    -1,    -1,    -1,   470,    -1,   472,    -1,   474,   475,   476,
-    -1,    -1,    -1,   480,    -1,    -1,  1483,    -1,   485,    -1,
-    -1,   488,     3,     4,     5,     6,    -1,     8,     9,    10,
-    11,    -1,    13,    14,   735,    -1,    -1,    -1,    -1,   506,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,   544,   545,   546,
-   547,     3,     4,     5,     6,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,
-    -1,   812,    93,    94,    -1,  1153,  1154,  1155,  1156,    41,
-    -1,    -1,    -1,  1161,    -1,    47,    -1,    -1,    -1,   110,
-    -1,    -1,    54,    -1,    56,    57,    -1,   604,    -1,   606,
-    -1,    -1,    -1,    -1,    -1,  1612,  1184,  1185,    70,    -1,
-    -1,   618,    -1,   620,   621,    -1,   623,    -1,    80,    -1,
-    -1,    -1,    -1,   630,    -1,    -1,    88,   634,    90,    -1,
-    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   649,    -1,   885,    -1,   887,    -1,     4,     5,
-    -1,     7,     8,     9,    -1,    -1,    12,   898,    14,    -1,
-    -1,   902,   903,   904,    -1,    -1,   673,    -1,    -1,    -1,
-    -1,    -1,    28,   680,    30,    31,    -1,    -1,    -1,    -1,
-    36,   688,   689,   690,   691,   692,   693,    -1,    -1,    45,
-    -1,    47,    -1,    -1,  1272,  1273,    -1,  1275,    54,    -1,
-    56,    57,    -1,    -1,    -1,   946,   947,   948,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,   735,    -1,
-    -1,    -1,   739,    -1,    90,    -1,    -1,    93,    94,   746,
-   747,    -1,   749,    -1,    -1,     3,     4,     5,     6,     7,
-     8,     9,    -1,    -1,   995,    -1,    14,    -1,    -1,   766,
-    -1,    -1,   769,    -1,   771,    -1,    -1,    -1,    -1,   776,
-   777,   778,    -1,    31,     4,     5,    -1,   784,    36,     9,
-   787,    -1,    -1,    41,    -1,    -1,   793,    45,    -1,    47,
-    -1,    -1,    -1,   800,   801,   802,    54,    -1,    56,    57,
-    -1,    -1,    -1,    -1,    -1,   812,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    47,     4,    -1,
-    -1,    -1,    80,    -1,    54,    -1,    56,    57,    14,    -1,
-    88,    -1,    90,    -1,    -1,    93,    94,    23,    24,    -1,
-    70,    -1,    -1,    -1,    30,    31,    -1,    33,    -1,    35,
-    80,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    55,
-    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,   885,    65,
-   887,    -1,    -1,    -1,    -1,    -1,    72,   894,    -1,    -1,
-    -1,   898,    -1,   900,    -1,   902,   903,   904,    84,    -1,
-    -1,    -1,    -1,   910,    -1,    -1,    -1,    -1,     3,     4,
-     5,     6,  1153,  1154,  1155,  1156,  1157,    -1,    -1,    -1,
-  1161,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    -1,   942,    31,   944,    -1,   946,
-   947,   948,    -1,  1184,  1185,  1186,    41,    -1,    -1,    -1,
-   136,    -1,    -1,    -1,   140,   141,    -1,    -1,    -1,    54,
-   146,    56,    57,   149,   150,   151,    -1,    -1,     3,     4,
-     5,     6,    -1,    -1,     9,    70,    -1,    -1,    -1,   165,
-    -1,    -1,    -1,   169,    -1,    80,    -1,    -1,   995,   175,
-   176,    -1,    -1,    88,    -1,    -1,    31,    -1,    93,    -1,
-    -1,  1008,    -1,    -1,    -1,    -1,    41,   193,   194,   195,
-    -1,    -1,    47,    -1,    -1,    -1,    -1,  1024,    -1,    54,
-  1027,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,  1036,
-    -1,  1272,  1273,    -1,  1275,    70,   222,    -1,    -1,    -1,
-    -1,    -1,  1049,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-    -1,    -1,     4,    88,  1061,    90,    -1,    -1,    93,    94,
-    -1,    -1,    -1,  1070,    -1,  1072,    -1,    -1,     3,     4,
-     5,     6,    -1,   259,     9,    -1,    -1,    -1,    30,    31,
-    -1,    33,    -1,    35,     4,     5,    -1,    -1,     8,     9,
-    42,    -1,    -1,  1100,    14,    -1,    31,    -1,  1105,  1106,
-    -1,  1108,    -1,    55,    -1,    57,    41,    -1,    28,    -1,
-    30,   297,   298,    -1,    -1,    -1,    36,    -1,    -1,    54,
-    -1,    56,    57,    -1,    -1,    45,    -1,    -1,    80,    -1,
-    -1,    -1,    -1,    -1,    54,    70,    56,    57,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    80,  1153,  1154,  1155,  1156,
-  1157,    -1,    -1,    88,  1161,    -1,   342,    -1,    93,    -1,
-   346,    -1,   348,   349,   350,    -1,    -1,    -1,    -1,   355,
-    -1,    -1,    -1,   359,    -1,    -1,    -1,  1184,  1185,  1186,
-    -1,   133,   134,    -1,   136,    -1,    -1,    -1,   140,   141,
-    -1,    -1,   144,    -1,   146,    -1,    -1,   149,   150,   151,
-    -1,    -1,    -1,    -1,   156,    -1,    -1,   393,    -1,    -1,
-  1217,    -1,    -1,   165,    -1,  1222,   402,   169,   404,   405,
-    -1,    -1,    -1,   175,   176,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   419,    -1,    -1,   422,    -1,    -1,    -1,
-    -1,   193,   194,   195,    -1,    -1,    -1,    -1,   434,    -1,
-    -1,   203,    -1,    -1,    -1,    -1,   442,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,  1272,  1273,    -1,  1275,    -1,
-   222,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    -1,   470,    -1,   472,    -1,   474,   475,
-   476,    -1,    -1,    -1,   480,    -1,    -1,    -1,    -1,   485,
-    -1,    -1,   488,    -1,  1311,  1312,  1313,   259,    -1,     1,
-    -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-   506,    -1,    14,  1330,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,     3,     4,     5,     6,    -1,    28,    -1,    30,    31,
-    32,    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    46,    -1,    48,    -1,   544,   545,
-   546,   547,    54,    -1,    56,    57,    -1,    -1,    60,    41,
-    62,     3,     4,     5,     6,    -1,    -1,   329,    70,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    80,    -1,
-    62,    -1,    -1,    -1,   346,    -1,    88,    -1,    70,    -1,
-    -1,    93,   354,    -1,    -1,    -1,    -1,   359,    80,    41,
-    -1,    -1,    -1,    -1,    -1,    -1,    88,   109,   604,  1426,
-   606,    93,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
-    -1,    -1,    -1,    -1,   620,   621,    -1,   623,    70,    -1,
-    -1,   393,    -1,    -1,   630,    -1,    -1,    -1,    80,    -1,
-    -1,    -1,   404,    -1,    -1,    -1,    88,   643,    -1,    -1,
-    -1,    93,    -1,   649,    -1,    -1,    -1,   419,    -1,    -1,
-   422,    -1,    -1,    -1,    -1,    -1,   428,   429,   430,    -1,
-    -1,    -1,   434,    -1,    -1,    -1,    -1,   673,     4,    -1,
-   442,    -1,  1499,  1500,  1501,   681,    -1,    -1,    -1,    -1,
-    -1,    -1,   688,   689,   690,   691,   692,   693,    -1,    -1,
-    -1,  1518,    -1,    -1,    -1,    -1,  1523,    -1,   470,    35,
-   472,    -1,   474,   475,   476,    -1,    42,    -1,   480,    -1,
-   716,    -1,    -1,   485,    -1,    -1,   488,    -1,    -1,    55,
-    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   735,
-    -1,    -1,    -1,   739,   506,    -1,    -1,    -1,    -1,    -1,
-   746,   747,    -1,   749,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   763,    -1,    -1,
-   766,    -1,    -1,   769,   536,   771,    -1,   539,    -1,    -1,
-   776,   777,   778,    -1,     3,     4,     5,     6,   784,    -1,
-     9,   787,   554,   555,   556,    -1,    -1,   793,    -1,    -1,
-    -1,    -1,    -1,    -1,   800,   801,   802,   569,    -1,    -1,
-   136,    -1,    31,    -1,   140,    -1,   812,    -1,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,   165,
-    -1,    -1,    -1,   169,    -1,    -1,    -1,     4,     5,   175,
-   176,    70,     9,    -1,    -1,   617,    -1,    -1,    -1,    -1,
-    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,   630,    88,
-    -1,    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   649,    -1,   885,
-    47,   887,    -1,    -1,    -1,    -1,   222,    54,   894,    56,
-    57,    -1,   898,    -1,   900,    -1,   902,   903,   904,    -1,
-    -1,   673,    -1,    70,   910,     4,     5,    -1,   680,     8,
-     9,    -1,    -1,    80,    -1,    14,   688,   689,   690,   691,
-    -1,    -1,    -1,    90,    -1,    -1,    93,    94,    -1,    -1,
-    82,    -1,    -1,    -1,    -1,    -1,   942,    36,   944,    -1,
-   946,   947,   948,    -1,    -1,    -1,    45,    -1,    47,    -1,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,    -1,    -1,   735,    -1,    -1,    -1,   739,    -1,    -1,
-    -1,    70,    -1,    -1,   746,   747,    -1,   749,    -1,    -1,
-    -1,    80,     3,     4,     5,     6,     7,     8,     9,   995,
-    -1,    90,    -1,    14,    93,    94,    -1,   769,    -1,   771,
-    -1,    -1,  1008,    -1,   776,   777,   778,   159,    -1,    -1,
-    31,    -1,   784,    -1,    -1,    36,    -1,    -1,  1024,    -1,
-    41,  1027,    -1,   359,    45,    -1,    47,    -1,    -1,    -1,
-  1036,    -1,    -1,    54,   806,    56,    57,    -1,    -1,   191,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,    -1,   204,    -1,    -1,  1061,    -1,    -1,    -1,    80,
-    -1,    -1,    -1,    -1,  1070,    -1,  1072,    88,   404,    90,
-    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,     7,     8,     9,  1100,    -1,    12,    -1,    14,  1105,
-  1106,    -1,  1108,    -1,    -1,    -1,   442,    -1,    -1,    -1,
-    -1,    -1,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,
-    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
-   902,   903,   904,    -1,    -1,    -1,   908,   909,    54,    -1,
-    56,    57,    -1,    -1,   480,    -1,    -1,  1153,  1154,  1155,
-  1156,  1157,   488,    -1,    70,  1161,     4,    -1,    -1,    -1,
-    -1,    -1,  1168,    -1,    80,    -1,    -1,    -1,    -1,    -1,
-   506,    -1,    88,    -1,   946,   947,   948,    93,  1184,  1185,
-  1186,   953,    30,    31,    -1,    33,    -1,    35,    -1,    -1,
-    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,  1205,
-     4,     5,    -1,     7,     8,     9,    -1,    55,    -1,    57,
-    14,  1217,    -1,    -1,    -1,    -1,  1222,    -1,    -1,     3,
-     4,     5,     6,   995,    28,     9,    30,    31,    -1,    -1,
-    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    45,    -1,    -1,    48,    -1,    -1,    31,    -1,    -1,
-    54,    -1,    56,    57,    -1,  1027,    -1,    41,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1272,  1273,    -1,  1275,
-    54,    -1,    56,    57,    -1,    -1,  1048,    -1,    -1,    -1,
-    -1,    -1,     3,     4,     5,     6,    70,    -1,   136,  1061,
-    -1,    -1,   140,   141,  1300,    -1,    80,    -1,   146,    -1,
-    -1,   149,   150,   151,    88,  1311,  1312,  1313,    -1,    93,
-    31,    -1,    -1,   649,    -1,    -1,    -1,   165,    -1,    -1,
-    41,   169,    -1,    -1,  1330,    -1,   478,   175,   176,    -1,
-  1336,   483,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
-     3,     4,     5,     6,    -1,   193,   194,   195,    -1,    70,
-    -1,    -1,   688,   689,   690,   691,    -1,    -1,   510,    80,
-  1132,    -1,    -1,    -1,   516,    -1,    33,    88,    -1,    -1,
-    -1,    -1,    93,    -1,   222,    -1,   528,   529,    41,   531,
-    -1,  1153,  1154,  1155,  1156,  1157,    -1,  1159,    55,  1161,
-    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,   735,
-    -1,    -1,    -1,   739,    -1,     4,     5,    70,     7,     8,
-     9,   259,  1184,  1185,  1186,    14,    -1,    80,    -1,    -1,
-  1426,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    28,
-    93,    30,    31,   769,    -1,   771,    -1,    36,    -1,    -1,
-   776,   777,   778,    -1,    -1,  1217,    45,    -1,   784,    -1,
-  1222,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,    -1,    -1,    -1,   626,   627,    -1,    -1,    -1,   631,
-    -1,    -1,   149,   150,   151,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1499,  1500,  1501,    -1,    -1,    -1,    -1,
-  1272,  1273,    -1,  1275,    -1,    41,    -1,   355,   175,    -1,
-    -1,   359,  1518,    -1,    -1,    -1,    -1,  1523,    54,    -1,
-    56,    57,    -1,    -1,    -1,    -1,   193,   194,   195,    -1,
-    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,  1311,
-  1312,  1313,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    88,    -1,    -1,   222,   404,    93,    -1,    -1,
-    -1,    -1,    -1,    -1,    55,    -1,     3,     4,     5,     6,
-    -1,   419,    -1,    -1,   422,    -1,    -1,    -1,    -1,    -1,
-   107,   108,    -1,    -1,    -1,    -1,   434,    -1,    -1,    80,
-    -1,    -1,    83,    -1,   442,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,     3,     4,
-     5,     6,    -1,   104,     9,   106,    -1,    54,    -1,    56,
-    57,    -1,   470,    -1,   472,    62,   474,   475,   476,    -1,
-    -1,   298,   480,    70,    -1,    -1,    31,   485,    -1,    -1,
-   488,    -1,   794,    80,   796,    -1,    41,    -1,    -1,    -1,
-    -1,    88,    47,    -1,  1426,    -1,    93,    -1,   506,    54,
-    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   174,   161,   209,    23,   176,     4,   149,   150,   402,   175,
+   355,   402,   126,    80,   734,   156,    62,     4,   251,   349,
+   482,    80,   355,     4,   402,   455,    14,     4,   134,   898,
+    35,   511,    84,   513,    46,   583,    35,    42,    55,   709,
+   247,   521,   209,    30,    31,    90,   733,    92,    35,   304,
+   305,   218,    57,     4,    35,    42,   133,   134,    35,   640,
+   460,    42,   620,   663,    76,    42,   647,    72,   373,   124,
+    42,   217,   218,    42,    55,   440,    57,   144,     4,    84,
+   133,     4,   337,    88,    35,    90,    11,    92,  1400,   296,
+  1327,    42,   137,   780,   140,    83,  1486,    84,  1337,    42,
+    42,  1487,   107,   108,    12,  1344,    47,    54,    58,    35,
+   156,    57,    35,    11,    11,    47,    42,   717,   106,    42,
+   356,   357,   355,    64,    62,  1488,    54,    38,    33,    59,
+    54,   136,   137,    84,   139,     0,   203,    62,  1528,    75,
+  1510,    77,   349,    54,    37,    75,    74,   577,    98,   136,
+    74,    59,    93,    94,    62,   136,    64,  1527,   175,   140,
+   165,    93,   149,   150,   169,     1,   212,    33,     0,   503,
+   108,   176,   408,   409,   220,   782,     1,     1,   165,   641,
+   306,   307,   169,   108,   165,   136,   245,   794,   169,   716,
+   136,   237,   169,   165,   175,   176,   322,   169,  1561,   325,
+   169,   213,   328,   262,   109,   331,   193,   194,   155,   335,
+   108,   108,  1582,   136,   165,   822,   109,   343,   169,    47,
+  1606,   828,    58,  1531,    27,   555,   169,   169,    31,    59,
+   176,  1621,   490,    58,    58,    62,    74,    62,    62,    12,
+   245,   222,   165,   169,    25,    27,   169,    74,     9,    31,
+  1487,   402,  1491,   200,  1566,    47,    59,    60,   245,    42,
+   248,    64,    60,    74,   245,    93,    94,  1575,   526,   346,
+    95,    95,     3,     4,     5,     6,    59,    58,    60,   109,
+   108,    62,    64,   149,   150,   151,    59,   393,   448,    62,
+   342,    58,   297,   346,   245,  1061,  1062,    64,  1537,   245,
+    61,    93,    94,    33,     7,   735,   976,     3,     4,     5,
+    41,   109,  1078,   358,    95,   660,   108,   468,     4,   245,
+   487,   699,   245,    54,   329,    56,    57,   109,   935,   195,
+   385,   474,   475,    60,    37,   108,    59,   342,    48,   897,
+   486,   487,     4,     5,  1583,   350,     8,     9,   494,    35,
+    59,    93,    14,   358,   359,   342,    93,    88,   939,    59,
+    56,    57,   756,   728,   729,   756,    28,   355,    30,    59,
+    47,    93,   359,    54,    36,    75,     4,    77,   359,   525,
+    60,    60,   109,    45,   689,   108,   169,   404,     4,     5,
+    59,   342,    54,    74,    56,    57,   629,   402,   544,   108,
+   405,  1270,   983,    74,   450,     8,     9,    35,   359,    74,
+    47,    14,    47,   359,    60,   402,    93,    94,   108,   149,
+   150,   151,   752,   404,   951,   402,   209,   954,   664,   109,
+   109,    93,   980,    36,   217,   218,   359,   442,    54,   108,
+    56,    57,    45,    93,    47,   571,   572,   493,  1048,  1030,
+   107,   402,   511,   498,   513,   442,    93,    94,    93,    33,
+   519,   442,   521,   468,   247,   195,  1232,    25,   995,   996,
+   442,   108,    47,   442,   936,  1241,  1242,    47,  1244,    47,
+  1087,   468,  1089,    47,   496,    47,    31,   474,   475,   640,
+    93,   442,    58,   498,   107,   108,   647,    47,  1185,   480,
+   900,   518,   514,   515,    47,   550,   511,   488,   513,    25,
+     4,    27,   524,   296,   519,    47,   521,   468,    93,   442,
+  1389,    64,    60,    93,   511,    93,   513,    54,    47,    93,
+   511,    93,   513,     4,   521,  1222,    54,   518,   519,    44,
+   521,    35,    58,    93,   108,   550,    62,    74,   553,    54,
+    93,   556,    57,   727,    74,   560,   561,   562,   563,   564,
+   511,    93,   513,    54,    35,   511,   349,   513,   573,   621,
+   521,    42,   518,   519,    93,   521,   150,   151,   583,    95,
+   109,   586,    12,   977,   690,   511,   977,   513,   511,  1019,
+   513,   697,    47,  1174,    54,   521,    58,  1077,   521,   977,
+   945,    93,   838,    54,    25,   756,    27,    54,   474,   475,
+   476,    25,   945,    27,    74,    47,   621,    54,    62,    75,
+   697,   195,  1203,   406,   108,  1152,  1153,    47,   774,    59,
+    74,   782,    62,    62,   621,   640,    47,    58,    93,    94,
+   847,    62,   647,   794,    58,   108,    62,   692,    62,   666,
+   637,   638,    94,   640,    54,     3,     4,     5,    74,   442,
+   647,    93,    62,   651,  1126,   136,     3,     4,     5,   108,
+   621,   822,  1359,    93,    95,    31,   108,   828,   698,   108,
+    58,    95,    93,    94,    62,   666,   941,   692,   705,   640,
+   707,   708,  1458,  1459,   165,    47,   647,    47,   169,   108,
+    25,   706,    27,   486,   487,   710,  1106,  1107,    56,    57,
+    11,   494,   945,   733,    64,  1049,   329,  1051,    47,    56,
+    57,  1055,     8,     9,   705,   706,   707,   708,    14,     7,
+     8,     9,    80,    58,   970,   752,    14,    62,   109,   806,
+    98,    93,   525,    93,   474,   475,   476,   806,    47,    60,
+    36,   756,    47,    31,    62,   329,   815,    47,    36,    45,
+    47,   544,  1122,  1123,    93,  1125,    74,    45,   785,   756,
+    95,   752,     4,     5,   245,   756,    93,   782,   823,   824,
+     3,   826,    60,   909,   935,   141,   798,    60,   939,   794,
+   146,  1121,   804,   805,    93,   782,   808,   809,    93,  1199,
+   812,   111,   943,    93,   785,   756,    93,   794,  1208,  1209,
+   815,   937,   938,  1213,     4,     5,    48,   822,   823,   824,
+    54,   826,    74,   828,    56,    57,   977,    62,   815,  1003,
+    47,   782,   983,    94,   815,   822,   480,    54,   194,   785,
+    74,   828,    62,   794,   488,  1081,  1082,  1083,    80,  1569,
+    27,    94,   465,    47,    31,   429,   430,    74,    48,    74,
+    54,  1261,    59,    60,   815,   111,    56,    57,    93,   815,
+    74,   822,    93,     3,     4,     5,    93,   828,     3,  1030,
+    74,     6,    59,    60,   667,  1219,  1220,  1221,   359,   815,
+    80,   896,   815,    47,    59,    60,   901,   943,    74,    93,
+    54,   475,   476,   259,  1018,    74,    31,    59,     3,     4,
+     5,     6,     3,     4,     5,   182,    41,   835,   836,   837,
+    74,   988,    59,    60,   929,   708,    56,    57,    58,    11,
+   935,    56,    57,   108,   939,   109,  1087,    59,  1089,    93,
+   553,    59,    60,   556,   108,    70,    41,   560,   935,   108,
+   937,   938,   939,    48,    74,    80,  1356,   945,    59,    60,
+   573,    56,    57,    88,   108,    56,    57,    54,    93,   752,
+    74,   442,   977,   586,   979,   980,    74,   590,   983,   553,
+   108,  1411,   556,   109,   935,    80,  1386,   111,   939,   108,
+   977,   774,   109,    88,   981,   982,   983,  1427,   572,   573,
+   977,   111,  1128,     4,     5,   618,  1336,    27,     3,     4,
+     5,   624,   586,  1072,    74,     4,     5,    74,  1077,    54,
+     9,    59,    60,  1174,    54,  1030,   977,    62,    74,  1172,
+  1173,   111,   983,     3,     4,     5,     6,   111,  1043,    74,
+   511,   108,   513,  1030,   108,  1281,   108,    48,    58,    54,
+   521,    54,  1203,    48,   108,    56,    57,    62,  1201,  1202,
+     8,    56,    57,   419,   847,    54,   422,    56,    57,    74,
+   111,    41,  1077,   647,    93,  1201,  1202,    64,   434,  1030,
+  1510,    70,  1087,    59,  1089,  1130,    56,    57,  1069,    47,
+  1077,    80,    59,  1074,    59,    60,  1077,  1527,    74,    75,
+  1087,    77,  1089,     4,     5,    94,     4,     5,    93,  1176,
+    83,    84,  1117,    54,   470,    54,   472,   983,    88,    59,
+    60,    62,  1552,     4,     5,  1130,  1077,  1521,   109,   485,
+  1521,  1077,    60,    74,    59,    60,  1087,    36,  1089,     3,
+     4,     5,    64,     7,     8,     9,    64,    48,    59,    60,
+    48,  1077,  1582,   108,  1077,    56,    57,    64,    56,    57,
+  1590,   108,    62,  1335,  1030,  1185,    60,    31,  1334,  1174,
+  1336,   108,    36,    54,   108,    56,    57,     4,     5,    80,
+    54,     9,    80,    75,    12,  1172,  1173,  1174,    62,    70,
+    54,  1196,    56,    57,    58,  1525,   108,  1196,  1203,    80,
+    74,  1327,   108,    64,     3,     4,     5,     6,    64,  1196,
+     9,  1611,  1217,    94,  1201,  1202,  1203,    54,    54,    47,
+    64,   111,    62,  1174,    59,    62,    62,  1239,  1240,    56,
+    57,    59,    31,    61,    62,    59,    64,    74,    74,   103,
+   104,   105,    41,   108,    75,  1196,    59,    75,    47,    77,
+   108,    64,  1203,   983,   108,    54,   108,    56,    57,   108,
+    75,    74,    75,    75,    75,    93,    94,   841,     4,     5,
+  1196,    70,    62,  1196,   108,   108,    30,    31,    62,    33,
+   108,    80,    78,    79,    80,    81,    82,    83,    84,    88,
+    59,    90,   905,   111,    93,    94,    62,    94,   108,   108,
+  1030,   108,    88,    57,    74,    59,  1172,  1173,  1174,   111,
+    47,    65,    60,     3,     4,     5,     6,  1334,  1525,  1336,
+    56,    57,  1327,   108,   111,   108,   939,   108,   108,   111,
+  1335,   108,  1337,   109,   108,  1201,  1202,  1203,  1337,  1344,
+  1327,   109,  1502,    59,   815,  1344,    64,    64,  1353,    93,
+  1337,    41,    59,  1334,  1335,  1336,   108,  1344,    48,     3,
+     4,     5,  1505,  1506,   938,   939,    56,    57,    64,   108,
+  1521,     4,     5,   108,   108,  1549,  1327,     4,     5,  1505,
+  1506,    93,    93,    93,    12,    93,  1337,   141,   109,   109,
+    80,     8,   146,  1344,   108,   149,   150,   151,    88,    27,
+   109,  1327,   108,    31,  1327,   108,   111,   763,   764,   983,
+   766,  1337,    56,    57,  1337,    48,   108,    44,  1344,    47,
+   108,  1344,   176,    56,    57,  1437,   108,    54,   182,    56,
+    57,    59,    60,   108,    62,   111,    64,   108,   108,   193,
+   194,   195,  1172,  1173,  1174,    33,   108,    80,    54,   108,
+     7,     8,     9,   108,    62,   209,  1030,    14,   111,   108,
+     3,     4,     5,   217,   218,    93,    94,    47,    62,   108,
+   108,  1201,  1202,  1203,    31,    96,  1481,    62,    60,    36,
+   108,  1486,  1487,  1488,    60,     9,  1491,  1486,    45,    60,
+    16,    64,  1491,   108,  1481,     3,     4,     5,   108,  1486,
+  1487,  1488,  1507,    60,  1491,   259,   108,   108,   108,  1526,
+   777,    54,   108,    56,    57,    58,  1521,   108,  1505,  1506,
+   787,   788,   108,  1528,    93,    93,    60,     4,     5,  1528,
+  1481,    60,  1537,    54,  1521,  1486,  1487,  1488,  1537,    47,
+  1491,  1528,  1554,    93,   111,  1526,    54,   814,    56,    57,
+  1537,    93,   819,  1336,    17,    60,  1561,    54,   107,    97,
+  1486,  1487,   108,  1486,  1487,  1491,    60,   108,  1491,   108,
+  1521,    48,  1438,   108,  1561,   329,    11,  1528,  1583,    56,
+    57,    60,    60,    93,  1583,    93,  1537,    11,    60,    59,
+  1203,    80,    81,    82,    83,    84,  1583,    64,    60,  1173,
+  1174,   108,  1528,    80,  1217,  1528,  1077,   108,   108,    47,
+  1561,  1537,    60,    11,  1537,    88,  1621,    90,    60,    92,
+     0,     0,  1621,     0,     2,   170,   982,    35,  1202,  1203,
+  1425,   690,  1583,   977,  1621,     4,     5,   169,   442,  1505,
+  1506,  1507,   165,   519,  1257,  1258,  1259,  1260,    86,    87,
+  1185,   405,   406,    91,    92,    93,    94,  1583,  1548,   238,
+  1583,    94,     4,     5,   137,   419,   139,     9,   422,  1410,
+  1621,   139,  1621,  1271,   428,   429,   430,   299,   963,   740,
+   434,     3,     4,     5,     6,    54,   958,    56,    57,   243,
+   519,     4,     5,  1359,  1222,  1621,     9,  1074,  1621,   815,
+   956,    70,   673,     4,     5,    47,   621,  1320,  1438,   200,
+   346,    80,    54,   124,    56,    57,   470,  1337,   472,    41,
+   474,   475,   476,  1197,  1569,   479,    48,  1590,    70,  1542,
+    80,   485,   486,   487,    56,    57,   490,    -1,    80,  1600,
+   494,    54,  1525,    56,    57,  1602,    47,  1038,    90,  1353,
+    -1,    93,    94,    54,   104,    56,    57,    70,    80,     3,
+     4,     5,     6,    -1,    -1,   519,    88,    80,    -1,    70,
+    -1,    -1,   526,    -1,  1387,  1505,  1506,  1507,   772,    80,
+    -1,    -1,    -1,   133,    -1,    -1,    -1,    -1,    -1,    90,
+    -1,    -1,    93,    94,   144,    -1,    -1,    41,    -1,   553,
+  1067,  1068,   556,  1070,  1071,    -1,  1073,  1420,     3,     4,
+     5,    -1,    56,    57,  1170,  1171,    -1,   571,   572,   573,
+    -1,   461,  1178,    -1,    -1,    -1,    -1,   821,   468,    -1,
+    -1,    -1,   586,   827,    -1,    -1,     1,    -1,     3,     4,
+     5,     6,     7,     8,     9,    -1,    -1,   320,    -1,    14,
+     3,     4,     5,   203,     3,     4,     5,    -1,     7,     8,
+     9,    56,    57,    28,  1438,    30,    31,    32,  1481,    -1,
+    -1,    36,    -1,    -1,  1487,  1488,    41,    30,    -1,    -1,
+    45,    46,    31,    48,    -1,   358,    -1,    36,   238,    54,
+    -1,    56,    57,   647,  1507,    60,    -1,    62,    -1,    -1,
+    -1,    54,   461,    56,    57,    70,    -1,    56,    57,   468,
+    -1,   551,   262,   667,    -1,    80,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    88,    22,    -1,    -1,    -1,    93,     3,
+     4,     5,  1506,  1507,    -1,    -1,   930,    -1,   932,  1295,
+  1296,    -1,  1298,    -1,   348,   349,   350,    -1,  1561,    -1,
+    -1,    -1,   706,    -1,   708,   709,    -1,    -1,    -1,    -1,
+    -1,    -1,  1229,  1230,  1577,    -1,    -1,    65,     3,     4,
+     5,   611,     7,     8,     9,    -1,    -1,   617,     3,     4,
+     5,     6,    56,    57,     9,    -1,  1599,   460,   461,     3,
+     4,     5,   551,  1606,    -1,   468,    -1,    -1,   752,    -1,
+     3,     4,     5,     6,   354,    -1,    31,    -1,    -1,   763,
+   764,    -1,   766,    -1,   654,    -1,    41,    -1,    -1,    -1,
+   774,    56,    57,   777,    -1,   498,   124,    -1,    -1,    54,
+    -1,    56,    57,   787,   788,    38,    39,   510,    41,    -1,
+   107,   108,    56,    57,    -1,    70,     3,     4,     5,    -1,
+   148,    54,   611,    56,    57,    80,    -1,    -1,   617,    -1,
+   814,    -1,   412,    88,  1058,   819,    -1,    -1,    93,  1063,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   550,   551,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   841,   647,    -1,
+    -1,    -1,  1086,    -1,  1088,   654,    -1,    54,    -1,    56,
+    57,    -1,    -1,  1370,  1371,  1372,    -1,    -1,    -1,    -1,
+   583,    -1,   585,    -1,    -1,   588,   589,    -1,   591,   592,
+   593,   594,   595,   596,   597,   598,   599,   600,   601,   602,
+   603,   604,   605,   606,   607,   608,   609,    -1,   611,    -1,
+   238,   239,    -1,    -1,   617,    -1,    -1,    -1,    -1,  1143,
+    -1,    -1,   502,   251,     3,     4,     5,     6,     7,     8,
+     9,     3,     4,     5,     6,    14,    -1,    -1,    -1,    -1,
+    -1,     3,     4,     5,   647,    -1,    -1,    -1,    -1,    -1,
+    -1,   654,    31,   937,   938,   939,    -1,    36,  1455,  1456,
+    -1,    -1,    41,    -1,    -1,    -1,    45,   547,    47,    41,
+     3,     4,     5,   676,   677,    54,    48,    56,    57,    -1,
+    -1,     7,     8,     9,    56,    57,    48,    -1,    14,   692,
+    -1,    70,   976,   321,    56,    57,    -1,   981,   982,   983,
+    -1,    80,    -1,   637,   638,    31,    -1,    -1,    80,    88,
+    36,    90,    -1,    -1,    93,    94,    88,    -1,    -1,    45,
+    -1,    54,    -1,    56,    57,   895,   896,     7,     8,     9,
+    -1,   901,   329,    -1,    14,   363,    -1,   740,    -1,    -1,
+    -1,    -1,    -1,    -1,   372,   915,  1030,   917,    -1,   919,
+    -1,    31,   841,    -1,   634,    -1,    36,   385,     4,     5,
+    -1,  1285,     8,     9,    -1,    45,    -1,    -1,    14,    -1,
+   650,   705,    -1,   707,   708,    -1,   710,  1574,     3,     4,
+     5,     6,    -1,  1067,  1068,    -1,  1070,  1071,    -1,  1073,
+    36,    -1,    -1,    -1,   797,   965,    -1,    -1,    -1,    45,
+    -1,    47,    -1,    -1,    -1,   402,   895,   896,    54,    -1,
+    56,    57,   901,    -1,    -1,    -1,    41,    -1,   752,    -1,
+   823,   824,    47,   826,    70,    -1,   915,    -1,   917,    54,
+   919,    56,    57,    -1,    80,    -1,    -1,    -1,   841,  1363,
+  1364,  1011,    -1,    -1,    90,    70,    -1,    93,    94,    -1,
+    -1,    -1,    -1,  1377,  1378,    80,    -1,     3,     4,     5,
+   863,     7,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
+  1394,   468,    -1,    -1,   502,    -1,   965,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    30,    -1,  1170,  1171,  1172,  1173,
+  1174,    37,   895,   896,  1178,    -1,    -1,   900,   901,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    54,    -1,
+    56,    57,   915,   847,   917,    -1,   919,  1201,  1202,  1203,
+    -1,    -1,  1011,    -1,    -1,    -1,   806,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,  1030,  1466,  1467,    -1,  1229,  1230,    -1,    -1,    -1,
+    -1,    -1,   955,    -1,    -1,    -1,   553,   585,    -1,   556,
+    -1,    -1,   965,   560,   561,   562,   563,   564,    -1,     3,
+     4,     5,     6,    -1,    -1,     9,   573,   980,    -1,    -1,
+     3,     4,     5,     6,    -1,    -1,   920,    -1,   922,   586,
+   993,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,   933,
+    -1,   629,    -1,   937,   938,    -1,    -1,    41,  1011,    -1,
+    -1,  1295,  1296,    47,  1298,    -1,    -1,  1187,    41,  1189,
+    54,  1191,    56,    57,    -1,    48,    -1,  1030,    -1,     3,
+     4,     5,     6,    56,    57,     9,    70,     1,    -1,     3,
+     4,     5,     6,   640,     8,    -1,    80,   981,   982,    -1,
+   647,  1335,  1336,    -1,    88,    -1,    90,    31,    -1,    93,
+    94,    -1,  1065,  1066,   944,    88,   946,    41,    -1,    -1,
+   698,    -1,    -1,    47,    -1,    -1,    -1,    41,    -1,    -1,
+    54,   709,    56,    57,    48,    -1,  1370,  1371,  1372,    -1,
+    54,    -1,    56,    57,    -1,    -1,    70,    -1,  1187,    -1,
+  1189,    -1,  1191,  1106,  1107,    -1,    80,  1110,   988,    -1,
+    -1,    -1,   740,    -1,    88,     4,    90,    -1,    -1,    93,
+    94,    -1,  1292,    -1,    88,    14,    -1,  1130,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
+    -1,    30,    31,    -1,    33,    -1,    35,    -1,    -1,    -1,
+    -1,    -1,    -1,    42,  1438,    -1,    -1,    -1,    -1,   756,
+    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    -1,
+    -1,  1455,  1456,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+    -1,    -1,    -1,    72,  1187,   782,  1189,    -1,  1191,    -1,
+    -1,    -1,  1072,    -1,    83,    84,  1199,   794,    -1,    -1,
+    -1,    -1,    -1,  1292,    -1,  1208,  1209,    -1,    -1,    -1,
+  1213,    -1,    -1,    -1,    -1,    -1,    -1,   106,    -1,    -1,
+    -1,  1505,  1506,  1507,    -1,   822,    -1,    -1,    -1,    -1,
+    -1,   828,  1235,    -1,    -1,    -1,  1170,  1171,  1172,  1173,
+     3,     4,     5,     6,  1178,   134,    -1,   136,    -1,    -1,
+    -1,   140,   141,    -1,    -1,    -1,   145,   146,  1261,    -1,
+   149,   150,   151,    -1,    -1,    -1,    -1,  1201,  1202,  1149,
+     3,     4,     5,     6,    -1,    -1,   165,    -1,    41,    -1,
+   169,    -1,    -1,    -1,    -1,    48,   175,   176,    -1,  1292,
+  1574,    -1,    -1,    56,    57,    -1,  1176,    -1,    31,   896,
+    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    41,    -1,
+    -1,    -1,    -1,  1316,    -1,    -1,    -1,    80,    -1,    -1,
+    -1,    54,    -1,    56,    57,    88,     4,     5,    -1,    -1,
+     8,     9,   929,   222,    -1,   963,    14,    70,   935,    -1,
+    -1,    -1,   939,    -1,    -1,    -1,    -1,    80,   976,  1438,
+   239,    -1,    -1,  1356,    -1,    88,   245,    -1,    36,   248,
+    93,  1295,  1296,    -1,  1298,  1368,  1369,    45,    -1,    47,
+   259,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+   977,    -1,   979,  1386,    -1,    -1,   983,    -1,    82,    -1,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,     4,     5,
+    -1,    -1,    80,     9,    -1,    -1,    -1,    -1,   297,   298,
+    -1,    -1,    90,    -1,    -1,    93,    94,    -1,   193,   194,
+   195,    -1,    -1,    -1,     3,     4,     5,     6,    -1,    -1,
+     9,    -1,    -1,  1030,    -1,  1438,    -1,    -1,    -1,    -1,
+    -1,    47,    -1,    -1,    -1,    -1,  1043,    -1,    54,    -1,
+    56,    57,    31,   342,    -1,    -1,    -1,   346,  1461,   348,
+   349,   350,    41,    -1,    70,   159,    -1,    -1,    -1,    -1,
+   359,    -1,    -1,    -1,    80,    54,    -1,    56,    57,  1107,
+    -1,    -1,    -1,    -1,    90,    -1,  1489,    93,    94,    -1,
+  1087,    70,  1089,    -1,    -1,    -1,    -1,   191,    -1,    -1,
+    -1,    80,    -1,    -1,   393,     3,     4,     5,     6,    88,
+   204,    -1,    -1,   402,    93,   404,   405,    -1,    -1,    -1,
+  1117,    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,    -1,
+   419,     9,    -1,   422,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    41,    -1,   434,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   442,    -1,    -1,    54,    -1,    56,    57,
+     3,     4,     5,     6,    62,  1193,     9,    -1,    -1,    47,
+    -1,  1199,    70,    -1,    -1,    -1,    54,  1174,    56,    57,
+    -1,   470,    80,   472,    -1,   474,   475,   476,    31,    -1,
+    88,   480,    70,    -1,    -1,    93,   485,    -1,    41,   488,
+    -1,    -1,    80,    -1,    47,    -1,  1203,    -1,  1611,    -1,
+    -1,    54,    90,    56,    57,    93,    94,    -1,    -1,   508,
+  1217,    -1,   511,    -1,   513,    -1,    -1,    70,    -1,   518,
+   519,    -1,   521,    -1,    -1,    -1,     1,    80,     3,     4,
+     5,     6,     7,     8,     9,    88,    -1,    90,    -1,    14,
+    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
+    -1,    36,   561,   562,   563,   564,    41,    -1,    -1,    -1,
+    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
+    -1,    56,    57,  1321,  1322,   470,    -1,   472,    -1,   474,
+   475,   476,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+   485,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,
+    -1,    -1,   621,    98,   623,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   518,    -1,    -1,   635,    -1,   637,   638,
+    -1,   640,    -1,    -1,    -1,    -1,  1353,    -1,   647,     4,
+     5,    -1,   651,     8,     9,    -1,    -1,    -1,    -1,    14,
+    -1,    -1,    -1,    -1,  1402,    -1,    -1,   666,    -1,    -1,
+    -1,    -1,    -1,    28,   478,    30,    -1,    -1,    -1,   483,
+    -1,    36,    -1,    -1,    -1,    -1,  1424,  1425,    -1,    -1,
+    45,   690,    47,    -1,    -1,    -1,    -1,    -1,   697,    54,
+    -1,    56,    57,    -1,    -1,    -1,   705,   706,   707,   708,
+   709,   710,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   527,    -1,    80,    -1,    -1,    -1,   533,
+    -1,    -1,    -1,    -1,    -1,    90,    -1,    -1,    93,    94,
+    -1,   545,   546,    -1,   548,    -1,    -1,    -1,    -1,     3,
+     4,     5,     6,   752,    -1,    -1,    -1,   756,    -1,    -1,
+    -1,  1499,    -1,    -1,   763,   764,    -1,   766,     3,     4,
+     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,
+    -1,    -1,    -1,   782,    -1,    -1,   785,    41,    -1,    -1,
+    -1,    -1,    -1,    -1,    48,   794,    31,    -1,    -1,    -1,
+  1507,    36,    56,    57,    -1,    -1,    41,    -1,   807,    -1,
+    45,    -1,    47,    -1,  1521,    -1,   815,    -1,    -1,    54,
+    -1,    56,    57,   822,    -1,    -1,    -1,    -1,    -1,   828,
+    -1,    -1,    -1,    -1,    88,    70,   835,   836,   837,   643,
+   644,    -1,    -1,    -1,   648,    80,    -1,    -1,   847,    -1,
+    -1,    -1,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
+    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,     7,     8,
+     9,    -1,    -1,    12,    -1,    14,     4,    -1,   763,   764,
+    -1,   766,    -1,    -1,    -1,    -1,    14,    -1,    -1,    28,
+    -1,    30,    31,    -1,    -1,    23,    24,    36,    -1,    -1,
+   785,    -1,    30,    31,    -1,    33,    45,    35,    47,    -1,
+    -1,    -1,    -1,    -1,    42,    54,    -1,    56,    57,    -1,
+    -1,   920,    -1,   922,    -1,    -1,    -1,    55,    -1,    57,
+   929,    70,    -1,    -1,   933,    -1,   935,    65,   937,   938,
+   939,    80,    -1,    -1,    72,    -1,   945,     3,     4,     5,
+     6,    90,    -1,    -1,    93,    94,    84,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+    -1,    -1,     9,    -1,    -1,    -1,    -1,   781,   977,    -1,
+   979,    -1,   981,   982,   983,    41,    -1,    -1,    -1,   793,
+    -1,    -1,    48,    -1,    31,    -1,    -1,    -1,    -1,    -1,
+    56,    57,    -1,    -1,    41,    -1,    -1,    -1,   136,    -1,
+    -1,    -1,   140,   141,    -1,    -1,    -1,    54,   146,    56,
+    57,   149,   150,   151,    -1,   829,    -1,   831,    -1,    -1,
+    -1,  1030,    88,    70,    -1,    -1,    -1,   165,    -1,    -1,
+    -1,   169,    -1,    80,  1043,    -1,    -1,   175,   176,    -1,
+    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    -1,
+  1069,    -1,    -1,    -1,    -1,  1074,    -1,    -1,  1077,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1087,    -1,
+  1089,    -1,    -1,    -1,   222,    -1,   981,   982,   983,   903,
+   904,    -1,   906,     4,     5,    -1,    -1,     8,     9,    -1,
+     4,     5,    -1,    14,     8,     9,    -1,   245,  1117,    -1,
+    14,    -1,    -1,  1122,  1123,    -1,  1125,    28,    -1,    30,
+   934,   259,    -1,    -1,    28,    36,    30,    -1,    -1,    -1,
+    -1,    -1,    36,    -1,    45,  1030,    -1,    -1,    -1,    -1,
+    -1,    45,    -1,    54,    -1,    56,    57,    58,    -1,    -1,
+    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,   297,
+   298,  1170,  1171,  1172,  1173,  1174,    -1,    -1,    -1,  1178,
+    -1,   985,    -1,    -1,  1069,    -1,   348,   349,   350,    -1,
+    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1201,  1202,  1203,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,   342,    -1,    14,    -1,   346,    -1,
+   348,   349,   350,    -1,    -1,    -1,    -1,   355,    -1,    -1,
+    28,   359,    30,    31,    32,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    -1,    -1,    -1,    -1,   393,    -1,    -1,    -1,    -1,
+    -1,    -1,    70,    -1,   402,    -1,   404,   405,    -1,    -1,
+    -1,    -1,    80,    -1,    -1,  1170,  1171,  1172,  1173,  1174,
+    88,   419,    -1,  1178,   422,    93,  1295,  1296,    -1,  1298,
+    98,    -1,     3,     4,     5,     6,   434,    -1,     9,    -1,
+    -1,    -1,    -1,    -1,   442,    -1,  1201,  1202,  1203,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    31,    -1,    -1,    -1,  1138,  1334,  1335,  1336,    -1,    -1,
+    41,    -1,   470,    -1,   472,    -1,   474,   475,   476,    -1,
+    -1,    -1,   480,    54,  1353,    56,    57,   485,    -1,     1,
+   488,     3,     4,     5,     6,     7,     8,     9,    -1,    70,
+    -1,    -1,    14,  1177,    -1,    -1,    -1,    -1,    -1,    80,
+   508,    -1,    -1,   511,    -1,   513,    28,    88,    30,    31,
+   518,   519,    93,   521,    36,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,
+  1295,  1296,    54,  1298,    56,    57,    -1,    -1,    60,    -1,
+  1224,    -1,    -1,    -1,  1228,    -1,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,   561,   562,   563,   564,    -1,    80,  1438,
+    -1,    -1,    -1,    -1,  1248,    -1,    88,    -1,  1252,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,
+    -1,    -1,    -1,    -1,    -1,   637,   638,    -1,   640,    -1,
+    -1,    -1,    -1,  1287,    -1,   647,    -1,    -1,    -1,    -1,
+    31,    -1,    -1,   621,    -1,   623,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    -1,    -1,  1505,  1506,  1507,   637,
+   638,    -1,   640,    54,    -1,    56,    57,    -1,    -1,   647,
+    -1,    -1,  1521,    -1,    -1,    -1,    -1,  1526,    -1,    70,
+    -1,    -1,   660,     3,     4,     5,     6,    -1,   666,    80,
+    -1,    -1,    -1,   705,    -1,   707,   708,    88,   710,    -1,
+    -1,    -1,    93,  1438,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    31,   690,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   698,    41,    -1,    -1,    -1,  1379,  1380,   705,   706,   707,
+   708,   709,   710,    -1,    54,    -1,    56,    57,    -1,    -1,
+   752,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    70,    -1,    -1,    -1,    -1,   733,    -1,    -1,    -1,    -1,
+    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
+  1505,  1506,  1507,    93,   752,    -1,    -1,    -1,   756,    -1,
+    -1,    -1,    -1,    -1,    -1,   763,   764,    -1,   766,    -1,
+    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    -1,   780,    12,   782,    14,    -1,   785,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   794,    -1,    -1,    28,
+    -1,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,
+    -1,    -1,    41,    -1,    -1,   847,    45,   815,    47,    -1,
+    -1,    -1,    -1,    -1,   822,    54,    -1,    56,    57,    -1,
+   828,    -1,    -1,    -1,    -1,    -1,    -1,   835,   836,   837,
+    -1,    70,     3,     4,     5,     6,     7,     8,     9,   847,
+    -1,    80,    -1,    14,    -1,    -1,    -1,    -1,    -1,    88,
+    -1,    90,    -1,    -1,    93,    94,    -1,    28,    -1,    30,
+    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    45,    -1,    47,    -1,   920,    -1,
+   922,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
+    -1,   933,    -1,    -1,    -1,   937,   938,   939,    -1,    70,
+     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    80,
+    -1,    14,   920,    -1,   922,    -1,    -1,    88,    -1,    90,
+    -1,   929,    93,    94,    -1,   933,    -1,   935,    31,   937,
+   938,   939,    -1,    36,    -1,    -1,    -1,   945,    41,   981,
+   982,   983,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+    -1,    54,    -1,    56,    57,     4,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,   977,
+    -1,   979,    -1,   981,   982,   983,    -1,    80,    -1,    -1,
+    -1,    30,    31,    -1,    33,    88,    35,    -1,  1030,    -1,
+    93,    -1,    -1,    42,    73,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,    55,    -1,    57,     3,
+     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    -1,  1030,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    80,    -1,    -1,    28,  1043,    30,    31,    -1,    -1,
+    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,
+    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    54,  1069,    56,    57,    -1,    -1,  1074,    -1,    62,  1077,
+    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,  1087,
+    -1,  1089,    -1,    -1,   133,   134,    80,   136,    -1,    -1,
+    -1,   140,   141,    -1,    88,   144,    -1,   146,    -1,    93,
+   149,   150,   151,    -1,    -1,    -1,    -1,   156,    -1,  1117,
+    -1,    -1,    -1,    -1,  1122,  1123,   165,  1125,    -1,    -1,
+   169,    -1,    -1,    -1,    -1,    -1,   175,   176,  1170,  1171,
+  1172,  1173,  1174,    -1,    -1,    -1,  1178,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   203,    -1,    -1,    -1,    -1,  1201,
+  1202,  1203,  1170,  1171,  1172,  1173,  1174,    -1,    -1,    -1,
+  1178,    -1,    -1,   222,    -1,    -1,     1,  1185,     3,     4,
+     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,
+    -1,    -1,    -1,  1201,  1202,  1203,   245,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
+   259,    36,    37,    -1,  1222,    -1,    41,    -1,    -1,    -1,
+    45,    46,    -1,    48,     3,     4,     5,     6,    -1,    54,
+     9,    56,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,   348,   349,   350,   175,    80,    -1,    -1,    -1,    -1,
-    -1,  1027,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
-    -1,    -1,   193,   194,   195,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   203,    -1,    -1,    -1,   868,   869,    -1,   871,
-    -1,    -1,    -1,    -1,    -1,  1061,    -1,  1499,  1500,  1501,
-    -1,   222,    -1,    -1,    -1,    -1,    -1,   404,    -1,     3,
-     4,     5,     6,     7,     8,     9,    -1,   899,    -1,    -1,
-    14,  1523,    -1,    -1,    -1,    -1,    -1,   248,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,
-   618,   262,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,   950,    -1,
-    -1,   649,   329,   470,    -1,   472,    70,   474,   475,   476,
-    -1,    -1,    -1,   480,    -1,    -1,    80,    -1,   485,    -1,
-    -1,   488,    -1,    -1,    88,    -1,    -1,     4,     5,    93,
-     7,     8,     9,    -1,    98,    12,    -1,    14,    -1,    -1,
-   688,   689,   690,   691,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    -1,    30,    31,     3,     4,     5,     6,    36,
-    -1,    -1,    -1,   354,   355,    -1,    -1,    -1,    45,    -1,
-    -1,  1023,    -1,    -1,    -1,   402,    -1,    54,    -1,    56,
-    57,  1217,    -1,  1035,    -1,    -1,  1222,   735,    -1,    -1,
-    -1,   739,    -1,    41,    -1,    -1,    -1,    -1,   746,   747,
-    -1,   749,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-    -1,    -1,    -1,   404,    62,    -1,    -1,    -1,    -1,    -1,
-    -1,   769,    70,   771,    -1,    -1,    -1,    -1,   776,   777,
-   778,    -1,    80,    -1,    -1,    -1,   784,    -1,    -1,   606,
-    88,   468,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   620,   621,    -1,   623,    -1,    -1,    -1,
-    -1,    -1,    -1,   630,    -1,    -1,    -1,    -1,    -1,  1121,
-    -1,    -1,    -1,    -1,    -1,  1311,  1312,  1313,    -1,   470,
-    -1,   472,   649,   474,   475,   476,    -1,    -1,    -1,   480,
-    -1,    -1,    -1,    -1,   485,    -1,    -1,   488,    -1,     3,
-     4,     5,     6,    -1,    -1,     9,    -1,    -1,  1160,   536,
-    -1,    -1,   539,    -1,    -1,    -1,   543,   544,   545,   546,
-   547,   688,    -1,   690,   691,    -1,   693,    31,    -1,   556,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    -1,   569,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   910,    -1,    -1,    -1,    70,    -1,   735,    -1,
-    -1,    -1,    -1,  1225,    -1,    -1,    80,  1229,    -1,   746,
-   747,    -1,   749,    -1,    88,    -1,    90,    -1,    -1,    93,
-    94,    -1,    -1,    -1,    -1,    -1,   623,    -1,   946,   947,
-   948,    -1,    -1,   630,    -1,    -1,    -1,    -1,    -1,   776,
-    -1,    -1,  1264,    -1,    -1,    -1,    -1,    -1,    -1,     1,
+    -1,    -1,    31,  1295,  1296,    80,  1298,    -1,    -1,    -1,
+    -1,    -1,    41,    88,    -1,    -1,    -1,    -1,    93,    -1,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+   329,    -1,    -1,    -1,   109,    -1,    -1,  1295,  1296,    -1,
+  1298,    70,    -1,    -1,    -1,    -1,    -1,   346,    -1,    -1,
+    -1,    80,    -1,    -1,    -1,   354,    -1,    -1,    -1,    88,
+   359,    -1,    -1,    -1,    93,  1323,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1334,  1335,  1336,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,   393,  1353,    -1,    -1,    -1,    -1,
+    -1,  1359,    -1,    -1,    -1,   404,    -1,    -1,    -1,     1,
     -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-    -1,    -1,    14,   800,   801,   802,    -1,    -1,    -1,    -1,
-    -1,    -1,   633,   634,    -1,   812,    28,   995,    30,    31,
-    32,    -1,    -1,    -1,    36,    37,    -1,    -1,   649,    41,
+   419,    -1,    14,   422,    -1,    -1,    -1,    -1,    -1,   428,
+   429,   430,    -1,    -1,    -1,   434,    28,    -1,    30,    31,
+    32,    -1,    -1,   442,    36,    37,    -1,    -1,    -1,    41,
     -1,    -1,    -1,    45,    46,    -1,    48,    -1,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,  1027,
-    62,    -1,    -1,    -1,    -1,    -1,    -1,  1523,    70,  1341,
-    -1,    -1,    -1,  1345,    -1,    -1,    -1,   688,    80,   690,
-   691,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,   739,  1061,    -1,  1367,  1368,    -1,   885,    -1,
-   887,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
-    -1,   898,    -1,    -1,    -1,   902,   903,   904,    -1,    -1,
-    -1,    -1,    -1,    -1,   735,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   746,   747,    -1,   749,    -1,
-   787,    -1,    -1,    -1,    -1,    -1,   793,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   946,
-   947,   948,    -1,    -1,    -1,   776,    -1,    -1,    -1,    -1,
+    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
+    62,   470,    -1,   472,    -1,   474,   475,   476,    70,    -1,
+  1438,   480,    -1,    -1,    -1,    -1,   485,    -1,    80,   488,
+    -1,    -1,     3,     4,     5,     6,    88,    -1,    -1,    -1,
+    -1,    93,    -1,     4,     5,    -1,    -1,     8,     9,    -1,
+    -1,    -1,   511,    14,   513,    -1,    -1,   109,    -1,   518,
+   519,    -1,   521,    -1,    -1,    -1,    -1,    28,    -1,    30,
+    41,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    45,    56,    57,  1505,  1506,  1507,
+    -1,    62,    -1,    54,   553,    56,    57,   556,    -1,    70,
+    -1,    -1,    -1,  1521,    -1,    -1,    -1,    -1,  1526,    80,
+    -1,    -1,   571,   572,   573,    -1,    -1,    88,    -1,     4,
+    -1,    -1,    93,    -1,    -1,    -1,    -1,   586,    -1,    -1,
+    -1,     3,     4,     5,     6,    -1,     1,     9,     3,     4,
+     5,     6,     7,     8,     9,    30,    31,    -1,    33,    14,
+    35,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    31,
+    -1,    -1,    27,    28,    -1,    30,    31,    32,    -1,    41,
+    55,    36,    57,    -1,    -1,   634,    41,    -1,    -1,    44,
+    45,    46,    54,    48,    56,    57,    -1,    -1,   647,    54,
+    -1,    56,    57,    -1,    -1,    60,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    70,    -1,   666,    80,    -1,
+    -1,    -1,    -1,    -1,    -1,    80,    88,    -1,    -1,    -1,
+    -1,    93,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,
+    -1,   690,    -1,    98,    -1,    -1,    -1,    33,   697,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   705,   706,   707,   708,
+    -1,   136,    -1,    -1,    -1,   140,   141,    -1,    -1,    55,
+    -1,   146,    -1,    -1,   149,   150,   151,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,    -1,
+   165,    -1,    -1,    -1,   169,     3,     4,     5,     6,    -1,
+   175,   176,    -1,   752,    -1,    -1,    -1,   756,    -1,    -1,
+    -1,    -1,    -1,    -1,   763,   764,    -1,   766,   193,   194,
+   195,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    41,    -1,    54,   785,    56,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    54,   222,    56,    57,
+    -1,    70,    60,    -1,    -1,    -1,    -1,   806,    -1,    -1,
+    -1,    80,    70,   149,   150,   151,   815,    -1,    -1,    88,
+   245,    -1,    80,    -1,    93,    -1,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,    -1,   259,    93,    -1,    -1,    -1,   175,
+    -1,     1,   841,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,    12,    13,    14,    -1,    -1,   193,   194,   195,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
+    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
+    40,    41,    42,    43,    -1,    45,   222,    -1,    -1,    49,
+    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,
+    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
+   355,    -1,    -1,    93,   359,    -1,    -1,    -1,   937,   938,
+   939,    -1,    -1,    -1,   943,   944,    -1,    -1,   108,    -1,
+   110,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,   298,    -1,    14,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    28,   404,
+    30,    31,   981,   982,   983,    -1,    36,    -1,    -1,   988,
+    -1,    41,    -1,    -1,   419,    45,    -1,   422,    -1,    -1,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,   434,
+    60,    -1,   348,   349,   350,    -1,    -1,   442,    -1,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    80,  1030,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
+    -1,    -1,    -1,    93,    -1,   470,    -1,   472,    -1,   474,
+   475,   476,    -1,    -1,    -1,   480,    -1,    -1,    -1,    -1,
+   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,   404,    -1,
+  1069,    -1,    -1,    -1,    -1,  1074,    -1,    -1,  1077,     3,
+     4,     5,     6,     7,     8,     9,   511,    -1,   513,    -1,
+    14,    -1,    -1,   518,   519,    -1,   521,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    28,    -1,    30,    31,    -1,    -1,
+    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,
+    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,   470,    -1,   472,    -1,   474,   475,
+   476,    -1,    -1,    -1,   480,    -1,    70,    -1,    -1,   485,
+  1149,    -1,   488,    -1,    -1,    -1,    80,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,
+    -1,  1170,  1171,  1172,  1173,  1174,    -1,  1176,    -1,  1178,
+    -1,    -1,   518,    -1,     1,    -1,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,  1201,  1202,  1203,    -1,    -1,    -1,    -1,    -1,
+   635,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
+    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
+    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
+    57,   666,    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,
+    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    78,    79,    80,    -1,    -1,    55,    -1,    -1,    86,
+    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
+   705,   706,   707,   708,    -1,    -1,    -1,   623,    -1,    -1,
+    -1,    80,    -1,   110,    83,    -1,  1295,  1296,    -1,  1298,
+    -1,   637,   638,    -1,   640,    -1,    -1,    -1,    -1,    -1,
+    -1,   647,    -1,    -1,    -1,   104,    -1,   106,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   752,    -1,    -1,
+   666,   756,    -1,    -1,    -1,  1334,  1335,  1336,   763,   764,
+    -1,   766,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+   785,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   705,
+    -1,   707,   708,    -1,   710,    -1,    -1,    -1,    -1,    -1,
+    -1,     3,     4,     5,     6,    -1,   175,     9,    -1,    -1,
+   815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    -1,    31,
+    -1,    -1,    -1,    -1,   203,    -1,   752,    -1,    -1,    41,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   763,   764,    -1,
+   766,    -1,    54,   222,    56,    57,    -1,    -1,    -1,  1438,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,   785,
+    -1,     3,     4,     5,     6,     7,     8,     9,    80,   248,
+    12,    -1,    14,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+    -1,    93,    -1,   262,    -1,    -1,    28,    -1,    30,    31,
+    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,   835,
+   836,   837,    54,    -1,    56,    57,  1505,  1506,  1507,    -1,
+    -1,   847,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+   945,    -1,    -1,    -1,    -1,    -1,    -1,  1526,    80,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   981,   982,   983,    -1,
+    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,    -1,    -1,
     -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-    12,    -1,    14,    -1,    -1,  1153,  1154,  1155,  1156,  1157,
-    -1,    -1,    -1,  1161,    -1,    -1,    28,    -1,    30,    31,
-    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,   995,    41,
-    -1,    -1,    -1,    45,   861,    47,  1184,  1185,  1186,    12,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
+    -1,    -1,    14,    -1,   920,    -1,   922,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,   933,    30,    31,
+    -1,   937,   938,   939,    36,  1030,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,    -1,   404,    -1,    -1,    -1,    -1,
+    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-  1027,    -1,    -1,    -1,    -1,    -1,    -1,   894,    80,  1217,
-    -1,    -1,    -1,   900,  1222,    -1,    88,   904,    90,    -1,
-    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+    -1,    -1,    -1,    -1,  1069,   981,   982,   983,    80,  1074,
+    -1,    -1,  1077,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,    -1,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,
+    -1,   470,    -1,   472,    -1,   474,   475,   476,    -1,    -1,
+    28,   480,    30,    31,  1030,    -1,   485,    -1,    36,   488,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   518,
+    23,    24,    70,  1069,    -1,    -1,    -1,    30,    31,    -1,
+    33,    12,    80,    -1,    -1,  1170,  1171,  1172,  1173,  1174,
+    88,    -1,    -1,  1178,    -1,    93,    69,    70,    71,    72,
     73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    -1,    -1,    -1,   942,    -1,   944,   909,   910,
-   911,   948,    -1,    -1,  1272,  1273,    -1,  1275,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1105,  1106,
-    -1,  1108,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
-    -1,     9,    -1,    -1,    -1,   946,   947,   948,    -1,    -1,
-    14,    -1,   953,  1311,  1312,  1313,    -1,    -1,   995,    23,
-    24,    -1,    -1,    31,    -1,    -1,    30,    31,    -1,    33,
-    -1,  1008,    -1,    41,    -1,    -1,  1153,  1154,  1155,  1156,
-  1157,    -1,   983,    -1,  1161,    -1,    54,  1024,    56,    57,
-    -1,    -1,    -1,    -1,   995,    -1,    -1,    -1,    -1,  1036,
-    -1,    65,    70,    -1,    -1,    -1,    -1,  1184,  1185,  1186,
-    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    88,    -1,    -1,    -1,    -1,    93,  1027,    -1,    -1,    -1,
-    -1,    -1,    -1,  1070,    -1,  1072,    -1,    -1,    -1,    -1,
-  1217,    -1,    -1,    -1,    -1,    -1,    -1,  1048,    -1,    -1,
-     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,
-   124,    14,   126,  1100,    -1,    -1,    -1,    -1,  1426,   133,
-   134,    -1,    -1,    -1,    -1,    -1,   140,   141,    31,    -1,
-   144,   145,   146,    36,   148,   149,   150,   151,    41,    -1,
-    -1,    -1,    45,    -1,    47,  1272,  1273,    -1,  1275,    -1,
-    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-  1157,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
-    -1,  1132,    -1,    -1,  1311,    88,  1313,    -1,    -1,    -1,
-    93,  1499,  1500,  1501,    -1,    -1,    -1,    -1,    -1,  1186,
-    -1,    -1,  1153,  1154,  1155,  1156,  1157,    -1,  1159,    -1,
-  1161,    -1,    -1,  1200,    -1,  1523,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   238,   239,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1184,  1185,  1186,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   259,    -1,    -1,    -1,    -1,
-     1,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,    -1,    -1,    14,    -1,    -1,  1217,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,
-    31,    32,    -1,    -1,   298,    36,    37,    -1,    -1,    -1,
-    41,    -1,    -1,    -1,    45,    46,    -1,    48,    -1,  1426,
-    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,
-    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,  1272,  1273,    -1,  1275,    -1,    -1,    -1,    -1,    80,
-    -1,    -1,   346,    -1,   348,   349,    -1,    88,    -1,    -1,
-    -1,    -1,    93,  1330,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,     4,     5,    -1,     7,     8,     9,    -1,   109,    12,
-  1311,    14,  1313,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1499,  1500,  1501,    28,    -1,    30,    31,   393,
-    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    45,    -1,    -1,    -1,  1523,    -1,   412,    -1,
-    -1,    54,    -1,    56,    57,   419,    -1,    -1,   422,    -1,
+    83,    84,    65,    -1,    -1,    -1,  1201,  1202,  1203,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1122,  1123,    -1,  1125,
+    -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,   124,    -1,   126,  1170,  1171,  1172,  1173,  1174,    -1,
+   133,   134,  1178,    -1,    -1,    -1,    -1,   140,   141,    -1,
+    -1,   144,   145,   146,    -1,   148,   149,   150,   151,    -1,
+    -1,   650,   651,    -1,    -1,  1201,  1202,  1203,    -1,    -1,
+  1295,  1296,    -1,  1298,    -1,    -1,    -1,   666,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
+     5,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1334,
+  1335,  1336,    -1,    -1,    -1,    -1,   705,    -1,   707,   708,
+    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,
+    -1,    56,    57,    -1,    -1,   238,   239,    62,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,  1295,
+  1296,    -1,  1298,   752,    -1,    80,   259,    -1,    -1,    -1,
+    -1,    -1,    -1,    88,   763,   764,    -1,   766,    93,    -1,
+    -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,    12,    13,    14,    -1,   785,    -1,  1334,    -1,
+  1336,    -1,    -1,    -1,    -1,   298,    -1,    -1,    28,    29,
+    30,    31,    32,  1438,    34,    35,    36,   806,    38,    39,
+    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,
+    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
+    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+    70,    -1,    -1,   346,    -1,   348,   349,    -1,    78,    79,
+    80,     3,     4,     5,     6,    -1,    86,    87,    88,    -1,
+    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,
+  1505,  1506,  1507,     3,     4,     5,     6,    -1,    -1,    31,
+   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+   393,  1526,  1438,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,   412,
+    -1,    41,    -1,    -1,    -1,    -1,   419,    -1,    70,   422,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    80,    -1,
+    60,   434,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+    70,    93,    -1,    -1,    -1,   944,   945,   946,    -1,    -1,
+    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,  1505,
+  1506,  1507,    -1,    93,    -1,    -1,    -1,    -1,     4,     5,
+    -1,     7,     8,     9,     3,     4,     5,     6,    14,    -1,
+  1526,    -1,   981,   982,   983,    -1,    -1,    -1,    -1,   988,
+    -1,    -1,    28,    -1,    30,    31,    -1,    -1,    -1,   502,
+    36,    -1,    -1,    -1,    -1,   508,    -1,    -1,    -1,    45,
+    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    54,  1018,
+    56,    57,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,  1030,     1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    70,    -1,    12,   547,    14,    -1,    -1,    -1,    -1,
+    -1,    80,    -1,    -1,    -1,    -1,    25,    -1,    27,    88,
+    -1,    -1,    31,    -1,    93,    -1,    -1,    36,    -1,    -1,
+  1069,    -1,    41,    -1,    -1,    -1,    45,    -1,    47,    -1,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    58,
+    59,    60,    -1,    62,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,    -1,    86,    87,    88,
+   623,    90,    91,    92,    93,    94,    95,    -1,    97,    -1,
+    -1,   634,   635,   102,   637,   638,    -1,    -1,   107,   108,
+   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+  1149,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,
+     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
+    -1,  1170,  1171,  1172,  1173,  1174,    -1,  1176,    -1,  1178,
+    -1,    28,    -1,    30,    31,    -1,    -1,   690,    -1,    36,
+    -1,    -1,    -1,    -1,   697,   698,    -1,    -1,    45,    -1,
+    -1,    48,  1201,  1202,  1203,    -1,   709,    54,    -1,    56,
+    57,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
+   733,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+    36,    -1,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    58,    -1,    60,    61,    -1,   780,    -1,    -1,
+    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    80,    -1,  1295,  1296,    -1,  1298,
+    86,    87,    88,    -1,   807,    -1,    -1,    93,    -1,    95,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   434,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    -1,    13,    14,    15,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
-    50,    51,    52,    53,    54,  1426,    56,    57,    58,    -1,
-    60,    61,    -1,    -1,    -1,    -1,    -1,    67,   502,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,  1501,    95,   530,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-   110,  1518,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,  1499,  1500,
-  1501,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    -1,    -1,    12,    -1,    14,    -1,
-    -1,    -1,  1523,    -1,    -1,    -1,    -1,    -1,    -1,    25,
-    -1,    27,    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,
-    36,    -1,   606,    -1,    -1,    41,    -1,    -1,    -1,    45,
-    -1,    47,    -1,   617,   618,    -1,   620,   621,    54,    -1,
-    56,    57,    58,    59,    60,    -1,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-    86,    87,    88,    -1,    90,    91,    92,    93,    94,    95,
-    -1,    97,    -1,    -1,    -1,    -1,   102,    -1,    -1,   673,
-    -1,   107,   108,   109,    -1,   111,   680,   681,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   692,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
-     4,     5,     6,     7,     8,     9,    10,    11,    -1,    13,
-    14,    15,   716,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    44,    45,    46,    -1,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    58,    -1,    60,    61,    -1,   763,
-    -1,    -1,   766,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
-    -1,    95,    -1,    -1,    -1,    -1,   800,   801,   802,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,   812,    -1,
-     1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,   885,    -1,   887,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,   898,    86,    87,    88,    -1,    90,
-    -1,    -1,    93,    94,     1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    14,    -1,   110,
+    -1,    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   835,   836,   837,  1334,    -1,  1336,    -1,    -1,
+    -1,    -1,    -1,    -1,   847,    -1,     1,    -1,     3,     4,
+     5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
+    15,    -1,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+    35,    36,    -1,    38,    39,    40,    41,    42,    43,    44,
+    45,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
+    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,
+    -1,    -1,    67,    -1,    -1,    70,    -1,   920,    -1,   922,
+    -1,    -1,    -1,    78,    79,    80,    31,    -1,    -1,    -1,
+   933,    86,    87,    88,    -1,    -1,    -1,    -1,    93,  1438,
+    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,     7,     8,
+     9,    -1,    -1,    12,    -1,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1505,  1506,  1507,    28,
+    -1,    30,    31,    -1,    -1,  1018,    -1,    36,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    45,  1526,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
+     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1072,
+    -1,  1074,    -1,    28,    29,    30,    31,    32,    -1,    34,
+    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
+    45,    -1,    47,    -1,    49,    50,    51,    52,    53,    54,
+    -1,    56,    57,    58,    -1,    -1,    61,    -1,    -1,    -1,
+    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,  1122,
+  1123,    -1,  1125,    78,    79,    80,    -1,    -1,    -1,    -1,
+    -1,    86,    87,    88,    -1,    90,    -1,    -1,    93,    94,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    47,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,   983,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    90,    -1,    -1,    93,    94,     1,    -1,
-     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-    13,    14,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
-    -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
-    43,    -1,    45,    -1,    -1,  1049,    49,    50,    51,    52,
-    53,    54,    -1,    56,    57,    -1,    -1,    -1,    61,    -1,
-    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
-    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,  1105,  1106,    -1,  1108,   108,     1,   110,     3,     4,
+    -1,    -1,    -1,    -1,    -1,   110,     1,    -1,     3,     4,
      5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
+    -1,    -1,  1185,    28,    29,    30,    31,    32,    -1,    34,
     35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
     45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    58,  1168,    60,    61,    -1,    -1,    -1,
+    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,  1222,
     -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-     1,  1205,     3,     4,     5,     6,    -1,     8,     9,    10,
-    11,    -1,    13,    14,    -1,   110,  1220,    -1,  1222,    -1,
+    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,     1,
+    -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,   110,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,
+    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
+    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
+    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,    61,
+    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
+    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,
+    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1359,   109,   110,     1,
+    -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
+    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
+    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
+    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,    61,
+    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
+    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,
+     1,    93,     3,     4,     5,     6,    -1,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,   110,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
     -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
     41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
@@ -3249,29 +3285,18 @@ static const short yycheck[] = {     4,
     61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
     -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
-    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   110,
-     1,    -1,     3,     4,     5,     6,    -1,     8,     9,    10,
-    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1336,    -1,    -1,    -1,    -1,    28,    29,    30,
-    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
-    -1,     1,    93,     3,     4,     5,     6,    -1,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,   110,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,    94,     1,    -1,     3,     4,     5,
+    -1,    -1,    93,    94,     1,    -1,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,   110,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
+    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
+    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
+    57,    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
+    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
      6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
-   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
     36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
     -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
@@ -3287,20 +3312,20 @@ static const short yycheck[] = {     4,
     -1,    56,    57,    58,    -1,    -1,    61,    -1,    -1,    -1,
     -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,
-     4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
-    14,    -1,    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    58,    -1,    -1,    61,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
-    -1,     1,    -1,     3,     4,     5,     6,   101,     8,     9,
-    10,    11,    -1,    13,    14,    -1,   110,    -1,    -1,    -1,
+    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
+     1,    -1,     3,     4,     5,     6,   101,     8,     9,    10,
+    11,    -1,    13,    14,    -1,   110,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
+    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
+    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
+    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,
+    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
+    -1,     1,    93,     3,     4,     5,     6,    -1,     8,     9,
+    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,   110,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
+    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
     40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
     50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
     -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
@@ -3311,8 +3336,8 @@ static const short yycheck[] = {     4,
    110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
     29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
     39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
-    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+    49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
+    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
     79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
     -1,    -1,    -1,     1,    93,     3,     4,     5,     6,    -1,
@@ -3321,90 +3346,68 @@ static const short yycheck[] = {     4,
     28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
     38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
     -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    -1,    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,    67,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
-     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,
-    -1,    67,     1,    -1,    70,     4,     5,    -1,    -1,     8,
-     9,    -1,    78,    79,    80,    14,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    28,
-    -1,    30,    -1,    -1,    -1,    -1,    -1,    36,    -1,    38,
-    39,    -1,   108,    -1,   110,    -1,    45,    -1,    47,    -1,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    -1,    -1,    86,    87,    88,
-    -1,    -1,    91,    -1,     1,    94,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
-     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,
-     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,     3,     4,     5,     6,    93,     8,
-     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,
+    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
+     1,    -1,    70,     4,     5,    -1,    -1,     8,     9,    -1,
+    78,    79,    80,    14,    -1,    -1,    -1,    -1,    86,    87,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    28,    -1,    30,
+    -1,    -1,    -1,    -1,    -1,    36,    -1,    38,    39,    -1,
+   108,    -1,   110,    -1,    45,    -1,    47,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    59,    -1,
+    -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    -1,    -1,    86,    87,    88,    -1,    -1,
+    91,    -1,     1,    94,     3,     4,     5,     6,    -1,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,   110,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
     29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
     39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
     49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
     -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-     1,    70,     3,     4,     5,     6,     7,     8,     9,    78,
-    79,    80,    -1,    14,    -1,    -1,    -1,    86,    87,    88,
-    -1,    -1,    -1,    -1,    93,    -1,    -1,    28,    -1,    30,
-    31,    32,    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,
-    41,   110,   111,    -1,    45,    46,    -1,    48,    -1,    -1,
-    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,
-    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-    -1,    -1,    93,    -1,    -1,     3,     4,     5,     6,     7,
-     8,     9,    10,    11,    -1,    13,    14,    15,   109,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,    30,    31,    32,    -1,    34,    35,    36,    -1,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
+    -1,    -1,    -1,     1,    93,     3,     4,     5,     6,    -1,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
+    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
     -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    58,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,    67,
+    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
     -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   109,   110,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    -1,    13,    14,    15,    -1,    17,    18,    19,
+    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
+    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
+    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
+    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
+    87,    88,     3,     4,     5,     6,    93,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,
+    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
+    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
+    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
+    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,     1,    70,
+     3,     4,     5,     6,     7,     8,     9,    78,    79,    80,
+    -1,    14,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
+    -1,    -1,    93,    -1,    -1,    28,    -1,    30,    31,    32,
+    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    41,   110,
+   111,    -1,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
+    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    62,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,     1,    -1,
+     3,     4,     5,     6,     7,     8,     9,    80,    -1,    -1,
+    -1,    14,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,
+    93,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,    32,
+    -1,    -1,    -1,    36,    37,    -1,   109,    -1,    41,    -1,
+    -1,    -1,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
+    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    62,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,
+    93,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,    -1,    13,    14,    15,   109,    17,    18,    19,
     20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
     30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
     40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
@@ -3412,27 +3415,47 @@ static const short yycheck[] = {     4,
     60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
     70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
     80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,    -1,    95,    -1,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
-   110,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    44,    45,
-    46,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    95,
-    -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    -1,    13,    14,    15,   110,    17,    18,    19,    20,    21,
+    -1,    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+   110,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+    -1,    13,    14,    15,    -1,    17,    18,    19,    20,    21,
     22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
     32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
     42,    43,    44,    45,    46,    -1,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,    -1,    -1,    60,    61,
+    52,    53,    54,    -1,    56,    57,    58,    -1,    60,    61,
     -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
     -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    95,     3,     4,     5,     6,     7,     8,
-     9,    10,    11,    12,    13,    14,    -1,    -1,   110,    -1,
+    -1,    93,    -1,    95,    -1,     3,     4,     5,     6,     7,
+     8,     9,    10,    11,    -1,    13,    14,    15,   110,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    -1,    34,    35,    36,    -1,
+    38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
+    58,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,    67,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,     3,
+     4,     5,     6,     7,     8,     9,    10,    11,    -1,    13,
+    14,    15,   110,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
+    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
+    44,    45,    46,    -1,    -1,    49,    50,    51,    52,    53,
+    54,    -1,    56,    57,    -1,    -1,    60,    61,    -1,    -1,
+    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
+    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
+    -1,    95,     3,     4,     5,     6,     7,     8,     9,    10,
+    11,    12,    13,    14,    -1,    -1,   110,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
+    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
+    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,
+    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
+    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,
+    -1,    -1,    93,    94,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    12,    13,    14,    -1,    -1,    -1,   110,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
     29,    30,    31,    32,    -1,    34,    35,    36,    -1,    38,
     39,    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,
@@ -3441,12 +3464,12 @@ static const short yycheck[] = {     4,
     -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
     79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
     -1,    90,    -1,    -1,    93,    94,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    14,    -1,    -1,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
     -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
     -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
     47,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
     87,    88,    -1,    90,    -1,    -1,    93,    94,     3,     4,
@@ -3587,103 +3610,33 @@ static const short yycheck[] = {     4,
     38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
     -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-    -1,     1,    70,     3,     4,     5,     6,     7,     8,     9,
-    78,    79,    80,    -1,    14,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,    -1,    93,    -1,    27,    28,    -1,
-    30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-    -1,    41,   110,    -1,    44,    45,    46,    -1,    48,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
-    60,    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,
-    80,     3,     4,     5,     6,     7,     8,     9,    88,    -1,
-    31,    -1,    14,    93,    -1,    -1,    -1,    -1,    98,    -1,
-    41,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,
-    32,    -1,    -1,    54,    36,    56,    57,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    70,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,     1,    80,
-     3,     4,     5,     6,     7,     8,     9,    88,    70,    -1,
-    -1,    14,    93,    -1,    -1,    -1,    -1,    -1,    80,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    88,    30,    31,    32,
-    -1,    93,    -1,    36,    -1,    -1,    98,    -1,    41,    -1,
-    -1,    -1,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    62,
-    -1,    -1,    -1,    -1,    -1,    -1,     1,    70,     3,     4,
-     5,     6,     7,     8,     9,    -1,    -1,    80,    -1,    14,
-    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,
-    93,    -1,    -1,    28,    -1,    30,    31,    -1,    -1,    -1,
-    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,    -1,    -1,    60,    -1,     3,     4,     5,
-     6,     7,     8,     9,    -1,    70,    -1,    -1,    14,    -1,
-    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    88,    30,    31,    -1,    -1,    93,    -1,
-    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
-    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,    -1,    -1,    14,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    80,    -1,    -1,    28,    -1,    30,
-    31,    -1,    88,    -1,    90,    36,    -1,    93,    94,    -1,
-    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,
-    -1,     3,     4,     5,     6,     7,     8,     9,    -1,    70,
-    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    80,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,    88,    30,    31,
-    -1,    -1,    93,    -1,    36,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
-    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,     3,
-     4,     5,     6,     7,     8,     9,    -1,    -1,    80,    -1,
-    14,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    -1,    28,    -1,    30,    31,    -1,    -1,
-    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    60,    -1,     3,     4,
-     5,     6,     7,     8,     9,    -1,    70,    -1,    -1,    14,
-    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    88,    30,    31,    -1,    -1,    93,
-    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,     3,     4,     5,     6,     7,     8,     9,
-    -1,    -1,    -1,    -1,    14,    70,    -1,    -1,    -1,    -1,
-     3,     4,     5,     6,    -1,    80,     9,    -1,    28,    -1,
-    30,    31,    -1,    88,    -1,    -1,    36,    -1,    93,    -1,
-    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,    31,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    41,    -1,
-    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,
-    70,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    70,    88,    31,
-    -1,    -1,    -1,    93,    -1,    -1,    -1,    80,    -1,    41,
-    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,
-    93,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
-    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    63,    64,    65,    66,    67,    68,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    63,    64,    65,    66,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,
-   107,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    62,    63,    64,    65,    66,    67,    68,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
+    88,    -1,    -1,     4,     5,    93,     7,     8,     9,    -1,
+    -1,    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   110,    -1,    -1,    -1,    -1,    28,    -1,    30,
+    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    63,
+    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    59,    -1,    -1,   107,    63,    64,    65,    66,    67,    68,
     69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    63,    64,
-    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    -1,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    68,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84
+    79,    80,    81,    82,    83,    84,    62,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    63,
+    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+    82,    83,    84
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 3 "/usr/lib/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -3700,8 +3653,7 @@ static const short yycheck[] = {     4,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* As a special exception, when this file is copied by Bison into a
    Bison output file, you may use that output file without restriction.
@@ -3877,7 +3829,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 196 "/usr/lib/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -6423,14 +6375,8 @@ case 524:
 #line 2388 "parse.y"
 { yyvsp[-1].ttype = begin_class_definition (yyvsp[-1].ttype); ;
     break;}
-case 525:
-#line 2393 "parse.y"
-{
-                 finish_member_declaration (build_self_reference ());
-               ;
-    break;}
-case 530:
-#line 2407 "parse.y"
+case 529:
+#line 2399 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6441,50 +6387,50 @@ case 530:
                  current_access_specifier = yyvsp[-1].ttype;
                 ;
     break;}
-case 531:
-#line 2422 "parse.y"
+case 530:
+#line 2414 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
-case 532:
-#line 2426 "parse.y"
+case 531:
+#line 2418 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
-case 534:
-#line 2434 "parse.y"
+case 533:
+#line 2426 "parse.y"
 { error ("missing ';' before right brace");
                  yyungetc ('}', 0); ;
     break;}
+case 534:
+#line 2431 "parse.y"
+{ yyval.ttype = finish_method (yyval.ttype); ;
+    break;}
 case 535:
-#line 2439 "parse.y"
+#line 2433 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 536:
-#line 2441 "parse.y"
+#line 2435 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 537:
-#line 2443 "parse.y"
+#line 2437 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 538:
-#line 2445 "parse.y"
-{ yyval.ttype = finish_method (yyval.ttype); ;
-    break;}
-case 539:
-#line 2447 "parse.y"
+#line 2439 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 540:
-#line 2449 "parse.y"
+case 539:
+#line 2441 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
-case 541:
-#line 2452 "parse.y"
+case 540:
+#line 2444 "parse.y"
 {  
                  if (yyvsp[0].ttype)
                    yyval.ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6495,15 +6441,15 @@ case 541:
                  finish_template_decl (yyvsp[-1].ttype);
                ;
     break;}
-case 542:
-#line 2462 "parse.y"
+case 541:
+#line 2454 "parse.y"
 { 
                  yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t); 
                  finish_template_decl (yyvsp[-2].ttype);
                ;
     break;}
-case 543:
-#line 2473 "parse.y"
+case 542:
+#line 2465 "parse.y"
 {
                  /* Most of the productions for component_decl only
                     allow the creation of one new member, so we call
@@ -6525,54 +6471,54 @@ case 543:
                  yyval.ttype = NULL_TREE;
                ;
     break;}
-case 544:
-#line 2494 "parse.y"
+case 543:
+#line 2486 "parse.y"
 { 
                  if (!yyvsp[0].itype)
                    grok_x_components (yyvsp[-1].ttype);
                  yyval.ttype = NULL_TREE; 
                ;
     break;}
-case 545:
-#line 2500 "parse.y"
+case 544:
+#line 2492 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
-case 546:
-#line 2503 "parse.y"
+case 545:
+#line 2495 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
-case 547:
-#line 2506 "parse.y"
+case 546:
+#line 2498 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 548:
-#line 2508 "parse.y"
+case 547:
+#line 2500 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 549:
-#line 2519 "parse.y"
+case 548:
+#line 2511 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs);
                  yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, attrs)); ;
     break;}
-case 550:
-#line 2524 "parse.y"
+case 549:
+#line 2516 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
-case 551:
-#line 2527 "parse.y"
+case 550:
+#line 2519 "parse.y"
 { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
     break;}
-case 552:
-#line 2533 "parse.y"
+case 551:
+#line 2525 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 553:
-#line 2535 "parse.y"
+case 552:
+#line 2527 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6580,8 +6526,8 @@ case 553:
                  yyval.itype = 1;
                ;
     break;}
-case 554:
-#line 2542 "parse.y"
+case 553:
+#line 2534 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6590,12 +6536,12 @@ case 554:
                  yyval.itype = 2;
                ;
     break;}
-case 555:
-#line 2553 "parse.y"
+case 554:
+#line 2545 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 556:
-#line 2555 "parse.y"
+case 555:
+#line 2547 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6603,8 +6549,8 @@ case 556:
                  yyval.itype = 1;
                ;
     break;}
-case 557:
-#line 2562 "parse.y"
+case 556:
+#line 2554 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6613,103 +6559,103 @@ case 557:
                  yyval.itype = 2;
                ;
     break;}
-case 562:
-#line 2583 "parse.y"
+case 561:
+#line 2575 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 563:
-#line 2589 "parse.y"
+case 562:
+#line 2581 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 564:
-#line 2598 "parse.y"
+case 563:
+#line 2590 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 565:
-#line 2604 "parse.y"
+case 564:
+#line 2596 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 566:
-#line 2610 "parse.y"
+case 565:
+#line 2602 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 567:
-#line 2616 "parse.y"
+case 566:
+#line 2608 "parse.y"
 { split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-3].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 568:
-#line 2625 "parse.y"
+case 567:
+#line 2617 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 569:
-#line 2628 "parse.y"
+case 568:
+#line 2620 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 570:
-#line 2634 "parse.y"
+case 569:
+#line 2626 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 571:
-#line 2637 "parse.y"
+case 570:
+#line 2629 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 572:
-#line 2640 "parse.y"
+case 571:
+#line 2632 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 574:
-#line 2651 "parse.y"
+case 573:
+#line 2643 "parse.y"
 { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 575:
-#line 2656 "parse.y"
+case 574:
+#line 2648 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE, current_enum_type); ;
     break;}
-case 576:
-#line 2658 "parse.y"
+case 575:
+#line 2650 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype, current_enum_type); ;
     break;}
-case 577:
-#line 2664 "parse.y"
+case 576:
+#line 2656 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 578:
-#line 2667 "parse.y"
+case 577:
+#line 2659 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 579:
-#line 2674 "parse.y"
+case 578:
+#line 2666 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
@@ -6718,72 +6664,72 @@ case 579:
                  yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag;
                ;
     break;}
-case 580:
-#line 2685 "parse.y"
+case 579:
+#line 2677 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 581:
-#line 2687 "parse.y"
+case 580:
+#line 2679 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 582:
-#line 2692 "parse.y"
+case 581:
+#line 2684 "parse.y"
 { yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 583:
-#line 2695 "parse.y"
+case 582:
+#line 2687 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 584:
-#line 2704 "parse.y"
+case 583:
+#line 2696 "parse.y"
 { yyval.itype = suspend_momentary (); ;
     break;}
-case 585:
-#line 2709 "parse.y"
+case 584:
+#line 2701 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 586:
-#line 2715 "parse.y"
+case 585:
+#line 2707 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 587:
-#line 2717 "parse.y"
+case 586:
+#line 2709 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 588:
-#line 2719 "parse.y"
+case 587:
+#line 2711 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
     break;}
-case 589:
-#line 2721 "parse.y"
+case 588:
+#line 2713 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
     break;}
-case 590:
-#line 2728 "parse.y"
+case 589:
+#line 2720 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 591:
-#line 2730 "parse.y"
+case 590:
+#line 2722 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 592:
-#line 2732 "parse.y"
+case 591:
+#line 2724 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 593:
-#line 2734 "parse.y"
+case 592:
+#line 2726 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 594:
-#line 2736 "parse.y"
+case 593:
+#line 2728 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 596:
-#line 2744 "parse.y"
+case 595:
+#line 2736 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    {
@@ -6801,8 +6747,8 @@ case 596:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 597:
-#line 2761 "parse.y"
+case 596:
+#line 2753 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -6811,161 +6757,161 @@ case 597:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 600:
-#line 2774 "parse.y"
+case 599:
+#line 2766 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 601:
-#line 2779 "parse.y"
+case 600:
+#line 2771 "parse.y"
 { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
     break;}
-case 602:
-#line 2784 "parse.y"
+case 601:
+#line 2776 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 603:
-#line 2786 "parse.y"
+case 602:
+#line 2778 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 604:
-#line 2788 "parse.y"
+case 603:
+#line 2780 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 605:
-#line 2790 "parse.y"
+case 604:
+#line 2782 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 606:
-#line 2792 "parse.y"
+case 605:
+#line 2784 "parse.y"
 { push_nested_class (yyvsp[-1].ttype, 3);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype);
                  TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ;
     break;}
-case 609:
-#line 2804 "parse.y"
+case 608:
+#line 2796 "parse.y"
 {
                  /* Provide support for '(' attributes '*' declarator ')'
                     etc */
                  yyval.ttype = decl_tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE);
                ;
     break;}
-case 610:
-#line 2813 "parse.y"
+case 609:
+#line 2805 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 611:
-#line 2815 "parse.y"
+case 610:
+#line 2807 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 612:
-#line 2817 "parse.y"
+case 611:
+#line 2809 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 613:
-#line 2819 "parse.y"
+case 612:
+#line 2811 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 614:
-#line 2821 "parse.y"
+case 613:
+#line 2813 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 616:
-#line 2829 "parse.y"
+case 615:
+#line 2821 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 617:
-#line 2831 "parse.y"
+case 616:
+#line 2823 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 618:
-#line 2833 "parse.y"
+case 617:
+#line 2825 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 619:
-#line 2835 "parse.y"
+case 618:
+#line 2827 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 620:
-#line 2837 "parse.y"
+case 619:
+#line 2829 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 622:
-#line 2845 "parse.y"
+case 621:
+#line 2837 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 623:
-#line 2847 "parse.y"
+case 622:
+#line 2839 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 624:
-#line 2849 "parse.y"
+case 623:
+#line 2841 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 625:
-#line 2851 "parse.y"
+case 624:
+#line 2843 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 626:
-#line 2853 "parse.y"
+case 625:
+#line 2845 "parse.y"
 { enter_scope_of (yyvsp[0].ttype); ;
     break;}
-case 627:
-#line 2855 "parse.y"
+case 626:
+#line 2847 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype);
                  enter_scope_of (yyval.ttype);
                ;
     break;}
-case 628:
-#line 2863 "parse.y"
+case 627:
+#line 2855 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 629:
-#line 2866 "parse.y"
+case 628:
+#line 2858 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 630:
-#line 2872 "parse.y"
+case 629:
+#line 2864 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 631:
-#line 2875 "parse.y"
+case 630:
+#line 2867 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 633:
-#line 2882 "parse.y"
+case 632:
+#line 2874 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 634:
-#line 2887 "parse.y"
+case 633:
+#line 2879 "parse.y"
 { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 635:
-#line 2889 "parse.y"
+case 634:
+#line 2881 "parse.y"
 { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 636:
-#line 2891 "parse.y"
+case 635:
+#line 2883 "parse.y"
 { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 641:
-#line 2902 "parse.y"
+case 640:
+#line 2894 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 642:
-#line 2904 "parse.y"
+case 641:
+#line 2896 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 643:
-#line 2911 "parse.y"
+case 642:
+#line 2903 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    {
@@ -6980,32 +6926,32 @@ case 643:
                  got_scope = yyval.ttype = TYPE_MAIN_VARIANT (TREE_TYPE (yyval.ttype));
                ;
     break;}
-case 644:
-#line 2925 "parse.y"
+case 643:
+#line 2917 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 645:
-#line 2931 "parse.y"
+case 644:
+#line 2923 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 646:
-#line 2937 "parse.y"
+case 645:
+#line 2929 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
     break;}
-case 648:
-#line 2953 "parse.y"
+case 647:
+#line 2945 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 649:
-#line 2958 "parse.y"
+case 648:
+#line 2950 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -7019,27 +6965,27 @@ case 649:
                    }
                ;
     break;}
-case 650:
-#line 2971 "parse.y"
+case 649:
+#line 2963 "parse.y"
 { yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ;
     break;}
-case 651:
-#line 2973 "parse.y"
+case 650:
+#line 2965 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 652:
-#line 2975 "parse.y"
+case 651:
+#line 2967 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 653:
-#line 2980 "parse.y"
+case 652:
+#line 2972 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
                ;
     break;}
-case 654:
-#line 2985 "parse.y"
+case 653:
+#line 2977 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -7053,16 +6999,16 @@ case 654:
                    }
                ;
     break;}
-case 655:
-#line 2998 "parse.y"
+case 654:
+#line 2990 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
-case 656:
-#line 3000 "parse.y"
+case 655:
+#line 2992 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 657:
-#line 3005 "parse.y"
+case 656:
+#line 2997 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyvsp[-1].ttype = lastiddecl;
@@ -7075,32 +7021,32 @@ case 657:
                    cp_error ("`%T' is not a class or namespace", yyvsp[-1].ttype);
                ;
     break;}
-case 658:
-#line 3017 "parse.y"
+case 657:
+#line 3009 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype));
                ;
     break;}
-case 659:
-#line 3023 "parse.y"
+case 658:
+#line 3015 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
     break;}
-case 662:
-#line 3027 "parse.y"
+case 661:
+#line 3019 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 663:
-#line 3036 "parse.y"
+case 662:
+#line 3028 "parse.y"
 { yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 664:
-#line 3041 "parse.y"
+case 663:
+#line 3033 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -7109,149 +7055,149 @@ case 664:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 666:
-#line 3050 "parse.y"
+case 665:
+#line 3042 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 667:
-#line 3055 "parse.y"
+case 666:
+#line 3047 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 668:
-#line 3057 "parse.y"
+case 667:
+#line 3049 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
     break;}
-case 669:
-#line 3064 "parse.y"
+case 668:
+#line 3056 "parse.y"
 { got_scope = void_type_node; ;
     break;}
-case 670:
-#line 3070 "parse.y"
+case 669:
+#line 3062 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 671:
-#line 3072 "parse.y"
+case 670:
+#line 3064 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 672:
-#line 3074 "parse.y"
+case 671:
+#line 3066 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 673:
-#line 3076 "parse.y"
+case 672:
+#line 3068 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 674:
-#line 3078 "parse.y"
+case 673:
+#line 3070 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
-case 675:
-#line 3082 "parse.y"
+case 674:
+#line 3074 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 677:
-#line 3091 "parse.y"
+case 676:
+#line 3083 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 678:
-#line 3093 "parse.y"
+case 677:
+#line 3085 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 679:
-#line 3099 "parse.y"
+case 678:
+#line 3091 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 680:
-#line 3101 "parse.y"
+case 679:
+#line 3093 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 681:
-#line 3103 "parse.y"
+case 680:
+#line 3095 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 682:
-#line 3105 "parse.y"
+case 681:
+#line 3097 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 683:
-#line 3107 "parse.y"
+case 682:
+#line 3099 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 684:
-#line 3109 "parse.y"
+case 683:
+#line 3101 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 685:
-#line 3111 "parse.y"
+case 684:
+#line 3103 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 686:
-#line 3113 "parse.y"
+case 685:
+#line 3105 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 687:
-#line 3115 "parse.y"
+case 686:
+#line 3107 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
-case 688:
-#line 3119 "parse.y"
+case 687:
+#line 3111 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 690:
-#line 3128 "parse.y"
+case 689:
+#line 3120 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 692:
-#line 3132 "parse.y"
+case 691:
+#line 3124 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 693:
-#line 3134 "parse.y"
+case 692:
+#line 3126 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 694:
-#line 3136 "parse.y"
+case 693:
+#line 3128 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 695:
-#line 3138 "parse.y"
+case 694:
+#line 3130 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 696:
-#line 3140 "parse.y"
+case 695:
+#line 3132 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 697:
-#line 3142 "parse.y"
+case 696:
+#line 3134 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 698:
-#line 3144 "parse.y"
+case 697:
+#line 3136 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 699:
-#line 3146 "parse.y"
+case 698:
+#line 3138 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 700:
-#line 3148 "parse.y"
+case 699:
+#line 3140 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
-case 707:
-#line 3171 "parse.y"
+case 706:
+#line 3163 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids label declarations"); ;
     break;}
-case 710:
-#line 3182 "parse.y"
+case 709:
+#line 3174 "parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -7261,267 +7207,267 @@ case 710:
                    }
                ;
     break;}
-case 711:
-#line 3196 "parse.y"
+case 710:
+#line 3188 "parse.y"
 {;
     break;}
-case 713:
-#line 3202 "parse.y"
+case 712:
+#line 3194 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
-case 714:
-#line 3204 "parse.y"
+case 713:
+#line 3196 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
-case 715:
-#line 3209 "parse.y"
+case 714:
+#line 3201 "parse.y"
 {
                  yyval.ttype = begin_if_stmt ();
                  cond_stmt_keyword = "if";
                ;
     break;}
-case 716:
-#line 3214 "parse.y"
+case 715:
+#line 3206 "parse.y"
 { finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
-case 717:
-#line 3216 "parse.y"
+case 716:
+#line 3208 "parse.y"
 { yyval.ttype = finish_then_clause (yyvsp[-3].ttype); ;
     break;}
-case 719:
-#line 3221 "parse.y"
+case 718:
+#line 3213 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
-case 720:
-#line 3223 "parse.y"
+case 719:
+#line 3215 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
-case 721:
-#line 3228 "parse.y"
+case 720:
+#line 3220 "parse.y"
 {;
     break;}
-case 723:
-#line 3234 "parse.y"
+case 722:
+#line 3226 "parse.y"
 { finish_stmt (); ;
     break;}
-case 724:
-#line 3236 "parse.y"
+case 723:
+#line 3228 "parse.y"
 { finish_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 725:
-#line 3238 "parse.y"
+case 724:
+#line 3230 "parse.y"
 { begin_else_clause (); ;
     break;}
-case 726:
-#line 3240 "parse.y"
+case 725:
+#line 3232 "parse.y"
 { 
                  finish_else_clause (yyvsp[-3].ttype); 
                  finish_if_stmt ();
                ;
     break;}
-case 727:
-#line 3245 "parse.y"
+case 726:
+#line 3237 "parse.y"
 { finish_if_stmt (); ;
     break;}
-case 728:
-#line 3247 "parse.y"
+case 727:
+#line 3239 "parse.y"
 {
                  yyval.ttype = begin_while_stmt ();
                  cond_stmt_keyword = "while";
                ;
     break;}
-case 729:
-#line 3252 "parse.y"
+case 728:
+#line 3244 "parse.y"
 { finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
-case 730:
-#line 3254 "parse.y"
+case 729:
+#line 3246 "parse.y"
 { finish_while_stmt (yyvsp[-3].ttype); ;
     break;}
-case 731:
-#line 3256 "parse.y"
+case 730:
+#line 3248 "parse.y"
 { yyval.ttype = begin_do_stmt (); ;
     break;}
-case 732:
-#line 3258 "parse.y"
+case 731:
+#line 3250 "parse.y"
 {
                  finish_do_body (yyvsp[-2].ttype);
                  cond_stmt_keyword = "do";
                ;
     break;}
-case 733:
-#line 3263 "parse.y"
+case 732:
+#line 3255 "parse.y"
 { finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
-case 734:
-#line 3265 "parse.y"
+case 733:
+#line 3257 "parse.y"
 { yyval.ttype = begin_for_stmt (); ;
     break;}
-case 735:
-#line 3267 "parse.y"
+case 734:
+#line 3259 "parse.y"
 { finish_for_init_stmt (yyvsp[-2].ttype); ;
     break;}
-case 736:
-#line 3269 "parse.y"
+case 735:
+#line 3261 "parse.y"
 { finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
-case 737:
-#line 3271 "parse.y"
+case 736:
+#line 3263 "parse.y"
 { finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); ;
     break;}
-case 738:
-#line 3273 "parse.y"
+case 737:
+#line 3265 "parse.y"
 { finish_for_stmt (yyvsp[-3].ttype, yyvsp[-10].ttype); ;
     break;}
-case 739:
-#line 3275 "parse.y"
+case 738:
+#line 3267 "parse.y"
 { begin_switch_stmt (); ;
     break;}
-case 740:
-#line 3277 "parse.y"
+case 739:
+#line 3269 "parse.y"
 { yyval.ttype = finish_switch_cond (yyvsp[-1].ttype); ;
     break;}
-case 741:
-#line 3279 "parse.y"
+case 740:
+#line 3271 "parse.y"
 { finish_switch_stmt (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 742:
-#line 3281 "parse.y"
+case 741:
+#line 3273 "parse.y"
 { finish_case_label (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
-case 744:
-#line 3284 "parse.y"
+case 743:
+#line 3276 "parse.y"
 { finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 746:
-#line 3287 "parse.y"
+case 745:
+#line 3279 "parse.y"
 { finish_case_label (NULL_TREE, NULL_TREE); ;
     break;}
-case 748:
-#line 3290 "parse.y"
+case 747:
+#line 3282 "parse.y"
 { finish_break_stmt (); ;
     break;}
-case 749:
-#line 3292 "parse.y"
+case 748:
+#line 3284 "parse.y"
 { finish_continue_stmt (); ;
     break;}
-case 750:
-#line 3294 "parse.y"
+case 749:
+#line 3286 "parse.y"
 { finish_return_stmt (NULL_TREE); ;
     break;}
-case 751:
-#line 3296 "parse.y"
+case 750:
+#line 3288 "parse.y"
 { finish_return_stmt (yyvsp[-1].ttype); ;
     break;}
-case 752:
-#line 3298 "parse.y"
+case 751:
+#line 3290 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
-case 753:
-#line 3304 "parse.y"
+case 752:
+#line 3296 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
-case 754:
-#line 3310 "parse.y"
+case 753:
+#line 3302 "parse.y"
 { finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
-case 755:
-#line 3314 "parse.y"
+case 754:
+#line 3306 "parse.y"
 { finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
     break;}
-case 756:
-#line 3316 "parse.y"
+case 755:
+#line 3308 "parse.y"
 { 
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids computed gotos");
                  finish_goto_stmt (yyvsp[-1].ttype);
                ;
     break;}
-case 757:
-#line 3322 "parse.y"
+case 756:
+#line 3314 "parse.y"
 { finish_goto_stmt (yyvsp[-1].ttype); ;
     break;}
-case 758:
-#line 3324 "parse.y"
+case 757:
+#line 3316 "parse.y"
 { finish_stmt (); ;
     break;}
-case 759:
-#line 3326 "parse.y"
+case 758:
+#line 3318 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
-case 760:
-#line 3330 "parse.y"
+case 759:
+#line 3322 "parse.y"
 { finish_stmt (); ;
     break;}
-case 763:
-#line 3334 "parse.y"
+case 762:
+#line 3326 "parse.y"
 { do_local_using_decl (yyvsp[0].ttype); ;
     break;}
-case 765:
-#line 3340 "parse.y"
+case 764:
+#line 3332 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
                  expand_start_early_try_stmts ();
                ;
     break;}
-case 766:
-#line 3346 "parse.y"
+case 765:
+#line 3338 "parse.y"
 { 
                   expand_start_all_catch (); 
                 ;
     break;}
-case 767:
-#line 3350 "parse.y"
+case 766:
+#line 3342 "parse.y"
 {
                  expand_end_all_catch ();
                  yyval.itype = yyvsp[-3].itype;
                ;
     break;}
-case 768:
-#line 3358 "parse.y"
+case 767:
+#line 3350 "parse.y"
 { yyval.ttype = begin_try_block (); ;
     break;}
-case 769:
-#line 3360 "parse.y"
+case 768:
+#line 3352 "parse.y"
 { finish_try_block (yyvsp[-1].ttype); ;
     break;}
-case 770:
-#line 3362 "parse.y"
+case 769:
+#line 3354 "parse.y"
 { finish_handler_sequence (yyvsp[-3].ttype); ;
     break;}
-case 773:
-#line 3372 "parse.y"
+case 772:
+#line 3364 "parse.y"
 { yyval.ttype = begin_handler(); ;
     break;}
-case 774:
-#line 3374 "parse.y"
+case 773:
+#line 3366 "parse.y"
 { finish_handler_parms (yyvsp[-1].ttype); ;
     break;}
-case 775:
-#line 3376 "parse.y"
+case 774:
+#line 3368 "parse.y"
 { finish_handler (yyvsp[-3].ttype); ;
     break;}
-case 778:
-#line 3386 "parse.y"
+case 777:
+#line 3378 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
-case 779:
-#line 3402 "parse.y"
+case 778:
+#line 3394 "parse.y"
 { check_for_new_type ("inside exception declarations", yyvsp[-1].ftype);
                  expand_start_catch_block (TREE_PURPOSE (yyvsp[-1].ftype.t),
                                            TREE_VALUE (yyvsp[-1].ftype.t)); ;
     break;}
-case 780:
-#line 3409 "parse.y"
+case 779:
+#line 3401 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7529,99 +7475,99 @@ case 780:
                    expand_label (label);
                ;
     break;}
+case 780:
+#line 3408 "parse.y"
+{ goto do_label; ;
+    break;}
 case 781:
-#line 3416 "parse.y"
+#line 3410 "parse.y"
 { goto do_label; ;
     break;}
 case 782:
-#line 3418 "parse.y"
+#line 3412 "parse.y"
 { goto do_label; ;
     break;}
 case 783:
-#line 3420 "parse.y"
-{ goto do_label; ;
-    break;}
-case 784:
-#line 3425 "parse.y"
+#line 3417 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 786:
-#line 3428 "parse.y"
+case 785:
+#line 3420 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
-case 787:
-#line 3437 "parse.y"
+case 786:
+#line 3429 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 788:
-#line 3440 "parse.y"
+case 787:
+#line 3432 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
-case 789:
-#line 3445 "parse.y"
+case 788:
+#line 3437 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 791:
-#line 3448 "parse.y"
+case 790:
+#line 3440 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 792:
-#line 3455 "parse.y"
+case 791:
+#line 3447 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 795:
-#line 3462 "parse.y"
+case 794:
+#line 3454 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 796:
-#line 3467 "parse.y"
+case 795:
+#line 3459 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 797:
-#line 3472 "parse.y"
+case 796:
+#line 3464 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
-case 798:
-#line 3474 "parse.y"
+case 797:
+#line 3466 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 799:
-#line 3485 "parse.y"
+case 798:
+#line 3477 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
-case 801:
-#line 3490 "parse.y"
+case 800:
+#line 3482 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[0].ftype.t), 0);
                  check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
     break;}
-case 802:
-#line 3498 "parse.y"
+case 801:
+#line 3490 "parse.y"
 { yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
     break;}
-case 803:
-#line 3500 "parse.y"
+case 802:
+#line 3492 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
-case 804:
-#line 3503 "parse.y"
+case 803:
+#line 3495 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
-case 805:
-#line 3505 "parse.y"
+case 804:
+#line 3497 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE,
                                                         yyvsp[-1].ftype.t), 1); ;
     break;}
-case 806:
-#line 3508 "parse.y"
+case 805:
+#line 3500 "parse.y"
 { yyval.ttype = finish_parmlist (NULL_TREE, 1); ;
     break;}
-case 807:
-#line 3510 "parse.y"
+case 806:
+#line 3502 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7632,8 +7578,8 @@ case 807:
                  yychar = ')';
                ;
     break;}
-case 808:
-#line 3520 "parse.y"
+case 807:
+#line 3512 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7645,99 +7591,99 @@ case 808:
                  yychar = ')';
                ;
     break;}
-case 809:
-#line 3535 "parse.y"
+case 808:
+#line 3527 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
-case 810:
-#line 3537 "parse.y"
+case 809:
+#line 3529 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 813:
-#line 3548 "parse.y"
+case 812:
+#line 3540 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
-case 814:
-#line 3551 "parse.y"
+case 813:
+#line 3543 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ;
     break;}
-case 815:
-#line 3554 "parse.y"
+case 814:
+#line 3546 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
-case 816:
-#line 3557 "parse.y"
+case 815:
+#line 3549 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 817:
-#line 3559 "parse.y"
+case 816:
+#line 3551 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
-case 819:
-#line 3565 "parse.y"
+case 818:
+#line 3557 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ;
     break;}
-case 820:
-#line 3575 "parse.y"
+case 819:
+#line 3567 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); ;
     break;}
-case 821:
-#line 3579 "parse.y"
+case 820:
+#line 3571 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 822:
-#line 3582 "parse.y"
+case 821:
+#line 3574 "parse.y"
 { yyval.ftype.t = build_tree_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 823:
-#line 3585 "parse.y"
+case 822:
+#line 3577 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 824:
-#line 3589 "parse.y"
+case 823:
+#line 3581 "parse.y"
 { tree specs = strip_attrs (yyvsp[0].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 825:
-#line 3593 "parse.y"
+case 824:
+#line 3585 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 826:
-#line 3600 "parse.y"
+case 825:
+#line 3592 "parse.y"
 { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
     break;}
-case 827:
-#line 3603 "parse.y"
+case 826:
+#line 3595 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;  ;
     break;}
-case 830:
-#line 3614 "parse.y"
+case 829:
+#line 3606 "parse.y"
 { see_typename (); ;
     break;}
-case 831:
-#line 3619 "parse.y"
+case 830:
+#line 3611 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
-case 832:
-#line 3624 "parse.y"
+case 831:
+#line 3616 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
@@ -7747,194 +7693,194 @@ case 832:
                  yyval.ttype = build_tree_list (integer_type_node, yyval.ttype);
                ;
     break;}
-case 833:
-#line 3636 "parse.y"
+case 832:
+#line 3628 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 834:
-#line 3638 "parse.y"
+case 833:
+#line 3630 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 835:
-#line 3640 "parse.y"
+case 834:
+#line 3632 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
-case 836:
-#line 3645 "parse.y"
+case 835:
+#line 3637 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
-case 838:
-#line 3651 "parse.y"
+case 837:
+#line 3643 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 839:
-#line 3659 "parse.y"
+case 838:
+#line 3651 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 840:
-#line 3661 "parse.y"
+case 839:
+#line 3653 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 841:
-#line 3663 "parse.y"
+case 840:
+#line 3655 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 842:
-#line 3665 "parse.y"
+case 841:
+#line 3657 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 843:
-#line 3672 "parse.y"
+case 842:
+#line 3664 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 844:
-#line 3677 "parse.y"
+case 843:
+#line 3669 "parse.y"
 { yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
-case 845:
-#line 3679 "parse.y"
+case 844:
+#line 3671 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
-case 846:
-#line 3681 "parse.y"
+case 845:
+#line 3673 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
-case 847:
-#line 3683 "parse.y"
+case 846:
+#line 3675 "parse.y"
 { yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
-case 848:
-#line 3685 "parse.y"
+case 847:
+#line 3677 "parse.y"
 { yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
-case 849:
-#line 3687 "parse.y"
+case 848:
+#line 3679 "parse.y"
 { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
-case 850:
-#line 3689 "parse.y"
+case 849:
+#line 3681 "parse.y"
 { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
-case 851:
-#line 3691 "parse.y"
+case 850:
+#line 3683 "parse.y"
 { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
-case 852:
-#line 3693 "parse.y"
+case 851:
+#line 3685 "parse.y"
 { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
-case 853:
-#line 3695 "parse.y"
+case 852:
+#line 3687 "parse.y"
 { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
-case 854:
-#line 3697 "parse.y"
+case 853:
+#line 3689 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 855:
-#line 3699 "parse.y"
+case 854:
+#line 3691 "parse.y"
 { yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
-case 856:
-#line 3701 "parse.y"
+case 855:
+#line 3693 "parse.y"
 { yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
-case 857:
-#line 3703 "parse.y"
+case 856:
+#line 3695 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 858:
-#line 3705 "parse.y"
+case 857:
+#line 3697 "parse.y"
 { yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
-case 859:
-#line 3707 "parse.y"
+case 858:
+#line 3699 "parse.y"
 { yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
-case 860:
-#line 3709 "parse.y"
+case 859:
+#line 3701 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 861:
-#line 3711 "parse.y"
+case 860:
+#line 3703 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 862:
-#line 3713 "parse.y"
+case 861:
+#line 3705 "parse.y"
 { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
-case 863:
-#line 3715 "parse.y"
+case 862:
+#line 3707 "parse.y"
 { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
-case 864:
-#line 3717 "parse.y"
+case 863:
+#line 3709 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
-case 865:
-#line 3719 "parse.y"
+case 864:
+#line 3711 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
-case 866:
-#line 3721 "parse.y"
+case 865:
+#line 3713 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
-case 867:
-#line 3723 "parse.y"
+case 866:
+#line 3715 "parse.y"
 { yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
-case 868:
-#line 3725 "parse.y"
+case 867:
+#line 3717 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 869:
-#line 3727 "parse.y"
+case 868:
+#line 3719 "parse.y"
 { yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
-case 870:
-#line 3729 "parse.y"
+case 869:
+#line 3721 "parse.y"
 { yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
-case 871:
-#line 3731 "parse.y"
+case 870:
+#line 3723 "parse.y"
 { yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
-case 872:
-#line 3733 "parse.y"
+case 871:
+#line 3725 "parse.y"
 { yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
-case 873:
-#line 3735 "parse.y"
+case 872:
+#line 3727 "parse.y"
 { yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
-case 874:
-#line 3737 "parse.y"
+case 873:
+#line 3729 "parse.y"
 { yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
-case 875:
-#line 3739 "parse.y"
+case 874:
+#line 3731 "parse.y"
 { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
-case 876:
-#line 3741 "parse.y"
+case 875:
+#line 3733 "parse.y"
 { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
-case 877:
-#line 3744 "parse.y"
+case 876:
+#line 3736 "parse.y"
 { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 878:
-#line 3746 "parse.y"
+case 877:
+#line 3738 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 498 "/usr/lib/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -8130,7 +8076,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 3749 "parse.y"
+#line 3741 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index 4d4827c95e0959b82cf99e764a8c6ff4229b146b..31b31b18b5a8075902aca623fb58d75bb19f9786 100644 (file)
@@ -2388,16 +2388,8 @@ left_curly:
                 { $<ttype>0 = begin_class_definition ($<ttype>0); }
        ;
 
-self_reference:
-         /* empty */
-               {
-                 finish_member_declaration (build_self_reference ());
-               }
-       ;
-
 opt.component_decl_list:
-         self_reference
-       | self_reference component_decl_list
+       | component_decl_list
        | opt.component_decl_list access_specifier component_decl_list
        | opt.component_decl_list access_specifier 
        ;
index 8463e5df4b0bbc9b07c855f312de5d03bd4d22e6..4e9c52fc5886a55ae749ce745553bb0ba7fca8f7 100644 (file)
@@ -900,7 +900,10 @@ print_candidates (fns)
 
   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
     {
-      cp_error_at ("%s %+#D", str, TREE_VALUE (fn));
+      tree f;
+
+      for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
+       cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
       str = "               ";
     }
 }
@@ -4807,7 +4810,7 @@ instantiate_class_template (type)
                access = access_public_virtual_node;
              else if (TREE_VIA_PROTECTED (pbase))
                access = access_protected_virtual_node;
-             else if (TREE_VIA_PRIVATE (pbase))
+             else 
                access = access_private_virtual_node;
            }
          else
@@ -4816,7 +4819,7 @@ instantiate_class_template (type)
                access = access_public_node;
              else if (TREE_VIA_PROTECTED (pbase))
                access = access_protected_node;
-             else if (TREE_VIA_PRIVATE (pbase))
+             else 
                access = access_private_node;
            }
 
@@ -7840,7 +7843,7 @@ get_template_base (tparms, targs, parm, arg)
 
   /* Since get_template_base_recursive marks the bases classes, we
      must unmark them here.  */
-  dfs_walk (arg_binfo, dfs_unmark, markedp);
+  dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
 
   return rval;
 }
index 369a06f84b513d1dcbd6439f6b7641b289269984..42678f150f7c0259bd4bdf65ae6e200d467152c9 100644 (file)
@@ -31,6 +31,7 @@ Boston, MA 02111-1307, USA.  */
 #include "rtl.h"
 #include "output.h"
 #include "toplev.h"
+#include "varray.h"
 
 #define obstack_chunk_alloc xmalloc
 #define obstack_chunk_free free
@@ -85,8 +86,8 @@ static int lookup_fnfields_here PROTO((tree, tree));
 static int is_subobject_of_p PROTO((tree, tree));
 static int hides PROTO((tree, tree));
 static tree virtual_context PROTO((tree, tree, tree));
-static void dfs_check_overlap PROTO((tree));
-static int dfs_no_overlap_yet PROTO((tree));
+static tree dfs_check_overlap PROTO((tree, void *));
+static tree dfs_no_overlap_yet PROTO((tree, void *));
 static void envelope_add_decl PROTO((tree, tree, tree *));
 static int get_base_distance_recursive
        PROTO((tree, int, int, int, int *, tree *, tree,
@@ -96,39 +97,53 @@ static void expand_upcast_fixups
 static void fixup_virtual_upcast_offsets
        PROTO((tree, tree, int, int, tree, tree, tree, tree,
               tree *));
-static int unmarkedp PROTO((tree));
-static int marked_vtable_pathp PROTO((tree));
-static int unmarked_vtable_pathp PROTO((tree));
-static int marked_new_vtablep PROTO((tree));
-static int unmarked_new_vtablep PROTO((tree));
-static int dfs_debug_unmarkedp PROTO((tree));
-static void dfs_debug_mark PROTO((tree));
-static void dfs_find_vbases PROTO((tree));
-static void dfs_clear_vbase_slots PROTO((tree));
-static void dfs_init_vbase_pointers PROTO((tree));
-static void dfs_get_vbase_types PROTO((tree));
-static void dfs_pushdecls PROTO((tree));
-static void dfs_compress_decls PROTO((tree));
-static void dfs_unuse_fields PROTO((tree));
+static tree unmarkedp PROTO((tree, void *));
+static tree marked_vtable_pathp PROTO((tree, void *));
+static tree unmarked_vtable_pathp PROTO((tree, void *));
+static tree marked_new_vtablep PROTO((tree, void *));
+static tree unmarked_new_vtablep PROTO((tree, void *));
+static tree marked_pushdecls_p PROTO((tree, void *));
+static tree unmarked_pushdecls_p PROTO((tree, void *));
+static tree dfs_debug_unmarkedp PROTO((tree, void *));
+static tree dfs_debug_mark PROTO((tree, void *));
+static tree dfs_find_vbases PROTO((tree, void *));
+static tree dfs_clear_vbase_slots PROTO((tree, void *));
+static tree dfs_init_vbase_pointers PROTO((tree, void *));
+static tree dfs_get_vbase_types PROTO((tree, void *));
+static tree dfs_pushdecls PROTO((tree, void *));
+static tree dfs_compress_decls PROTO((tree, void *));
+static tree dfs_unuse_fields PROTO((tree, void *));
 static tree add_conversions PROTO((tree, void *));
-static tree get_virtuals_named_this PROTO((tree));
+static tree get_virtuals_named_this PROTO((tree, tree));
 static tree get_virtual_destructor PROTO((tree, void *));
-static int tree_has_any_destructor_p PROTO((tree, void *));
+static tree tree_has_any_destructor_p PROTO((tree, void *));
 static int covariant_return_p PROTO((tree, tree));
 static struct search_level *push_search_level
        PROTO((struct stack_level *, struct obstack *));
 static struct search_level *pop_search_level
        PROTO((struct stack_level *));
-static tree breadth_first_search
-       PROTO((tree, tree (*) (tree, void *), int (*) (tree, void *),
-              void (*) (tree *, tree *, void *), void *));
-static int lookup_field_queue_p PROTO((tree, void *));
+static tree bfs_walk
+       PROTO((tree, tree (*) (tree, void *), tree (*) (tree, void *),
+              void *));
+static tree lookup_field_queue_p PROTO((tree, void *));
 static tree lookup_field_r PROTO((tree, void *));
-static void lookup_field_post PROTO((tree *, tree *, void *));
-
-static tree vbase_types;
-static tree vbase_decl_ptr_intermediate, vbase_decl_ptr;
-static tree vbase_init_result;
+static tree dfs_walk_real PROTO ((tree, 
+                                 tree (*) (tree, void *),
+                                 tree (*) (tree, void *),
+                                 tree (*) (tree, void *),
+                                 void *));
+static tree dfs_bfv_queue_p PROTO ((tree, void *));
+static tree dfs_bfv_helper PROTO ((tree, void *));
+static tree get_virtuals_named_this_r PROTO ((tree, void *));
+static tree context_for_name_lookup PROTO ((tree));
+static tree canonical_binfo PROTO ((tree));
+static tree shared_marked_p PROTO ((tree, void *));
+static tree shared_unmarked_p PROTO ((tree, void *));
+static int  dependent_base_p PROTO ((tree));
+static tree dfs_accessible_queue_p PROTO ((tree, void *));
+static tree dfs_accessible_p PROTO ((tree, void *));
+static tree dfs_access_in_type PROTO ((tree, void *));
+static tree access_in_type PROTO ((tree, tree));
 
 /* Allocate a level of searching.  */
 
@@ -166,9 +181,6 @@ static int n_outer_fields_searched;
 static int n_contexts_saved;
 #endif /* GATHER_STATISTICS */
 
-/* This list is used by push_class_decls to know what decls need to
-   be pushed into class scope.  */
-static tree closed_envelopes = NULL_TREE;
 \f
 /* Get a virtual binfo that is found inside BINFO's hierarchy that is
    the same type as the type given in PARENT.  To be optimal, we want
@@ -577,214 +589,348 @@ current_scope ()
   return current_class_type;
 }
 
-/* Compute the access of FIELD.  This is done by computing
-   the access available to each type in BASETYPES (which comes
-   as a list of [via_public/basetype] in reverse order, namely base
-   class before derived class).  The first one which defines a
-   access defines the access for the field.  Otherwise, the
-   access of the field is that which occurs normally.
+/* Return the scope of DECL, as appropriate when doing name-lookup.  */
 
-   Uses global variables CURRENT_CLASS_TYPE and
-   CURRENT_FUNCTION_DECL to use friend relationships
-   if necessary.
+static tree
+context_for_name_lookup (decl)
+     tree decl;
+{
+  /* [class.union]
+     
+     For the purposes of name lookup, after the anonymous union
+     definition, the members of the anonymous union are considered to
+     have been defined in the scope in which teh anonymous union is
+     declared.  */ 
+  tree context = DECL_REAL_CONTEXT (decl);
+
+  while (TYPE_P (context) && ANON_UNION_TYPE_P (context))
+    context = TYPE_CONTEXT (context);
+  if (!context)
+    context = global_namespace;
 
-   This will be static when lookup_fnfield comes into this file.
+  return context;
+}
 
-   access_public_node means that the field can be accessed by the current lexical
-   scope.
+/* Return a canonical BINFO if BINFO is a virtual base, or just BINFO
+   otherwise.  */
 
-   access_protected_node means that the field cannot be accessed by the current
-   lexical scope because it is protected.
+static tree
+canonical_binfo (binfo)
+     tree binfo;
+{
+  return (TREE_VIA_VIRTUAL (binfo)
+         ? TYPE_BINFO (BINFO_TYPE (binfo)) : binfo);
+}
 
-   access_private_node means that the field cannot be accessed by the current
-   lexical scope because it is private.  */
+/* If BINFO is marked, return a canonical version of BINFO.
+   Otherwise, return NULL_TREE.  */
 
-#if 0
-#define PUBLIC_RETURN return (DECL_PUBLIC (field) = 1), access_public_node
-#define PROTECTED_RETURN return (DECL_PROTECTED (field) = 1), access_protected_node
-#define PRIVATE_RETURN return (DECL_PRIVATE (field) = 1), access_private_node
-#else
-#define PUBLIC_RETURN return access_public_node
-#define PROTECTED_RETURN return access_protected_node
-#define PRIVATE_RETURN return access_private_node
-#endif
+static tree
+shared_marked_p (binfo, data)
+     tree binfo;
+     void *data;
+{
+  binfo = canonical_binfo (binfo);
+  return markedp (binfo, data) ? binfo : NULL_TREE;
+}
 
-#if 0
-/* Disabled with DECL_PUBLIC &c.  */
-static tree previous_scope = NULL_TREE;
-#endif
+/* If BINFO is not marked, return a canonical version of BINFO.
+   Otherwise, return NULL_TREE.  */
 
-tree
-compute_access (basetype_path, field)
-     tree basetype_path, field;
+static tree
+shared_unmarked_p (binfo, data)
+     tree binfo;
+     void *data;
 {
-  tree access;
-  tree types;
-  tree context;
-  int protected_ok, via_protected;
-  extern int flag_access_control;
-#if 1
-  /* Replaces static decl above.  */
-  tree previous_scope;
-#endif
-  int static_mem
-    = ((TREE_CODE (field) == FUNCTION_DECL && DECL_STATIC_FUNCTION_P (field))
-       || (TREE_CODE (field) != FUNCTION_DECL && TREE_STATIC (field)));
+  binfo = canonical_binfo (binfo);
+  return unmarkedp (binfo, data) ? binfo : NULL_TREE;
+}
 
-  if (! flag_access_control)
-    return access_public_node;
+/* Called from access_in_type via dfs_walk.  Calculate the access to
+   DATA (which is really a DECL) in BINFO.  */
 
-  /* The field lives in the current class.  */
-  if (BINFO_TYPE (basetype_path) == current_class_type)
-    return access_public_node;
+static tree
+dfs_access_in_type (binfo, data)
+     tree binfo;
+     void *data;
+{
+  tree decl = (tree) data;
+  tree type = BINFO_TYPE (binfo);
+  tree access = NULL_TREE;
 
-#if 0
-  /* Disabled until pushing function scope clears these out.  If ever.  */
-  /* Make these special cases fast.  */
-  if (current_scope () == previous_scope)
+  if (context_for_name_lookup (decl) == type)
     {
-      if (DECL_PUBLIC (field))
-       return access_public_node;
-      if (DECL_PROTECTED (field))
-       return access_protected_node;
-      if (DECL_PRIVATE (field))
-       return access_private_node;
+      /* If we have desceneded to the scope of DECL, just note the
+        appropriate access.  */
+      if (TREE_PRIVATE (decl))
+       access = access_private_node;
+      else if (TREE_PROTECTED (decl))
+       access = access_protected_node;
+      else
+       access = access_public_node;
     }
-#endif
+  else 
+    {
+      /* First, check for an access-declaration that gives us more
+        access to the DECL.  The CONST_DECL for an enumeration
+        constant will not have DECL_LANG_SPECIFIC, and thus no
+        DECL_ACCESS.  */
+      if (DECL_LANG_SPECIFIC (decl))
+       {
+         access = purpose_member (type, DECL_ACCESS (decl));
+         if (access)
+           access = TREE_VALUE (access);
+       }
+
+      if (!access)
+       {
+         int i;
+         int n_baselinks;
+         tree binfos;
+         
+         /* Otherwise, scan our baseclasses, and pick the most favorable
+            access.  */
+         binfos = BINFO_BASETYPES (binfo);
+         n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
+         for (i = 0; i < n_baselinks; ++i)
+           {
+             tree base_binfo = TREE_VEC_ELT (binfos, i);
+             tree base_access = TREE_CHAIN (canonical_binfo (base_binfo));
+
+             if (!base_access || base_access == access_private_node)
+               /* If it was not accessible in the base, or only
+                  accessible as a private member, we can't access it
+                  all.  */
+               base_access = NULL_TREE;
+             else if (TREE_VIA_PROTECTED (base_binfo))
+               /* Public and protected members in the base are
+                  protected here.  */
+               base_access = access_protected_node;
+             else if (!TREE_VIA_PUBLIC (base_binfo))
+               /* Public and protected members in the base are
+                  private here.  */
+               base_access = access_private_node;
+
+             /* See if the new access, via this base, gives more
+                access than our previous best access.  */
+             if (base_access &&
+                 (base_access == access_public_node
+                  || (base_access == access_protected_node
+                      && access != access_public_node)
+                  || (base_access == access_private_node
+                      && !access)))
+               {
+                 access = base_access;
 
-  /* We don't currently support access control on nested types.  */
-  if (TREE_CODE (field) == TYPE_DECL)
-    return access_public_node;
+                 /* If the new access is public, we can't do better.  */
+                 if (access == access_public_node)
+                   break;
+               }
+           }
+       }
+    }
 
-  previous_scope = current_scope ();
+  /* Note the access to DECL in TYPE.  */
+  TREE_CHAIN (binfo) = access;
 
-  context = DECL_REAL_CONTEXT (field);
+  /* Mark TYPE as visited so that if we reach it again we do not
+     duplicate our efforts here.  */
+  SET_BINFO_MARKED (binfo);
 
-  /* Fields coming from nested anonymous unions have their DECL_CLASS_CONTEXT
-     slot set to the union type rather than the record type containing
-     the anonymous union.  */
-  if (context && ANON_UNION_TYPE_P (context)
-      && TREE_CODE (field) == FIELD_DECL)
-    context = TYPE_CONTEXT (context);
+  return NULL_TREE;
+}
 
-  /* If we aren't a real class member (e.g. we're from a namespace-scope
-     anonymous union), there's no access control.  */
-  if (context == NULL_TREE || ! TYPE_P (context))
-    PUBLIC_RETURN;
-
-  /* Virtual function tables are never private.  But we should know that
-     we are looking for this, and not even try to hide it.  */
-  if (DECL_NAME (field) && VFIELD_NAME_P (DECL_NAME (field)) == 1)
-    PUBLIC_RETURN;
-
-  /* Member found immediately within object.  */
-  if (BINFO_INHERITANCE_CHAIN (basetype_path) == NULL_TREE)
-    {
-      /* Are we (or an enclosing scope) friends with the class that has
-         FIELD? */
-      if (is_friend (context, previous_scope))
-       PUBLIC_RETURN;
-
-      /* If it's private, it's private, you letch.  */
-      if (TREE_PRIVATE (field))
-       PRIVATE_RETURN;
-
-      /* ARM $11.5.  Member functions of a derived class can access the
-        non-static protected members of a base class only through a
-        pointer to the derived class, a reference to it, or an object
-        of it. Also any subsequently derived classes also have
-        access.  */
-      else if (TREE_PROTECTED (field))
-       {
-         if (current_class_type
-             && (static_mem || DECL_CONSTRUCTOR_P (field))
-             && ACCESSIBLY_DERIVED_FROM_P (context, current_class_type))
-           PUBLIC_RETURN;
-         else
-           PROTECTED_RETURN;
-       }
-      else
-       PUBLIC_RETURN;
-    }
+/* Return the access to DECL in TYPE.  */
 
-  /* must reverse more than one element */
-  basetype_path = reverse_path (basetype_path);
-  types = basetype_path;
-  via_protected = 0;
-  access = access_default_node;
-  protected_ok = static_mem && current_class_type
-    && ACCESSIBLY_DERIVED_FROM_P (BINFO_TYPE (types), current_class_type);
+static tree 
+access_in_type (type, decl)
+     tree type;
+     tree decl;
+{
+  tree binfo = TYPE_BINFO (type);
 
-  while (1)
-    {
-      tree member;
-      tree binfo = types;
-      tree type = BINFO_TYPE (binfo);
-      int private_ok = 0;
+  /* We must take into account
 
-      /* Friends of a class can see protected members of its bases.
-         Note that classes are their own friends.  */
-      if (is_friend (type, previous_scope))
-       {
-         protected_ok = 1;
-         private_ok = 1;
-       }
+       [class.paths]
 
-      member = purpose_member (type, DECL_ACCESS (field));
-      if (member)
-       {
-         access = TREE_VALUE (member);
-         break;
-       }
+       If a name can be reached by several paths through a multiple
+       inheritance graph, the access is that of the path that gives
+       most access.  
 
-      types = BINFO_INHERITANCE_CHAIN (types);
+    The algorithm we use is to make a post-order depth-first traversal
+    of the base-class hierarchy.  As we come up the tree, we annotate
+    each node with the most lenient access.  */
+  dfs_walk_real (binfo, 0, dfs_access_in_type, shared_unmarked_p, decl);
+  dfs_walk (binfo, dfs_unmark, shared_marked_p,  0);
 
-      /* If the next type was VIA_PROTECTED, then fields of all remaining
-        classes past that one are *at least* protected.  */
-      if (types)
-       {
-         if (TREE_VIA_PROTECTED (types))
-           via_protected = 1;
-         else if (! TREE_VIA_PUBLIC (types) && ! private_ok)
-           {
-             access = access_private_node;
-             break;
-           }
-       }
-      else
-       break;
+  return TREE_CHAIN (binfo);
+}
+
+/* Called from dfs_accessible_p via dfs_walk.  */
+
+static tree
+dfs_accessible_queue_p (binfo, data)
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{
+  if (BINFO_MARKED (binfo))
+    return NULL_TREE;
+
+  /* If this class is inherited via private or protected inheritance,
+     then we can't see it, unless we are a friend of the subclass.  */
+  if (!TREE_VIA_PUBLIC (binfo)
+      && !is_friend (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
+                    current_scope ()))
+    return NULL_TREE;
+
+  return canonical_binfo (binfo);
+}
+
+/* Called from dfs_accessible_p via dfs_walk.  */
+
+static tree
+dfs_accessible_p (binfo, data)
+     tree binfo;
+     void *data;
+{
+  int protected_ok = data != 0;
+  tree access;
+
+  /* We marked the binfos while computing the access in each type.
+     So, we unmark as we go now.  */
+  SET_BINFO_MARKED (binfo);
+
+  access = TREE_CHAIN (binfo);
+  if (access == access_public_node
+      || (access == access_protected_node && protected_ok))
+    return binfo;
+  else if (access && is_friend (BINFO_TYPE (binfo), current_scope ()))
+    return binfo;
+
+  return NULL_TREE;
+}
+
+/* DECL is a declaration from a base class of TYPE, which was the
+   classs used to name DECL.  Return non-zero if, in the current
+   context, DECL is accessible.  If TYPE is actually a BINFO node,
+   then the most derived class along the path indicated by BINFO is
+   the one used to name the DECL.  */
+
+int 
+accessible_p (type, decl)
+     tree type;
+     tree decl;
+     
+{
+  tree scope;
+  tree binfo;
+  tree t;
+
+  /* Non-zero if it's OK to access DECL if it has protected
+     accessibility in TYPE.  */
+  int protected_ok = 0;
+
+  /* If we're not checking access, everything is accessible.  */
+  if (!flag_access_control)
+    return 1;
+
+  /* If this declaration is in a block or namespace scope, there's no
+     access control.  */
+  if (!TYPE_P (context_for_name_lookup (decl)))
+    return 1;
+
+  /* We don't do access control for types yet.  */
+  if (TREE_CODE (decl) == TYPE_DECL)
+    return 1;
+
+  if (!TYPE_P (type))
+    {
+      binfo = type;
+      type = BINFO_TYPE (type);
     }
+  else
+    binfo = TYPE_BINFO (type);
+
+  /* [class.access.base]
+
+     A member m is accessible when named in class N if
+
+     --m as a member of N is public, or
 
-  /* No special visibilities apply.  Use normal rules.  */
+     --m as a member of N is private, and the reference occurs in a
+       member or friend of class N, or
 
-  if (access == access_default_node)
+     --m as a member of N is protected, and the reference occurs in a
+       member or friend of class N, or in a member or friend of a
+       class P derived from N, where m as a member of P is private or
+       protected, or
+
+     --there exists a base class B of N that is accessible at the point
+       of reference, and m is accessible when named in class B.  
+
+    We walk the base class hierarchy, checking these conditions.  */
+
+  /* Figure out where the reference is occurring.  Check to see if
+     DECL is private or protected in this scope, since that will
+     determine whether protected access in TYPE allowed.  */
+  if (current_class_type
+      && DERIVED_FROM_P (type, current_class_type))
     {
-      if (is_friend (context, previous_scope))
-       access = access_public_node;
-      else if (TREE_PRIVATE (field))
-       access = access_private_node;
-      else if (TREE_PROTECTED (field))
-       access = access_protected_node;
-      else
-       access = access_public_node;
+      tree access = access_in_type (current_class_type, decl);
+      if (same_type_p (current_class_type, type)
+         && access == access_private_node)
+       protected_ok = 1;
+      else if (access && (access == access_private_node
+                         || access == access_protected_node))
+       protected_ok = 1;
     }
 
-  if (access == access_public_node && via_protected)
-    access = access_protected_node;
+  /* Now, loop through the classes of which SCOPE is a friend.  */
+  if (!protected_ok && scope)
+    {
+      /* FIXME: Implement this.  Right now, we have no way of knowing
+               which classes befriend a particular function or class.  */
+    }
 
-  if (access == access_protected_node && protected_ok)
-    access = access_public_node;
+  /* [class.protected]
 
-#if 0
-  if (access == access_public_node)
-    DECL_PUBLIC (field) = 1;
-  else if (access == access_protected_node)
-    DECL_PROTECTED (field) = 1;
-  else if (access == access_private_node)
-    DECL_PRIVATE (field) = 1;
-  else my_friendly_abort (96);
-#endif
-  return access;
+     When a friend or a member function of a derived class references
+     a protected nonstatic member of a base class, an access check
+     applies in addition to those described earlier in clause
+     _class.access_.4) Except when forming a pointer to member
+     (_expr.unary.op_), the access must be through a pointer to,
+     reference to, or object of the derived class itself (or any class
+     derived from that class) (_expr.ref_).  If the access is to form
+     a pointer to member, the nested-name-specifier shall name the
+     derived class (or any class derived from that class).  */
+  if (protected_ok && DECL_NONSTATIC_MEMBER_P (decl))
+    {
+      /* We can tell through what the reference is occurring by
+        chasing BINFO up to the root.  */
+      t = binfo;
+      while (BINFO_INHERITANCE_CHAIN (t))
+       t = BINFO_INHERITANCE_CHAIN (t);
+      
+      if (!DERIVED_FROM_P (current_class_type, BINFO_TYPE (t)))
+       protected_ok = 0;
+    }
+  
+  /* Standardize on the same that will access_in_type will use.  We
+     don't need to know what path was chosen from this point onwards.  */ 
+  binfo = TYPE_BINFO (type);
+
+  /* Compute the accessibility of DECL in the class hierarchy
+     dominated by type.  */
+  access_in_type (type, decl);
+  /* Walk the hierarchy again, looking for a base class that allows
+     access.  */
+  t = dfs_walk (binfo, dfs_accessible_p, 
+               dfs_accessible_queue_p,
+               protected_ok ? &protected_ok : 0);
+  /* Clear any mark bits.  */
+  dfs_walk (binfo, dfs_unmark, shared_marked_p,  0);
+
+  return t != NULL_TREE;
 }
 
 /* Routine to see if the sub-object denoted by the binfo PARENT can be
@@ -799,15 +945,18 @@ is_subobject_of_p (parent, binfo)
   tree binfos = BINFO_BASETYPES (binfo);
   int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
 
+  if (TREE_VIA_VIRTUAL (parent))
+    parent = TYPE_BINFO (TREE_TYPE (parent));
+  if (TREE_VIA_VIRTUAL (binfo))
+    binfo = TYPE_BINFO (TREE_TYPE (binfo));
+
   if (parent == binfo)
     return 1;
 
   /* Process and/or queue base types.  */
   for (i = 0; i < n_baselinks; i++)
     {
-      tree base_binfo = TREE_VEC_ELT (binfos, i);
-      if (TREE_VIA_VIRTUAL (base_binfo))
-       base_binfo = TYPE_BINFO (BINFO_TYPE (base_binfo));
+      tree base_binfo = canonical_binfo (TREE_VEC_ELT (binfos, i));
       if (is_subobject_of_p (parent, base_binfo))
        return 1;
     }
@@ -859,20 +1008,21 @@ lookup_fnfields_here (type, name)
 }
 
 struct lookup_field_info {
+  /* The type in which we're looking.  */
+  tree type;
   /* The name of the field for which we're looking.  */
   tree name;
   /* If non-NULL, the current result of the lookup.  */
   tree rval;
   /* The path to RVAL.  */
   tree rval_binfo;
-  /* If non-NULL, a list of the possible candidates.  */
+  /* If non-NULL, the lookup was ambiguous, and this is a list of the
+     candidates.  */
   tree ambiguous;
-  /* The access computed for RVAL.  */
-  tree access;
-  /* If non-zero, we must check access.  */
-  int protect;
   /* If non-zero, we are looking for types, not data members.  */
   int want_type;
+  /* If non-zero, RVAL was found by looking through a dependent base.  */
+  int from_dep_base_p;
   /* If something went wrong, a message indicating what.  */
   char *errstr;
 };
@@ -882,14 +1032,28 @@ struct lookup_field_info {
    it.  DATA is really a struct lookup_field_info.  Called from
    lookup_field via breadth_first_search.  */
 
-static int
+static tree
 lookup_field_queue_p (binfo, data)
      tree binfo;
      void *data;
 {
   struct lookup_field_info *lfi = (struct lookup_field_info *) data;
-  
-  return !(lfi->rval_binfo && hides (lfi->rval_binfo, binfo));
+
+  /* Don't look for constructors or destructors in base classes.  */
+  if (lfi->name == ctor_identifier || lfi->name == dtor_identifier)
+    return NULL_TREE;
+
+  /* If this base class is hidden by the best-known value so far, we
+     don't need to look.  */
+  if (!lfi->from_dep_base_p && lfi->rval_binfo
+      && hides (lfi->rval_binfo, binfo))
+    return NULL_TREE;
+
+  if (TREE_VIA_VIRTUAL (binfo))
+    return binfo_member (BINFO_TYPE (binfo),
+                        CLASSTYPE_VBASECLASSES (lfi->type));
+  else
+    return binfo;
 }
 
 /* DATA is really a struct lookup_field_info.  Look for a field with
@@ -906,22 +1070,54 @@ lookup_field_r (binfo, data)
   tree type = BINFO_TYPE (binfo);
   tree nval;
   int idx;
+  int from_dep_base_p;
 
-  /* See if the field is present in TYPE.  */
-  nval = lookup_field_1 (type, lfi->name);
+  /* First, look for a function.  There can't be a function and a data
+     member with the same name, and if there's a function and a type
+     with the same name, the type is hidden by the function.  */
+  idx = lookup_fnfields_here (type, lfi->name);
+  if (idx >= 0)
+    nval = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (type), idx);
+  else
+    /* Look for a data member or type.  */
+    nval = lookup_field_1 (type, lfi->name);
+
+  /* If there is no declaration with the indicated name in this type,
+     then there's nothing to do.  */
   if (!nval)
-    idx = lookup_fnfields_here (type, lfi->name);
+    return NULL_TREE;
 
-  /* If the data member wasn't present, then there's nothing further
-     to do for this type.  */
-  if (!nval && idx < 0)
+  from_dep_base_p = dependent_base_p (binfo);
+  if (lfi->from_dep_base_p && !from_dep_base_p)
+    {
+      /* If the new declaration is not found via a dependent base, and
+        the old one was, then we must prefer the new one.  We weren't
+        really supposed to be able to find the old one, so we don't
+        want to be affected by a specialization.  Consider:
+
+          struct B { typedef int I; };
+          template <typename T> struct D1 : virtual public B {}; 
+          template <typename T> struct D :
+          public D1, virtual pubic B { I i; };
+
+        The `I' in `D<T>' is unambigousuly `B::I', regardless of how
+        D1 is specialized.  */
+      lfi->from_dep_base_p = 0;
+      lfi->rval = NULL_TREE;
+      lfi->rval_binfo = NULL_TREE;
+      lfi->ambiguous = NULL_TREE;
+      lfi->errstr = 0;
+    }
+  else if (lfi->rval_binfo && !lfi->from_dep_base_p && from_dep_base_p)
+    /* Similarly, if the old declaration was not found via a dependent
+       base, and the new one is, ignore the new one.  */
     return NULL_TREE;
 
   /* If the lookup already found a match, and the new value doesn't
      hide the old one, we might have an ambiguity.  */
   if (lfi->rval_binfo && !hides (binfo, lfi->rval_binfo))
     {
-      if (nval && nval == lfi->rval && SHARED_MEMBER_P (nval))
+      if (nval == lfi->rval && SHARED_MEMBER_P (nval))
        /* The two things are really the same.  */
        ;
       else if (hides (lfi->rval_binfo, binfo))
@@ -937,14 +1133,6 @@ lookup_field_r (binfo, data)
               to the list.  */
            lfi->ambiguous = scratch_tree_cons (NULL_TREE, lfi->rval,
                                                NULL_TREE);
-         /* If NVAL is NULL here, that means that we found a
-            function, not a data member.  Pick a representative
-            function, from the overload set, for use in error
-            messages. */
-         if (!nval)
-           nval = OVL_CURRENT (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC
-                                             (type), idx));
-             
          /* Add the new value.  */
          lfi->ambiguous = scratch_tree_cons (NULL_TREE, nval, 
                                              lfi->ambiguous);
@@ -955,174 +1143,44 @@ lookup_field_r (binfo, data)
     {
       /* The new lookup is the best we've got so far.  Verify that
         it's the kind of thing we're looking for.  */
-      if (nval)
+      if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL)
        {
-         if (lfi->want_type && TREE_CODE (nval) != TYPE_DECL)
-           {
-             nval = purpose_member (lfi->name, CLASSTYPE_TAGS (type));
-             if (nval)
-               nval = TYPE_MAIN_DECL (TREE_VALUE (nval));
-           }
-         else if (!lfi->want_type && TREE_CODE (nval) == TYPE_DECL
-                  && lookup_fnfields_here (type, lfi->name) >= 0)
-           /* The type declaration is actually hidden by the
-              function declaration.  */
-           nval = NULL_TREE;
+         nval = purpose_member (lfi->name, CLASSTYPE_TAGS (type));
+         if (nval)
+           nval = TYPE_MAIN_DECL (TREE_VALUE (nval));
        }
 
       if (nval)
        {
-         /* The lookup found a data member.  */
-         lfi->rval = nval;
-         if (lfi->protect)
-           lfi->access = compute_access (binfo, nval);
          /* If the thing we're looking for is a virtual base class,
             then we know we've got what we want at this point;
             there's no way to get an ambiguity.  */
          if (VBASE_NAME_P (lfi->name))
-           return nval;
+           {
+             lfi->rval = nval;
+             return nval;
+           }
+
+         if (from_dep_base_p && TREE_CODE (nval) != TYPE_DECL
+             /* We need to return a member template class so we can
+                define partial specializations.  Is there a better
+                way?  */
+             && !DECL_CLASS_TEMPLATE_P (nval))
+           /* The thing we're looking for isn't a type, so the implicit
+              typename extension doesn't apply, so we just pretend we
+              didn't find anything.  */
+           return NULL_TREE;
        }
-      else
-       /* The lookup found a function member.  This lookup hides
-          whatever was there before, so even though we're not
-          interested in this value we keep track of the way in
-          which we found the function.  Subsequent lookups
-          shouldn't find a data member if it is hidden by this
-          function member.  */
-       lfi->rval = NULL_TREE;
 
+      lfi->rval = nval;
+      lfi->from_dep_base_p = from_dep_base_p;
       lfi->rval_binfo = binfo;
     }
 
-  return 0;
-}
-
-/* Check to see if the result of the field lookup (as indicated by
-   DATA, which is really a struct field_info) has any access other
-   than that we previously computed.  SEARCH_HEAD and SEARCH_TAIL
-   bound the path taken to find the result.  Called from lookup_field
-   via breadth_first_search.  */
-
-static void
-lookup_field_post (search_head, search_tail, data)
-     tree *search_head;
-     tree *search_tail;
-     void *data;
-{
-  struct lookup_field_info *lfi = (struct lookup_field_info *) data;
-  tree rval = lfi->rval;
-  tree own_access = access_default_node;
-  tree *tp;
-
-  /* If we didn't find anything, or we found ambiguous function
-     declarations, but no data members, just return.  */
-  if (!rval)
-    {
-      lfi->errstr = 0;
-      return;
-    }
-
-  /* If we've already hit a snag, we're done.  */
-  if (lfi->errstr)
-    return;
-
-  /* Check accessibility.  */
-  if (lfi->protect)
-    {
-      /* If is possible for one of the derived types on the path to
-        have defined special access for this field.  Look for such
-        declarations and report an error if a conflict is found.  */
-      if (DECL_LANG_SPECIFIC (rval) && DECL_ACCESS (rval))
-       for (tp = search_head; tp < search_tail; ++tp)
-         {
-           tree new_v = NULL_TREE;
-       
-           if (lfi->access != access_default_node)
-             new_v = compute_access (*tp, lfi->rval);
-           if (lfi->access != access_default_node && new_v != lfi->access)
-             {
-               lfi->errstr = "conflicting access to member `%D'";
-               lfi->access = access_default_node;
-               return; 
-             }
-           own_access = new_v;
-           tp++;
-         }
-  
-      /* Check to see that access to the member is allowed.  */
-      if (own_access == access_private_node)
-       lfi->errstr = "member `%D' declared private";
-      else if (own_access == access_protected_node)
-       lfi->errstr = "member `%D' declared protected";
-      else if (lfi->access == access_private_node)
-       lfi->errstr = TREE_PRIVATE (lfi->rval)
-         ? "member `%D' is private"
-         : "member `%D' is from private base class";
-      else if (lfi->access== access_protected_node)
-       lfi->errstr = TREE_PROTECTED (rval)
-         ? "member `%D' is protected"
-         : "member `%D' is from protected base class";
-    }
-
-  /* The implicit typename extension allows us to find type
-     declarations in dependent base clases.  It also handles
-     out-of-class definitions where the enclosing class is a
-     template.  For example:
-
-       template <class T> struct S { struct I { void f(); }; };
-       template <class T> void S<T>::I::f() {}
-
-     will come through here to handle `S<T>::I'.  The bottom line is
-     that while searching for the field, we will have happily
-     descended into dependent base classes, and we must now figure out
-     what to do about it.  */
-
-  /* If we're not in a template, or the search terminated in the
-     current class, then there's no problem.  */
-  if (!processing_template_decl 
-      || currently_open_class (BINFO_TYPE (lfi->rval_binfo)))
-    return;
-  
-  /* We need to return a member template class so we can define partial
-     specializations.  Is there a better way?  */
-  if (DECL_CLASS_TEMPLATE_P (rval))
-    return;
-
-  /* Walk the path to the base in which the search finally suceeded,
-     checking for dependent bases along the way.  */
-  for (tp = (currently_open_class (BINFO_TYPE (*search_head)))
-        ? search_head + 1 : search_head; 
-       tp < search_tail; 
-       ++tp)
-    {
-      if (!uses_template_parms (BINFO_TYPE (*tp)))
-       continue;
-
-      if (TREE_CODE (rval) != TYPE_DECL)
-       {
-         /* The thing we're looking for isn't a type, so the implicit
-            typename extension doesn't apply, so we just pretend we
-            didn't find anything.  */
-         lfi->rval = NULL_TREE;
-         return;
-       }
-
-      /* We've passed a dependent base on our way to finding the
-        type.  So, create an implicit typename type.  The appropriate
-         context for the typename is *TP.  But, there's a small catch;
-         the base classes for a partial instantiation are not correct,
-        because we don't tsubst into them when we do the partial
-        instantiation.  So, we just use the context of the current
-        class type.  */
-      lfi->rval = TYPE_STUB_DECL (build_typename_type 
-                                 (BINFO_TYPE (*search_head), 
-                                  lfi->name, lfi->name, 
-                                  TREE_TYPE (rval)));
-      return;
-    }
+  return NULL_TREE;
 }
 
-/* Look for a field named NAME in an inheritance lattice dominated by
+/* Look for a memer named NAME in an inheritance lattice dominated by
    XBASETYPE.  PROTECT is zero if we can avoid computing access
    information, otherwise it is 1.  WANT_TYPE is 1 when we should only
    return TYPE_DECLs, if no TYPE_DECL can be found return NULL_TREE.
@@ -1132,7 +1190,7 @@ lookup_field_post (search_head, search_tail, data)
    the error.  */
 
 tree
-lookup_field (xbasetype, name, protect, want_type)
+lookup_member (xbasetype, name, protect, want_type)
      register tree xbasetype, name;
      int protect, want_type;
 {
@@ -1156,17 +1214,6 @@ lookup_field (xbasetype, name, protect, want_type)
 
   char *errstr = 0;
 
-  bzero (&lfi, sizeof (lfi));
-
-#if 0
-  /* We cannot search for constructor/destructor names like this.  */
-  /* This can't go here, but where should it go?  */
-  /* If we are looking for a constructor in a templated type, use the
-     unspecialized name, as that is how we store it.  */
-  if (IDENTIFIER_TEMPLATE (name))
-    name = constructor_name (name);
-#endif
-
   if (xbasetype == current_class_type && TYPE_BEING_DEFINED (xbasetype)
       && IDENTIFIER_CLASS_VALUE (name))
     {
@@ -1197,12 +1244,11 @@ lookup_field (xbasetype, name, protect, want_type)
   n_calls_lookup_field++;
 #endif /* GATHER_STATISTICS */
 
+  bzero (&lfi, sizeof (lfi));
+  lfi.type = type;
   lfi.name = name;
-  lfi.protect = protect;
   lfi.want_type = want_type;
-  lfi.access = access_default_node;
-  breadth_first_search (basetype_path, &lookup_field_r, 
-                       &lookup_field_queue_p, &lookup_field_post, &lfi);
+  bfs_walk (basetype_path, &lookup_field_r, &lookup_field_queue_p, &lfi);
   rval = lfi.rval;
   rval_binfo = lfi.rval_binfo;
   if (rval_binfo)
@@ -1213,6 +1259,16 @@ lookup_field (xbasetype, name, protect, want_type)
      just return NULL_TREE.  */
   if (!protect && lfi.ambiguous)
     return NULL_TREE;
+  
+  /* [class.access]
+
+     In the case of overloaded function names, access control is
+     applied to the function selected by overloaded resolution.  */
+  if (rval && protect && !is_overloaded_fn (rval)
+      && !IS_SIGNATURE_POINTER (DECL_REAL_CONTEXT (rval))
+      && !IS_SIGNATURE_REFERENCE (DECL_REAL_CONTEXT (rval))
+      && !enforce_access (xbasetype, rval))
+    return error_mark_node;
 
   if (errstr && protect)
     {
@@ -1222,6 +1278,50 @@ lookup_field (xbasetype, name, protect, want_type)
       rval = error_mark_node;
     }
 
+  /* If the thing we found was found via the implicit typename
+     extension, build the typename type.  */
+  if (rval && lfi.from_dep_base_p && !DECL_CLASS_TEMPLATE_P (rval))
+    rval = TYPE_STUB_DECL (build_typename_type (BINFO_TYPE (basetype_path),
+                                               name, name,
+                                               TREE_TYPE (rval)));
+
+  if (rval && is_overloaded_fn (rval))
+    rval = scratch_tree_cons (basetype_path, rval, NULL_TREE);
+
+  return rval;
+}
+
+/* Like lookup_member, except that if we find a function member we
+   return NULL_TREE.  */
+
+tree
+lookup_field (xbasetype, name, protect, want_type)
+     register tree xbasetype, name;
+     int protect, want_type;
+{
+  tree rval = lookup_member (xbasetype, name, protect, want_type);
+  
+  /* Ignore functions.  */
+  if (rval && TREE_CODE (rval) == TREE_LIST)
+    return NULL_TREE;
+
+  return rval;
+}
+
+/* Like lookup_member, except that if we find a non-function member we
+   return NULL_TREE.  */
+
+tree
+lookup_fnfields (xbasetype, name, protect)
+     register tree xbasetype, name;
+     int protect;
+{
+  tree rval = lookup_member (xbasetype, name, protect, /*want_type=*/0);
+
+  /* Ignore non-functions.  */
+  if (rval && TREE_CODE (rval) != TREE_LIST)
+    return NULL_TREE;
+
   return rval;
 }
 
@@ -1342,325 +1442,65 @@ lookup_fnfields_1 (type, name)
                  /* Since all conversion operators come first, we know
                     there is no such operator.  */
                  methods = end;
-                 break;
-               }
-             else if (TREE_CODE (OVL_CURRENT (*methods)) == TEMPLATE_DECL)
-               break;
-           }
-       }
-
-      if (methods != end && *methods)
-       return methods - &TREE_VEC_ELT (method_vec, 0);
-    }
-
-  return -1;
-}
-
-/* Starting from BASETYPE, return a TREE_BASELINK-like object
-   which gives the following information (in a list):
-
-   TREE_TYPE: list of basetypes needed to get to...
-   TREE_VALUE: list of all functions in a given type
-   which have name NAME.
-
-   No access information is computed by this function,
-   other then to adorn the list of basetypes with
-   TREE_VIA_PUBLIC.
-
-   If there are two ways to find a name (two members), if COMPLAIN is
-   non-zero, then error_mark_node is returned, and an error message is
-   printed, otherwise, just an error_mark_node is returned.
-
-   As a special case, is COMPLAIN is -1, we don't complain, and we
-   don't return error_mark_node, but rather the complete list of
-   virtuals.  This is used by get_virtuals_named_this.  */
-
-tree
-lookup_fnfields (basetype_path, name, complain)
-     tree basetype_path, name;
-     int complain;
-{
-  int head = 0, tail = 0;
-  tree type, rval, rval_binfo = NULL_TREE, rvals = NULL_TREE;
-  tree rval_binfo_h = NULL_TREE, binfo, basetype_chain, binfo_h;
-  int idx, find_all = 0;
-
-  /* rval_binfo is the binfo associated with the found member, note,
-     this can be set with useful information, even when rval is not
-     set, because it must deal with ALL members, not just function
-     members.  It is used for ambiguity checking and the hidden
-     checks.  Whereas rval is only set if a proper (not hidden)
-     function member is found.  */
-
-  /* rval_binfo_h and binfo_h are binfo values used when we perform the
-     hiding checks, as virtual base classes may not be shared.  The strategy
-     is we always go into the binfo hierarchy owned by TYPE_BINFO of
-     virtual base classes, as we cross virtual base class lines.  This way
-     we know that binfo of a virtual base class will always == itself when
-     found along any line.  (mrs)  */
-
-  /* For now, don't try this.  */
-  int protect = complain;
-
-  char *errstr = 0;
-
-  if (complain == -1)
-    {
-      find_all = 1;
-      protect = complain = 0;
-    }
-
-#if 0
-  /* We cannot search for constructor/destructor names like this.  */
-  /* This can't go here, but where should it go?  */
-  /* If we are looking for a constructor in a templated type, use the
-     unspecialized name, as that is how we store it.  */
-  if (IDENTIFIER_TEMPLATE (name))
-    name = constructor_name (name);
-#endif
-
-  binfo = basetype_path;
-  binfo_h = binfo;
-  type = complete_type (BINFO_TYPE (basetype_path));
-
-#ifdef GATHER_STATISTICS
-  n_calls_lookup_fnfields++;
-#endif /* GATHER_STATISTICS */
-
-  idx = lookup_fnfields_here (type, name);
-  if (idx >= 0 || lookup_field_1 (type, name))
-    {
-      rval_binfo = basetype_path;
-      rval_binfo_h = rval_binfo;
-    }
-
-  if (idx >= 0)
-    {
-      rval = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (type), idx);
-      rvals = scratch_tree_cons (basetype_path, rval, rvals);
-      if (BINFO_BASETYPES (binfo) && CLASSTYPE_BASELINK_VEC (type))
-       TREE_TYPE (rvals) = TREE_VEC_ELT (CLASSTYPE_BASELINK_VEC (type), idx);
-
-      return rvals;
-    }
-  rval = NULL_TREE;
-
-  if (name == ctor_identifier || name == dtor_identifier)
-    {
-      /* Don't allow lookups of constructors and destructors to go
-        deeper than the first place we look.  */
-      return NULL_TREE;
-    }
-
-  if (basetype_path == TYPE_BINFO (type))
-    {
-      basetype_chain = CLASSTYPE_BINFO_AS_LIST (type);
-      my_friendly_assert (BINFO_INHERITANCE_CHAIN (basetype_path) == NULL_TREE,
-                         980827);
-    }
-  else
-    basetype_chain = build_expr_list (NULL_TREE, basetype_path);
-
-  /* The ambiguity check relies upon breadth first searching.  */
-
-  search_stack = push_search_level (search_stack, &search_obstack);
-  binfo = basetype_path;
-  binfo_h = binfo;
-
-  while (1)
-    {
-      tree binfos = BINFO_BASETYPES (binfo);
-      int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
-      int idx;
-
-      /* Process and/or queue base types.  */
-      for (i = 0; i < n_baselinks; i++)
-       {
-         tree base_binfo = TREE_VEC_ELT (binfos, i);
-         if (BINFO_FIELDS_MARKED (base_binfo) == 0)
-           {
-             tree btypes;
-
-             SET_BINFO_FIELDS_MARKED (base_binfo);
-             btypes = scratch_tree_cons (NULL_TREE, base_binfo, basetype_chain);
-             if (TREE_VIA_VIRTUAL (base_binfo))
-               btypes = scratch_tree_cons (NULL_TREE,
-                                   TYPE_BINFO (BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i))),
-                                   btypes);
-             else
-               btypes = scratch_tree_cons (NULL_TREE,
-                                   TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i),
-                                   btypes);
-             obstack_ptr_grow (&search_obstack, btypes);
-             tail += 1;
-             if (tail >= search_stack->limit)
-               my_friendly_abort (99);
-           }
-       }
-
-      /* Process head of queue, if one exists.  */
-      if (head >= tail)
-       break;
-
-      basetype_chain = search_stack->first[head++];
-      binfo_h = TREE_VALUE (basetype_chain);
-      basetype_chain = TREE_CHAIN (basetype_chain);
-      basetype_path = TREE_VALUE (basetype_chain);
-      if (TREE_CHAIN (basetype_chain))
-       my_friendly_assert
-         ((BINFO_INHERITANCE_CHAIN (basetype_path)
-           == TREE_VALUE (TREE_CHAIN (basetype_chain)))
-          /* We only approximate base info for partial instantiations.  */ 
-          || current_template_parms,
-          980827);
-      else
-       my_friendly_assert (BINFO_INHERITANCE_CHAIN (basetype_path)
-                           == NULL_TREE, 980827);
-
-      binfo = basetype_path;
-      type = BINFO_TYPE (binfo);
-
-      /* See if we can find NAME in TYPE.  If RVAL is nonzero,
-        and we do find NAME in TYPE, verify that such a second
-        sighting is in fact valid.  */
-
-      idx = lookup_fnfields_here (type, name);
-
-      if (idx >= 0 || (lookup_field_1 (type, name)!=NULL_TREE && !find_all))
-       {
-         if (rval_binfo && !find_all && hides (rval_binfo_h, binfo_h))
-           {
-             /* This is ok, the member found is in rval_binfo, not
-                here (binfo).  */
-           }
-         else if (rval_binfo==NULL_TREE || find_all || hides (binfo_h, rval_binfo_h))
-           {
-             /* This is ok, the member found is here (binfo), not in
-                rval_binfo.  */
-             if (idx >= 0)
-               {
-                 rval = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (type), idx);
-                 /* Note, rvals can only be previously set if find_all is
-                    true.  */
-                 rvals = scratch_tree_cons (basetype_path, rval, rvals);
-                 if (TYPE_BINFO_BASETYPES (type)
-                     && CLASSTYPE_BASELINK_VEC (type))
-                   TREE_TYPE (rvals) = TREE_VEC_ELT (CLASSTYPE_BASELINK_VEC (type), idx);
-               }
-             else
-               {
-                 /* Undo finding it before, as something else hides it.  */
-                 rval = NULL_TREE;
-                 rvals = NULL_TREE;
+                 break;
                }
-             rval_binfo = binfo;
-             rval_binfo_h = binfo_h;
-           }
-         else
-           {
-             /* This is ambiguous.  */
-             errstr = "request for method `%D' is ambiguous";
-             rvals = error_mark_node;
-             break;
+             else if (TREE_CODE (OVL_CURRENT (*methods)) == TEMPLATE_DECL)
+               break;
            }
        }
-    }
-  {
-    tree *tp = search_stack->first;
-    tree *search_tail = tp + tail;
 
-    while (tp < search_tail)
-      {
-       CLEAR_BINFO_FIELDS_MARKED (TREE_VALUE (TREE_CHAIN (*tp)));
-       tp += 1;
-      }
-  }
-  search_stack = pop_search_level (search_stack);
-
-  if (errstr && protect)
-    {
-      cp_error (errstr, name);
-      rvals = error_mark_node;
+      if (methods != end && *methods)
+       return methods - &TREE_VEC_ELT (method_vec, 0);
     }
 
-  return rvals;
-}
-
-/* Look for a field or function named NAME in an inheritance lattice
-   dominated by XBASETYPE.  PROTECT is zero if we can avoid computing
-   access information, otherwise it is 1.  WANT_TYPE is 1 when we should
-   only return TYPE_DECLs, if no TYPE_DECL can be found return NULL_TREE.  */
-
-tree
-lookup_member (xbasetype, name, protect, want_type)
-     tree xbasetype, name;
-     int protect, want_type;
-{
-  tree ret, basetype_path;
-
-  if (TREE_CODE (xbasetype) == TREE_VEC)
-    basetype_path = xbasetype;
-  else if (IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype)))
-    {
-      basetype_path = TYPE_BINFO (xbasetype);
-      my_friendly_assert (BINFO_INHERITANCE_CHAIN (basetype_path)
-                         == NULL_TREE, 980827);
-    }
-  else
-    my_friendly_abort (97);
-  
-  ret = lookup_field (basetype_path, name, protect, want_type);
-  if (! ret && ! want_type)
-    ret = lookup_fnfields (basetype_path, name, protect);
-  return ret;
+  return -1;
 }
 \f
-/* BREADTH-FIRST SEARCH ROUTINES.  */
-
-/* Search a multiple inheritance hierarchy by breadth-first search.
-
-   BINFO is an aggregate type, possibly in a multiple-inheritance hierarchy.
-   TESTFN is a function, which, if true, means that our condition has
-   been met, and its return value should be returned.
-   QFN, if non-NULL, is a predicate dictating whether the type should
-   even be queued.  
-   POSTFN, if non-NULL, is a function to call before returning.  It is
-   passed an array whose first element is the most derived type in the
-   chain, and whose last element is the least derived type. 
-   
-   All of the functions are also passed the DATA, which they may use
-   as they see fit.  */
+/* Walk the class hierarchy dominated by TYPE.  FN is called for each
+   type in the hierarchy, in a breadth-first preorder traversal.  .
+   If it ever returns a non-NULL value, that value is immediately
+   returned and the walk is terminated.  At each node FN, is passed a
+   BINFO indicating the path from the curently visited base-class to
+   TYPE.  The TREE_CHAINs of the BINFOs may be used for scratch space;
+   they are otherwise unused.  Before each base-class is walked QFN is
+   called.  If the value returned is non-zero, the base-class is
+   walked; otherwise it is not.  If QFN is NULL, it is treated as a
+   function which always returns 1.  Both FN and QFN are passed the
+   DATA whenever they are called.  */
 
 static tree
-breadth_first_search (binfo, testfn, qfn, postfn, data)
+bfs_walk (binfo, fn, qfn, data)
      tree binfo;
-     tree (*testfn) PROTO((tree, void *));
-     int (*qfn) PROTO((tree, void *));
-     void (*postfn) PROTO((tree *, tree *, void *));
+     tree (*fn) PROTO((tree, void *));
+     tree (*qfn) PROTO((tree, void *));
      void *data;
 {
-  int head = 0, tail = 0;
+  size_t head;
+  size_t tail;
   tree rval = NULL_TREE;
-  tree *tp;
-  tree *search_tail;
+  /* An array of the base classes of BINFO.  These will be built up in
+     breadth-first order, except where QFN prunes the search.  */
+  varray_type bfs_bases;
 
-  search_stack = push_search_level (search_stack, &search_obstack);
+  /* Start with enough room for ten base classes.  That will be enough
+     for most hierarchies.  */
+  VARRAY_TREE_INIT (bfs_bases, 10, "search_stack");
 
-  SET_BINFO_MARKED (binfo);
-  obstack_ptr_grow (&search_obstack, binfo);
-  ++tail;
+  /* Put the first type into the stack.  */
+  VARRAY_TREE (bfs_bases, 0) = binfo;
+  tail = 1;
 
-  while (head < tail)
+  for (head = 0; head < tail; ++head)
     {
-      tree binfos;
-      int n_baselinks;
       int i;
+      int n_baselinks;
+      tree binfos;
 
       /* Pull the next type out of the queue.  */
-      binfo = search_stack->first[head++];
+      binfo = VARRAY_TREE (bfs_bases, head);
 
       /* If this is the one we're looking for, we're done.  */
-      rval = (*testfn) (binfo, data);
+      rval = (*fn) (binfo, data);
       if (rval)
        break;
 
@@ -1671,64 +1511,145 @@ breadth_first_search (binfo, testfn, qfn, postfn, data)
        {
          tree base_binfo = TREE_VEC_ELT (binfos, i);
 
-         if (TREE_VIA_VIRTUAL (base_binfo))
-           base_binfo = TYPE_BINFO (BINFO_TYPE (base_binfo));
+         if (qfn)
+           base_binfo = (*qfn) (base_binfo, data);
 
-         if (BINFO_MARKED (base_binfo) == 0
-             && (qfn == 0 || (*qfn) (base_binfo, data)))
+         if (base_binfo)
            {
-             SET_BINFO_MARKED (base_binfo);
-             obstack_ptr_grow (&search_obstack, base_binfo);
+             if (tail == VARRAY_SIZE (bfs_bases))
+               VARRAY_GROW (bfs_bases, 2 * VARRAY_SIZE (bfs_bases));
+             VARRAY_TREE (bfs_bases, tail) = base_binfo;
              ++tail;
-             if (tail >= search_stack->limit)
-               my_friendly_abort (100);
            }
        }
     }
 
-  tp = search_stack->first;
-  search_tail = tp + tail;
-  
-  if (postfn)
-    (*postfn) (tp, search_tail, data);
-  
-  while (tp < search_tail)
+  /* Clean up.  */
+  VARRAY_FREE (bfs_bases);
+
+  return rval;
+}
+
+/* Exactly like bfs_walk, except that a depth-first traversal is
+   performed, and PREFN is called in preorder, while POSTFN is called
+   in postorder.  */
+
+static tree
+dfs_walk_real (binfo, prefn, postfn, qfn, data)
+     tree binfo;
+     tree (*prefn) PROTO((tree, void *));
+     tree (*postfn) PROTO((tree, void *));
+     tree (*qfn) PROTO((tree, void *));
+     void *data;
+{
+  int i;
+  int n_baselinks;
+  tree binfos;
+  tree rval = NULL_TREE;
+
+  /* Call the pre-order walking function.  */
+  if (prefn)
     {
-      tree binfo = *tp++;
-      CLEAR_BINFO_MARKED (binfo);
+      rval = (*prefn) (binfo, data);
+      if (rval)
+       return rval;
     }
 
-  search_stack = pop_search_level (search_stack);
+  /* Process the basetypes.  */
+  binfos = BINFO_BASETYPES (binfo);
+  n_baselinks = binfos ? TREE_VEC_LENGTH (binfos): 0;
+  for (i = 0; i < n_baselinks; i++)
+    {
+      tree base_binfo = TREE_VEC_ELT (binfos, i);
+      
+      if (qfn)
+       base_binfo = (*qfn) (base_binfo, data);
+
+      if (base_binfo)
+       {
+         rval = dfs_walk_real (base_binfo, prefn, postfn, qfn, data);
+         if (rval)
+           return rval;
+       }
+    }
+
+  /* Call the post-order walking function.  */
+  if (postfn)
+    rval = (*postfn) (binfo, data);
+  
   return rval;
 }
 
-/* Functions to use in breadth first searches.  */
-typedef tree (*pfi) PROTO((tree));
+/* Exactly like bfs_walk, except that a depth-first post-order traversal is
+   performed.  */
+
+tree
+dfs_walk (binfo, fn, qfn, data)
+     tree binfo;
+     tree (*fn) PROTO((tree, void *));
+     tree (*qfn) PROTO((tree, void *));
+     void *data;
+{
+  return dfs_walk_real (binfo, 0, fn, qfn, data);
+}
+
+struct gvnt_info 
+{
+  /* The name of the function we are looking for.  */
+  tree name;
+  /* The overloaded functions we have found.  */
+  tree fields;
+};
+
+/* Called from get_virtuals_named_this via bfs_walk.  */
+
+static tree
+get_virtuals_named_this_r (binfo, data)
+     tree binfo;
+     void *data;
+{
+  struct gvnt_info *gvnti = (struct gvnt_info *) data;
+  tree type = BINFO_TYPE (binfo);
+  int idx;
+
+  idx = lookup_fnfields_here (BINFO_TYPE (binfo), gvnti->name);
+  if (idx >= 0)
+    gvnti->fields
+      = scratch_tree_cons (binfo, 
+                          TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (type),
+                                        idx),
+                          gvnti->fields);
+
+  return NULL_TREE;
+}
 
-static tree declarator;
+/* Return the virtual functions with the indicated NAME in the type
+   indicated by BINFO.  The result is a TREE_LIST whose TREE_PURPOSE
+   indicates the base class from which the TREE_VALUE (an OVERLOAD or
+   just a FUNCTION_DECL) originated.  */
 
 static tree
-get_virtuals_named_this (binfo)
+get_virtuals_named_this (binfo, name)
      tree binfo;
+     tree name;
 {
+  struct gvnt_info gvnti;
   tree fields;
 
-  fields = lookup_fnfields (binfo, declarator, -1);
-  /* fields cannot be error_mark_node */
+  gvnti.name = name;
+  gvnti.fields = NULL_TREE;
 
-  if (fields == 0)
-    return 0;
+  bfs_walk (binfo, get_virtuals_named_this_r, 0, &gvnti);
 
   /* Get to the function decls, and return the first virtual function
      with this name, if there is one.  */
-  while (fields)
+  for (fields = gvnti.fields; fields; fields = next_baselink (fields))
     {
       tree fndecl;
 
       for (fndecl = TREE_VALUE (fields); fndecl; fndecl = OVL_NEXT (fndecl))
        if (DECL_VINDEX (OVL_CURRENT (fndecl)))
          return fields;
-      fields = next_baselink (fields);
     }
   return NULL_TREE;
 }
@@ -1736,7 +1657,7 @@ get_virtuals_named_this (binfo)
 static tree
 get_virtual_destructor (binfo, data)
      tree binfo;
-     void *data;
+     void *data ATTRIBUTE_UNUSED;
 {
   tree type = BINFO_TYPE (binfo);
   if (TYPE_HAS_DESTRUCTOR (type)
@@ -1745,13 +1666,13 @@ get_virtual_destructor (binfo, data)
   return 0;
 }
 
-static int
+static tree
 tree_has_any_destructor_p (binfo, data)
      tree binfo;
-     void *data;
+     void *data ATTRIBUTE_UNUSED;
 {
   tree type = BINFO_TYPE (binfo);
-  return TYPE_NEEDS_DESTRUCTOR (type);
+  return TYPE_NEEDS_DESTRUCTOR (type) ? binfo : NULL_TREE;
 }
 
 /* Returns > 0 if a function with type DRETTYPE overriding a function
@@ -1834,23 +1755,19 @@ get_matching_virtual (binfo, fndecl, dtorp)
   /* Breadth first search routines start searching basetypes
      of TYPE, so we must perform first ply of search here.  */
   if (dtorp)
-    {
-      return breadth_first_search (binfo,
-                                  get_virtual_destructor,
-                                  tree_has_any_destructor_p, 0, 0);
-    }
+    return bfs_walk (binfo, get_virtual_destructor,
+                    tree_has_any_destructor_p, 0);
   else
     {
       tree drettype, dtypes, btypes, instptr_type;
       tree basetype = DECL_CLASS_CONTEXT (fndecl);
       tree baselink, best = NULL_TREE;
       tree name = DECL_ASSEMBLER_NAME (fndecl);
-
-      declarator = DECL_NAME (fndecl);
+      tree declarator = DECL_NAME (fndecl);
       if (IDENTIFIER_VIRTUAL_P (declarator) == 0)
        return NULL_TREE;
 
-      baselink = get_virtuals_named_this (binfo);
+      baselink = get_virtuals_named_this (binfo, declarator);
       if (baselink == NULL_TREE)
        return NULL_TREE;
 
@@ -2117,76 +2034,6 @@ convert_pointer_to_single_level (to_type, expr)
                           last, 1);
 }
 
-/* The main function which implements depth first search.
-
-   This routine has to remember the path it walked up, when
-   dfs_init_vbase_pointers is the work function, as otherwise there
-   would be no record.  */
-
-void
-dfs_walk (binfo, fn, qfn)
-     tree binfo;
-     void (*fn) PROTO((tree));
-     int (*qfn) PROTO((tree));
-{
-  tree binfos = BINFO_BASETYPES (binfo);
-  int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
-
-  for (i = 0; i < n_baselinks; i++)
-    {
-      tree base_binfo = TREE_VEC_ELT (binfos, i);
-
-      if (qfn == 0 || (*qfn)(base_binfo))
-       {
-         if (TREE_CODE (BINFO_TYPE (base_binfo)) == TEMPLATE_TYPE_PARM
-             || TREE_CODE (BINFO_TYPE (base_binfo)) == TEMPLATE_TEMPLATE_PARM)
-           /* Pass */;
-         else if (fn == dfs_init_vbase_pointers)
-           {
-             /* When traversing an arbitrary MI hierarchy, we need to keep
-                a record of the path we took to get down to the final base
-                type, as otherwise there would be no record of it, and just
-                trying to blindly convert at the bottom would be ambiguous.
-
-                The easiest way is to do the conversions one step at a time,
-                as we know we want the immediate base class at each step.
-
-                The only special trick to converting one step at a time,
-                is that when we hit the last virtual base class, we must
-                use the SLOT value for it, and not use the normal convert
-                routine.  We use the last virtual base class, as in our
-                implementation, we have pointers to all virtual base
-                classes in the base object.  */
-
-             tree saved_vbase_decl_ptr_intermediate
-               = vbase_decl_ptr_intermediate;
-
-             if (TREE_VIA_VIRTUAL (base_binfo))
-               {
-                 /* No need for the conversion here, as we know it is the
-                    right type.  */
-                 vbase_decl_ptr_intermediate
-                   = CLASSTYPE_SEARCH_SLOT (BINFO_TYPE (base_binfo));
-               }
-             else
-               {
-                 vbase_decl_ptr_intermediate
-                   = convert_pointer_to_single_level (BINFO_TYPE (base_binfo),
-                                                      vbase_decl_ptr_intermediate);
-               }
-
-             dfs_walk (base_binfo, fn, qfn);
-
-             vbase_decl_ptr_intermediate = saved_vbase_decl_ptr_intermediate;
-           }
-         else
-           dfs_walk (base_binfo, fn, qfn);
-       }
-    }
-
-  fn (binfo);
-}
-
 /* Like dfs_walk, but only walk until fn returns something, and return
    that.  We also use the real vbase binfos instead of the placeholders
    in the normal binfo hierarchy.  START is the most-derived type for this
@@ -2222,46 +2069,82 @@ dfs_search (binfo, fn, start)
   return fn (binfo);
 }
 
-int markedp (binfo) tree binfo;
-{ return BINFO_MARKED (binfo); }
-static int unmarkedp (binfo) tree binfo;
-{ return BINFO_MARKED (binfo) == 0; }
+tree markedp (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{ 
+  return BINFO_MARKED (binfo) ? binfo : NULL_TREE; 
+}
+
+static tree
+unmarkedp (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{
+  return !BINFO_MARKED (binfo) ? binfo : NULL_TREE;
+}
 
-#if 0
-static int bfs_markedp (binfo, i) tree binfo; int i;
-{ return BINFO_MARKED (BINFO_BASETYPE (binfo, i)); }
-static int bfs_unmarkedp (binfo, i) tree binfo; int i;
-{ return BINFO_MARKED (BINFO_BASETYPE (binfo, i)) == 0; }
-static int bfs_marked_vtable_pathp (binfo, i) tree binfo; int i;
-{ return BINFO_VTABLE_PATH_MARKED (BINFO_BASETYPE (binfo, i)); }
-static int bfs_unmarked_vtable_pathp (binfo, i) tree binfo; int i;
-{ return BINFO_VTABLE_PATH_MARKED (BINFO_BASETYPE (binfo, i)) == 0; }
-static int bfs_marked_new_vtablep (binfo, i) tree binfo; int i;
-{ return BINFO_NEW_VTABLE_MARKED (BINFO_BASETYPE (binfo, i)); }
-static int bfs_unmarked_new_vtablep (binfo, i) tree binfo; int i;
-{ return BINFO_NEW_VTABLE_MARKED (BINFO_BASETYPE (binfo, i)) == 0; }
-#endif
+static tree
+marked_vtable_pathp (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{ 
+  return BINFO_VTABLE_PATH_MARKED (binfo) ? binfo : NULL_TREE; 
+}
+
+static tree
+unmarked_vtable_pathp (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{ 
+  return !BINFO_VTABLE_PATH_MARKED (binfo) ? binfo : NULL_TREE; 
+}
+
+static tree 
+marked_new_vtablep (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{
+  return BINFO_NEW_VTABLE_MARKED (binfo) ? binfo : NULL_TREE; 
+}
+
+static tree
+unmarked_new_vtablep (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{ 
+  return !BINFO_NEW_VTABLE_MARKED (binfo) ? binfo : NULL_TREE; 
+}
+
+static tree
+marked_pushdecls_p (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{
+  return BINFO_PUSHDECLS_MARKED (binfo) ? binfo : NULL_TREE; 
+}
 
-static int marked_vtable_pathp (binfo) tree binfo;
-{ return BINFO_VTABLE_PATH_MARKED (binfo); }
-static int unmarked_vtable_pathp (binfo) tree binfo;
-{ return BINFO_VTABLE_PATH_MARKED (binfo) == 0; }
-static int marked_new_vtablep (binfo) tree binfo;
-{ return BINFO_NEW_VTABLE_MARKED (binfo); }
-static int unmarked_new_vtablep (binfo) tree binfo;
-{ return BINFO_NEW_VTABLE_MARKED (binfo) == 0; }
-static int marked_pushdecls_p (binfo) tree binfo;
-{ return BINFO_PUSHDECLS_MARKED (binfo); }
-static int unmarked_pushdecls_p (binfo) tree binfo;
-{ return BINFO_PUSHDECLS_MARKED (binfo) == 0; }
+static tree
+unmarked_pushdecls_p (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{ 
+  return !BINFO_PUSHDECLS_MARKED (binfo) ? binfo : NULL_TREE;
+}
 
 #if 0
 static int dfs_search_slot_nonempty_p (binfo) tree binfo;
 { return CLASSTYPE_SEARCH_SLOT (BINFO_TYPE (binfo)) != 0; }
 #endif
 
-static int dfs_debug_unmarkedp (binfo) tree binfo;
-{ return CLASSTYPE_DEBUG_REQUESTED (BINFO_TYPE (binfo)) == 0; }
+static tree 
+dfs_debug_unmarkedp (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{ 
+  return (!CLASSTYPE_DEBUG_REQUESTED (BINFO_TYPE (binfo)) 
+         ? binfo : NULL_TREE);
+}
 
 /* The worker functions for `dfs_walk'.  These do not need to
    test anything (vis a vis marking) if they are paired with
@@ -2273,9 +2156,14 @@ dfs_mark (binfo) tree binfo;
 { SET_BINFO_MARKED (binfo); }
 #endif
 
-void
-dfs_unmark (binfo) tree binfo;
-{ CLEAR_BINFO_MARKED (binfo); }
+tree
+dfs_unmark (binfo, data) 
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{ 
+  CLEAR_BINFO_MARKED (binfo); 
+  return NULL_TREE;
+}
 
 #if 0
 static void
@@ -2299,9 +2187,10 @@ dfs_clear_search_slot (binfo) tree binfo;
 { CLASSTYPE_SEARCH_SLOT (BINFO_TYPE (binfo)) = 0; }
 #endif
 
-static void
-dfs_debug_mark (binfo)
+static tree
+dfs_debug_mark (binfo, data)
      tree binfo;
+     void *data ATTRIBUTE_UNUSED;
 {
   tree t = BINFO_TYPE (binfo);
 
@@ -2312,12 +2201,12 @@ dfs_debug_mark (binfo)
   CLASSTYPE_DEBUG_REQUESTED (t) = 1;
 
   if (methods == 0)
-    return;
+    return NULL_TREE;
 
   /* If interface info is known, either we've already emitted the debug
      info or we don't need to.  */
   if (CLASSTYPE_INTERFACE_KNOWN (t))
-    return;
+    return NULL_TREE;
 
   /* If debug info is requested from this context for this type, supply it.
      If debug info is requested from another context for this type,
@@ -2341,7 +2230,7 @@ dfs_debug_mark (binfo)
              /* Somebody, somewhere is going to have to define this
                 virtual function.  When they do, they will provide
                 the debugging info.  */
-             return;
+             return NULL_TREE;
            }
          methods = TREE_CHAIN (methods);
        }
@@ -2350,17 +2239,26 @@ dfs_debug_mark (binfo)
      so we must write out the debug info ourselves.  */
   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = 0;
   rest_of_type_compilation (t, toplevel_bindings_p ());
+
+  return NULL_TREE;
 }
 \f
-/*  Attach to the type of the virtual base class, the pointer to the
-    virtual base class, given the global pointer vbase_decl_ptr.
+struct vbase_info 
+{
+  tree decl_ptr;
+  tree inits;
+  tree vbase_types;
+};
 
-    We use the global vbase_types.  ICK!  */
+/*  Attach to the type of the virtual base class, the pointer to the
+    virtual base class.  */
 
-static void
-dfs_find_vbases (binfo)
+static tree
+dfs_find_vbases (binfo, data)
      tree binfo;
+     void *data;
 {
+  struct vbase_info *vi = (struct vbase_info *) data;
   tree binfos = BINFO_BASETYPES (binfo);
   int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
 
@@ -2372,21 +2270,25 @@ dfs_find_vbases (binfo)
          && CLASSTYPE_SEARCH_SLOT (BINFO_TYPE (base_binfo)) == 0)
        {
          tree vbase = BINFO_TYPE (base_binfo);
-         tree binfo = binfo_member (vbase, vbase_types);
+         tree binfo = binfo_member (vbase, vi->vbase_types);
 
          CLASSTYPE_SEARCH_SLOT (vbase)
            = build (PLUS_EXPR, build_pointer_type (vbase),
-                    vbase_decl_ptr, BINFO_OFFSET (binfo));
+                    vi->decl_ptr, BINFO_OFFSET (binfo));
        }
     }
   SET_BINFO_VTABLE_PATH_MARKED (binfo);
   SET_BINFO_NEW_VTABLE_MARKED (binfo);
+
+  return NULL_TREE;
 }
 
-static void
-dfs_init_vbase_pointers (binfo)
+static tree
+dfs_init_vbase_pointers (binfo, data)
      tree binfo;
+     void *data;
 {
+  struct vbase_info *vi = (struct vbase_info *) data;
   tree type = BINFO_TYPE (binfo);
   tree fields = TYPE_FIELDS (type);
   tree this_vbase_ptr;
@@ -2400,42 +2302,57 @@ dfs_init_vbase_pointers (binfo)
     fields = TREE_CHAIN (fields);
 #endif
 
+  if (BINFO_INHERITANCE_CHAIN (binfo))
+    {
+      this_vbase_ptr = TREE_CHAIN (BINFO_INHERITANCE_CHAIN (binfo));
+      if (TREE_VIA_VIRTUAL (binfo))
+       this_vbase_ptr = CLASSTYPE_SEARCH_SLOT (type);
+      else
+       this_vbase_ptr = convert_pointer_to_single_level (type,
+                                                         this_vbase_ptr); 
+      TREE_CHAIN (binfo) = this_vbase_ptr;
+    }
+  else
+    this_vbase_ptr = TREE_CHAIN (binfo);
+
   if (fields == NULL_TREE
       || DECL_NAME (fields) == NULL_TREE
       || ! VBASE_NAME_P (DECL_NAME (fields)))
-    return;
-
-  this_vbase_ptr = vbase_decl_ptr_intermediate;
+    return NULL_TREE;
 
-  if (build_pointer_type (type) != TYPE_MAIN_VARIANT (TREE_TYPE (this_vbase_ptr)))
+  if (build_pointer_type (type) 
+      != TYPE_MAIN_VARIANT (TREE_TYPE (this_vbase_ptr)))
     my_friendly_abort (125);
 
-  while (fields && DECL_NAME (fields)
-        && VBASE_NAME_P (DECL_NAME (fields)))
+  while (fields && DECL_NAME (fields) && VBASE_NAME_P (DECL_NAME (fields)))
     {
       tree ref = build (COMPONENT_REF, TREE_TYPE (fields),
                        build_indirect_ref (this_vbase_ptr, NULL_PTR), fields);
       tree init = CLASSTYPE_SEARCH_SLOT (TREE_TYPE (TREE_TYPE (fields)));
-      vbase_init_result = tree_cons (binfo_member (TREE_TYPE (TREE_TYPE (fields)),
-                                                  vbase_types),
-                                    build_modify_expr (ref, NOP_EXPR, init),
-                                    vbase_init_result);
+      vi->inits = tree_cons (binfo_member (TREE_TYPE (TREE_TYPE (fields)),
+                                          vi->vbase_types),
+                            build_modify_expr (ref, NOP_EXPR, init),
+                            vi->inits);
       fields = TREE_CHAIN (fields);
     }
+  
+  return NULL_TREE;
 }
 
 /* Sometimes this needs to clear both VTABLE_PATH and NEW_VTABLE.  Other
    times, just NEW_VTABLE, but optimizer should make both with equal
    efficiency (though it does not currently).  */
 
-static void
-dfs_clear_vbase_slots (binfo)
+static tree
+dfs_clear_vbase_slots (binfo, data)
      tree binfo;
+     void *data ATTRIBUTE_UNUSED;
 {
   tree type = BINFO_TYPE (binfo);
   CLASSTYPE_SEARCH_SLOT (type) = 0;
   CLEAR_BINFO_VTABLE_PATH_MARKED (binfo);
   CLEAR_BINFO_NEW_VTABLE_MARKED (binfo);
+  return NULL_TREE;
 }
 
 tree
@@ -2445,17 +2362,29 @@ init_vbase_pointers (type, decl_ptr)
 {
   if (TYPE_USES_VIRTUAL_BASECLASSES (type))
     {
+      struct vbase_info vi;
       int old_flag = flag_this_is_variable;
       tree binfo = TYPE_BINFO (type);
       flag_this_is_variable = -2;
-      vbase_types = CLASSTYPE_VBASECLASSES (type);
-      vbase_decl_ptr = vbase_decl_ptr_intermediate = decl_ptr;
-      vbase_init_result = NULL_TREE;
-      dfs_walk (binfo, dfs_find_vbases, unmarked_vtable_pathp);
-      dfs_walk (binfo, dfs_init_vbase_pointers, marked_vtable_pathp);
-      dfs_walk (binfo, dfs_clear_vbase_slots, marked_new_vtablep);
+
+      /* Find all the virtual base classes, marking them for later
+        initialization.  */
+      vi.decl_ptr = decl_ptr;
+      vi.vbase_types = CLASSTYPE_VBASECLASSES (type);
+      vi.inits = NULL_TREE;
+
+      dfs_walk (binfo, dfs_find_vbases, unmarked_vtable_pathp, &vi);
+
+      /* Build up a list of the initializers.  */
+      TREE_CHAIN (binfo) = decl_ptr;
+      dfs_walk_real (binfo, 
+                    dfs_init_vbase_pointers, 0,
+                    marked_vtable_pathp,
+                    &vi);
+
+      dfs_walk (binfo, dfs_clear_vbase_slots, marked_new_vtablep, 0);
       flag_this_is_variable = old_flag;
-      return vbase_init_result;
+      return vi.inits;
     }
   return 0;
 }
@@ -2693,10 +2622,7 @@ fixup_virtual_upcast_offsets (real_binfo, binfo, init_self, can_elide, addr, ori
    When USE_COMPUTED_OFFSETS is non-zero, we can assume that the
    object was laid out by a top-level constructor and the computed
    offsets are valid to store vtables.  When zero, we must store new
-   vtables through virtual baseclass pointers.
-
-   We setup and use the globals: vbase_decl_ptr, vbase_types
-   ICK!  */
+   vtables through virtual baseclass pointers.  */
 
 void
 expand_indirect_vtbls_init (binfo, true_exp, decl_ptr)
@@ -2720,17 +2646,19 @@ expand_indirect_vtbls_init (binfo, true_exp, decl_ptr)
     {
       rtx fixup_insns = NULL_RTX;
       tree vbases = CLASSTYPE_VBASECLASSES (type);
-      vbase_types = vbases;
-      vbase_decl_ptr = true_exp ? build_unary_op (ADDR_EXPR, true_exp, 0) : decl_ptr;
+      struct vbase_info vi;
+      vi.decl_ptr = (true_exp ? build_unary_op (ADDR_EXPR, true_exp, 0) 
+                    : decl_ptr);
+      vi.vbase_types = vbases;
 
-      dfs_walk (binfo, dfs_find_vbases, unmarked_new_vtablep);
+      dfs_walk (binfo, dfs_find_vbases, unmarked_new_vtablep, &vi);
 
       /* Initialized with vtables of type TYPE.  */
       for (; vbases; vbases = TREE_CHAIN (vbases))
        {
          tree addr;
 
-         addr = convert_pointer_to_vbase (TREE_TYPE (vbases), vbase_decl_ptr);
+         addr = convert_pointer_to_vbase (TREE_TYPE (vbases), vi.decl_ptr);
 
          /* Do all vtables from this virtual base.  */
          /* This assumes that virtual bases can never serve as parent
@@ -2755,7 +2683,7 @@ expand_indirect_vtbls_init (binfo, true_exp, decl_ptr)
              push_to_sequence (fixup_insns);
              fixup_virtual_upcast_offsets (vbases,
                                            TYPE_BINFO (BINFO_TYPE (vbases)),
-                                           1, 0, addr, vbase_decl_ptr,
+                                           1, 0, addr, vi.decl_ptr,
                                            type, vbases, &vbase_offsets);
              fixup_insns = get_insns ();
              end_sequence ();
@@ -2777,7 +2705,7 @@ expand_indirect_vtbls_init (binfo, true_exp, decl_ptr)
          expand_end_cond ();
        }
 
-      dfs_walk (binfo, dfs_clear_vbase_slots, marked_new_vtablep);
+      dfs_walk (binfo, dfs_clear_vbase_slots, marked_new_vtablep, 0);
     }
 }
 
@@ -2785,36 +2713,43 @@ expand_indirect_vtbls_init (binfo, true_exp, decl_ptr)
    This adds type to the vbase_types list in reverse dfs order.
    Ordering is very important, so don't change it.  */
 
-static void
-dfs_get_vbase_types (binfo)
+static tree
+dfs_get_vbase_types (binfo, data)
      tree binfo;
+     void *data;
 {
+  tree *vbase_types = (tree *) data;
+
   if (TREE_VIA_VIRTUAL (binfo) && ! BINFO_VBASE_MARKED (binfo))
     {
       tree new_vbase = make_binfo (integer_zero_node, binfo,
                                   BINFO_VTABLE (binfo),
                                   BINFO_VIRTUALS (binfo));
-      TREE_CHAIN (new_vbase) = vbase_types;
+      TREE_CHAIN (new_vbase) = *vbase_types;
       TREE_VIA_VIRTUAL (new_vbase) = 1;
-      vbase_types = new_vbase;
+      *vbase_types = new_vbase;
       SET_BINFO_VBASE_MARKED (binfo);
     }
   SET_BINFO_MARKED (binfo);
+  return NULL_TREE;
 }
 
-/* get a list of virtual base classes in dfs order.  */
+/* Return a list of binfos for the virtual base classes for TYPE, in
+   depth-first search order.  The list is freshly allocated, so
+   no modification is made to  the current binfo hierarchy.  */
 
 tree
 get_vbase_types (type)
      tree type;
 {
+  tree vbase_types;
   tree vbases;
   tree binfo;
 
   binfo = TYPE_BINFO (type);
   vbase_types = NULL_TREE;
-  dfs_walk (binfo, dfs_get_vbase_types, unmarkedp);
-  dfs_walk (binfo, dfs_unmark, markedp);
+  dfs_walk (binfo, dfs_get_vbase_types, unmarkedp, &vbase_types);
+  dfs_walk (binfo, dfs_unmark, markedp, 0);
   /* Rely upon the reverse dfs ordering from dfs_get_vbase_types, and now
      reverse it so that we get normal dfs ordering.  */
   vbase_types = nreverse (vbase_types);
@@ -2852,13 +2787,13 @@ note_debug_info_needed (type)
   if (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG)
     return;
 
-  dfs_walk (TYPE_BINFO (type), dfs_debug_mark, dfs_debug_unmarkedp);
+  dfs_walk (TYPE_BINFO (type), dfs_debug_mark, dfs_debug_unmarkedp, 0);
   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
     {
       tree ttype;
       if (TREE_CODE (field) == FIELD_DECL
          && IS_AGGR_TYPE (ttype = target_type (TREE_TYPE (field)))
-         && dfs_debug_unmarkedp (TYPE_BINFO (ttype)))
+         && dfs_debug_unmarkedp (TYPE_BINFO (ttype), 0))
        note_debug_info_needed (ttype);
     }
 }
@@ -2975,7 +2910,7 @@ dependent_base_p (binfo)
 {
   for (; binfo; binfo = BINFO_INHERITANCE_CHAIN (binfo))
     {
-      if (TREE_TYPE (binfo) == current_class_type)
+      if (currently_open_class (TREE_TYPE (binfo)))
        break;
       if (uses_template_parms (TREE_TYPE (binfo)))
        return 1;
@@ -3002,10 +2937,12 @@ dependent_base_p (binfo)
    Because if it is, it could be a set of overloaded methods from an
    outer scope.  */
 
-static void
-dfs_pushdecls (binfo)
+static tree
+dfs_pushdecls (binfo, data)
      tree binfo;
+     void *data;
 {
+  tree *closed_envelopes = (tree *) data;
   tree type = BINFO_TYPE (binfo);
   tree fields;
   tree method_vec;
@@ -3031,7 +2968,7 @@ dfs_pushdecls (binfo)
       if (DECL_NAME (fields) == NULL_TREE
          && TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
        {
-         dfs_pushdecls (TYPE_BINFO (TREE_TYPE (fields)));
+         dfs_pushdecls (TYPE_BINFO (TREE_TYPE (fields)), data);
          continue;
        }
 
@@ -3048,9 +2985,9 @@ dfs_pushdecls (binfo)
              || TREE_CODE (TREE_PURPOSE (class_value)) == IDENTIFIER_NODE)
            {
              /* See comment above for a description of envelopes.  */
-             closed_envelopes = tree_cons (NULL_TREE, class_value,
-                                           closed_envelopes);
-             IDENTIFIER_CLASS_VALUE (name) = closed_envelopes;
+             *closed_envelopes = tree_cons (NULL_TREE, class_value,
+                                            *closed_envelopes);
+             IDENTIFIER_CLASS_VALUE (name) = *closed_envelopes;
              class_value = IDENTIFIER_CLASS_VALUE (name);
            }
 
@@ -3090,9 +3027,9 @@ dfs_pushdecls (binfo)
              || TREE_CODE (TREE_PURPOSE (class_value)) == IDENTIFIER_NODE)
            {
              /* See comment above for a description of envelopes.  */
-             closed_envelopes = tree_cons (NULL_TREE, class_value,
-                                           closed_envelopes);
-             IDENTIFIER_CLASS_VALUE (name) = closed_envelopes;
+             *closed_envelopes = tree_cons (NULL_TREE, class_value,
+                                            *closed_envelopes);
+             IDENTIFIER_CLASS_VALUE (name) = *closed_envelopes;
              class_value = IDENTIFIER_CLASS_VALUE (name);
            }
 
@@ -3111,13 +3048,16 @@ dfs_pushdecls (binfo)
   /* We can't just use BINFO_MARKED because envelope_add_decl uses
      DERIVED_FROM_P, which calls get_base_distance.  */
   SET_BINFO_PUSHDECLS_MARKED (binfo);
+  
+  return NULL_TREE;
 }
 
 /* Consolidate unique (by name) member functions.  */
 
-static void
-dfs_compress_decls (binfo)
+static tree
+dfs_compress_decls (binfo, data)
      tree binfo;
+     void *data ATTRIBUTE_UNUSED;
 {
   tree type = BINFO_TYPE (binfo);
   tree method_vec 
@@ -3155,6 +3095,8 @@ dfs_compress_decls (binfo)
        }
     }
   CLEAR_BINFO_PUSHDECLS_MARKED (binfo);
+
+  return NULL_TREE;
 }
 
 /* When entering the scope of a class, we cache all of the
@@ -3169,6 +3111,7 @@ push_class_decls (type)
      tree type;
 {
   struct obstack *ambient_obstack = current_obstack;
+  tree closed_envelopes = NULL_TREE;
   search_stack = push_search_level (search_stack, &search_obstack);
 
   /* Build up all the relevant bindings and such on the cache
@@ -3177,11 +3120,13 @@ push_class_decls (type)
   maybe_push_cache_obstack ();
 
   /* Push class fields into CLASS_VALUE scope, and mark.  */
-  dfs_walk (TYPE_BINFO (type), dfs_pushdecls, unmarked_pushdecls_p);
+  dfs_walk (TYPE_BINFO (type), dfs_pushdecls, unmarked_pushdecls_p, 
+           &closed_envelopes);
 
   /* Compress fields which have only a single entry
      by a given name, and unmark.  */
-  dfs_walk (TYPE_BINFO (type), dfs_compress_decls, marked_pushdecls_p);
+  dfs_walk (TYPE_BINFO (type), dfs_compress_decls, marked_pushdecls_p,
+           0);
 
   /* Open up all the closed envelopes and push the contained decls into
      class scope.  */
@@ -3252,9 +3197,10 @@ push_class_decls (type)
 
 /* Here's a subroutine we need because C lacks lambdas.  */
 
-static void
-dfs_unuse_fields (binfo)
+static tree
+dfs_unuse_fields (binfo, data)
      tree binfo;
+     void *data ATTRIBUTE_UNUSED;
 {
   tree type = TREE_TYPE (binfo);
   tree fields;
@@ -3269,13 +3215,15 @@ dfs_unuse_fields (binfo)
          && TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
        unuse_fields (TREE_TYPE (fields));
     }
+
+  return NULL_TREE;
 }
 
 void
 unuse_fields (type)
      tree type;
 {
-  dfs_walk (TYPE_BINFO (type), dfs_unuse_fields, unmarkedp);
+  dfs_walk (TYPE_BINFO (type), dfs_unuse_fields, unmarkedp, 0);
 }
 
 void
@@ -3360,8 +3308,7 @@ lookup_conversions (type)
   tree conversions = NULL_TREE;
 
   if (TYPE_SIZE (type))
-    breadth_first_search (TYPE_BINFO (type), add_conversions,
-                         0, 0, &conversions);
+    bfs_walk (TYPE_BINFO (type), add_conversions, 0, &conversions);
 
   for (t = conversions; t; t = TREE_CHAIN (t))
     IDENTIFIER_MARKED (DECL_NAME (OVL_CURRENT (TREE_VALUE (t)))) = 0;
@@ -3369,35 +3316,47 @@ lookup_conversions (type)
   return conversions;
 }
 
+struct overlap_info 
+{
+  tree compare_type;
+  int found_overlap;
+};
+
 /* Check whether the empty class indicated by EMPTY_BINFO is also present
    at offset 0 in COMPARE_TYPE, and set found_overlap if so.  */
 
-static tree compare_type;
-static int found_overlap;
-static void
-dfs_check_overlap (empty_binfo)
+static tree
+dfs_check_overlap (empty_binfo, data)
      tree empty_binfo;
+     void *data;
 {
+  struct overlap_info *oi = (struct overlap_info *) data;
   tree binfo;
-  for (binfo = TYPE_BINFO (compare_type); ; binfo = BINFO_BASETYPE (binfo, 0))
+  for (binfo = TYPE_BINFO (oi->compare_type); 
+       ; 
+       binfo = BINFO_BASETYPE (binfo, 0))
     {
       if (BINFO_TYPE (binfo) == BINFO_TYPE (empty_binfo))
        {
-         found_overlap = 1;
+         oi->found_overlap = 1;
          break;
        }
       else if (BINFO_BASETYPES (binfo) == NULL_TREE)
        break;
     }
+
+  return NULL_TREE;
 }
 
 /* Trivial function to stop base traversal when we find something.  */
 
-static int
-dfs_no_overlap_yet (t)
-     tree t ATTRIBUTE_UNUSED;
+static tree
+dfs_no_overlap_yet (binfo, data)
+     tree binfo;
+     void *data;
 {
-  return found_overlap == 0;
+  struct overlap_info *oi = (struct overlap_info *) data;
+  return !oi->found_overlap ? binfo : NULL_TREE;
 }
 
 /* Returns nonzero if EMPTY_TYPE or any of its bases can also be found at
@@ -3407,34 +3366,63 @@ int
 types_overlap_p (empty_type, next_type)
      tree empty_type, next_type;
 {
+  struct overlap_info oi;
+
   if (! IS_AGGR_TYPE (next_type))
     return 0;
-  compare_type = next_type;
-  found_overlap = 0;
-  dfs_walk (TYPE_BINFO (empty_type), dfs_check_overlap, dfs_no_overlap_yet);
-  return found_overlap;
+  oi.compare_type = next_type;
+  oi.found_overlap = 0;
+  dfs_walk (TYPE_BINFO (empty_type), dfs_check_overlap,
+           dfs_no_overlap_yet, &oi);
+  return oi.found_overlap;
+}
+
+struct bfv_info {
+  tree vbases;
+  tree var;
+};
+
+static tree
+dfs_bfv_queue_p (binfo, data)
+     tree binfo;
+     void *data;
+{
+  struct bfv_info *bfvi = (struct bfv_info *) data;
+
+  /* Use the real virtual base class objects, not the placeholders in
+     the usual hierarchy.  */
+  if (TREE_VIA_VIRTUAL (binfo))
+    return binfo_member (BINFO_TYPE (binfo), bfvi->vbases);
+  
+  return binfo;
 }
 
 /* Passed to dfs_search by binfo_for_vtable; determine if bvtable comes
    from BINFO.  */
 
-static tree bvtable;
 static tree
-dfs_bfv_helper (binfo)
+dfs_bfv_helper (binfo, data)
      tree binfo;
+     void *data;
 {
-  if (BINFO_VTABLE (binfo) == bvtable)
+  struct bfv_info *bfvi = (struct bfv_info *) data;
+
+  if (BINFO_VTABLE (binfo) == bfvi->var)
     return binfo;
   return NULL_TREE;
 }
 
-/* Given a vtable VARS, determine which binfo it comes from.  */
+/* Given a vtable VAR, determine which binfo it comes from.  */
 
 tree
-binfo_for_vtable (vars)
-     tree vars;
+binfo_for_vtable (var)
+     tree var;
 {
-  bvtable = vars;
-  return dfs_search (TYPE_BINFO (DECL_CONTEXT (vars)), dfs_bfv_helper,
-                    DECL_CONTEXT (vars));
+  tree type;
+  struct bfv_info bfvi;
+
+  type = DECL_CONTEXT (var);
+  bfvi.vbases = CLASSTYPE_VBASECLASSES (type);
+  return dfs_walk_real (TYPE_BINFO (type),
+                       0, dfs_bfv_helper, dfs_bfv_queue_p, &bfvi);
 }
index a6c92267f5c86f0f8c13ac0c7c8971d72d442aed..00c30867cf96703af5a45954e980228991a2fd61 100644 (file)
@@ -3,8 +3,8 @@
 extern "C" void printf (char *, ...);
 
 class A {
-       int     i;
-       int     j;
+        int    i; // ERROR - private
+        int    j; // ERROR - private
     public:
        int     h;
        A() { i=10; j=20; }
index 1b8527d942c000cf603a00837602b499ffda27bc..1738c736297c8c55b6b54bbafdeaec0c77e55c29 100644 (file)
@@ -151,8 +151,8 @@ struct __streambuf {
     char* _gptr;        
     char* _egptr;       
     char* _eback;       
-    char* _pbase;       
-    char* _pptr;        
+    char* _pbase; // ERROR - inacessible
+    char* _pptr;  // ERROR - inacessible        
     char* _epptr;       
     char* _base;        
     char* _ebuf;        
index de821487b0b42ee721377252ea2ce1127f0b76c3..8c5c9ad9299d8e3bc15ab4fb8efa7b733134474c 100644 (file)
@@ -2,7 +2,7 @@
 // GROUPS passed enums
 class X {
   private:
-    enum E1 {a1, b1};
+    enum E1 {a1, b1}; // ERROR - private
   public:
     enum E2 {a2, b2};
     };
@@ -12,5 +12,5 @@ void h(X* p) {
     int x2 = X::a2;
 
     X::E1 e1;
-    int x1 = X::a1;            // Should be rejected, and is.// ERROR - .*
+    int x1 = X::a1;  // ERROR - within this context
     }
index 7d11f875716f4bc0ee702175a89c38f2d4b7acca..784c16772ea88c841e0311a92f651d197dfbab72 100644 (file)
@@ -2,7 +2,7 @@
 // GROUPS passed visibility
 class foo {
 protected:
-  int i;
+  int i; // ERROR - protected
 };
 
 class bar : public foo {
index 5ca62c0c6a73a373faf0063b8a93ac371b7ad5c7..85f47b5f89dada9020e325c0a5f5ab3364be30f2 100644 (file)
@@ -3,7 +3,7 @@
 class bottom
 {
 public:
-  int b;
+  int b; // ERROR - private
 };
 class middle : private bottom
 {
index a3bb856d1adfa16be1e5836124aedfa9065e7028..2d69e7bcf01fc50e7b907169c1828a1c6366be36 100644 (file)
@@ -5,7 +5,7 @@
 class foo
 {
 public:
-  static int y;
+  static int y; // ERROR - private
 };
 class foo1 : private foo
 { };
index 9ed7d30d2a5dc09668501c0303c4e40f34894468..676eac1bcc1fe24c1b2d8d3a3cabb067f79be09f 100644 (file)
@@ -3,7 +3,7 @@
 
 struct A {
 protected:
-  int i;
+  int i;                        // ERROR - private
   int f ();                    // ERROR - 
 };
 
index 74112aab66491b3bce2964292f70a4ece180b75e..99e0b4565ce057e6dae542c21ba564c671ecab8b 100644 (file)
@@ -16,24 +16,24 @@ public:
   int PUB_A;
 protected:
   union {
-    long B;
-    void *pY;
+    long B; // ERROR - protected
+    void *pY; // ERROR - protected
   } ;
   union Y {
     long B;
     void *pY;
-  } PRT;
-  int PRT_A;
+  } PRT; // ERROR - protected
+  int PRT_A; // ERROR - protected
 private:
   union {
-    long C;
-    void *pZ;
+    long C; // ERROR - private
+    void *pZ; // ERROR - private
   };
   union Z {
-    long C;
+    long C;  
     void *pZ;
-  } PRV;
-  int PRV_A;
+  } PRV; // ERROR - private
+  int PRV_A; // ERROR - private
 };
 
 struct Bar : public Foo {
index 91674288935c3649cb62b0938ecbe5847c862730..d50b3cdfd9bbc5f0c6d3ac89dbca94f87770ade0 100644 (file)
@@ -9,7 +9,7 @@
 
 class X {
   private:
-    enum E1 {a1, b1};
+    enum E1 {a1, b1}; // ERROR - private
   public:
     enum E2 {a2, b2};
     };
index 9f812d762e8b20fd9d41042611ace20ec5e7a718..66c2c665cabd1b18710a80d0612cab0f961ba041 100644 (file)
@@ -10,9 +10,9 @@ class A {
 public:
   int x;
 private:
-  int y;
+  int y;    // ERROR - private
   union {
-    int z;
+    int z;  // ERROR - private
   };
 };
 
index c3a9963f994397db1874026bc161d289bf001565..3aa6d6b26b86a259a5f7f1ebf91b41c3ddb540e4 100644 (file)
@@ -6,7 +6,7 @@
 // Subject:  member access rule bug
 // Message-ID: <9306300528.AA17185@coda.mel.dit.CSIRO.AU>
 struct a {
-        int aa;
+  int aa; // ERROR - private
         };
 
 class b : private a {
index fa5e5ddb7eb9b0b352aab33f1d213c1db74a4e3c..7f634e20cd87c012154d917fb02d9fe2b30263e6 100644 (file)
@@ -23,8 +23,8 @@ public:
     virtual Type& operator[](int ix) { return ia[ix]; }
 private:
     void init(const Type*, int);
-    int size;
-    int *ia;
+    int size; // ERROR - private
+    int *ia; // ERROR - private
 };
 
 template <class Type>
index 32fb70695ef4a9a09706b95e5890daf5a52d85bf..5291d7c8961e38a8b07f3cc30866c7f0b2150ef2 100644 (file)
@@ -7,9 +7,9 @@
 // Message-ID: <9308051553.AA07639@nwd2sun1.analog.com>
 class A {
   protected:
-    int astuff;
+    int astuff; // ERROR - protected
     A() {
-        astuff = 3;
+        astuff = 3; 
     }
 };
 
index a294f13edf92d5901da6f0d339723ffebede8432..a1ec468f5218fca962abbd2e23c2ed4da3b5b366 100644 (file)
@@ -7,7 +7,7 @@
 // Message-ID: <9308061142.AA08533@iiserv>
 struct T1 { int i; };
 
-struct T2 { int j; };
+struct T2 { int j; }; // ERROR - private
 
 struct T3 : public T1, private T2 {
 } x;
index 0f22d6568b71d35e56ebcb8fa7137a8d5ad1f2ce..82a1dc5b79ba8b9f63504aa05680d9513a7e22c0 100644 (file)
@@ -7,7 +7,7 @@
 // Message-ID: <9308252030.AA02352@tnt.acsys.com>
 class B {
 protected:
-    int i;
+    int i; // ERROR - protected
 };
 
 class D1 : public B {
index 5a92c6c079410e0bf9da4fa7ca6b5255b9f97865..2d7079eed2b1ea04786e932cc16226637e6dd56e 100644 (file)
@@ -8,7 +8,7 @@
 
 class A {
 public:
-        int b;
+     int b; // ERROR - private
 };
 
 class C : private A {                   // NOTE WELL. private, not public
index 3e5178c6c0121a1a053de0d024554d254b2c63bb..8b36e8043123777487d4c08b272815960d2d2fde 100644 (file)
@@ -7,7 +7,7 @@
 // Message-ID: <m0nof3E-0021ifC@jts.com
 class t1 {
 protected:
-    int a;
+    int a; // ERROR - protected
 };
 
 
index df98640c90d60c1dcd1e339d234d5075c4a1aa80..4b0ab333be0d90e9cac175c2d5c7c8611b761fc8 100644 (file)
@@ -8,7 +8,7 @@
 
 class A {
 protected:
-    int a;
+    int a; // ERROR - protected
 };
 
 class B : public A {
index 4f5146b1ea82c31bdec26a4c7c85c9ba3d98d9ca..e10f4cfd40ec343d2a9af131a0267486174eccdd 100644 (file)
@@ -3,7 +3,7 @@
 
 class Outer {
 private:
-  int x;
+  int x; // ERROR - private
 public:
   struct Inner {
     int y;
index 87c4c81aa9409e6ea248ae9df557942eb902904b..2ba2c0c51d67c63a6b0c9ab3a698a4b47ee2f72b 100644 (file)
@@ -1,10 +1,11 @@
+// Build don't link:
 // The standard sez that a use of a name gets the most access it can through
 // the various paths that can reach it.  Here, the access decl in B gives
 // us access.
 
 struct A
 {
-  void f ();                   // gets bogus error - ref below XFAIL *-*-*
+  void f ();                   
 };
 
 struct B: private virtual A
@@ -21,5 +22,5 @@ main ()
 {
   C c;
 
-  c.f ();                      // gets bogus error - private XFAIL *-*-*
+  c.f ();                      
 }
diff --git a/gcc/testsuite/g++.old-deja/g++.other/access4.C b/gcc/testsuite/g++.old-deja/g++.other/access4.C
new file mode 100644 (file)
index 0000000..75f3a61
--- /dev/null
@@ -0,0 +1,11 @@
+// Build don't link:
+
+struct A {
+  static int i;
+};
+
+struct B : private A { };
+
+struct C : public B {
+  int f () { return A::i; }
+};
diff --git a/gcc/testsuite/g++.old-deja/g++.other/access5.C b/gcc/testsuite/g++.old-deja/g++.other/access5.C
new file mode 100644 (file)
index 0000000..0d58ea0
--- /dev/null
@@ -0,0 +1,22 @@
+// Build don't link:
+
+class A
+{
+protected:
+  int i;     
+};
+
+class B : private A
+{
+protected:
+  A::i;
+};
+
+struct C : public B {
+  friend int f(C *p);
+};
+
+int f(C *p) {
+  return p->i;
+}
+
diff --git a/gcc/testsuite/g++.old-deja/g++.other/access6.C b/gcc/testsuite/g++.old-deja/g++.other/access6.C
new file mode 100644 (file)
index 0000000..7a7c7ff
--- /dev/null
@@ -0,0 +1,17 @@
+// Build don't link:
+
+template <int I>
+struct S {
+  void g();
+};
+
+class C {
+  static const int i = 3; // gets bogus error - private - XFAIL *-*-*
+public:
+  S<C::i>* f(); // gets bogus error - redeclared - XFAIL *-*-*
+};
+
+S<C::i>* C::f() { // gets bogus error - private - XFAIL *-*-*
+  return 0;
+}
+
index 04e4afa1205bcd69834433014d898ad5745ebb03..d6574a2b79c9c48d5bd8c33540dcf8d3b6ee4832 100644 (file)
@@ -1,15 +1,15 @@
 // Build don't link:
 
 struct A {
-  int operator ++();
-  void operator ()();
-  void operator delete(void*);
+  int operator ++(); // ERROR - candidates
+  void operator ()(); // ERROR - candidates
+  void operator delete(void*); // ERROR - candidates
 };
 
 struct B {
-  int operator ++(int);
-  void operator ()();
-  void operator delete(void*);
+  int operator ++(int); // ERROR - candidates
+  void operator ()(); // ERROR - candidates
+  void operator delete(void*); // ERROR - candidates
   void f();
 };
 
index c924adf45d74cec84889118b5ab19ac7470d9257..0f581988b1f6868c89e988a70ece48452da779b8 100644 (file)
@@ -4,8 +4,8 @@ void f()
 {
   union {
   private:
-    int i;
+    int i; // ERROR - private
   } u;
 
-  u.i = 3; // ERROR - private
+  u.i = 3; // ERROR - within this context
 }
index e00f5e6b25942b0e744fd0b24dab351bacf6b4f3..ef90607eaebc355041352a4bd8b9ebad7cbaac47 100644 (file)
@@ -12,8 +12,8 @@
 
 class B {
 protected:
-    int i;
-    static int j;
+  int i; // ERROR - in this context
+  static int j; // gets bogus error - XFAIL *-*-*
 };
 
 class D : public B {
index 468340f7b647ef66015addaec4fa6cfc0559e7e3..07969cd54871bd706c014a09ed0e1212161b5450 100644 (file)
@@ -10,7 +10,7 @@
 
 template <class A, class B> void foo();
 template <class C> class bar {
-  int i;
+  int i; // ERROR - private
   template <class B> friend void foo<C,B>(); // ERROR - bogus declaration
 };
 template <class A, class B> void foo() {
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/derived2.C b/gcc/testsuite/g++.old-deja/g++.pt/derived2.C
new file mode 100644 (file)
index 0000000..737792c
--- /dev/null
@@ -0,0 +1,35 @@
+// Build don't link:
+// Special g++ Options:
+
+template <typename T>
+void f(T);
+template <>
+void f(int) {}
+
+struct B {
+  typedef int I;
+};
+
+template <typename T> 
+struct D1 : virtual public B {
+  typedef T I;
+};
+
+
+template <typename T> 
+struct D : virtual public B, public D1<T>
+{
+  void g()
+    {
+      I i;
+      f(i);
+    }
+};
+
+int
+main()
+{
+  D<double> d;
+  d.g();
+}
+
index d70fae6e0c870f69de881e73d9734a5f8e808156..1aeba3a1018a9dfc72f7989038dac632b7f0bfca 100644 (file)
@@ -20,7 +20,7 @@ class C
   template <class U>
   friend void S<T>::f(U);
 
-  int i;
+  int i; // ERROR - private
 };
 
 
index c89fe1dc1d2b7db9bdd1231e0170e936f7fec26e..3f690a4404aa16ed461c183554d960ef446e0c41 100644 (file)
@@ -7,7 +7,7 @@ template <class T> struct A {
 template <class T> class B
 {
   friend class A<T>;
-  static int i;
+  static int i; // ERROR - private
 };
 
 template <class T> class C
index 77aabd3bee30e5da0474238d4a680ebd5f5c23ce..74d0e06699c051df531d7cc298fa137a7e4dfe62 100644 (file)
@@ -7,7 +7,7 @@ class C
 {
   friend void f<>(double);
 
-  int i;
+  int i; // ERROR - private
 };