pt.c (coerce_template_parms): Don't access elements of ARGLIST that is not really...
authorKriang Lerdsuwanakij <lerdsuwa@scf.usc.edu>
Thu, 22 Jan 1998 11:03:56 +0000 (11:03 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 22 Jan 1998 11:03:56 +0000 (06:03 -0500)
Wed Jan 21 10:29:57 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>
* pt.c (coerce_template_parms): Don't access elements of ARGLIST
that is not really present.  Substitute default arguments in
template template arguments.  Correctly convert TEMPLATE_DECL to
TEMPLATE_TEMPLATE_PARM.
(comp_template_args): TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM
are no longer treated specially here.
* parse.y (template_template_parm): Fix copy error.
* decl.c (grokdeclarator): Warn about missing `typename' for nested
type created from template template parameters.
* parse.y (bad_parm): Likewise
* class.c (finish_struct): Handle TEMPLATE_TEMPLATE_PARM.
(push_nested_class): Likewise.
* cp-tree.def (TEMPLATE_TEMPLATE_PARM): New tree code.
* cp-tree.h (DECL_TEMPLATE_TEMPLATE_PARM_P): New macro.
(copy_template_template_parm): Declare.
* decl.c (arg_looking_for_template): New variable.
(lookup_name_real): Handle TEMPLATE_TEMPLATE_PARM.
Try to return TEMPLATE_DECL or TEMPLATE_TEMPLATE_PARM
node if arg_looking_for_template is nonzero.
(pushdecl): Handle TEMPLATE_TEMPLATE_PARM.
(grok_op_properties, xref_tag, xref_basetypes): Likewise.
(grokdeclarator): Handle TEMPLATE_DECL.
* decl2.c (constructor_name_full): Handle TEMPLATE_TEMPLATE_PARM.
* error.c (dump_type): Add TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM.
(dump_type_prefix, dump_type_suffix) Handle TEMPLATE_TEMPLATE_PARM.
(dump_decl): Handle unnamed template type parameters.
Handle template template parameters.
(dump_function_name): Handle template template parameters.
* init.c (is_aggr_typedef, is_aggr_type, get_aggr_from_typedef):
Handle TEMPLATE_TEMPLATE_PARM.
* method.c (build_template_template_parm_names): New function.
(build_template_parm_names): Handle TEMPLATE_DECL.
(build_overload_nested_name, build_overload_name):
Handle TEMPLATE_TEMPLATE_PARM.
* parse.y (maybe_identifier): New nonterminal.
(template_type_parm): Use it.
(template_template_parm, template_arg1): New nonterminal.
(template_parm): Add template_template_parm rules.
(template_arg): Set processing_template_arg.
(template_arg1): Rules moved from template_arg.
(primary, nonnested_type): Set arg_looking_for_template if we are
processing template arguments.
* pt.c (begin_member_template_processing): Handle TEMPLATE_DECL.
(process_template_parm): Handle template template parameters.
(coerce_template_parms, comp_template_args): Likewise.
(mangle_class_name_for_template, lookup_template_class): Likewise.
(uses_template_parms): Handle TEMPLATE_DECL and
TEMPLATE_TEMPLATE_PARM.
(current_template_args): Handle TEMPLATE_DECL.
(tsubst, tsubst_copy, unify): Handle TEMPLATE_TEMPLATE_PARM.
* search.c (dfs_walk, dfs_record_inheritance):
Handle TEMPLATE_TEMPLATE_PARM.
* tree.c (copy_template_template_parm): New function.
(mapcar): Handle TEMPLATE_TEMPLATE_PARM.
* typeck.c (comptypes): Handle TEMPLATE_TEMPLATE_PARM.

From-SVN: r17441

15 files changed:
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/cp-tree.def
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/error.c
gcc/cp/init.c
gcc/cp/method.c
gcc/cp/parse.c
gcc/cp/parse.y
gcc/cp/pt.c
gcc/cp/search.c
gcc/cp/tree.c
gcc/cp/typeck.c

index aa4b3cbbda50f603ca2f2efedeb278692d4d4c96..611c9f865500be4790fed404b828d58fe01a51d1 100644 (file)
@@ -1,3 +1,62 @@
+Wed Jan 21 10:29:57 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>
+
+       * pt.c (coerce_template_parms): Don't access elements of ARGLIST
+       that is not really present.  Substitute default arguments in 
+       template template arguments.  Correctly convert TEMPLATE_DECL to 
+       TEMPLATE_TEMPLATE_PARM.
+       (comp_template_args): TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM 
+       are no longer treated specially here.
+       * parse.y (template_template_parm): Fix copy error.
+       * decl.c (grokdeclarator): Warn about missing `typename' for nested
+       type created from template template parameters.
+       * parse.y (bad_parm): Likewise
+
+       * class.c (finish_struct): Handle TEMPLATE_TEMPLATE_PARM.
+       (push_nested_class): Likewise.
+       * cp-tree.def (TEMPLATE_TEMPLATE_PARM): New tree code.
+       * cp-tree.h (DECL_TEMPLATE_TEMPLATE_PARM_P): New macro.
+       (copy_template_template_parm): Declare.
+       * decl.c (arg_looking_for_template): New variable.
+       (lookup_name_real): Handle TEMPLATE_TEMPLATE_PARM.
+       Try to return TEMPLATE_DECL or TEMPLATE_TEMPLATE_PARM
+       node if arg_looking_for_template is nonzero.
+       (pushdecl): Handle TEMPLATE_TEMPLATE_PARM.
+       (grok_op_properties, xref_tag, xref_basetypes): Likewise.
+       (grokdeclarator): Handle TEMPLATE_DECL.
+       * decl2.c (constructor_name_full): Handle TEMPLATE_TEMPLATE_PARM.
+       * error.c (dump_type): Add TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM.
+       (dump_type_prefix, dump_type_suffix) Handle TEMPLATE_TEMPLATE_PARM.
+       (dump_decl): Handle unnamed template type parameters.
+       Handle template template parameters.
+       (dump_function_name): Handle template template parameters.
+       * init.c (is_aggr_typedef, is_aggr_type, get_aggr_from_typedef): 
+       Handle TEMPLATE_TEMPLATE_PARM.
+       * method.c (build_template_template_parm_names): New function.
+       (build_template_parm_names): Handle TEMPLATE_DECL.
+       (build_overload_nested_name, build_overload_name): 
+       Handle TEMPLATE_TEMPLATE_PARM.
+       * parse.y (maybe_identifier): New nonterminal.
+       (template_type_parm): Use it.
+       (template_template_parm, template_arg1): New nonterminal.
+       (template_parm): Add template_template_parm rules.
+       (template_arg): Set processing_template_arg.
+       (template_arg1): Rules moved from template_arg.
+       (primary, nonnested_type): Set arg_looking_for_template if we are
+       processing template arguments.
+       * pt.c (begin_member_template_processing): Handle TEMPLATE_DECL.
+       (process_template_parm): Handle template template parameters.
+       (coerce_template_parms, comp_template_args): Likewise.
+       (mangle_class_name_for_template, lookup_template_class): Likewise.
+       (uses_template_parms): Handle TEMPLATE_DECL and 
+       TEMPLATE_TEMPLATE_PARM.
+       (current_template_args): Handle TEMPLATE_DECL.
+       (tsubst, tsubst_copy, unify): Handle TEMPLATE_TEMPLATE_PARM.
+       * search.c (dfs_walk, dfs_record_inheritance): 
+       Handle TEMPLATE_TEMPLATE_PARM.
+       * tree.c (copy_template_template_parm): New function.
+       (mapcar): Handle TEMPLATE_TEMPLATE_PARM.
+       * typeck.c (comptypes): Handle TEMPLATE_TEMPLATE_PARM.
+
 Mon Jan 19 22:40:03 1998  Mark Mitchell  <mmitchell@usa.net>
 
        * decl.c (start_decl): Don't allow duplicate definitions of static
index 7dd43f076581208f077f7edc0e9efba0ef892cdb..d2cb7ae3cd4a4d570e7c2bce2a13c35ad6819df0 100644 (file)
@@ -4479,7 +4479,8 @@ finish_struct (t, list_of_fieldlists, attributes, warn_anon)
              parms, we've seen all the injected decls.  */
          if ((TREE_CODE (d) == TYPE_DECL
               && (TREE_TYPE (d) == t
-                  || TREE_CODE (TREE_TYPE (d)) == TEMPLATE_TYPE_PARM))
+                  || TREE_CODE (TREE_TYPE (d)) == TEMPLATE_TYPE_PARM
+                  || TREE_CODE (TREE_TYPE (d)) == TEMPLATE_TEMPLATE_PARM))
              || TREE_CODE (d) == CONST_DECL)
            break;
          /* Don't inject cache decls.  */
@@ -4883,7 +4884,8 @@ push_nested_class (type, modify)
   tree context;
 
   if (type == NULL_TREE || type == error_mark_node || ! IS_AGGR_TYPE (type)
-      || TREE_CODE (type) == TEMPLATE_TYPE_PARM)
+      || TREE_CODE (type) == TEMPLATE_TYPE_PARM
+      || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
     return;
   
   context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
index 0961d97071b6fec92209a5c962dbcf45bcc6da14..5d3f75f74d3888a7ca9100227115afe8484e7d27 100644 (file)
@@ -91,6 +91,12 @@ DEFTREECODE (TEMPLATE_DECL, "template_decl", 'd', 0)
    Use TYPE_FIELDS to find parmlist and index.  */
 DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", 't', 0)
 
+/* Index into a template parameter list.  This parameter must be a type.
+   If it is used in signature of a template, TEMPLATE_INFO is NULL_TREE.
+   Otherwise it is used to declare a type like TT<int>.
+   Use TYPE_FIELDS to find parmlist and index.  */
+DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", 't', 0)
+
 /* A type designated by 'typename T::t'. */
 DEFTREECODE (TYPENAME_TYPE, "typename_type", 't', 0)
 
index 73b185d331f579e2fd3ee1023e37c6e2dd7358ee..b2cb28cf58a4f8956d4b5c06ab0438697405d308 100644 (file)
@@ -1350,6 +1350,12 @@ extern int flag_new_for_scope;
 #define DECL_TEMPLATE_INSTANTIATIONS(NODE) DECL_VINDEX(NODE)
 #define DECL_TEMPLATE_INJECT(NODE)     DECL_INITIAL(NODE)
 
+/* Nonzero for TEMPLATE_DECL nodes that represents template template
+   parameters */
+#define DECL_TEMPLATE_TEMPLATE_PARM_P(NODE) \
+  (TREE_CODE (NODE) == TEMPLATE_DECL && TREE_TYPE (NODE) \
+   && TREE_CODE (TREE_TYPE (NODE)) == TEMPLATE_TEMPLATE_PARM)
+
 #define DECL_FUNCTION_TEMPLATE_P(NODE)  \
   (TREE_CODE (NODE) == TEMPLATE_DECL \
    && TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == FUNCTION_DECL)
@@ -1920,11 +1926,13 @@ extern tree current_class_type; /* _TYPE: the type of the current class */
 #define FRIEND_NAME(LIST) (TREE_PURPOSE (LIST))
 #define FRIEND_DECLS(LIST) (TREE_VALUE (LIST))
 
-/* These macros are for accessing the fields of TEMPLATE...PARM nodes.  */
+/* These macros are for accessing the fields of TEMPLATE_TYPE_PARM 
+   and TEMPLATE_TEMPLATE_PARM nodes.  */
 #define TEMPLATE_TYPE_IDX(NODE) TREE_INT_CST_LOW (TYPE_FIELDS (NODE))
 #define TEMPLATE_TYPE_LEVEL(NODE) TREE_INT_CST_HIGH (TYPE_FIELDS (NODE))
 #define TEMPLATE_TYPE_SET_INFO(NODE,I,L) \
   (TYPE_FIELDS (NODE) = build_int_2 (I, L))
+/* These macros are for accessing the fields of TEMPLATE_CONST_PARM nodes.  */
 #define TEMPLATE_CONST_IDX(NODE) (TREE_INT_CST_LOW(NODE))
 #define TEMPLATE_CONST_LEVEL(NODE) (TREE_INT_CST_HIGH(NODE))
 #define TEMPLATE_CONST_SET_INFO(NODE,I,L) \
@@ -2463,6 +2471,7 @@ extern int promotes_to_aggr_type          PROTO((tree, enum tree_code));
 extern int is_aggr_type_2                      PROTO((tree, tree));
 extern char *lang_printable_name               PROTO((tree, int));
 extern tree build_exception_variant            PROTO((tree, tree));
+extern tree copy_template_template_parm                PROTO((tree));
 extern tree copy_to_permanent                  PROTO((tree));
 extern void print_lang_statistics              PROTO((void));
 extern void __eprintf
index 7bdc60706e91c0e3709b3cadbeda4d38b9948a5d..a6075e0f4fa14976db53ecacbce4bc6139966f16 100644 (file)
@@ -397,6 +397,9 @@ static struct named_label_list *named_label_uses = NULL;
    in the TREE_PURPOSE slot.  */
 tree static_aggregates;
 
+/* Nonzero if we lookup name inside template argument.  */
+int arg_looking_for_template;
+
 /* -- end of C++ */
 
 /* Two expressions that are constants with value zero.
@@ -3104,7 +3107,8 @@ pushdecl (x)
   /* Type are looked up using the DECL_NAME, as that is what the rest of the
      compiler wants to use.  */
   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
-      || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM)
+      || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM
+      || TREE_CODE (x) == TEMPLATE_TEMPLATE_PARM)
     name = DECL_NAME (x);
 
   if (name)
@@ -4534,6 +4538,7 @@ lookup_name_real (name, prefer_type, nonclass)
            }
          else if (! IS_AGGR_TYPE (type)
                   || TREE_CODE (type) == TEMPLATE_TYPE_PARM
+                  || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
                   || TREE_CODE (type) == TYPENAME_TYPE)
            /* Someone else will give an error about this if needed.  */
            val = NULL_TREE;
@@ -4667,7 +4672,13 @@ lookup_name_real (name, prefer_type, nonclass)
          val = from_obj;
        }
 
-      if ((TREE_CODE (val) == TEMPLATE_DECL && looking_for_template)
+      if (TREE_CODE (val) == TEMPLATE_DECL && arg_looking_for_template)
+       {
+         /* TEMPLATE_TEMPLATE_PARM node is preferred over TEMPLATE_DECL.  */
+         if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
+               val = TREE_TYPE (val);
+       }
+      else if ((TREE_CODE (val) == TEMPLATE_DECL && looking_for_template)
          || TREE_CODE (val) == TYPE_DECL || prefer_type <= 0)
        ;
       else if (IDENTIFIER_HAS_TYPE_VALUE (name))
@@ -7996,7 +8007,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
              else if (TREE_OPERAND (decl, 1)
                       && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
                ctype = cname;
-             else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM)
+             else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
+                      || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
                {
                  cp_error ("`%T::%D' is not a valid declarator", cname,
                            TREE_OPERAND (decl, 1));
@@ -8205,7 +8217,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
            }
        }
       /* C++ aggregate types.  */
-      else if (TREE_CODE (id) == TYPE_DECL)
+      else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
        {
          if (type)
            cp_error ("multiple declarations `%T' and `%T'", type,
@@ -10592,7 +10604,8 @@ grok_op_properties (decl, virtualp, friendp)
                    /* This lets bad template code slip through.  */
                    if (IS_AGGR_TYPE (arg)
                        || TREE_CODE (arg) == ENUMERAL_TYPE
-                       || TREE_CODE (arg) == TEMPLATE_TYPE_PARM)
+                       || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
+                       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
                      goto foundaggr;
                  }
              cp_error
@@ -10821,12 +10834,14 @@ xref_tag (code_type_node, name, binfo, globalize)
     }
   else
     t = IDENTIFIER_TYPE_VALUE (name);
-  if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM)
+  if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
+      && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
     t = NULL_TREE;
 
   if (! globalize)
     {
-      if (pedantic && t && TREE_CODE (t) == TEMPLATE_TYPE_PARM)
+      if (pedantic && t && (TREE_CODE (t) == TEMPLATE_TYPE_PARM 
+                           || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM))
        {
          cp_pedwarn ("redeclaration of template type-parameter `%T'", name);
          cp_pedwarn_at ("  previously declared here", t);
@@ -11023,7 +11038,8 @@ xref_basetypes (code_type_node, name, ref, binfo)
       if (!basetype
          || (TREE_CODE (basetype) != RECORD_TYPE
              && TREE_CODE (basetype) != TYPENAME_TYPE
-             && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM))
+             && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
+             && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
        {
          cp_error ("base type `%T' fails to be a struct or class type",
                    TREE_VALUE (binfo));
index f10390d54a7c1fcdacf9d623a28a50fc33717cde..8c4efc6fc367ee743254d543bf5cd6fad20f33c5 100644 (file)
@@ -1997,7 +1997,8 @@ tree
 constructor_name_full (thing)
      tree thing;
 {
-  if (TREE_CODE (thing) == TEMPLATE_TYPE_PARM)
+  if (TREE_CODE (thing) == TEMPLATE_TYPE_PARM
+      || TREE_CODE (thing) == TEMPLATE_TEMPLATE_PARM)
     thing = TYPE_NAME (thing);
   else if (IS_AGGR_TYPE_CODE (TREE_CODE (thing)))
     {
index cc264e619b6da07e3d73f1a4cadcafc3bfea4ba4..f6acd4b0c243cfd94b6698390aadfeefe8a46ab9 100644 (file)
@@ -229,6 +229,86 @@ dump_type (t, v)
       OB_PUTID (TYPE_IDENTIFIER (t));
       break;
 
+      /* A substituted template template parameter.  Default template 
+        argument handling are different from dump_decl.  */
+    case TEMPLATE_DECL:
+      {
+       tree orig_args = DECL_TEMPLATE_PARMS (t);
+       tree args;
+       int i; 
+       for (args = orig_args = nreverse (orig_args); 
+            args;
+            args = TREE_CHAIN (args))
+         {
+           int len = TREE_VEC_LENGTH (TREE_VALUE (args));
+
+           OB_PUTS ("template <");
+           for (i = 0; i < len; i++)
+             {
+               tree arg = TREE_VEC_ELT (TREE_VALUE (args), i);
+               tree defval = TREE_PURPOSE (arg);
+               arg = TREE_VALUE (arg);
+               if (TREE_CODE (arg) == TYPE_DECL)
+                 {
+                   OB_PUTS ("class ");
+                   if (DECL_NAME (arg))
+                     OB_PUTID (DECL_NAME (arg));
+                   else
+                     OB_PUTS ("{anon}");
+                 }
+               else
+                 dump_decl (arg, 1);
+               
+               if (defval)
+                 {
+                   OB_PUTS (" = ");
+                   if (TREE_CODE (arg) == TYPE_DECL)
+                     dump_type (defval, 1);
+                   else
+                     dump_expr (defval, 1);
+                 }
+               
+               OB_PUTC2 (',', ' ');
+             }
+           if (len != 0)
+             OB_UNPUT (2);
+           OB_PUTC2 ('>', ' ');
+         }
+       nreverse(orig_args);
+       dump_type (TREE_TYPE (t), v);
+      }
+      break;
+
+    case TEMPLATE_TEMPLATE_PARM:
+      if (!CLASSTYPE_TEMPLATE_INFO (t))
+       {
+         /* For parameters inside template signature. */
+         if (TYPE_IDENTIFIER (t))
+           OB_PUTID (TYPE_IDENTIFIER (t));
+         else
+           OB_PUTS ("{anonymous template template parm}");
+       }
+      else
+       {
+         int i;
+         tree args = CLASSTYPE_TI_ARGS (t);
+         OB_PUTID (TYPE_IDENTIFIER (t));
+         OB_PUTC ('<');
+         for (i = 0; i < TREE_VEC_LENGTH (args); i++)
+           {
+             tree arg = TREE_VEC_ELT (args, i);
+             if (TREE_CODE_CLASS (TREE_CODE (arg)) == 't'
+                 || TREE_CODE (arg) == TEMPLATE_DECL)
+               dump_type (arg, 0);
+             else
+               dump_expr (arg, 0);
+             if (i < TREE_VEC_LENGTH (args)-1)
+               OB_PUTC2 (',', ' ');
+           }
+         OB_PUTC ('>');
+       }
+      break;
+
     case TEMPLATE_TYPE_PARM:
       dump_readonly_or_volatile (t, after);
       if (TYPE_IDENTIFIER (t))
@@ -447,6 +527,7 @@ dump_type_prefix (t, v)
     case REAL_TYPE:
     case RECORD_TYPE:
     case TEMPLATE_TYPE_PARM:
+    case TEMPLATE_TEMPLATE_PARM:
     case TREE_LIST:
     case TYPE_DECL:
     case TREE_VEC:
@@ -529,6 +610,7 @@ dump_type_suffix (t, v)
     case REAL_TYPE:
     case RECORD_TYPE:
     case TEMPLATE_TYPE_PARM:
+    case TEMPLATE_TEMPLATE_PARM:
     case TREE_LIST:
     case TYPE_DECL:
     case TREE_VEC:
@@ -740,7 +822,10 @@ dump_decl (t, v)
                if (TREE_CODE (arg) == TYPE_DECL)
                  {
                    OB_PUTS ("class ");
-                   OB_PUTID (DECL_NAME (arg));
+                   if (DECL_NAME (arg))
+                     OB_PUTID (DECL_NAME (arg));
+                   else
+                     OB_PUTS ("{anon}");
                  }
                else
                  dump_decl (arg, 1);
@@ -786,7 +871,8 @@ dump_decl (t, v)
        OB_PUTC ('<');
        for (args = TREE_OPERAND (t, 1); args; args = TREE_CHAIN (args))
          {
-           if (TREE_CODE_CLASS (TREE_CODE (TREE_VALUE (args))) == 't')
+           if (TREE_CODE_CLASS (TREE_CODE (TREE_VALUE (args))) == 't'
+               || TREE_CODE (TREE_VALUE (args)) == TEMPLATE_DECL)
              dump_type (TREE_VALUE (args), 0);
            else
              dump_expr (TREE_VALUE (args), 0);
@@ -995,7 +1081,8 @@ dump_function_name (t)
 
                      if (a)
                        {
-                         if (TREE_CODE_CLASS (TREE_CODE (a)) == 't')
+                         if (TREE_CODE_CLASS (TREE_CODE (a)) == 't'
+                             || TREE_CODE (a) == TEMPLATE_DECL)
                            dump_type (a, 0);
                          else
                            dump_expr (a, 0);
@@ -1023,7 +1110,8 @@ dump_function_name (t)
 
                      if (a)
                        {
-                         if (TREE_CODE_CLASS (TREE_CODE (a)) == 't')
+                         if (TREE_CODE_CLASS (TREE_CODE (a)) == 't'
+                             || TREE_CODE (a) == TEMPLATE_DECL)
                            dump_type (a, 0);
                          else
                            dump_expr (a, 0);
index 53cb2007f7ea54928350d289333e3c2feeb4aa63..e383405334889c26a4c0c6f70ac46ff494ee3955 100644 (file)
@@ -1606,7 +1606,8 @@ is_aggr_typedef (name, or_else)
     }
 
   if (! IS_AGGR_TYPE (type)
-      && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
+      && TREE_CODE (type) != TEMPLATE_TYPE_PARM
+      && TREE_CODE (type) != TEMPLATE_TEMPLATE_PARM)
     {
       if (or_else)
        cp_error ("`%T' is not an aggregate type", type);
@@ -1627,7 +1628,8 @@ is_aggr_type (type, or_else)
     return 0;
 
   if (! IS_AGGR_TYPE (type)
-      && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
+      && TREE_CODE (type) != TEMPLATE_TYPE_PARM
+      && TREE_CODE (type) != TEMPLATE_TEMPLATE_PARM)
     {
       if (or_else)
        cp_error ("`%T' is not an aggregate type", type);
@@ -1658,7 +1660,8 @@ get_aggr_from_typedef (name, or_else)
     }
 
   if (! IS_AGGR_TYPE (type)
-      && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
+      && TREE_CODE (type) != TEMPLATE_TYPE_PARM
+      && TREE_CODE (type) != TEMPLATE_TEMPLATE_PARM)
     {
       if (or_else)
        cp_error ("type `%T' is of non-aggregate type", type);
index f93836cb00ff06e5879996c78e25c0c5c8e2e364..1eeab3e6734ff7ec67e6a27d32e7793ec100ae41 100644 (file)
@@ -73,6 +73,7 @@ static void do_build_copy_constructor PROTO((tree));
 static tree largest_union_member PROTO((tree));
 static tree build_decl_overload_real PROTO((tree, tree, tree, tree,
                                            tree, int)); 
+static void build_template_template_parm_names PROTO((tree));
 static void build_template_parm_names PROTO((tree, tree));
 static void build_underscore_int PROTO((int));
 
@@ -388,8 +389,11 @@ build_overload_nested_name (decl)
     {
       tree context = DECL_CONTEXT (decl);
       /* For a template type parameter, we want to output an 'Xn'
-        rather than 'T' or some such. */
-      if (TREE_CODE (context) == TEMPLATE_TYPE_PARM)
+        rather than 'T' or some such.  For a template template 
+        parameter, we also want an extra prefix 'z' and the
+        parameter list.  */
+      if (TREE_CODE (context) == TEMPLATE_TYPE_PARM 
+         || TREE_CODE (context) == TEMPLATE_TEMPLATE_PARM)
        build_overload_name (context, 0, 0);
       else
        {
@@ -661,6 +665,41 @@ build_overload_value (type, value, in_template)
 }
 
 
+/* Add encodings for the declaration of template template parameters.
+   PARMLIST must be a TREE_VEC */
+
+static void
+build_template_template_parm_names (parmlist)
+     tree parmlist;
+{
+  int i, nparms;
+
+  my_friendly_assert (TREE_CODE (parmlist) == TREE_VEC, 246.5);
+  nparms = TREE_VEC_LENGTH (parmlist);
+  icat (nparms);
+  for (i = 0; i < nparms; i++)
+    {
+      tree parm = TREE_VALUE (TREE_VEC_ELT (parmlist, i));
+      if (TREE_CODE (parm) == TYPE_DECL)
+       {
+         /* This parameter is a type.  */
+         OB_PUTC ('Z');
+       }
+      else if (TREE_CODE (parm) == TEMPLATE_DECL)
+       {
+         /* This parameter is a template. */
+         OB_PUTC ('z');
+         build_template_template_parm_names (DECL_INNERMOST_TEMPLATE_PARMS (parm));
+       }
+      else
+       {
+         /* It's a PARM_DECL.  */
+         build_overload_name (TREE_TYPE (parm), 0, 0);
+       }
+    }
+}
+
+
 /* Add encodings for the vector of template parameters in PARMLIST,
    given the vector of arguments to be substituted in ARGLIST.  */
 
@@ -683,6 +722,23 @@ build_template_parm_names (parmlist, arglist)
          OB_PUTC ('Z');
          build_overload_name (arg, 0, 0);
        }
+      else if (TREE_CODE (parm) == TEMPLATE_DECL)
+       {
+         /* This parameter is a template. */
+         if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
+           /* Output parameter declaration, argument index and level */
+           build_overload_name (arg, 0, 0);
+         else
+           {
+             /* A TEMPLATE_DECL node, output the parameter declaration 
+                and template name */
+
+             OB_PUTC ('z');
+             build_template_template_parm_names (DECL_INNERMOST_TEMPLATE_PARMS (parm));
+             icat (IDENTIFIER_LENGTH (DECL_NAME (arg)));
+             OB_PUTID (DECL_NAME (arg));
+           }
+       }
       else
        {
          parm = tsubst (parm, arglist,
@@ -1053,6 +1109,34 @@ build_overload_name (parmtypes, begin, end)
          OB_PUTC ('v');
          break;
 
+       case TEMPLATE_TEMPLATE_PARM:
+         /* Find and output the original template parameter 
+            declaration. */
+         if (CLASSTYPE_TEMPLATE_INFO (parmtype))
+           {
+             OB_PUTC ('t');
+             OB_PUTC ('z');
+             OB_PUTC ('X');
+             build_underscore_int (TEMPLATE_TYPE_IDX (parmtype));
+             build_underscore_int (TEMPLATE_TYPE_LEVEL (parmtype));
+
+             build_template_parm_names (
+               DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (parmtype)),
+               CLASSTYPE_TI_ARGS (parmtype));
+           }
+         else
+           {
+             OB_PUTC ('Z');
+             OB_PUTC ('z');
+             OB_PUTC ('X');
+             build_underscore_int (TEMPLATE_TYPE_IDX (parmtype));
+             build_underscore_int (TEMPLATE_TYPE_LEVEL (parmtype));
+
+             build_template_template_parm_names (
+               DECL_INNERMOST_TEMPLATE_PARMS (TYPE_STUB_DECL (parmtype)));
+           }
+         break;
+
        case TEMPLATE_TYPE_PARM:
          OB_PUTC ('X');
          build_underscore_int (TEMPLATE_TYPE_IDX (parmtype));
index 2c4c55cb37623326518c8e04c604cd7c5f2c49c5..16a12a791c3c267ee65f3c75f365b469b4c07005 100644 (file)
@@ -139,6 +139,12 @@ extern tree strip_attrs            PROTO((tree));
    error message if the user supplies an empty conditional expression.  */
 static char *cond_stmt_keyword;
 
+/* If nonzero, we try to treat TEMPLATE_DECL as argument in template
+   template parameter. */
+static int processing_template_arg;
+
+extern int arg_looking_for_template;
+
 static tree empty_parms PROTO((void));
 static tree finish_member_template_decl PROTO((tree, tree));
 
@@ -189,9 +195,9 @@ finish_member_template_decl (template_arguments, decl)
 }
 
 
-#line 127 "parse.y"
+#line 133 "parse.y"
 typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE;
-#line 315 "parse.y"
+#line 322 "parse.y"
 
 /* List of types and structure classes of the current declaration.  */
 static tree current_declspecs = NULL_TREE;
@@ -220,11 +226,11 @@ extern tree combine_strings               PROTO((tree));
 
 
 
-#define        YYFINAL         1544
+#define        YYFINAL         1554
 #define        YYFLAG          -32768
 #define        YYNTBASE        114
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 344 ? yytranslate[x] : 387)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 344 ? yytranslate[x] : 391)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -270,452 +276,455 @@ static const short yyprhs[] = {     0,
     17,    19,    21,    22,    25,    28,    30,    32,    38,    43,
     49,    54,    55,    62,    63,    69,    75,    78,    83,    86,
     89,    93,    97,    99,   101,   104,   107,   109,   112,   113,
-   119,   123,   125,   129,   131,   134,   136,   139,   141,   145,
-   147,   151,   154,   157,   160,   164,   168,   171,   174,   177,
-   180,   183,   185,   187,   189,   190,   192,   195,   196,   198,
-   203,   207,   211,   212,   221,   227,   228,   238,   245,   246,
-   255,   261,   262,   272,   279,   282,   285,   287,   290,   292,
-   299,   304,   311,   316,   319,   321,   324,   327,   329,   332,
-   334,   337,   340,   343,   348,   351,   355,   356,   357,   359,
-   363,   366,   370,   372,   377,   380,   385,   388,   393,   396,
-   398,   400,   402,   404,   406,   408,   410,   412,   414,   416,
-   418,   419,   426,   427,   434,   435,   441,   442,   448,   449,
-   457,   458,   466,   467,   474,   475,   482,   483,   484,   489,
-   494,   496,   501,   503,   505,   506,   508,   510,   514,   516,
-   518,   520,   522,   524,   526,   528,   530,   532,   534,   538,
-   540,   544,   545,   547,   549,   550,   558,   560,   562,   566,
-   571,   575,   576,   580,   582,   586,   590,   594,   598,   600,
-   602,   604,   607,   610,   613,   616,   619,   622,   625,   630,
-   633,   638,   641,   645,   649,   654,   659,   665,   671,   678,
-   681,   686,   692,   695,   698,   702,   706,   710,   712,   716,
-   719,   723,   728,   730,   733,   739,   741,   745,   749,   753,
-   757,   761,   765,   769,   773,   777,   781,   785,   789,   793,
-   797,   801,   805,   809,   813,   817,   823,   827,   831,   833,
-   836,   840,   842,   844,   846,   848,   850,   851,   857,   863,
-   869,   875,   881,   883,   885,   887,   889,   892,   895,   899,
-   904,   909,   911,   913,   915,   919,   921,   923,   925,   927,
-   931,   935,   939,   940,   945,   950,   953,   958,   961,   964,
-   966,   971,   973,   981,   989,   997,  1005,  1010,  1015,  1018,
-  1021,  1023,  1028,  1031,  1034,  1040,  1044,  1047,  1050,  1056,
-  1060,  1066,  1070,  1075,  1082,  1085,  1087,  1090,  1092,  1095,
-  1097,  1099,  1101,  1104,  1105,  1108,  1111,  1115,  1119,  1123,
-  1126,  1129,  1132,  1134,  1136,  1138,  1141,  1144,  1147,  1150,
-  1152,  1154,  1156,  1158,  1161,  1164,  1168,  1172,  1176,  1181,
-  1183,  1186,  1189,  1192,  1194,  1196,  1198,  1201,  1204,  1207,
-  1209,  1211,  1214,  1217,  1221,  1223,  1226,  1228,  1230,  1232,
-  1237,  1242,  1247,  1252,  1254,  1256,  1258,  1260,  1264,  1266,
-  1270,  1272,  1276,  1277,  1282,  1283,  1290,  1294,  1295,  1302,
-  1306,  1307,  1314,  1318,  1319,  1326,  1330,  1331,  1333,  1335,
-  1338,  1345,  1347,  1351,  1352,  1354,  1359,  1366,  1371,  1373,
-  1375,  1377,  1379,  1381,  1385,  1386,  1389,  1391,  1394,  1398,
-  1403,  1405,  1407,  1411,  1416,  1423,  1427,  1433,  1435,  1440,
-  1444,  1448,  1449,  1453,  1457,  1461,  1462,  1465,  1468,  1469,
-  1477,  1482,  1483,  1490,  1494,  1497,  1500,  1503,  1504,  1505,
-  1515,  1517,  1518,  1520,  1521,  1523,  1525,  1528,  1531,  1534,
-  1537,  1540,  1543,  1547,  1552,  1556,  1559,  1563,  1564,  1566,
-  1570,  1573,  1576,  1578,  1580,  1581,  1584,  1588,  1590,  1595,
-  1597,  1601,  1603,  1605,  1610,  1615,  1618,  1621,  1625,  1629,
-  1631,  1632,  1634,  1637,  1642,  1646,  1648,  1651,  1654,  1657,
-  1660,  1663,  1666,  1669,  1671,  1674,  1677,  1680,  1685,  1690,
-  1693,  1695,  1701,  1706,  1708,  1711,  1712,  1714,  1718,  1719,
-  1721,  1725,  1727,  1729,  1731,  1733,  1738,  1743,  1748,  1753,
-  1758,  1762,  1767,  1772,  1777,  1782,  1786,  1788,  1792,  1794,
-  1798,  1801,  1803,  1810,  1811,  1814,  1816,  1819,  1820,  1823,
-  1828,  1833,  1836,  1841,  1845,  1849,  1852,  1855,  1859,  1861,
-  1863,  1866,  1868,  1870,  1873,  1876,  1881,  1886,  1890,  1894,
-  1897,  1899,  1903,  1907,  1910,  1913,  1917,  1919,  1923,  1927,
-  1930,  1933,  1937,  1939,  1944,  1948,  1953,  1957,  1959,  1962,
-  1965,  1968,  1971,  1974,  1976,  1979,  1984,  1989,  1992,  1994,
-  1996,  1998,  2000,  2003,  2006,  2009,  2012,  2015,  2017,  2020,
-  2023,  2025,  2028,  2031,  2034,  2037,  2040,  2043,  2046,  2049,
-  2051,  2054,  2057,  2061,  2063,  2067,  2070,  2074,  2077,  2080,
-  2084,  2086,  2090,  2095,  2099,  2102,  2105,  2107,  2111,  2114,
-  2117,  2119,  2122,  2126,  2128,  2132,  2134,  2141,  2146,  2151,
-  2155,  2161,  2165,  2169,  2173,  2176,  2178,  2180,  2183,  2186,
-  2189,  2190,  2191,  2192,  2194,  2196,  2199,  2203,  2205,  2208,
-  2209,  2215,  2216,  2217,  2224,  2226,  2227,  2232,  2234,  2236,
-  2238,  2241,  2242,  2243,  2250,  2252,  2253,  2254,  2262,  2263,
-  2264,  2272,  2273,  2274,  2275,  2276,  2291,  2292,  2293,  2303,
-  2304,  2310,  2311,  2319,  2320,  2325,  2328,  2331,  2334,  2338,
-  2345,  2354,  2365,  2378,  2383,  2387,  2390,  2393,  2395,  2397,
-  2398,  2399,  2406,  2407,  2408,  2414,  2416,  2419,  2420,  2421,
-  2422,  2431,  2433,  2435,  2439,  2443,  2446,  2449,  2452,  2455,
-  2458,  2460,  2463,  2464,  2466,  2467,  2469,  2471,  2472,  2474,
-  2476,  2480,  2485,  2487,  2491,  2492,  2494,  2496,  2498,  2501,
-  2504,  2507,  2509,  2511,  2514,  2517,  2520,  2523,  2524,  2528,
-  2530,  2532,  2534,  2537,  2540,  2543,  2548,  2551,  2554,  2557,
-  2560,  2563,  2566,  2568,  2571,  2573,  2576,  2578,  2580,  2581,
-  2582,  2584,  2585,  2590,  2593,  2595,  2597,  2601,  2602,  2606,
-  2610,  2614,  2616,  2619,  2622,  2625,  2628,  2631,  2634,  2637,
-  2640,  2643,  2646,  2649,  2652,  2655,  2658,  2661,  2664,  2667,
-  2670,  2673,  2676,  2679,  2682,  2685,  2689,  2692,  2695,  2698,
-  2701,  2705,  2708,  2711,  2716,  2721,  2725
+   119,   123,   125,   129,   131,   132,   135,   138,   142,   144,
+   148,   150,   154,   156,   160,   163,   166,   169,   173,   177,
+   180,   183,   186,   189,   192,   194,   196,   198,   199,   201,
+   204,   205,   207,   212,   216,   220,   221,   230,   236,   237,
+   247,   254,   255,   264,   270,   271,   281,   288,   291,   294,
+   296,   299,   301,   308,   313,   320,   325,   328,   330,   333,
+   336,   338,   341,   343,   346,   349,   352,   357,   360,   364,
+   365,   366,   368,   372,   375,   379,   381,   386,   389,   394,
+   397,   402,   405,   407,   409,   411,   413,   415,   417,   419,
+   421,   423,   425,   427,   428,   435,   436,   443,   444,   450,
+   451,   457,   458,   466,   467,   475,   476,   483,   484,   491,
+   492,   493,   498,   503,   505,   510,   512,   514,   515,   517,
+   519,   523,   524,   527,   529,   531,   533,   535,   537,   539,
+   541,   543,   545,   547,   551,   553,   557,   558,   560,   562,
+   563,   571,   573,   575,   579,   584,   588,   589,   593,   595,
+   599,   603,   607,   611,   613,   615,   617,   620,   623,   626,
+   629,   632,   635,   638,   643,   646,   651,   654,   658,   662,
+   667,   672,   678,   684,   691,   694,   699,   705,   708,   711,
+   715,   719,   723,   725,   729,   732,   736,   741,   743,   746,
+   752,   754,   758,   762,   766,   770,   774,   778,   782,   786,
+   790,   794,   798,   802,   806,   810,   814,   818,   822,   826,
+   830,   836,   840,   844,   846,   849,   853,   855,   857,   859,
+   861,   863,   864,   870,   876,   882,   888,   894,   896,   898,
+   900,   902,   905,   908,   912,   917,   922,   924,   926,   928,
+   932,   934,   936,   938,   940,   944,   948,   952,   953,   958,
+   963,   966,   971,   974,   977,   979,   984,   986,   994,  1002,
+  1010,  1018,  1023,  1028,  1031,  1034,  1036,  1041,  1044,  1047,
+  1053,  1057,  1060,  1063,  1069,  1073,  1079,  1083,  1088,  1095,
+  1098,  1100,  1103,  1105,  1108,  1110,  1112,  1114,  1117,  1118,
+  1121,  1124,  1128,  1132,  1136,  1139,  1142,  1145,  1147,  1149,
+  1151,  1154,  1157,  1160,  1163,  1165,  1167,  1169,  1171,  1174,
+  1177,  1181,  1185,  1189,  1194,  1196,  1199,  1202,  1205,  1207,
+  1209,  1211,  1214,  1217,  1220,  1222,  1224,  1227,  1230,  1234,
+  1236,  1239,  1241,  1243,  1245,  1250,  1255,  1260,  1265,  1267,
+  1269,  1271,  1273,  1277,  1279,  1283,  1285,  1289,  1290,  1295,
+  1296,  1303,  1307,  1308,  1315,  1319,  1320,  1327,  1331,  1332,
+  1339,  1343,  1344,  1346,  1348,  1351,  1358,  1360,  1364,  1365,
+  1367,  1372,  1379,  1384,  1386,  1388,  1390,  1392,  1394,  1398,
+  1399,  1402,  1404,  1407,  1411,  1416,  1418,  1420,  1424,  1429,
+  1436,  1440,  1446,  1448,  1453,  1457,  1461,  1462,  1466,  1470,
+  1474,  1475,  1478,  1481,  1482,  1490,  1495,  1496,  1503,  1507,
+  1510,  1513,  1516,  1517,  1518,  1528,  1530,  1531,  1533,  1534,
+  1536,  1538,  1541,  1544,  1547,  1550,  1553,  1556,  1560,  1565,
+  1569,  1572,  1576,  1577,  1579,  1583,  1586,  1589,  1591,  1593,
+  1594,  1597,  1601,  1603,  1608,  1610,  1614,  1616,  1618,  1623,
+  1628,  1631,  1634,  1638,  1642,  1644,  1645,  1647,  1650,  1655,
+  1659,  1661,  1664,  1667,  1670,  1673,  1676,  1679,  1682,  1684,
+  1687,  1690,  1693,  1698,  1703,  1706,  1708,  1714,  1719,  1721,
+  1724,  1725,  1727,  1731,  1732,  1734,  1738,  1740,  1742,  1744,
+  1746,  1751,  1756,  1761,  1766,  1771,  1775,  1780,  1785,  1790,
+  1795,  1799,  1801,  1805,  1807,  1811,  1814,  1816,  1823,  1824,
+  1827,  1829,  1832,  1833,  1836,  1841,  1846,  1849,  1854,  1858,
+  1862,  1865,  1868,  1872,  1874,  1876,  1879,  1881,  1883,  1886,
+  1889,  1894,  1899,  1903,  1907,  1910,  1912,  1916,  1920,  1923,
+  1926,  1930,  1932,  1936,  1940,  1943,  1946,  1950,  1952,  1957,
+  1961,  1966,  1970,  1972,  1975,  1978,  1981,  1984,  1987,  1989,
+  1992,  1997,  2002,  2005,  2007,  2009,  2011,  2013,  2016,  2019,
+  2022,  2025,  2028,  2030,  2033,  2036,  2038,  2041,  2044,  2047,
+  2050,  2053,  2056,  2059,  2062,  2064,  2067,  2070,  2074,  2076,
+  2080,  2083,  2087,  2090,  2093,  2097,  2099,  2103,  2108,  2112,
+  2115,  2118,  2120,  2124,  2127,  2130,  2132,  2135,  2139,  2141,
+  2145,  2147,  2154,  2159,  2164,  2168,  2174,  2178,  2182,  2186,
+  2189,  2191,  2193,  2196,  2199,  2202,  2203,  2204,  2205,  2207,
+  2209,  2212,  2216,  2218,  2221,  2222,  2228,  2229,  2230,  2237,
+  2239,  2240,  2245,  2247,  2249,  2251,  2254,  2255,  2256,  2263,
+  2265,  2266,  2267,  2275,  2276,  2277,  2285,  2286,  2287,  2288,
+  2289,  2304,  2305,  2306,  2316,  2317,  2323,  2324,  2332,  2333,
+  2338,  2341,  2344,  2347,  2351,  2358,  2367,  2378,  2391,  2396,
+  2400,  2403,  2406,  2408,  2410,  2411,  2412,  2419,  2420,  2421,
+  2427,  2429,  2432,  2433,  2434,  2435,  2444,  2446,  2448,  2452,
+  2456,  2459,  2462,  2465,  2468,  2471,  2473,  2476,  2477,  2479,
+  2480,  2482,  2484,  2485,  2487,  2489,  2493,  2498,  2500,  2504,
+  2505,  2507,  2509,  2511,  2514,  2517,  2520,  2522,  2524,  2527,
+  2530,  2533,  2536,  2537,  2541,  2543,  2545,  2547,  2550,  2553,
+  2556,  2561,  2564,  2567,  2570,  2573,  2576,  2579,  2581,  2584,
+  2586,  2589,  2591,  2593,  2594,  2595,  2597,  2598,  2603,  2606,
+  2608,  2610,  2614,  2615,  2619,  2623,  2627,  2629,  2632,  2635,
+  2638,  2641,  2644,  2647,  2650,  2653,  2656,  2659,  2662,  2665,
+  2668,  2671,  2674,  2677,  2680,  2683,  2686,  2689,  2692,  2695,
+  2698,  2702,  2705,  2708,  2711,  2714,  2718,  2721,  2724,  2729,
+  2734,  2738
 };
 
 static const short yyrhs[] = {    -1,
    115,     0,     0,   116,   122,     0,   115,   122,     0,   115,
      0,     0,     0,     0,    33,     0,    27,     0,    28,     0,
-     0,   123,   124,     0,   140,   139,     0,   136,     0,   135,
-     0,   121,    94,   206,   110,    61,     0,   129,    59,   117,
-   111,     0,   129,   118,   140,   119,   139,     0,   129,   118,
-   136,   119,     0,     0,    45,   155,    59,   125,   117,   111,
-     0,     0,    45,    59,   126,   117,   111,     0,    45,   155,
+     0,   123,   124,     0,   142,   141,     0,   138,     0,   137,
+     0,   121,    94,   210,   110,    61,     0,   129,    59,   117,
+   111,     0,   129,   118,   142,   119,   141,     0,   129,   118,
+   138,   119,     0,     0,    45,   157,    59,   125,   117,   111,
+     0,     0,    45,    59,   126,   117,   111,     0,    45,   157,
     65,   128,    61,     0,   127,    61,     0,    47,    45,   128,
-    61,     0,   120,   124,     0,    47,   298,     0,    47,   311,
-   298,     0,    47,   311,   197,     0,   197,     0,   298,     0,
-   311,   298,     0,   311,   197,     0,   100,     0,   129,   100,
+    61,     0,   120,   124,     0,    47,   302,     0,    47,   315,
+   302,     0,    47,   315,   201,     0,   201,     0,   302,     0,
+   315,   302,     0,   315,   201,     0,   100,     0,   129,   100,
      0,     0,    49,    75,   131,   132,    76,     0,    49,    75,
-    76,     0,   134,     0,   132,    60,   134,     0,   255,     0,
-   255,   155,     0,    46,     0,    46,   155,     0,   133,     0,
-   133,    65,   212,     0,   378,     0,   378,    65,   192,     0,
-   130,   124,     0,   130,     1,     0,   223,    61,     0,   216,
-   222,    61,     0,   213,   221,    61,     0,   216,    61,     0,
-   158,    61,     0,   213,    61,     0,     1,    61,     0,     1,
-   111,     0,    61,     0,   207,     0,   151,     0,     0,   150,
-     0,   150,    61,     0,     0,   109,     0,   146,   138,   137,
-   323,     0,   146,   138,   348,     0,   146,   138,     1,     0,
-     0,   303,     5,    94,   142,   369,   110,   285,   381,     0,
-   303,     5,    48,   285,   381,     0,     0,   311,   303,     5,
-    94,   143,   369,   110,   285,   381,     0,   311,   303,     5,
-    48,   285,   381,     0,     0,   303,   170,    94,   144,   369,
-   110,   285,   381,     0,   303,   170,    48,   285,   381,     0,
-     0,   311,   303,   170,    94,   145,   369,   110,   285,   381,
-     0,   311,   303,   170,    48,   285,   381,     0,   213,   210,
-     0,   216,   295,     0,   295,     0,   216,   141,     0,   141,
-     0,     5,    94,   369,   110,   285,   381,     0,     5,    48,
-   285,   381,     0,   170,    94,   369,   110,   285,   381,     0,
-   170,    48,   285,   381,     0,   216,   147,     0,   147,     0,
-   213,   210,     0,   216,   295,     0,   295,     0,   216,   141,
-     0,   141,     0,   130,   148,     0,    25,     3,     0,   149,
-   240,     0,   149,    94,   186,   110,     0,   149,    48,     0,
-    63,   152,   153,     0,     0,     0,   154,     0,   153,    60,
-   154,     0,   153,     1,     0,    94,   186,   110,     0,    48,
-     0,   156,    94,   186,   110,     0,   156,    48,     0,   291,
-    94,   186,   110,     0,   291,    48,     0,   305,    94,   186,
-   110,     0,   305,    48,     0,     3,     0,     4,     0,     5,
-     0,    57,     0,    58,     0,     3,     0,    57,     0,    58,
-     0,   106,     0,   105,     0,   107,     0,     0,    49,   167,
-   219,    61,   159,   168,     0,     0,    49,   167,   213,   210,
-   160,   168,     0,     0,    49,   167,   295,   161,   168,     0,
-     0,    49,   167,   141,   162,   168,     0,     0,     7,    49,
-   167,   219,    61,   163,   168,     0,     0,     7,    49,   167,
-   213,   210,   164,   168,     0,     0,     7,    49,   167,   295,
-   165,   168,     0,     0,     7,    49,   167,   141,   166,   168,
-     0,     0,     0,    57,    75,   172,   171,     0,     4,    75,
-   172,   171,     0,   170,     0,     5,    75,   172,   171,     0,
-    76,     0,    78,     0,     0,   173,     0,   174,     0,   173,
-    60,   174,     0,   212,     0,   192,     0,    80,     0,    79,
-     0,    87,     0,    88,     0,   112,     0,   185,     0,   192,
-     0,    48,     0,    94,   176,   110,     0,    48,     0,    94,
-   180,   110,     0,     0,   180,     0,     1,     0,     0,   359,
-   210,   224,   233,    65,   181,   241,     0,   176,     0,   111,
-     0,   320,   316,   111,     0,   320,   316,     1,   111,     0,
-   320,     1,   111,     0,     0,    59,   184,   182,     0,   332,
-     0,   192,    60,   192,     0,   192,    60,     1,     0,   185,
-    60,   192,     0,   185,    60,     1,     0,   192,     0,   185,
-     0,   201,     0,   120,   191,     0,    81,   191,     0,    71,
-   191,     0,    89,   191,     0,   175,   191,     0,    68,   155,
-     0,    13,   187,     0,    13,    94,   212,   110,     0,    30,
-   187,     0,    30,    94,   212,   110,     0,   203,   284,     0,
-   203,   284,   189,     0,   203,   188,   284,     0,   203,   188,
-   284,   189,     0,   203,    94,   212,   110,     0,   203,    94,
-   212,   110,   189,     0,   203,   188,    94,   212,   110,     0,
-   203,   188,    94,   212,   110,   189,     0,   204,   191,     0,
-   204,    95,   113,   191,     0,   204,    95,   176,   113,   191,
-     0,    35,   191,     0,    36,   191,     0,    94,   186,   110,
-     0,    59,   186,   111,     0,    94,   186,   110,     0,    48,
-     0,    94,   219,   110,     0,    65,   241,     0,    94,   212,
-   110,     0,   190,    94,   212,   110,     0,   187,     0,   190,
-   187,     0,   190,    59,   242,   253,   111,     0,   191,     0,
-   192,    84,   192,     0,   192,    85,   192,     0,   192,    79,
-   192,     0,   192,    80,   192,     0,   192,    81,   192,     0,
-   192,    82,   192,     0,   192,    83,   192,     0,   192,    77,
-   192,     0,   192,    78,   192,     0,   192,    74,   192,     0,
-   192,    75,   192,     0,   192,    76,   192,     0,   192,    73,
-   192,     0,   192,    72,   192,     0,   192,    71,   192,     0,
-   192,    69,   192,     0,   192,    70,   192,     0,   192,    68,
-   192,     0,   192,    67,   192,     0,   192,    66,   364,    63,
-   192,     0,   192,    65,   192,     0,   192,    64,   192,     0,
-    62,     0,    62,   192,     0,    89,   379,   155,     0,   195,
-     0,   386,     0,     3,     0,    57,     0,    58,     0,     0,
-     6,    75,   194,   172,   171,     0,   386,    75,   194,   172,
-   171,     0,    49,   155,    75,   172,   171,     0,    49,     6,
-    75,   172,   171,     0,    49,   386,    75,   172,   171,     0,
-   193,     0,     4,     0,     5,     0,   193,     0,    81,   198,
-     0,    71,   198,     0,    94,   198,   110,     0,     3,    75,
-   172,   171,     0,    58,    75,   173,   171,     0,   297,     0,
-   193,     0,   199,     0,    94,   198,   110,     0,   193,     0,
-    10,     0,   205,     0,   206,     0,    94,   176,   110,     0,
-    94,   198,   110,     0,    94,     1,   110,     0,     0,    94,
-   202,   324,   110,     0,   201,    94,   186,   110,     0,   201,
-    48,     0,   201,    95,   176,   113,     0,   201,    87,     0,
-   201,    88,     0,    41,     0,     9,    94,   186,   110,     0,
-   301,     0,    51,    75,   212,    76,    94,   176,   110,     0,
-    52,    75,   212,    76,    94,   176,   110,     0,    53,    75,
-   212,    76,    94,   176,   110,     0,    54,    75,   212,    76,
-    94,   176,   110,     0,    50,    94,   176,   110,     0,    50,
-    94,   212,   110,     0,   311,     3,     0,   311,   386,     0,
-   300,     0,   300,    94,   186,   110,     0,   300,    48,     0,
-   208,   196,     0,   208,   196,    94,   186,   110,     0,   208,
-   196,    48,     0,   208,   197,     0,   208,   300,     0,   208,
-   197,    94,   186,   110,     0,   208,   197,    48,     0,   208,
-   300,    94,   186,   110,     0,   208,   300,    48,     0,   208,
-    89,     8,    48,     0,   208,     8,    55,    89,     8,    48,
-     0,   208,     1,     0,    40,     0,   311,    40,     0,    39,
-     0,   311,   204,     0,    43,     0,    44,     0,    11,     0,
-   206,    11,     0,     0,   201,    93,     0,   201,    92,     0,
-   219,   221,    61,     0,   213,   221,    61,     0,   216,   222,
-    61,     0,   213,    61,     0,   216,    61,     0,   120,   209,
-     0,   290,     0,   295,     0,    48,     0,   211,    48,     0,
-   217,   314,     0,   286,   314,     0,   219,   314,     0,   217,
-     0,   286,     0,   217,     0,   214,     0,   216,   219,     0,
-   219,   215,     0,   219,   218,   215,     0,   216,   219,   215,
-     0,   216,   219,   218,     0,   216,   219,   218,   215,     0,
-     7,     0,   215,   220,     0,   215,     7,     0,   215,   234,
-     0,   234,     0,   286,     0,     7,     0,   216,     9,     0,
-   216,     7,     0,   216,   234,     0,   234,     0,   219,     0,
-   286,   219,     0,   219,   218,     0,   286,   219,   218,     0,
-   220,     0,   218,   220,     0,   248,     0,     8,     0,   292,
-     0,    29,    94,   176,   110,     0,    29,    94,   212,   110,
-     0,    31,    94,   176,   110,     0,    31,    94,   212,   110,
-     0,     8,     0,     9,     0,   248,     0,   225,     0,   221,
-    60,   227,     0,   229,     0,   222,    60,   227,     0,   231,
-     0,   223,    60,   227,     0,     0,   121,    94,   206,   110,
-     0,     0,   210,   224,   233,    65,   226,   241,     0,   210,
-   224,   233,     0,     0,   210,   224,   233,    65,   228,   241,
-     0,   210,   224,   233,     0,     0,   295,   224,   233,    65,
-   230,   241,     0,   295,   224,   233,     0,     0,   295,   224,
-   233,    65,   232,   241,     0,   295,   224,   233,     0,     0,
-   234,     0,   235,     0,   234,   235,     0,    32,    94,    94,
-   236,   110,   110,     0,   237,     0,   236,    60,   237,     0,
-     0,   238,     0,   238,    94,     3,   110,     0,   238,    94,
-     3,    60,   186,   110,     0,   238,    94,   186,   110,     0,
-   155,     0,     7,     0,     8,     0,     9,     0,   155,     0,
-   239,    60,   155,     0,     0,    65,   241,     0,   192,     0,
-    59,   111,     0,    59,   242,   111,     0,    59,   242,    60,
-   111,     0,     1,     0,   241,     0,   242,    60,   241,     0,
-    95,   192,   113,   241,     0,   242,    60,    21,   192,    63,
-   241,     0,   155,    63,   241,     0,   242,    60,   155,    63,
-   241,     0,    99,     0,   243,   138,   137,   323,     0,   243,
-   138,   348,     0,   243,   138,     1,     0,     0,   245,   244,
-   139,     0,   104,   192,   109,     0,   104,     1,   109,     0,
-     0,   247,   246,     0,   247,     1,     0,     0,    14,   155,
-    59,   249,   282,   254,   111,     0,    14,   155,    59,   111,
-     0,     0,    14,    59,   250,   282,   254,   111,     0,    14,
-    59,   111,     0,    14,   155,     0,    14,   309,     0,    46,
-   305,     0,     0,     0,   262,   268,   270,   111,   233,   251,
-   247,   252,   245,     0,   262,     0,     0,    60,     0,     0,
-    60,     0,    37,     0,   255,     7,     0,   255,     8,     0,
-   255,     9,     0,   255,    37,     0,   255,   155,     0,   255,
-   157,     0,   255,   303,   155,     0,   255,   311,   303,   155,
-     0,   255,   311,   155,     0,   255,   169,     0,   255,   303,
-   169,     0,     0,   256,     0,   257,   259,   263,     0,   258,
-   263,     0,   255,    59,     0,   261,     0,   260,     0,     0,
-    63,   379,     0,    63,   379,   264,     0,   265,     0,   264,
-    60,   379,   265,     0,   266,     0,   267,   379,   266,     0,
-   305,     0,   291,     0,    31,    94,   176,   110,     0,    31,
-    94,   212,   110,     0,    38,   379,     0,     7,   379,     0,
-   267,    38,   379,     0,   267,     7,   379,     0,    59,     0,
-     0,   269,     0,   269,   271,     0,   270,    38,    63,   271,
-     0,   270,    38,    63,     0,   272,     0,   271,   272,     0,
-   273,    61,     0,   273,   111,     0,   148,    63,     0,   148,
-    96,     0,   148,    25,     0,   148,    59,     0,    61,     0,
-   120,   272,     0,   213,   274,     0,   216,   275,     0,   295,
-   224,   233,   240,     0,   141,   224,   233,   240,     0,    63,
-   192,     0,     1,     0,   216,   147,   224,   233,   240,     0,
-   147,   224,   233,   240,     0,   127,     0,   130,   273,     0,
-     0,   276,     0,   274,    60,   277,     0,     0,   279,     0,
-   275,    60,   281,     0,   278,     0,   279,     0,   280,     0,
-   281,     0,   290,   224,   233,   240,     0,     4,    63,   192,
-   233,     0,   295,   224,   233,   240,     0,   141,   224,   233,
-   240,     0,     3,    63,   192,   233,     0,    63,   192,   233,
-     0,   290,   224,   233,   240,     0,     4,    63,   192,   233,
-     0,   295,   224,   233,   240,     0,     3,    63,   192,   233,
-     0,    63,   192,   233,     0,   283,     0,   282,    60,   283,
-     0,   155,     0,   155,    65,   192,     0,   359,   312,     0,
-   359,     0,    94,   212,   110,    95,   176,   113,     0,     0,
-   285,     9,     0,     9,     0,   286,     9,     0,     0,   287,
-   176,     0,   287,    94,   186,   110,     0,   287,    94,   369,
-   110,     0,   287,    48,     0,   287,    94,     1,   110,     0,
-    81,   286,   290,     0,    71,   286,   290,     0,    81,   290,
-     0,    71,   290,     0,   310,   285,   290,     0,   294,     0,
-   302,     0,   311,   302,     0,   291,     0,   293,     0,   311,
-   293,     0,   303,   302,     0,   294,   289,   285,   381,     0,
-   294,    95,   288,   113,     0,   294,    95,   113,     0,    94,
-   290,   110,     0,   303,   302,     0,   302,     0,    81,   286,
-   295,     0,    71,   286,   295,     0,    81,   295,     0,    71,
-   295,     0,   310,   285,   295,     0,   200,     0,    81,   286,
-   295,     0,    71,   286,   295,     0,    81,   296,     0,    71,
-   296,     0,   310,   285,   295,     0,   297,     0,   200,   289,
-   285,   381,     0,    94,   296,   110,     0,   200,    95,   288,
-   113,     0,   200,    95,   113,     0,   299,     0,   303,   199,
-     0,   303,   197,     0,   303,   196,     0,   303,   193,     0,
-   303,   196,     0,   299,     0,   311,   299,     0,   219,    94,
-   186,   110,     0,   219,    94,   198,   110,     0,   219,   211,
-     0,     4,     0,     5,     0,   169,     0,   304,     0,   303,
-   304,     0,     4,    55,     0,     5,    55,     0,    58,    55,
-     0,   169,    55,     0,   306,     0,   311,   306,     0,   307,
-   155,     0,   308,     0,   307,   308,     0,     4,    55,     0,
-     5,    55,     0,   169,    55,     0,    57,    55,     0,     3,
-    55,     0,    58,    55,     0,   311,   302,     0,   293,     0,
-   311,   293,     0,   303,    81,     0,   311,   303,    81,     0,
-    55,     0,    81,   285,   312,     0,    81,   285,     0,    71,
-   285,   312,     0,    71,   285,     0,   310,   285,     0,   310,
-   285,   312,     0,   313,     0,    95,   176,   113,     0,   313,
-    95,   288,   113,     0,    81,   286,   314,     0,    81,   314,
-     0,    81,   286,     0,    81,     0,    71,   286,   314,     0,
-    71,   314,     0,    71,   286,     0,    71,     0,   310,   285,
-     0,   310,   285,   314,     0,   315,     0,    94,   314,   110,
-     0,    91,     0,   315,    94,   369,   110,   285,   381,     0,
-   315,    48,   285,   381,     0,   315,    95,   288,   113,     0,
-   315,    95,   113,     0,    94,   370,   110,   285,   381,     0,
-   190,   285,   381,     0,   211,   285,   381,     0,    95,   288,
-   113,     0,    95,   113,     0,   331,     0,   317,     0,   316,
-   331,     0,   316,   317,     0,     1,    61,     0,     0,     0,
-     0,   321,     0,   322,     0,   321,   322,     0,    34,   239,
-    61,     0,   324,     0,     1,   324,     0,     0,    59,   325,
-   318,   182,   319,     0,     0,     0,    15,   327,   318,   178,
-   328,   329,     0,   324,     0,     0,   318,   330,   332,   319,
-     0,   324,     0,   332,     0,   209,     0,   176,    61,     0,
-     0,     0,   326,    16,   333,   329,   334,   319,     0,   326,
-     0,     0,     0,    17,   335,   318,   178,   336,   183,   319,
-     0,     0,     0,    18,   337,   329,    17,   338,   177,    61,
-     0,     0,     0,     0,     0,    19,   339,    94,   362,   340,
-   318,   179,    61,   341,   364,   110,   342,   183,   319,     0,
-     0,     0,    20,   318,    94,   180,   110,   343,   329,   344,
-   319,     0,     0,    21,   192,    63,   345,   331,     0,     0,
-    21,   192,    12,   192,    63,   346,   331,     0,     0,    22,
-    63,   347,   331,     0,    23,    61,     0,    24,    61,     0,
-    25,    61,     0,    25,   176,    61,     0,   121,   363,    94,
-   206,   110,    61,     0,   121,   363,    94,   206,    63,   365,
-   110,    61,     0,   121,   363,    94,   206,    63,   365,    63,
-   365,   110,    61,     0,   121,   363,    94,   206,    63,   365,
-    63,   365,    63,   368,   110,    61,     0,    26,    81,   176,
-    61,     0,    26,   155,    61,     0,   361,   331,     0,   361,
-   111,     0,    61,     0,   351,     0,     0,     0,    96,   349,
-   137,   324,   350,   354,     0,     0,     0,    96,   352,   324,
-   353,   354,     0,   355,     0,   354,   355,     0,     0,     0,
-     0,    97,   356,   318,   360,   357,   324,   358,   319,     0,
-   217,     0,   286,     0,    94,    12,   110,     0,    94,   378,
-   110,     0,     3,    63,     0,    57,    63,     0,     4,    63,
-     0,     5,    63,     0,   364,    61,     0,   209,     0,    59,
-   182,     0,     0,     9,     0,     0,   176,     0,     1,     0,
-     0,   366,     0,   367,     0,   366,    60,   367,     0,    11,
-    94,   176,   110,     0,    11,     0,   368,    60,    11,     0,
-     0,   370,     0,   212,     0,   374,     0,   375,    12,     0,
-   374,    12,     0,   212,    12,     0,    12,     0,    98,     0,
-   374,    98,     0,   212,    98,     0,   374,    63,     0,   212,
-    63,     0,     0,    65,   372,   373,     0,   103,     0,   241,
-     0,   376,     0,   378,   371,     0,   375,   377,     0,   375,
-   380,     0,   375,   380,    65,   241,     0,   374,    60,     0,
-   212,    60,     0,   214,   210,     0,   217,   210,     0,   219,
-   210,     0,   214,   314,     0,   214,     0,   216,   295,     0,
-   378,     0,   378,   371,     0,   376,     0,   212,     0,     0,
-     0,   295,     0,     0,    62,    94,   383,   110,     0,    62,
-    48,     0,   212,     0,   382,     0,   383,    60,   382,     0,
-     0,    81,   285,   384,     0,    71,   285,   384,     0,   310,
-   285,   384,     0,    42,     0,   385,    81,     0,   385,    82,
-     0,   385,    83,     0,   385,    79,     0,   385,    80,     0,
-   385,    71,     0,   385,    69,     0,   385,    70,     0,   385,
-    89,     0,   385,    60,     0,   385,    74,     0,   385,    75,
-     0,   385,    76,     0,   385,    73,     0,   385,    64,     0,
-   385,    65,     0,   385,    77,     0,   385,    78,     0,   385,
-    87,     0,   385,    88,     0,   385,    68,     0,   385,    67,
-     0,   385,   112,     0,   385,    66,    63,     0,   385,    72,
-     0,   385,    92,     0,   385,    84,     0,   385,    48,     0,
-   385,    95,   113,     0,   385,    40,     0,   385,    39,     0,
-   385,    40,    95,   113,     0,   385,    39,    95,   113,     0,
-   385,   359,   384,     0,   385,     1,     0
+    76,     0,   136,     0,   132,    60,   136,     0,   157,     0,
+     0,   259,   133,     0,    46,   133,     0,   130,   259,   133,
+     0,   134,     0,   134,    65,   216,     0,   382,     0,   382,
+    65,   196,     0,   135,     0,   135,    65,    57,     0,   130,
+   124,     0,   130,     1,     0,   227,    61,     0,   220,   226,
+    61,     0,   217,   225,    61,     0,   220,    61,     0,   160,
+    61,     0,   217,    61,     0,     1,    61,     0,     1,   111,
+     0,    61,     0,   211,     0,   153,     0,     0,   152,     0,
+   152,    61,     0,     0,   109,     0,   148,   140,   139,   327,
+     0,   148,   140,   352,     0,   148,   140,     1,     0,     0,
+   307,     5,    94,   144,   373,   110,   289,   385,     0,   307,
+     5,    48,   289,   385,     0,     0,   315,   307,     5,    94,
+   145,   373,   110,   289,   385,     0,   315,   307,     5,    48,
+   289,   385,     0,     0,   307,   172,    94,   146,   373,   110,
+   289,   385,     0,   307,   172,    48,   289,   385,     0,     0,
+   315,   307,   172,    94,   147,   373,   110,   289,   385,     0,
+   315,   307,   172,    48,   289,   385,     0,   217,   214,     0,
+   220,   299,     0,   299,     0,   220,   143,     0,   143,     0,
+     5,    94,   373,   110,   289,   385,     0,     5,    48,   289,
+   385,     0,   172,    94,   373,   110,   289,   385,     0,   172,
+    48,   289,   385,     0,   220,   149,     0,   149,     0,   217,
+   214,     0,   220,   299,     0,   299,     0,   220,   143,     0,
+   143,     0,   130,   150,     0,    25,     3,     0,   151,   244,
+     0,   151,    94,   190,   110,     0,   151,    48,     0,    63,
+   154,   155,     0,     0,     0,   156,     0,   155,    60,   156,
+     0,   155,     1,     0,    94,   190,   110,     0,    48,     0,
+   158,    94,   190,   110,     0,   158,    48,     0,   295,    94,
+   190,   110,     0,   295,    48,     0,   309,    94,   190,   110,
+     0,   309,    48,     0,     3,     0,     4,     0,     5,     0,
+    57,     0,    58,     0,     3,     0,    57,     0,    58,     0,
+   106,     0,   105,     0,   107,     0,     0,    49,   169,   223,
+    61,   161,   170,     0,     0,    49,   169,   217,   214,   162,
+   170,     0,     0,    49,   169,   299,   163,   170,     0,     0,
+    49,   169,   143,   164,   170,     0,     0,     7,    49,   169,
+   223,    61,   165,   170,     0,     0,     7,    49,   169,   217,
+   214,   166,   170,     0,     0,     7,    49,   169,   299,   167,
+   170,     0,     0,     7,    49,   169,   143,   168,   170,     0,
+     0,     0,    57,    75,   174,   173,     0,     4,    75,   174,
+   173,     0,   172,     0,     5,    75,   174,   173,     0,    76,
+     0,    78,     0,     0,   175,     0,   176,     0,   175,    60,
+   176,     0,     0,   177,   178,     0,   216,     0,   196,     0,
+    80,     0,    79,     0,    87,     0,    88,     0,   112,     0,
+   189,     0,   196,     0,    48,     0,    94,   180,   110,     0,
+    48,     0,    94,   184,   110,     0,     0,   184,     0,     1,
+     0,     0,   363,   214,   228,   237,    65,   185,   245,     0,
+   180,     0,   111,     0,   324,   320,   111,     0,   324,   320,
+     1,   111,     0,   324,     1,   111,     0,     0,    59,   188,
+   186,     0,   336,     0,   196,    60,   196,     0,   196,    60,
+     1,     0,   189,    60,   196,     0,   189,    60,     1,     0,
+   196,     0,   189,     0,   205,     0,   120,   195,     0,    81,
+   195,     0,    71,   195,     0,    89,   195,     0,   179,   195,
+     0,    68,   157,     0,    13,   191,     0,    13,    94,   216,
+   110,     0,    30,   191,     0,    30,    94,   216,   110,     0,
+   207,   288,     0,   207,   288,   193,     0,   207,   192,   288,
+     0,   207,   192,   288,   193,     0,   207,    94,   216,   110,
+     0,   207,    94,   216,   110,   193,     0,   207,   192,    94,
+   216,   110,     0,   207,   192,    94,   216,   110,   193,     0,
+   208,   195,     0,   208,    95,   113,   195,     0,   208,    95,
+   180,   113,   195,     0,    35,   195,     0,    36,   195,     0,
+    94,   190,   110,     0,    59,   190,   111,     0,    94,   190,
+   110,     0,    48,     0,    94,   223,   110,     0,    65,   245,
+     0,    94,   216,   110,     0,   194,    94,   216,   110,     0,
+   191,     0,   194,   191,     0,   194,    59,   246,   257,   111,
+     0,   195,     0,   196,    84,   196,     0,   196,    85,   196,
+     0,   196,    79,   196,     0,   196,    80,   196,     0,   196,
+    81,   196,     0,   196,    82,   196,     0,   196,    83,   196,
+     0,   196,    77,   196,     0,   196,    78,   196,     0,   196,
+    74,   196,     0,   196,    75,   196,     0,   196,    76,   196,
+     0,   196,    73,   196,     0,   196,    72,   196,     0,   196,
+    71,   196,     0,   196,    69,   196,     0,   196,    70,   196,
+     0,   196,    68,   196,     0,   196,    67,   196,     0,   196,
+    66,   368,    63,   196,     0,   196,    65,   196,     0,   196,
+    64,   196,     0,    62,     0,    62,   196,     0,    89,   383,
+   157,     0,   199,     0,   390,     0,     3,     0,    57,     0,
+    58,     0,     0,     6,    75,   198,   174,   173,     0,   390,
+    75,   198,   174,   173,     0,    49,   157,    75,   174,   173,
+     0,    49,     6,    75,   174,   173,     0,    49,   390,    75,
+   174,   173,     0,   197,     0,     4,     0,     5,     0,   197,
+     0,    81,   202,     0,    71,   202,     0,    94,   202,   110,
+     0,     3,    75,   174,   173,     0,    58,    75,   175,   173,
+     0,   301,     0,   197,     0,   203,     0,    94,   202,   110,
+     0,   197,     0,    10,     0,   209,     0,   210,     0,    94,
+   180,   110,     0,    94,   202,   110,     0,    94,     1,   110,
+     0,     0,    94,   206,   328,   110,     0,   205,    94,   190,
+   110,     0,   205,    48,     0,   205,    95,   180,   113,     0,
+   205,    87,     0,   205,    88,     0,    41,     0,     9,    94,
+   190,   110,     0,   305,     0,    51,    75,   216,    76,    94,
+   180,   110,     0,    52,    75,   216,    76,    94,   180,   110,
+     0,    53,    75,   216,    76,    94,   180,   110,     0,    54,
+    75,   216,    76,    94,   180,   110,     0,    50,    94,   180,
+   110,     0,    50,    94,   216,   110,     0,   315,     3,     0,
+   315,   390,     0,   304,     0,   304,    94,   190,   110,     0,
+   304,    48,     0,   212,   200,     0,   212,   200,    94,   190,
+   110,     0,   212,   200,    48,     0,   212,   201,     0,   212,
+   304,     0,   212,   201,    94,   190,   110,     0,   212,   201,
+    48,     0,   212,   304,    94,   190,   110,     0,   212,   304,
+    48,     0,   212,    89,     8,    48,     0,   212,     8,    55,
+    89,     8,    48,     0,   212,     1,     0,    40,     0,   315,
+    40,     0,    39,     0,   315,   208,     0,    43,     0,    44,
+     0,    11,     0,   210,    11,     0,     0,   205,    93,     0,
+   205,    92,     0,   223,   225,    61,     0,   217,   225,    61,
+     0,   220,   226,    61,     0,   217,    61,     0,   220,    61,
+     0,   120,   213,     0,   294,     0,   299,     0,    48,     0,
+   215,    48,     0,   221,   318,     0,   290,   318,     0,   223,
+   318,     0,   221,     0,   290,     0,   221,     0,   218,     0,
+   220,   223,     0,   223,   219,     0,   223,   222,   219,     0,
+   220,   223,   219,     0,   220,   223,   222,     0,   220,   223,
+   222,   219,     0,     7,     0,   219,   224,     0,   219,     7,
+     0,   219,   238,     0,   238,     0,   290,     0,     7,     0,
+   220,     9,     0,   220,     7,     0,   220,   238,     0,   238,
+     0,   223,     0,   290,   223,     0,   223,   222,     0,   290,
+   223,   222,     0,   224,     0,   222,   224,     0,   252,     0,
+     8,     0,   296,     0,    29,    94,   180,   110,     0,    29,
+    94,   216,   110,     0,    31,    94,   180,   110,     0,    31,
+    94,   216,   110,     0,     8,     0,     9,     0,   252,     0,
+   229,     0,   225,    60,   231,     0,   233,     0,   226,    60,
+   231,     0,   235,     0,   227,    60,   231,     0,     0,   121,
+    94,   210,   110,     0,     0,   214,   228,   237,    65,   230,
+   245,     0,   214,   228,   237,     0,     0,   214,   228,   237,
+    65,   232,   245,     0,   214,   228,   237,     0,     0,   299,
+   228,   237,    65,   234,   245,     0,   299,   228,   237,     0,
+     0,   299,   228,   237,    65,   236,   245,     0,   299,   228,
+   237,     0,     0,   238,     0,   239,     0,   238,   239,     0,
+    32,    94,    94,   240,   110,   110,     0,   241,     0,   240,
+    60,   241,     0,     0,   242,     0,   242,    94,     3,   110,
+     0,   242,    94,     3,    60,   190,   110,     0,   242,    94,
+   190,   110,     0,   157,     0,     7,     0,     8,     0,     9,
+     0,   157,     0,   243,    60,   157,     0,     0,    65,   245,
+     0,   196,     0,    59,   111,     0,    59,   246,   111,     0,
+    59,   246,    60,   111,     0,     1,     0,   245,     0,   246,
+    60,   245,     0,    95,   196,   113,   245,     0,   246,    60,
+    21,   196,    63,   245,     0,   157,    63,   245,     0,   246,
+    60,   157,    63,   245,     0,    99,     0,   247,   140,   139,
+   327,     0,   247,   140,   352,     0,   247,   140,     1,     0,
+     0,   249,   248,   141,     0,   104,   196,   109,     0,   104,
+     1,   109,     0,     0,   251,   250,     0,   251,     1,     0,
+     0,    14,   157,    59,   253,   286,   258,   111,     0,    14,
+   157,    59,   111,     0,     0,    14,    59,   254,   286,   258,
+   111,     0,    14,    59,   111,     0,    14,   157,     0,    14,
+   313,     0,    46,   309,     0,     0,     0,   266,   272,   274,
+   111,   237,   255,   251,   256,   249,     0,   266,     0,     0,
+    60,     0,     0,    60,     0,    37,     0,   259,     7,     0,
+   259,     8,     0,   259,     9,     0,   259,    37,     0,   259,
+   157,     0,   259,   159,     0,   259,   307,   157,     0,   259,
+   315,   307,   157,     0,   259,   315,   157,     0,   259,   171,
+     0,   259,   307,   171,     0,     0,   260,     0,   261,   263,
+   267,     0,   262,   267,     0,   259,    59,     0,   265,     0,
+   264,     0,     0,    63,   383,     0,    63,   383,   268,     0,
+   269,     0,   268,    60,   383,   269,     0,   270,     0,   271,
+   383,   270,     0,   309,     0,   295,     0,    31,    94,   180,
+   110,     0,    31,    94,   216,   110,     0,    38,   383,     0,
+     7,   383,     0,   271,    38,   383,     0,   271,     7,   383,
+     0,    59,     0,     0,   273,     0,   273,   275,     0,   274,
+    38,    63,   275,     0,   274,    38,    63,     0,   276,     0,
+   275,   276,     0,   277,    61,     0,   277,   111,     0,   150,
+    63,     0,   150,    96,     0,   150,    25,     0,   150,    59,
+     0,    61,     0,   120,   276,     0,   217,   278,     0,   220,
+   279,     0,   299,   228,   237,   244,     0,   143,   228,   237,
+   244,     0,    63,   196,     0,     1,     0,   220,   149,   228,
+   237,   244,     0,   149,   228,   237,   244,     0,   127,     0,
+   130,   277,     0,     0,   280,     0,   278,    60,   281,     0,
+     0,   283,     0,   279,    60,   285,     0,   282,     0,   283,
+     0,   284,     0,   285,     0,   294,   228,   237,   244,     0,
+     4,    63,   196,   237,     0,   299,   228,   237,   244,     0,
+   143,   228,   237,   244,     0,     3,    63,   196,   237,     0,
+    63,   196,   237,     0,   294,   228,   237,   244,     0,     4,
+    63,   196,   237,     0,   299,   228,   237,   244,     0,     3,
+    63,   196,   237,     0,    63,   196,   237,     0,   287,     0,
+   286,    60,   287,     0,   157,     0,   157,    65,   196,     0,
+   363,   316,     0,   363,     0,    94,   216,   110,    95,   180,
+   113,     0,     0,   289,     9,     0,     9,     0,   290,     9,
+     0,     0,   291,   180,     0,   291,    94,   190,   110,     0,
+   291,    94,   373,   110,     0,   291,    48,     0,   291,    94,
+     1,   110,     0,    81,   290,   294,     0,    71,   290,   294,
+     0,    81,   294,     0,    71,   294,     0,   314,   289,   294,
+     0,   298,     0,   306,     0,   315,   306,     0,   295,     0,
+   297,     0,   315,   297,     0,   307,   306,     0,   298,   293,
+   289,   385,     0,   298,    95,   292,   113,     0,   298,    95,
+   113,     0,    94,   294,   110,     0,   307,   306,     0,   306,
+     0,    81,   290,   299,     0,    71,   290,   299,     0,    81,
+   299,     0,    71,   299,     0,   314,   289,   299,     0,   204,
+     0,    81,   290,   299,     0,    71,   290,   299,     0,    81,
+   300,     0,    71,   300,     0,   314,   289,   299,     0,   301,
+     0,   204,   293,   289,   385,     0,    94,   300,   110,     0,
+   204,    95,   292,   113,     0,   204,    95,   113,     0,   303,
+     0,   307,   203,     0,   307,   201,     0,   307,   200,     0,
+   307,   197,     0,   307,   200,     0,   303,     0,   315,   303,
+     0,   223,    94,   190,   110,     0,   223,    94,   202,   110,
+     0,   223,   215,     0,     4,     0,     5,     0,   171,     0,
+   308,     0,   307,   308,     0,     4,    55,     0,     5,    55,
+     0,    58,    55,     0,   171,    55,     0,   310,     0,   315,
+   310,     0,   311,   157,     0,   312,     0,   311,   312,     0,
+     4,    55,     0,     5,    55,     0,   171,    55,     0,    57,
+    55,     0,     3,    55,     0,    58,    55,     0,   315,   306,
+     0,   297,     0,   315,   297,     0,   307,    81,     0,   315,
+   307,    81,     0,    55,     0,    81,   289,   316,     0,    81,
+   289,     0,    71,   289,   316,     0,    71,   289,     0,   314,
+   289,     0,   314,   289,   316,     0,   317,     0,    95,   180,
+   113,     0,   317,    95,   292,   113,     0,    81,   290,   318,
+     0,    81,   318,     0,    81,   290,     0,    81,     0,    71,
+   290,   318,     0,    71,   318,     0,    71,   290,     0,    71,
+     0,   314,   289,     0,   314,   289,   318,     0,   319,     0,
+    94,   318,   110,     0,    91,     0,   319,    94,   373,   110,
+   289,   385,     0,   319,    48,   289,   385,     0,   319,    95,
+   292,   113,     0,   319,    95,   113,     0,    94,   374,   110,
+   289,   385,     0,   194,   289,   385,     0,   215,   289,   385,
+     0,    95,   292,   113,     0,    95,   113,     0,   335,     0,
+   321,     0,   320,   335,     0,   320,   321,     0,     1,    61,
+     0,     0,     0,     0,   325,     0,   326,     0,   325,   326,
+     0,    34,   243,    61,     0,   328,     0,     1,   328,     0,
+     0,    59,   329,   322,   186,   323,     0,     0,     0,    15,
+   331,   322,   182,   332,   333,     0,   328,     0,     0,   322,
+   334,   336,   323,     0,   328,     0,   336,     0,   213,     0,
+   180,    61,     0,     0,     0,   330,    16,   337,   333,   338,
+   323,     0,   330,     0,     0,     0,    17,   339,   322,   182,
+   340,   187,   323,     0,     0,     0,    18,   341,   333,    17,
+   342,   181,    61,     0,     0,     0,     0,     0,    19,   343,
+    94,   366,   344,   322,   183,    61,   345,   368,   110,   346,
+   187,   323,     0,     0,     0,    20,   322,    94,   184,   110,
+   347,   333,   348,   323,     0,     0,    21,   196,    63,   349,
+   335,     0,     0,    21,   196,    12,   196,    63,   350,   335,
+     0,     0,    22,    63,   351,   335,     0,    23,    61,     0,
+    24,    61,     0,    25,    61,     0,    25,   180,    61,     0,
+   121,   367,    94,   210,   110,    61,     0,   121,   367,    94,
+   210,    63,   369,   110,    61,     0,   121,   367,    94,   210,
+    63,   369,    63,   369,   110,    61,     0,   121,   367,    94,
+   210,    63,   369,    63,   369,    63,   372,   110,    61,     0,
+    26,    81,   180,    61,     0,    26,   157,    61,     0,   365,
+   335,     0,   365,   111,     0,    61,     0,   355,     0,     0,
+     0,    96,   353,   139,   328,   354,   358,     0,     0,     0,
+    96,   356,   328,   357,   358,     0,   359,     0,   358,   359,
+     0,     0,     0,     0,    97,   360,   322,   364,   361,   328,
+   362,   323,     0,   221,     0,   290,     0,    94,    12,   110,
+     0,    94,   382,   110,     0,     3,    63,     0,    57,    63,
+     0,     4,    63,     0,     5,    63,     0,   368,    61,     0,
+   213,     0,    59,   186,     0,     0,     9,     0,     0,   180,
+     0,     1,     0,     0,   370,     0,   371,     0,   370,    60,
+   371,     0,    11,    94,   180,   110,     0,    11,     0,   372,
+    60,    11,     0,     0,   374,     0,   216,     0,   378,     0,
+   379,    12,     0,   378,    12,     0,   216,    12,     0,    12,
+     0,    98,     0,   378,    98,     0,   216,    98,     0,   378,
+    63,     0,   216,    63,     0,     0,    65,   376,   377,     0,
+   103,     0,   245,     0,   380,     0,   382,   375,     0,   379,
+   381,     0,   379,   384,     0,   379,   384,    65,   245,     0,
+   378,    60,     0,   216,    60,     0,   218,   214,     0,   221,
+   214,     0,   223,   214,     0,   218,   318,     0,   218,     0,
+   220,   299,     0,   382,     0,   382,   375,     0,   380,     0,
+   216,     0,     0,     0,   299,     0,     0,    62,    94,   387,
+   110,     0,    62,    48,     0,   216,     0,   386,     0,   387,
+    60,   386,     0,     0,    81,   289,   388,     0,    71,   289,
+   388,     0,   314,   289,   388,     0,    42,     0,   389,    81,
+     0,   389,    82,     0,   389,    83,     0,   389,    79,     0,
+   389,    80,     0,   389,    71,     0,   389,    69,     0,   389,
+    70,     0,   389,    89,     0,   389,    60,     0,   389,    74,
+     0,   389,    75,     0,   389,    76,     0,   389,    73,     0,
+   389,    64,     0,   389,    65,     0,   389,    77,     0,   389,
+    78,     0,   389,    87,     0,   389,    88,     0,   389,    68,
+     0,   389,    67,     0,   389,   112,     0,   389,    66,    63,
+     0,   389,    72,     0,   389,    92,     0,   389,    84,     0,
+   389,    48,     0,   389,    95,   113,     0,   389,    40,     0,
+   389,    39,     0,   389,    40,    95,   113,     0,   389,    39,
+    95,   113,     0,   389,   363,   388,     0,   389,     1,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   336,   338,   352,   355,   356,   360,   362,   365,   370,   374,
-   380,   382,   385,   388,   392,   395,   397,   399,   402,   404,
-   407,   410,   412,   414,   416,   418,   420,   422,   428,   432,
-   435,   437,   441,   443,   444,   446,   450,   453,   459,   462,
-   464,   469,   472,   476,   489,   491,   493,   497,   507,   509,
-   511,   515,   524,   534,   537,   539,   543,   545,   546,   553,
-   554,   555,   558,   561,   565,   567,   568,   571,   573,   576,
-   579,   581,   585,   595,   597,   607,   616,   618,   628,   637,
-   639,   649,   658,   660,   672,   680,   687,   692,   699,   706,
-   709,   711,   713,   719,   729,   731,   734,   737,   739,   742,
-   744,   748,   757,   760,   762,   766,   779,   799,   802,   804,
-   805,   808,   815,   821,   823,   825,   827,   829,   832,   837,
-   839,   840,   841,   842,   845,   847,   848,   851,   853,   854,
-   857,   862,   862,   866,   866,   869,   869,   872,   872,   876,
-   876,   881,   881,   884,   884,   887,   889,   892,   899,   906,
-   912,   915,   924,   926,   934,   937,   940,   943,   947,   950,
-   953,   956,   958,   960,   962,   966,   969,   972,   977,   981,
-   986,   990,   993,   995,   999,  1019,  1026,  1029,  1031,  1032,
-  1033,  1036,  1047,  1056,  1060,  1064,  1067,  1069,  1073,  1076,
-  1079,  1083,  1086,  1088,  1090,  1092,  1099,  1112,  1114,  1116,
-  1118,  1124,  1127,  1130,  1133,  1136,  1140,  1143,  1146,  1150,
-  1152,  1156,  1160,  1162,  1166,  1169,  1176,  1179,  1181,  1189,
-  1198,  1204,  1211,  1213,  1215,  1228,  1231,  1233,  1235,  1237,
-  1239,  1241,  1243,  1245,  1247,  1249,  1251,  1253,  1255,  1257,
-  1259,  1261,  1263,  1265,  1267,  1269,  1271,  1275,  1277,  1279,
-  1296,  1299,  1300,  1301,  1302,  1303,  1306,  1309,  1312,  1316,
-  1319,  1321,  1326,  1328,  1329,  1332,  1334,  1336,  1338,  1342,
-  1345,  1349,  1351,  1352,  1353,  1357,  1365,  1366,  1367,  1375,
-  1383,  1391,  1393,  1401,  1422,  1429,  1436,  1438,  1447,  1452,
-  1475,  1519,  1520,  1524,  1528,  1532,  1536,  1538,  1542,  1544,
-  1552,  1554,  1559,  1565,  1569,  1574,  1579,  1581,  1586,  1601,
-  1616,  1627,  1639,  1647,  1656,  1700,  1703,  1707,  1710,  1714,
-  1717,  1722,  1724,  1728,  1741,  1744,  1751,  1758,  1763,  1765,
-  1770,  1772,  1779,  1781,  1785,  1789,  1795,  1799,  1802,  1805,
-  1808,  1818,  1820,  1823,  1827,  1830,  1833,  1836,  1839,  1845,
-  1851,  1853,  1858,  1860,  1869,  1872,  1874,  1877,  1883,  1885,
-  1895,  1899,  1902,  1905,  1910,  1913,  1921,  1923,  1925,  1927,
-  1930,  1933,  1948,  1967,  1970,  1972,  1975,  1977,  1980,  1982,
-  1985,  1987,  1990,  1993,  1997,  2016,  2018,  2038,  2044,  2045,
-  2051,  2060,  2062,  2072,  2081,  2083,  2095,  2098,  2102,  2105,
-  2109,  2114,  2117,  2121,  2124,  2126,  2128,  2130,  2137,  2139,
-  2140,  2141,  2145,  2148,  2152,  2155,  2161,  2163,  2166,  2169,
-  2172,  2178,  2181,  2184,  2186,  2188,  2190,  2194,  2200,  2208,
-  2210,  2214,  2216,  2221,  2224,  2227,  2229,  2231,  2235,  2239,
-  2244,  2248,  2251,  2256,  2260,  2263,  2266,  2270,  2306,  2312,
-  2321,  2333,  2335,  2338,  2340,  2345,  2347,  2349,  2351,  2353,
-  2357,  2362,  2367,  2373,  2378,  2383,  2385,  2389,  2394,  2397,
-  2404,  2432,  2438,  2440,  2443,  2446,  2448,  2452,  2454,  2458,
-  2484,  2513,  2516,  2517,  2538,  2561,  2563,  2567,  2593,  2602,
-  2691,  2698,  2701,  2709,  2720,  2729,  2733,  2748,  2751,  2756,
-  2758,  2760,  2762,  2764,  2766,  2771,  2777,  2779,  2782,  2785,
-  2787,  2798,  2803,  2806,  2808,  2813,  2816,  2817,  2828,  2831,
-  2832,  2843,  2845,  2848,  2850,  2853,  2860,  2868,  2875,  2881,
-  2887,  2895,  2899,  2904,  2908,  2911,  2920,  2922,  2926,  2929,
-  2934,  2938,  2943,  2953,  2956,  2960,  2964,  2972,  2977,  2983,
-  2986,  2988,  2990,  2996,  2999,  3001,  3003,  3005,  3009,  3012,
-  3030,  3040,  3042,  3043,  3047,  3052,  3055,  3057,  3059,  3061,
-  3065,  3071,  3074,  3076,  3078,  3080,  3084,  3087,  3090,  3092,
-  3094,  3096,  3100,  3103,  3106,  3108,  3110,  3112,  3119,  3130,
-  3134,  3139,  3143,  3148,  3150,  3154,  3157,  3159,  3163,  3165,
-  3166,  3169,  3171,  3177,  3192,  3198,  3204,  3218,  3220,  3224,
-  3236,  3242,  3253,  3260,  3266,  3268,  3269,  3270,  3278,  3287,
-  3288,  3292,  3295,  3301,  3307,  3310,  3312,  3314,  3316,  3320,
-  3324,  3328,  3331,  3336,  3339,  3341,  3343,  3345,  3347,  3349,
-  3351,  3353,  3357,  3361,  3365,  3369,  3370,  3372,  3374,  3376,
-  3378,  3380,  3382,  3384,  3386,  3394,  3396,  3397,  3398,  3401,
-  3409,  3414,  3421,  3423,  3428,  3430,  3433,  3447,  3450,  3453,
-  3462,  3474,  3485,  3505,  3515,  3518,  3526,  3538,  3541,  3544,
-  3547,  3563,  3566,  3577,  3578,  3582,  3597,  3616,  3628,  3642,
-  3656,  3669,  3688,  3706,  3725,  3733,  3754,  3772,  3785,  3786,
-  3789,  3789,  3792,  3792,  3795,  3795,  3801,  3807,  3810,  3815,
-  3822,  3831,  3840,  3849,  3857,  3870,  3872,  3876,  3878,  3881,
-  3888,  3891,  3899,  3915,  3926,  3938,  3940,  3943,  3953,  3963,
-  3974,  3976,  3978,  3981,  3998,  4004,  4012,  4014,  4016,  4020,
-  4023,  4024,  4032,  4036,  4040,  4043,  4044,  4050,  4053,  4056,
-  4058,  4062,  4067,  4070,  4080,  4085,  4086,  4094,  4100,  4105,
-  4109,  4114,  4118,  4122,  4126,  4131,  4142,  4156,  4160,  4163,
-  4165,  4169,  4173,  4176,  4179,  4181,  4185,  4187,  4194,  4201,
-  4204,  4207,  4211,  4215,  4221,  4225,  4230,  4232,  4235,  4240,
-  4246,  4256,  4259,  4261,  4265,  4270,  4272,  4279,  4282,  4284,
-  4286,  4292,  4297,  4300,  4302,  4304,  4306,  4308,  4310,  4312,
-  4314,  4316,  4318,  4320,  4322,  4324,  4326,  4328,  4330,  4332,
-  4334,  4336,  4338,  4340,  4342,  4344,  4346,  4348,  4350,  4352,
-  4354,  4356,  4358,  4360,  4362,  4365,  4367
+   343,   345,   359,   362,   363,   367,   369,   372,   377,   381,
+   387,   389,   392,   395,   399,   402,   404,   406,   409,   411,
+   414,   417,   419,   421,   423,   425,   427,   429,   435,   439,
+   442,   444,   448,   450,   451,   453,   457,   460,   466,   469,
+   471,   476,   479,   483,   486,   489,   501,   505,   523,   533,
+   535,   537,   539,   541,   556,   565,   575,   578,   580,   584,
+   586,   587,   594,   595,   596,   599,   602,   606,   608,   609,
+   612,   614,   617,   620,   622,   626,   636,   638,   648,   657,
+   659,   669,   678,   680,   690,   699,   701,   713,   721,   728,
+   733,   740,   747,   750,   752,   754,   760,   770,   772,   775,
+   778,   780,   783,   785,   789,   798,   801,   803,   807,   820,
+   840,   843,   845,   846,   849,   856,   862,   864,   866,   868,
+   870,   873,   878,   880,   881,   882,   883,   886,   888,   889,
+   892,   894,   895,   898,   903,   903,   907,   907,   910,   910,
+   913,   913,   917,   917,   922,   922,   925,   925,   928,   930,
+   933,   940,   947,   953,   956,   965,   967,   975,   978,   981,
+   984,   988,   991,   994,   997,  1000,  1003,  1005,  1007,  1009,
+  1013,  1016,  1019,  1024,  1028,  1033,  1037,  1040,  1042,  1046,
+  1066,  1073,  1076,  1078,  1079,  1080,  1083,  1094,  1103,  1107,
+  1111,  1114,  1116,  1120,  1123,  1126,  1130,  1133,  1135,  1137,
+  1139,  1146,  1159,  1161,  1163,  1165,  1171,  1174,  1177,  1180,
+  1183,  1187,  1190,  1193,  1197,  1199,  1203,  1207,  1209,  1213,
+  1216,  1223,  1226,  1228,  1236,  1245,  1251,  1258,  1260,  1262,
+  1275,  1278,  1280,  1282,  1284,  1286,  1288,  1290,  1292,  1294,
+  1296,  1298,  1300,  1302,  1304,  1306,  1308,  1310,  1312,  1314,
+  1316,  1318,  1322,  1324,  1326,  1343,  1346,  1347,  1348,  1349,
+  1350,  1353,  1356,  1359,  1363,  1366,  1368,  1373,  1375,  1376,
+  1379,  1381,  1383,  1385,  1389,  1392,  1396,  1398,  1399,  1400,
+  1404,  1426,  1427,  1428,  1436,  1444,  1452,  1454,  1462,  1483,
+  1490,  1497,  1499,  1508,  1513,  1536,  1580,  1581,  1585,  1589,
+  1593,  1597,  1599,  1603,  1605,  1613,  1615,  1620,  1626,  1630,
+  1635,  1640,  1642,  1647,  1662,  1677,  1688,  1700,  1708,  1717,
+  1761,  1764,  1768,  1771,  1775,  1778,  1783,  1785,  1789,  1802,
+  1805,  1812,  1819,  1824,  1826,  1831,  1833,  1840,  1842,  1846,
+  1850,  1856,  1860,  1863,  1866,  1869,  1879,  1881,  1884,  1888,
+  1891,  1894,  1897,  1900,  1906,  1912,  1914,  1919,  1921,  1930,
+  1933,  1935,  1938,  1944,  1946,  1956,  1960,  1963,  1966,  1971,
+  1974,  1982,  1984,  1986,  1988,  1991,  1994,  2009,  2028,  2031,
+  2033,  2036,  2038,  2041,  2043,  2046,  2048,  2051,  2054,  2058,
+  2077,  2079,  2099,  2105,  2106,  2112,  2121,  2123,  2133,  2142,
+  2144,  2156,  2159,  2163,  2166,  2170,  2175,  2178,  2182,  2185,
+  2187,  2189,  2191,  2198,  2200,  2201,  2202,  2206,  2209,  2213,
+  2216,  2222,  2224,  2227,  2230,  2233,  2239,  2242,  2245,  2247,
+  2249,  2251,  2255,  2261,  2269,  2271,  2275,  2277,  2282,  2285,
+  2288,  2290,  2292,  2296,  2300,  2305,  2309,  2312,  2317,  2321,
+  2324,  2327,  2331,  2367,  2373,  2382,  2394,  2396,  2399,  2401,
+  2406,  2408,  2410,  2412,  2414,  2418,  2423,  2428,  2434,  2439,
+  2444,  2446,  2450,  2455,  2458,  2465,  2493,  2499,  2501,  2504,
+  2507,  2509,  2513,  2515,  2519,  2545,  2574,  2577,  2578,  2599,
+  2622,  2624,  2628,  2654,  2663,  2752,  2759,  2762,  2770,  2781,
+  2790,  2794,  2809,  2812,  2817,  2819,  2821,  2823,  2825,  2827,
+  2832,  2838,  2840,  2843,  2846,  2848,  2859,  2864,  2867,  2869,
+  2874,  2877,  2878,  2889,  2892,  2893,  2904,  2906,  2909,  2911,
+  2914,  2921,  2929,  2936,  2942,  2948,  2956,  2960,  2965,  2969,
+  2972,  2981,  2983,  2987,  2990,  2995,  2999,  3004,  3014,  3017,
+  3021,  3025,  3033,  3038,  3044,  3047,  3049,  3051,  3057,  3060,
+  3062,  3064,  3066,  3070,  3073,  3094,  3104,  3106,  3107,  3111,
+  3116,  3119,  3121,  3123,  3125,  3129,  3135,  3138,  3140,  3142,
+  3144,  3148,  3151,  3154,  3156,  3158,  3160,  3164,  3167,  3170,
+  3172,  3174,  3176,  3183,  3194,  3198,  3203,  3207,  3212,  3214,
+  3218,  3221,  3223,  3227,  3229,  3230,  3233,  3235,  3241,  3256,
+  3262,  3268,  3282,  3284,  3288,  3300,  3306,  3317,  3324,  3330,
+  3332,  3333,  3334,  3342,  3351,  3352,  3356,  3359,  3365,  3371,
+  3374,  3376,  3378,  3380,  3384,  3388,  3392,  3395,  3400,  3403,
+  3405,  3407,  3409,  3411,  3413,  3415,  3417,  3421,  3425,  3429,
+  3433,  3434,  3436,  3438,  3440,  3442,  3444,  3446,  3448,  3450,
+  3458,  3460,  3461,  3462,  3465,  3473,  3478,  3485,  3487,  3492,
+  3494,  3497,  3511,  3514,  3517,  3526,  3538,  3549,  3569,  3579,
+  3582,  3590,  3602,  3605,  3608,  3611,  3627,  3630,  3641,  3642,
+  3646,  3661,  3680,  3692,  3706,  3720,  3733,  3752,  3770,  3789,
+  3797,  3818,  3836,  3849,  3850,  3853,  3853,  3856,  3856,  3859,
+  3859,  3865,  3871,  3874,  3879,  3886,  3895,  3904,  3913,  3921,
+  3934,  3936,  3940,  3942,  3945,  3952,  3955,  3963,  3979,  3990,
+  4002,  4004,  4007,  4017,  4027,  4038,  4040,  4042,  4045,  4062,
+  4068,  4076,  4078,  4080,  4084,  4087,  4088,  4096,  4100,  4104,
+  4107,  4108,  4114,  4117,  4120,  4122,  4126,  4131,  4134,  4144,
+  4149,  4150,  4158,  4164,  4169,  4173,  4178,  4182,  4186,  4190,
+  4195,  4206,  4220,  4224,  4227,  4229,  4233,  4237,  4240,  4243,
+  4245,  4249,  4251,  4258,  4265,  4268,  4271,  4275,  4279,  4285,
+  4289,  4294,  4296,  4299,  4304,  4310,  4321,  4324,  4326,  4330,
+  4335,  4337,  4344,  4347,  4349,  4351,  4357,  4362,  4365,  4367,
+  4369,  4371,  4373,  4375,  4377,  4379,  4381,  4383,  4385,  4387,
+  4389,  4391,  4393,  4395,  4397,  4399,  4401,  4403,  4405,  4407,
+  4409,  4411,  4413,  4415,  4417,  4419,  4421,  4423,  4425,  4427,
+  4430,  4432
 };
 #endif
 
@@ -739,52 +748,53 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "END_OF_LINE","END_OF_SAVED_INPUT","')'","'}'","'!'","']'","program","extdefs",
 "@1","extdefs_opt",".hush_warning",".warning_ok","extension","asm_keyword","lang_extdef",
 "@2","extdef","@3","@4","using_decl","any_id","extern_lang_string","template_header",
-"@5","template_parm_list","template_type_parm","template_parm","template_def",
-"datadef","ctor_initializer_opt","maybe_return_init","eat_saved_input","fndef",
-"constructor_declarator","@6","@7","@8","@9","fn.def1","component_constructor_declarator",
-"fn.def2","return_id","return_init","base_init",".set_base_init","member_init_list",
-"member_init","identifier","notype_identifier","identifier_defn","explicit_instantiation",
-"@10","@11","@12","@13","@14","@15","@16","@17","begin_explicit_instantiation",
-"end_explicit_instantiation","template_type","self_template_type","template_close_bracket",
-"template_arg_list_opt","template_arg_list","template_arg","unop","expr","paren_expr_or_null",
-"paren_cond_or_null","xcond","condition","@18","compstmtend","already_scoped_stmt",
-"@19","nontrivial_exprlist","nonnull_exprlist","unary_expr","new_placement",
-"new_initializer","regcast_or_absdcl","cast_expr","expr_no_commas","notype_unqualified_id",
-"do_id","template_id","object_template_id","unqualified_id","expr_or_declarator",
-"notype_template_declarator","direct_notype_declarator","primary","@20","new",
-"delete","boolean.literal","string","nodecls","object","decl","declarator","fcast_or_absdcl",
-"type_id","typed_declspecs","typed_declspecs1","reserved_declspecs","declmods",
-"typed_typespecs","reserved_typespecquals","typespec","typespecqual_reserved",
-"initdecls","notype_initdecls","nomods_initdecls","maybeasm","initdcl0","@21",
-"initdcl","@22","notype_initdcl0","@23","nomods_initdcl0","@24","maybe_attribute",
-"attributes","attribute","attribute_list","attrib","any_word","identifiers_or_typenames",
-"maybe_init","init","initlist","fn.defpen","pending_inline","pending_inlines",
-"defarg_again","pending_defargs","structsp","@25","@26","@27","@28","maybecomma",
-"maybecomma_warn","aggr","named_class_head_sans_basetype","named_class_head_sans_basetype_defn",
-"named_complex_class_head_sans_basetype","do_xref_defn","named_class_head","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",
-"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",
-"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",
-"complex_type_name","ptr_to_mem","global_scope","new_declarator","direct_new_declarator",
-"absdcl","direct_abstract_declarator","stmts","errstmt",".pushlevel",".poplevel",
-"maybe_label_decls","label_decls","label_decl","compstmt_or_error","compstmt",
-"@29","simple_if","@30","@31","implicitly_scoped_stmt","@32","stmt","simple_stmt",
-"@33","@34","@35","@36","@37","@38","@39","@40","@41","@42","@43","@44","@45",
-"@46","@47","function_try_block","@48","@49","try_block","@50","@51","handler_seq",
-"handler","@52","@53","@54","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","@55","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
+"@5","template_parm_list","maybe_identifier","template_type_parm","template_template_parm",
+"template_parm","template_def","datadef","ctor_initializer_opt","maybe_return_init",
+"eat_saved_input","fndef","constructor_declarator","@6","@7","@8","@9","fn.def1",
+"component_constructor_declarator","fn.def2","return_id","return_init","base_init",
+".set_base_init","member_init_list","member_init","identifier","notype_identifier",
+"identifier_defn","explicit_instantiation","@10","@11","@12","@13","@14","@15",
+"@16","@17","begin_explicit_instantiation","end_explicit_instantiation","template_type",
+"self_template_type","template_close_bracket","template_arg_list_opt","template_arg_list",
+"template_arg","@18","template_arg1","unop","expr","paren_expr_or_null","paren_cond_or_null",
+"xcond","condition","@19","compstmtend","already_scoped_stmt","@20","nontrivial_exprlist",
+"nonnull_exprlist","unary_expr","new_placement","new_initializer","regcast_or_absdcl",
+"cast_expr","expr_no_commas","notype_unqualified_id","do_id","template_id","object_template_id",
+"unqualified_id","expr_or_declarator","notype_template_declarator","direct_notype_declarator",
+"primary","@21","new","delete","boolean.literal","string","nodecls","object",
+"decl","declarator","fcast_or_absdcl","type_id","typed_declspecs","typed_declspecs1",
+"reserved_declspecs","declmods","typed_typespecs","reserved_typespecquals","typespec",
+"typespecqual_reserved","initdecls","notype_initdecls","nomods_initdecls","maybeasm",
+"initdcl0","@22","initdcl","@23","notype_initdcl0","@24","nomods_initdcl0","@25",
+"maybe_attribute","attributes","attribute","attribute_list","attrib","any_word",
+"identifiers_or_typenames","maybe_init","init","initlist","fn.defpen","pending_inline",
+"pending_inlines","defarg_again","pending_defargs","structsp","@26","@27","@28",
+"@29","maybecomma","maybecomma_warn","aggr","named_class_head_sans_basetype",
+"named_class_head_sans_basetype_defn","named_complex_class_head_sans_basetype",
+"do_xref_defn","named_class_head","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","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","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","complex_type_name",
+"ptr_to_mem","global_scope","new_declarator","direct_new_declarator","absdcl",
+"direct_abstract_declarator","stmts","errstmt",".pushlevel",".poplevel","maybe_label_decls",
+"label_decls","label_decl","compstmt_or_error","compstmt","@30","simple_if",
+"@31","@32","implicitly_scoped_stmt","@33","stmt","simple_stmt","@34","@35",
+"@36","@37","@38","@39","@40","@41","@42","@43","@44","@45","@46","@47","@48",
+"function_try_block","@49","@50","try_block","@51","@52","handler_seq","handler",
+"@53","@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
 
@@ -793,86 +803,87 @@ static const short yyr1[] = {     0,
    121,   121,   123,   122,   124,   124,   124,   124,   124,   124,
    124,   125,   124,   126,   124,   124,   124,   124,   124,   127,
    127,   127,   128,   128,   128,   128,   129,   129,   131,   130,
-   130,   132,   132,   133,   133,   133,   133,   134,   134,   134,
-   134,   135,   135,   136,   136,   136,   136,   136,   136,   136,
-   136,   136,   137,   137,   138,   138,   138,   139,   139,   140,
-   140,   140,   142,   141,   141,   143,   141,   141,   144,   141,
-   141,   145,   141,   141,   146,   146,   146,   146,   146,   147,
-   147,   147,   147,   148,   148,   148,   148,   148,   148,   148,
-   148,   149,   150,   150,   150,   151,   152,   153,   153,   153,
-   153,   154,   154,   154,   154,   154,   154,   154,   154,   155,
-   155,   155,   155,   155,   156,   156,   156,   157,   157,   157,
-   159,   158,   160,   158,   161,   158,   162,   158,   163,   158,
-   164,   158,   165,   158,   166,   158,   167,   168,   169,   169,
-   169,   170,   171,   171,   172,   172,   173,   173,   174,   174,
-   175,   175,   175,   175,   175,   176,   176,   177,   177,   178,
-   178,   179,   179,   179,   181,   180,   180,   182,   182,   182,
-   182,   184,   183,   183,   185,   185,   185,   185,   186,   186,
-   187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-   187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-   187,   187,   187,   187,   188,   188,   189,   189,   189,   189,
-   190,   190,   191,   191,   191,   192,   192,   192,   192,   192,
-   192,   192,   192,   192,   192,   192,   192,   192,   192,   192,
-   192,   192,   192,   192,   192,   192,   192,   192,   192,   192,
-   193,   193,   193,   193,   193,   193,   194,   195,   195,   196,
-   196,   196,   197,   197,   197,   198,   198,   198,   198,   199,
-   199,   200,   200,   200,   200,   201,   201,   201,   201,   201,
-   201,   201,   202,   201,   201,   201,   201,   201,   201,   201,
-   201,   201,   201,   201,   201,   201,   201,   201,   201,   201,
-   201,   201,   201,   201,   201,   201,   201,   201,   201,   201,
-   201,   201,   201,   201,   201,   203,   203,   204,   204,   205,
-   205,   206,   206,   207,   208,   208,   209,   209,   209,   209,
-   209,   209,   210,   210,   211,   211,   212,   212,   212,   212,
-   212,   213,   213,   214,   214,   214,   214,   214,   214,   215,
-   215,   215,   215,   215,   216,   216,   216,   216,   216,   216,
-   217,   217,   217,   217,   218,   218,   219,   219,   219,   219,
-   219,   219,   219,   220,   220,   220,   221,   221,   222,   222,
-   223,   223,   224,   224,   226,   225,   225,   228,   227,   227,
-   230,   229,   229,   232,   231,   231,   233,   233,   234,   234,
-   235,   236,   236,   237,   237,   237,   237,   237,   238,   238,
-   238,   238,   239,   239,   240,   240,   241,   241,   241,   241,
-   241,   242,   242,   242,   242,   242,   242,   243,   244,   244,
-   244,   245,   245,   246,   246,   247,   247,   247,   249,   248,
-   248,   250,   248,   248,   248,   248,   248,   251,   252,   248,
-   248,   253,   253,   254,   254,   255,   255,   255,   255,   255,
-   256,   257,   258,   258,   258,   258,   258,   259,   260,   260,
-   260,   261,   262,   262,   263,   263,   263,   264,   264,   265,
-   265,   266,   266,   266,   266,   267,   267,   267,   267,   268,
-   269,   270,   270,   270,   270,   271,   271,   272,   272,   272,
-   272,   272,   272,   272,   272,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   273,   274,   274,   274,   275,   275,
-   275,   276,   276,   277,   277,   278,   278,   279,   279,   279,
-   279,   280,   280,   281,   281,   281,   282,   282,   283,   283,
-   284,   284,   284,   285,   285,   286,   286,   287,   288,   289,
-   289,   289,   289,   290,   290,   290,   290,   290,   290,   291,
-   291,   292,   292,   292,   293,   294,   294,   294,   294,   294,
-   294,   295,   295,   295,   295,   295,   295,   296,   296,   296,
-   296,   296,   296,   297,   297,   297,   297,   297,   297,   298,
-   298,   299,   299,   300,   300,   301,   301,   301,   302,   302,
-   302,   303,   303,   304,   304,   304,   304,   305,   305,   306,
-   307,   307,   308,   308,   308,   308,   308,   308,   309,   309,
-   309,   310,   310,   311,   312,   312,   312,   312,   312,   312,
-   312,   313,   313,   314,   314,   314,   314,   314,   314,   314,
-   314,   314,   314,   314,   315,   315,   315,   315,   315,   315,
-   315,   315,   315,   315,   315,   316,   316,   316,   316,   317,
-   318,   319,   320,   320,   321,   321,   322,   323,   323,   325,
-   324,   327,   328,   326,   329,   330,   329,   331,   331,   332,
-   332,   333,   334,   332,   332,   335,   336,   332,   337,   338,
-   332,   339,   340,   341,   342,   332,   343,   344,   332,   345,
-   332,   346,   332,   347,   332,   332,   332,   332,   332,   332,
-   332,   332,   332,   332,   332,   332,   332,   332,   332,   349,
-   350,   348,   352,   353,   351,   354,   354,   356,   357,   358,
-   355,   359,   359,   360,   360,   361,   361,   361,   361,   362,
-   362,   362,   363,   363,   364,   364,   364,   365,   365,   366,
-   366,   367,   368,   368,   369,   369,   369,   370,   370,   370,
-   370,   370,   370,   370,   370,   370,   370,   372,   371,   373,
-   373,   374,   374,   374,   374,   374,   375,   375,   376,   376,
-   376,   376,   376,   376,   377,   377,   378,   378,   379,   380,
-   380,   381,   381,   381,   382,   383,   383,   384,   384,   384,
-   384,   385,   386,   386,   386,   386,   386,   386,   386,   386,
-   386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
-   386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
-   386,   386,   386,   386,   386,   386,   386
+   130,   132,   132,   133,   133,   134,   134,   135,   136,   136,
+   136,   136,   136,   136,   137,   137,   138,   138,   138,   138,
+   138,   138,   138,   138,   138,   139,   139,   140,   140,   140,
+   141,   141,   142,   142,   142,   144,   143,   143,   145,   143,
+   143,   146,   143,   143,   147,   143,   143,   148,   148,   148,
+   148,   148,   149,   149,   149,   149,   150,   150,   150,   150,
+   150,   150,   150,   150,   151,   152,   152,   152,   153,   154,
+   155,   155,   155,   155,   156,   156,   156,   156,   156,   156,
+   156,   156,   157,   157,   157,   157,   157,   158,   158,   158,
+   159,   159,   159,   161,   160,   162,   160,   163,   160,   164,
+   160,   165,   160,   166,   160,   167,   160,   168,   160,   169,
+   170,   171,   171,   171,   172,   173,   173,   174,   174,   175,
+   175,   177,   176,   178,   178,   179,   179,   179,   179,   179,
+   180,   180,   181,   181,   182,   182,   183,   183,   183,   185,
+   184,   184,   186,   186,   186,   186,   188,   187,   187,   189,
+   189,   189,   189,   190,   190,   191,   191,   191,   191,   191,
+   191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
+   191,   191,   191,   191,   191,   191,   191,   191,   191,   192,
+   192,   193,   193,   193,   193,   194,   194,   195,   195,   195,
+   196,   196,   196,   196,   196,   196,   196,   196,   196,   196,
+   196,   196,   196,   196,   196,   196,   196,   196,   196,   196,
+   196,   196,   196,   196,   196,   197,   197,   197,   197,   197,
+   197,   198,   199,   199,   200,   200,   200,   201,   201,   201,
+   202,   202,   202,   202,   203,   203,   204,   204,   204,   204,
+   205,   205,   205,   205,   205,   205,   205,   206,   205,   205,
+   205,   205,   205,   205,   205,   205,   205,   205,   205,   205,
+   205,   205,   205,   205,   205,   205,   205,   205,   205,   205,
+   205,   205,   205,   205,   205,   205,   205,   205,   205,   205,
+   207,   207,   208,   208,   209,   209,   210,   210,   211,   212,
+   212,   213,   213,   213,   213,   213,   213,   214,   214,   215,
+   215,   216,   216,   216,   216,   216,   217,   217,   218,   218,
+   218,   218,   218,   218,   219,   219,   219,   219,   219,   220,
+   220,   220,   220,   220,   220,   221,   221,   221,   221,   222,
+   222,   223,   223,   223,   223,   223,   223,   223,   224,   224,
+   224,   225,   225,   226,   226,   227,   227,   228,   228,   230,
+   229,   229,   232,   231,   231,   234,   233,   233,   236,   235,
+   235,   237,   237,   238,   238,   239,   240,   240,   241,   241,
+   241,   241,   241,   242,   242,   242,   242,   243,   243,   244,
+   244,   245,   245,   245,   245,   245,   246,   246,   246,   246,
+   246,   246,   247,   248,   248,   248,   249,   249,   250,   250,
+   251,   251,   251,   253,   252,   252,   254,   252,   252,   252,
+   252,   252,   255,   256,   252,   252,   257,   257,   258,   258,
+   259,   259,   259,   259,   259,   260,   261,   262,   262,   262,
+   262,   262,   263,   264,   264,   264,   265,   266,   266,   267,
+   267,   267,   268,   268,   269,   269,   270,   270,   270,   270,
+   271,   271,   271,   271,   272,   273,   274,   274,   274,   274,
+   275,   275,   276,   276,   276,   276,   276,   276,   276,   276,
+   277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
+   278,   278,   278,   279,   279,   279,   280,   280,   281,   281,
+   282,   282,   283,   283,   283,   283,   284,   284,   285,   285,
+   285,   286,   286,   287,   287,   288,   288,   288,   289,   289,
+   290,   290,   291,   292,   293,   293,   293,   293,   294,   294,
+   294,   294,   294,   294,   295,   295,   296,   296,   296,   297,
+   298,   298,   298,   298,   298,   298,   299,   299,   299,   299,
+   299,   299,   300,   300,   300,   300,   300,   300,   301,   301,
+   301,   301,   301,   301,   302,   302,   303,   303,   304,   304,
+   305,   305,   305,   306,   306,   306,   307,   307,   308,   308,
+   308,   308,   309,   309,   310,   311,   311,   312,   312,   312,
+   312,   312,   312,   313,   313,   313,   314,   314,   315,   316,
+   316,   316,   316,   316,   316,   316,   317,   317,   318,   318,
+   318,   318,   318,   318,   318,   318,   318,   318,   318,   319,
+   319,   319,   319,   319,   319,   319,   319,   319,   319,   319,
+   320,   320,   320,   320,   321,   322,   323,   324,   324,   325,
+   325,   326,   327,   327,   329,   328,   331,   332,   330,   333,
+   334,   333,   335,   335,   336,   336,   337,   338,   336,   336,
+   339,   340,   336,   341,   342,   336,   343,   344,   345,   346,
+   336,   347,   348,   336,   349,   336,   350,   336,   351,   336,
+   336,   336,   336,   336,   336,   336,   336,   336,   336,   336,
+   336,   336,   336,   336,   353,   354,   352,   356,   357,   355,
+   358,   358,   360,   361,   362,   359,   363,   363,   364,   364,
+   365,   365,   365,   365,   366,   366,   366,   367,   367,   368,
+   368,   368,   369,   369,   370,   370,   371,   372,   372,   373,
+   373,   373,   374,   374,   374,   374,   374,   374,   374,   374,
+   374,   374,   376,   375,   377,   377,   378,   378,   378,   378,
+   378,   379,   379,   380,   380,   380,   380,   380,   380,   381,
+   381,   382,   382,   383,   384,   384,   385,   385,   385,   386,
+   387,   387,   388,   388,   388,   388,   389,   390,   390,   390,
+   390,   390,   390,   390,   390,   390,   390,   390,   390,   390,
+   390,   390,   390,   390,   390,   390,   390,   390,   390,   390,
+   390,   390,   390,   390,   390,   390,   390,   390,   390,   390,
+   390,   390
 };
 
 static const short yyr2[] = {     0,
@@ -880,2274 +891,2258 @@ static const short yyr2[] = {     0,
      1,     1,     0,     2,     2,     1,     1,     5,     4,     5,
      4,     0,     6,     0,     5,     5,     2,     4,     2,     2,
      3,     3,     1,     1,     2,     2,     1,     2,     0,     5,
-     3,     1,     3,     1,     2,     1,     2,     1,     3,     1,
-     3,     2,     2,     2,     3,     3,     2,     2,     2,     2,
-     2,     1,     1,     1,     0,     1,     2,     0,     1,     4,
-     3,     3,     0,     8,     5,     0,     9,     6,     0,     8,
-     5,     0,     9,     6,     2,     2,     1,     2,     1,     6,
-     4,     6,     4,     2,     1,     2,     2,     1,     2,     1,
-     2,     2,     2,     4,     2,     3,     0,     0,     1,     3,
-     2,     3,     1,     4,     2,     4,     2,     4,     2,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     0,     6,     0,     6,     0,     5,     0,     5,     0,     7,
-     0,     7,     0,     6,     0,     6,     0,     0,     4,     4,
-     1,     4,     1,     1,     0,     1,     1,     3,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-     3,     0,     1,     1,     0,     7,     1,     1,     3,     4,
-     3,     0,     3,     1,     3,     3,     3,     3,     1,     1,
-     1,     2,     2,     2,     2,     2,     2,     2,     4,     2,
-     4,     2,     3,     3,     4,     4,     5,     5,     6,     2,
-     4,     5,     2,     2,     3,     3,     3,     1,     3,     2,
-     3,     4,     1,     2,     5,     1,     3,     3,     3,     3,
+     3,     1,     3,     1,     0,     2,     2,     3,     1,     3,
+     1,     3,     1,     3,     2,     2,     2,     3,     3,     2,
+     2,     2,     2,     2,     1,     1,     1,     0,     1,     2,
+     0,     1,     4,     3,     3,     0,     8,     5,     0,     9,
+     6,     0,     8,     5,     0,     9,     6,     2,     2,     1,
+     2,     1,     6,     4,     6,     4,     2,     1,     2,     2,
+     1,     2,     1,     2,     2,     2,     4,     2,     3,     0,
+     0,     1,     3,     2,     3,     1,     4,     2,     4,     2,
+     4,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     0,     6,     0,     6,     0,     5,     0,
+     5,     0,     7,     0,     7,     0,     6,     0,     6,     0,
+     0,     4,     4,     1,     4,     1,     1,     0,     1,     1,
+     3,     0,     2,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     3,     1,     3,     0,     1,     1,     0,
+     7,     1,     1,     3,     4,     3,     0,     3,     1,     3,
+     3,     3,     3,     1,     1,     1,     2,     2,     2,     2,
+     2,     2,     2,     4,     2,     4,     2,     3,     3,     4,
+     4,     5,     5,     6,     2,     4,     5,     2,     2,     3,
+     3,     3,     1,     3,     2,     3,     4,     1,     2,     5,
+     1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     3,     5,     3,     3,     1,     2,
-     3,     1,     1,     1,     1,     1,     0,     5,     5,     5,
-     5,     5,     1,     1,     1,     1,     2,     2,     3,     4,
-     4,     1,     1,     1,     3,     1,     1,     1,     1,     3,
-     3,     3,     0,     4,     4,     2,     4,     2,     2,     1,
-     4,     1,     7,     7,     7,     7,     4,     4,     2,     2,
-     1,     4,     2,     2,     5,     3,     2,     2,     5,     3,
-     5,     3,     4,     6,     2,     1,     2,     1,     2,     1,
-     1,     1,     2,     0,     2,     2,     3,     3,     3,     2,
-     2,     2,     1,     1,     1,     2,     2,     2,     2,     1,
-     1,     1,     1,     2,     2,     3,     3,     3,     4,     1,
-     2,     2,     2,     1,     1,     1,     2,     2,     2,     1,
-     1,     2,     2,     3,     1,     2,     1,     1,     1,     4,
-     4,     4,     4,     1,     1,     1,     1,     3,     1,     3,
-     1,     3,     0,     4,     0,     6,     3,     0,     6,     3,
-     0,     6,     3,     0,     6,     3,     0,     1,     1,     2,
-     6,     1,     3,     0,     1,     4,     6,     4,     1,     1,
-     1,     1,     1,     3,     0,     2,     1,     2,     3,     4,
-     1,     1,     3,     4,     6,     3,     5,     1,     4,     3,
-     3,     0,     3,     3,     3,     0,     2,     2,     0,     7,
-     4,     0,     6,     3,     2,     2,     2,     0,     0,     9,
-     1,     0,     1,     0,     1,     1,     2,     2,     2,     2,
-     2,     2,     3,     4,     3,     2,     3,     0,     1,     3,
-     2,     2,     1,     1,     0,     2,     3,     1,     4,     1,
-     3,     1,     1,     4,     4,     2,     2,     3,     3,     1,
-     0,     1,     2,     4,     3,     1,     2,     2,     2,     2,
-     2,     2,     2,     1,     2,     2,     2,     4,     4,     2,
-     1,     5,     4,     1,     2,     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,     6,     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,     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,     2,     2,     2,     2,     1,     2,     2,
-     1,     2,     2,     2,     2,     2,     2,     2,     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,     0,     0,     1,     1,     2,     3,     1,     2,     0,
-     5,     0,     0,     6,     1,     0,     4,     1,     1,     1,
-     2,     0,     0,     6,     1,     0,     0,     7,     0,     0,
-     7,     0,     0,     0,     0,    14,     0,     0,     9,     0,
-     5,     0,     7,     0,     4,     2,     2,     2,     3,     6,
-     8,    10,    12,     4,     3,     2,     2,     1,     1,     0,
-     0,     6,     0,     0,     5,     1,     2,     0,     0,     0,
-     8,     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,     1,     2,     2,     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,
+     5,     3,     3,     1,     2,     3,     1,     1,     1,     1,
+     1,     0,     5,     5,     5,     5,     5,     1,     1,     1,
+     1,     2,     2,     3,     4,     4,     1,     1,     1,     3,
+     1,     1,     1,     1,     3,     3,     3,     0,     4,     4,
+     2,     4,     2,     2,     1,     4,     1,     7,     7,     7,
+     7,     4,     4,     2,     2,     1,     4,     2,     2,     5,
+     3,     2,     2,     5,     3,     5,     3,     4,     6,     2,
+     1,     2,     1,     2,     1,     1,     1,     2,     0,     2,
+     2,     3,     3,     3,     2,     2,     2,     1,     1,     1,
+     2,     2,     2,     2,     1,     1,     1,     1,     2,     2,
+     3,     3,     3,     4,     1,     2,     2,     2,     1,     1,
+     1,     2,     2,     2,     1,     1,     2,     2,     3,     1,
+     2,     1,     1,     1,     4,     4,     4,     4,     1,     1,
+     1,     1,     3,     1,     3,     1,     3,     0,     4,     0,
+     6,     3,     0,     6,     3,     0,     6,     3,     0,     6,
+     3,     0,     1,     1,     2,     6,     1,     3,     0,     1,
+     4,     6,     4,     1,     1,     1,     1,     1,     3,     0,
+     2,     1,     2,     3,     4,     1,     1,     3,     4,     6,
+     3,     5,     1,     4,     3,     3,     0,     3,     3,     3,
+     0,     2,     2,     0,     7,     4,     0,     6,     3,     2,
+     2,     2,     0,     0,     9,     1,     0,     1,     0,     1,
+     1,     2,     2,     2,     2,     2,     2,     3,     4,     3,
+     2,     3,     0,     1,     3,     2,     2,     1,     1,     0,
+     2,     3,     1,     4,     1,     3,     1,     1,     4,     4,
+     2,     2,     3,     3,     1,     0,     1,     2,     4,     3,
+     1,     2,     2,     2,     2,     2,     2,     2,     1,     2,
+     2,     2,     4,     4,     2,     1,     5,     4,     1,     2,
+     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,     6,     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,     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,     2,     2,
+     2,     2,     1,     2,     2,     1,     2,     2,     2,     2,
+     2,     2,     2,     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,     0,     0,     1,     1,
+     2,     3,     1,     2,     0,     5,     0,     0,     6,     1,
+     0,     4,     1,     1,     1,     2,     0,     0,     6,     1,
+     0,     0,     7,     0,     0,     7,     0,     0,     0,     0,
+    14,     0,     0,     9,     0,     5,     0,     7,     0,     4,
+     2,     2,     2,     3,     6,     8,    10,    12,     4,     3,
+     2,     2,     1,     1,     0,     0,     6,     0,     0,     5,
+     1,     2,     0,     0,     0,     8,     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,     1,     2,     2,
+     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,     2,     2,     2,     2,     3,     2,     2,     2,     2,
-     3,     2,     2,     4,     4,     3,     2
+     3,     2,     2,     2,     2,     3,     2,     2,     4,     4,
+     3,     2
 };
 
 static const short yydefact[] = {     3,
-    13,    13,     5,     0,     4,     0,   254,   599,   600,     0,
-   356,   368,   546,     0,    11,    12,     0,     0,     0,    10,
-   456,   802,     0,     0,     0,   147,   624,   255,   256,    62,
-     0,     0,   789,     0,    37,     0,     0,    14,     0,     8,
-     0,    17,    16,    68,    89,    65,     0,   601,   151,   273,
-   252,   274,   577,     0,   343,     0,   342,   361,     0,   381,
-   360,   399,   367,     0,   469,   468,   475,   474,   473,   451,
-   355,   562,   369,   563,    87,   272,   588,   560,     0,   602,
-   544,     0,     0,   253,    60,    61,   155,   604,   155,   605,
-   155,   257,   147,   120,   121,   122,   123,   124,   442,   445,
-     0,   620,     0,   446,     0,     0,     0,     0,   121,   122,
-   123,   124,    24,     0,     0,     0,     0,     0,     0,     0,
-   447,   608,     0,   611,     0,     0,     0,     0,     0,     0,
-    30,     0,     0,    39,     0,   155,   606,     0,     0,   575,
-     0,     0,     0,   574,     0,     0,     0,     0,   273,     0,
-   548,     0,   272,   544,    29,     0,    27,     3,    38,     0,
-    53,    52,    69,    15,     0,     0,   415,    66,    58,   607,
-   548,     0,   544,    59,     0,     0,     0,    85,     0,   377,
-   333,   559,   334,   571,     0,   544,   358,   357,    57,    88,
-   344,     0,   379,   359,    86,   350,   374,   375,   345,   363,
-   365,   354,   376,     0,    54,   400,   457,   458,   459,   460,
-   472,   129,   128,   130,   461,   462,   466,     0,     0,   475,
-   789,   471,   490,   491,   547,   362,     0,     0,   397,   600,
-     0,   622,   151,   592,   593,   589,   565,   603,     0,   564,
-   561,     0,   837,   833,   832,   830,   812,   817,   818,     0,
-   824,   823,   809,   810,   808,   827,   816,   813,   814,   815,
-   819,   820,   806,   807,   803,   804,   805,   829,   821,   822,
-   811,   828,     0,   825,   732,   361,   733,   798,   257,   254,
-   546,   277,   322,     0,     0,     0,     0,   318,   316,   290,
-   320,   321,     0,     0,     0,     0,     0,   256,   249,     0,
-     0,   162,   161,     0,   163,   164,     0,     0,   165,     0,
-     0,   156,   157,     0,   223,     0,   226,   160,   276,   191,
-     0,     0,   278,   279,     0,   159,   340,   361,   341,   594,
-   301,   292,     0,     0,     0,     0,   155,     0,   444,     0,
-   439,   621,   619,     0,   166,   167,     0,     0,     0,   404,
-     3,    22,     0,   617,   613,   614,   616,   618,   615,   120,
-   121,   122,   123,   124,   610,   612,   609,   264,   265,     0,
-   263,    33,    34,     0,   591,   590,    32,    31,    41,     0,
-   356,   137,     0,     0,   361,   135,     0,     0,   573,     0,
-   572,   251,   268,     0,   581,   267,     0,   580,     0,   275,
-   585,     0,     0,    13,     0,   147,     9,     9,   102,    72,
-   107,   720,     0,    64,    63,    71,   105,     0,     0,   103,
-    67,   587,     0,     0,   552,     0,   792,     0,   557,     0,
-   556,     0,     0,     0,     0,   544,   397,     0,    56,   548,
-   544,   570,     0,   347,   348,     0,    55,   397,   352,   351,
-   353,   346,   366,   383,   382,   463,   467,   465,     0,   470,
-   476,     0,     0,   364,     0,   396,   398,   544,    73,     0,
-     0,     0,   544,    79,   545,   576,   600,   623,   151,     0,
-     0,   826,   831,   363,   544,   544,     0,   544,   836,   155,
-     0,     0,     0,   198,     0,     0,   200,   213,   214,     0,
-     0,     0,     0,     0,   250,   197,   194,   193,   195,     0,
-     0,     0,     0,     0,   276,     0,     0,     0,   192,   153,
-   154,   270,     0,   196,     0,     0,   224,     0,     0,     0,
+    13,    13,     5,     0,     4,     0,   259,   604,   605,     0,
+   361,   373,   551,     0,    11,    12,     0,     0,     0,    10,
+   461,   807,     0,     0,     0,   150,   629,   260,   261,    65,
+     0,     0,   794,     0,    37,     0,     0,    14,     0,     8,
+     0,    17,    16,    71,    92,    68,     0,   606,   154,   278,
+   257,   279,   582,     0,   348,     0,   347,   366,     0,   386,
+   365,   404,   372,     0,   474,   473,   480,   479,   478,   456,
+   360,   567,   374,   568,    90,   277,   593,   565,     0,   607,
+   549,     0,     0,   258,    63,    64,   162,   609,   162,   610,
+   162,   262,   150,   123,   124,   125,   126,   127,   447,   450,
+     0,   625,     0,   451,     0,     0,     0,     0,   124,   125,
+   126,   127,    24,     0,     0,     0,     0,     0,     0,     0,
+   452,   613,     0,   616,     0,     0,     0,     0,     0,     0,
+    30,     0,     0,    39,     0,   162,   611,   162,     0,   580,
+     0,     0,     0,   579,     0,     0,     0,     0,   278,     0,
+   553,     0,   277,   549,    29,     0,    27,     3,    38,     0,
+    56,    55,    72,    15,     0,     0,   420,    69,    61,   612,
+   553,     0,   549,    62,     0,     0,     0,    88,     0,   382,
+   338,   564,   339,   576,     0,   549,   363,   362,    60,    91,
+   349,     0,   384,   364,    89,   355,   379,   380,   350,   368,
+   370,   359,   381,     0,    57,   405,   462,   463,   464,   465,
+   477,   132,   131,   133,   466,   467,   471,     0,     0,   480,
+   794,   476,   495,   496,   552,   367,     0,     0,   402,   605,
+     0,   627,   154,   597,   598,   594,   570,   608,     0,   569,
+   566,     0,   842,   838,   837,   835,   817,   822,   823,     0,
+   829,   828,   814,   815,   813,   832,   821,   818,   819,   820,
+   824,   825,   811,   812,   808,   809,   810,   834,   826,   827,
+   816,   833,     0,   830,   737,   366,   738,   803,   262,     0,
+   159,   160,     0,     0,     0,   162,     0,   449,     0,   444,
+   626,   624,   259,   551,   282,   327,     0,     0,     0,     0,
+   323,   321,   295,   325,   326,     0,     0,     0,     0,     0,
+   261,   254,     0,     0,   167,   166,     0,   168,   169,     0,
+     0,   170,     0,     0,     0,   171,   228,     0,   231,   172,
+   281,   196,     0,     0,   283,   284,     0,     0,   345,   366,
+   346,   599,   306,   297,     0,     0,     0,     0,   409,     3,
+    22,     0,   622,   618,   619,   621,   623,   620,   123,   124,
+   125,   126,   127,   615,   617,   614,   269,   270,     0,   268,
+    33,    34,     0,   596,   595,    32,    31,    41,     0,   361,
+   140,     0,     0,   366,   138,     0,     0,   578,     0,   577,
+   256,   273,     0,   586,   272,     0,   585,     0,   280,   590,
+     0,     0,    13,     0,   150,     9,     9,   105,    75,   110,
+   725,     0,    67,    66,    74,   108,     0,     0,   106,    70,
+   592,     0,     0,   557,     0,   797,     0,   562,     0,   561,
+     0,     0,     0,     0,   549,   402,     0,    59,   553,   549,
+   575,     0,   352,   353,     0,    58,   402,   357,   356,   358,
+   351,   371,   388,   387,   468,   472,   470,     0,   475,   481,
+     0,     0,   369,     0,   401,   403,   549,    76,     0,     0,
+     0,   549,    82,   550,   581,   605,   628,   154,     0,     0,
+   831,   836,   368,   549,   549,     0,   549,   841,   162,   156,
+   157,   275,   162,   163,   165,   164,   153,   155,     0,   148,
+     0,   366,   146,   544,   459,   542,   446,     0,     0,     0,
+     0,   203,     0,     0,   205,   218,   219,     0,     0,     0,
+     0,     0,   255,   202,   199,   198,   200,     0,     0,     0,
+     0,     0,   281,     0,     0,     0,   197,   201,   375,     0,
+     0,     0,   229,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
-   288,   289,   326,   325,     0,     0,     0,     0,     0,   202,
-   542,     0,   210,   323,   315,     0,   789,   304,   307,   308,
-     0,     0,   335,   641,   637,   646,     0,   548,   544,   544,
-   544,   337,   644,     0,   598,   339,     0,     0,   338,   303,
-     0,   299,   317,   319,   595,     0,   300,   150,   152,     0,
-   145,     0,   361,   143,   539,   454,   537,   441,     0,   370,
-     0,     0,   371,   372,   373,   410,   411,   412,   409,     0,
-   402,   405,     0,     3,     0,    28,    36,    35,    46,     0,
-    48,    42,   788,   783,     0,   340,   361,    44,   341,   787,
-    50,   148,   133,   131,   148,   149,   271,   579,   578,   275,
-   582,     0,    19,    21,    68,   108,   324,     0,   670,    70,
-   668,   421,     0,   417,   416,   190,     0,   189,   549,   586,
-     0,   762,   763,     0,   757,   361,     0,   756,   758,   790,
-   772,     0,     0,   584,   555,   554,     0,     0,   569,     0,
-   387,   378,   568,     0,   792,   558,   349,   380,   393,   397,
-   464,   599,   600,   789,     0,   789,   601,   477,   478,   480,
-   789,   483,   482,     0,   511,   600,     0,     0,   504,     0,
-     0,   514,     0,   100,    95,     0,   151,   516,   519,     0,
-   496,     0,    98,     0,   397,     0,   394,   792,   755,   155,
-   155,   155,   792,   755,   544,    76,   544,    82,   835,   834,
-   798,   798,   798,     0,     0,     0,     0,   598,     0,     0,
-     0,     0,   361,     0,     0,     0,   282,     0,   280,   281,
-     0,   221,   158,   254,   599,   600,   255,   256,     0,     0,
-   422,   452,     0,   248,   247,   747,   746,     0,   245,   244,
-   242,   243,   241,   240,   239,   236,   237,   238,   234,   235,
-   229,   230,   231,   232,   233,   227,   228,     0,     0,     0,
-     0,     0,     0,   204,   218,     0,     0,   203,   544,   544,
-     0,   544,   541,   631,     0,     0,     0,     0,   306,     0,
-   310,     0,   312,     0,   640,   639,   636,   635,   788,     0,
-     0,   655,     0,     0,   792,   336,   792,   642,   544,   755,
-   548,   641,   637,     0,     0,   544,     0,     0,     0,     0,
-     0,   258,   148,   141,   139,   148,     0,   455,     0,   454,
-   188,   187,   186,   185,   404,     0,     0,    25,     0,    26,
-    47,     0,    40,     0,   641,   637,     0,   779,   544,   782,
-   784,     0,   780,   781,   461,     0,   138,   148,   148,   136,
-    18,    20,   125,   113,   126,   127,     0,   106,   109,     0,
-     0,     0,     0,   669,   661,   418,     0,   104,   553,   550,
-   761,   778,   767,   765,     0,   551,   760,   777,   766,   764,
-   759,   791,   774,   785,   775,   768,   773,   794,     0,   385,
-   567,   566,   391,   390,   487,     0,   486,   789,   789,   789,
-     0,   544,   755,   510,   505,   101,   515,   397,   397,   502,
-   503,   500,   501,   544,   755,   254,   599,     0,   383,    96,
-   506,   517,   522,   523,   383,   383,     0,     0,   383,    94,
-   507,   520,   383,   497,   498,   499,   397,     0,   448,   384,
-     0,    75,     0,     0,     0,     0,    81,     0,   792,   755,
-   792,   755,   800,   799,   801,   259,   291,   199,   201,   297,
-   298,     0,     0,     0,     0,   281,   284,     0,     0,     0,
-     0,   222,     0,   285,   287,   216,   215,   206,     0,   205,
-   220,     0,     0,   628,   626,     0,   629,   548,   211,     0,
-     0,   313,     0,     0,     0,   638,   634,   645,   544,   654,
-   652,   653,   643,   792,     0,   650,     0,   596,   597,     0,
-   302,   146,   148,   148,   144,   540,   538,   443,     0,   403,
-   401,   254,     0,    23,    43,    49,   640,   636,   641,   637,
-     0,   560,     0,   544,   642,    51,   134,   132,     0,   111,
-     0,   115,     0,   117,     0,   119,     0,   721,   663,     0,
-   419,   641,   637,     0,   276,     0,   594,   786,     0,     0,
-   795,   796,     0,     0,     0,   388,     0,     0,     0,   489,
-   488,   481,   792,     0,   415,   415,   792,     0,     0,     0,
-   397,   397,     0,   397,   397,     0,   397,     0,   415,     0,
-   436,   395,   544,   261,   260,   262,   544,    78,     0,    84,
-     0,     0,     0,     0,     0,     0,   426,     0,     0,   423,
-   225,   246,     0,   207,   208,   217,   219,   627,   625,   632,
-   630,     0,   212,     0,   305,   309,   311,   792,   648,   544,
-   649,   142,   140,   440,     0,   406,   408,   640,   636,   565,
-   642,   112,   110,     0,     0,     0,     0,     0,   178,   662,
-     0,   664,   665,   420,     0,   597,   776,   770,   771,   769,
-     0,   793,   386,   392,     0,   484,   485,   479,    91,   544,
-   509,   513,    93,   544,   397,   397,   531,   415,   254,   599,
-     0,   518,   524,   525,   383,   383,   415,   415,     0,   415,
-   521,   508,     0,   792,   792,   544,   544,     0,     0,     0,
-     0,   424,     0,     0,     0,   209,   633,   314,   651,   792,
-     0,   114,   116,   118,   728,   722,   726,   413,     0,   671,
-     0,   254,   599,   600,   672,   686,   689,   692,   661,     0,
-     0,     0,     0,     0,     0,   255,   718,   723,     0,   743,
-     0,   680,     0,     0,   361,     0,   657,   678,   685,   656,
-   679,   719,     0,   666,   281,   797,   389,   792,   792,   530,
-   527,   529,     0,     0,   397,   397,   397,   526,   528,   512,
-   438,     0,   437,   432,    74,    80,   792,   792,   293,   294,
-   295,   296,     0,   427,   543,   647,   407,   661,   727,     0,
-   667,   660,   181,   736,   738,   739,   661,   661,   661,     0,
-     0,     0,   704,   706,   707,   708,     0,     0,     0,   737,
-     0,   332,   744,     0,   681,   330,   383,     0,   331,     0,
-   383,     0,     0,     0,   179,   659,   658,   682,   717,   716,
-    90,    92,   397,   397,   536,   415,   415,     0,     0,   450,
-    77,    83,   425,     0,   414,     0,     0,   676,   675,     0,
-     0,     0,     0,   700,     0,   709,     0,   715,   724,     0,
-   328,   329,     0,     0,     0,   327,   180,   661,   535,   533,
-   532,   534,   435,   434,   428,    65,    68,     0,   729,   170,
-     0,   673,   687,     0,   690,   663,   741,   693,     0,   177,
-     0,   361,     0,     0,     0,   705,   714,     0,     0,   683,
-     0,   433,     0,     0,     0,     0,   661,     0,   662,     0,
-   742,   661,   740,   697,   383,   702,   701,   725,   748,     0,
-   662,   431,     0,   430,   734,   735,   730,   171,   674,   182,
-   662,   184,   677,   168,     0,     0,     0,   661,   397,     0,
-     0,     0,   749,   750,   710,   684,   429,   662,   663,   688,
-     0,   691,   174,     0,   173,   698,     0,   703,     0,   748,
-     0,     0,   731,   183,   169,   694,   662,   175,     0,     0,
-   711,   751,     0,   699,     0,   752,     0,     0,     0,   176,
-   753,     0,   712,   695,     0,     0,     0,   754,   713,   662,
-   696,     0,     0,     0
+     0,     0,     0,     0,     0,     0,   291,   293,   294,   331,
+   330,     0,     0,     0,     0,     0,   207,   547,     0,   215,
+   328,   320,     0,   794,   309,   312,   313,     0,     0,   376,
+   340,   646,   642,   651,     0,   553,   549,   549,   549,   342,
+   649,     0,   603,   344,     0,     0,   343,   308,     0,   304,
+   322,   324,   600,     0,   305,   377,   378,   415,   416,   417,
+   414,     0,   407,   410,     0,     3,     0,    28,    36,    35,
+    45,     0,     0,     0,    49,    53,    42,   793,   788,     0,
+   345,   366,    45,   346,   792,    51,   151,   136,   134,   151,
+   152,   276,   584,   583,   280,   587,     0,    19,    21,    71,
+   111,   329,     0,   675,    73,   673,   426,     0,   422,   421,
+   195,     0,   194,   554,   591,     0,   767,   768,     0,   762,
+   366,     0,   761,   763,   795,   777,     0,     0,   589,   560,
+   559,     0,     0,   574,     0,   392,   383,   573,     0,   797,
+   563,   354,   385,   398,   402,   469,   604,   605,   794,     0,
+   794,   606,   482,   483,   485,   794,   488,   487,     0,   516,
+   605,     0,   509,     0,     0,   519,     0,   103,    98,     0,
+   154,   521,   524,     0,   501,     0,   101,     0,   402,     0,
+   399,   797,   760,   162,   162,   162,   797,   760,   549,    79,
+   549,    85,   840,   839,   803,   803,   803,     0,   161,   263,
+   151,   144,   142,   151,     0,   460,     0,   459,     0,     0,
+     0,   603,     0,     0,     0,     0,   366,     0,     0,     0,
+   287,     0,   285,   286,     0,   226,   193,   192,   259,   604,
+   605,   260,   261,     0,     0,   427,   457,     0,   191,   190,
+   253,   252,   752,   751,     0,   250,   249,   247,   248,   246,
+   245,   244,   241,   242,   243,   239,   240,   234,   235,   236,
+   237,   238,   232,   233,     0,     0,     0,     0,     0,     0,
+   209,   223,     0,     0,   208,   549,   549,     0,   549,   546,
+   636,     0,     0,     0,     0,   311,     0,   315,     0,   317,
+     0,   645,   644,   641,   640,   793,     0,     0,   660,     0,
+     0,   797,   341,   797,   647,   549,   760,   553,   646,   642,
+     0,     0,   549,     0,     0,     0,     0,     0,   409,     0,
+     0,    25,     0,    26,    47,    44,    45,     0,    40,     0,
+     0,   646,   642,     0,   784,   549,   787,   789,     0,   785,
+   786,    46,   466,     0,   141,   151,   151,   139,    18,    20,
+   128,   116,   129,   130,     0,   109,   112,     0,     0,     0,
+     0,   674,   666,   423,     0,   107,   558,   555,   766,   783,
+   772,   770,     0,   556,   765,   782,   771,   769,   764,   796,
+   779,   790,   780,   773,   778,   799,     0,   390,   572,   571,
+   396,   395,   492,     0,   491,   794,   794,   794,     0,   549,
+   760,   515,   510,   104,   520,   402,   402,   507,   508,   505,
+   506,   549,   760,   259,   604,     0,   388,    99,   511,   522,
+   527,   528,   388,   388,     0,     0,   388,    97,   512,   525,
+   388,   502,   503,   504,   402,     0,   453,   389,     0,    78,
+     0,     0,     0,     0,    84,     0,   797,   760,   797,   760,
+   805,   804,   806,   264,   149,   151,   151,   147,   545,   543,
+   448,     0,   296,   204,   206,   302,   303,     0,     0,     0,
+     0,   286,   289,     0,     0,     0,     0,   227,     0,   290,
+   292,   221,   220,   211,     0,   210,   225,     0,     0,   633,
+   631,     0,   634,   553,   216,     0,     0,   318,     0,     0,
+     0,   643,   639,   650,   549,   659,   657,   658,   648,   797,
+     0,   655,     0,   601,   602,     0,   307,   408,   406,   259,
+     0,    23,    48,    43,    50,    54,   645,   641,   646,   642,
+     0,   565,     0,   549,   647,    52,   137,   135,     0,   114,
+     0,   118,     0,   120,     0,   122,     0,   726,   668,     0,
+   424,   646,   642,     0,   281,     0,   599,   791,     0,     0,
+   800,   801,     0,     0,     0,   393,     0,     0,     0,   494,
+   493,   486,   797,     0,   420,   420,   797,     0,     0,     0,
+   402,   402,     0,   402,   402,     0,   402,     0,   420,     0,
+   441,   400,   549,   266,   265,   267,   549,    81,     0,    87,
+     0,   145,   143,   445,     0,     0,     0,     0,     0,   431,
+     0,     0,   428,   230,   251,     0,   212,   213,   222,   224,
+   632,   630,   637,   635,     0,   217,     0,   310,   314,   316,
+   797,   653,   549,   654,     0,   411,   413,   645,   641,   570,
+   647,   115,   113,     0,     0,     0,     0,     0,   183,   667,
+     0,   669,   670,   425,     0,   602,   781,   775,   776,   774,
+     0,   798,   391,   397,     0,   489,   490,   484,    94,   549,
+   514,   518,    96,   549,   402,   402,   536,   420,   259,   604,
+     0,   523,   529,   530,   388,   388,   420,   420,     0,   420,
+   526,   513,     0,   797,   797,   549,   549,     0,     0,     0,
+     0,   429,     0,     0,     0,   214,   638,   319,   656,   797,
+     0,   117,   119,   121,   733,   727,   731,   418,     0,   676,
+     0,   259,   604,   605,   677,   691,   694,   697,   666,     0,
+     0,     0,     0,     0,     0,   260,   723,   728,     0,   748,
+     0,   685,     0,     0,   366,     0,   662,   683,   690,   661,
+   684,   724,     0,   671,   286,   802,   394,   797,   797,   535,
+   532,   534,     0,     0,   402,   402,   402,   531,   533,   517,
+   443,     0,   442,   437,    77,    83,   797,   797,   298,   299,
+   300,   301,     0,   432,   548,   652,   412,   666,   732,     0,
+   672,   665,   186,   741,   743,   744,   666,   666,   666,     0,
+     0,     0,   709,   711,   712,   713,     0,     0,     0,   742,
+     0,   337,   749,     0,   686,   335,   388,     0,   336,     0,
+   388,     0,     0,     0,   184,   664,   663,   687,   722,   721,
+    93,    95,   402,   402,   541,   420,   420,     0,     0,   455,
+    80,    86,   430,     0,   419,     0,     0,   681,   680,     0,
+     0,     0,     0,   705,     0,   714,     0,   720,   729,     0,
+   333,   334,     0,     0,     0,   332,   185,   666,   540,   538,
+   537,   539,   440,   439,   433,    68,    71,     0,   734,   175,
+     0,   678,   692,     0,   695,   668,   746,   698,     0,   182,
+     0,   366,     0,     0,     0,   710,   719,     0,     0,   688,
+     0,   438,     0,     0,     0,     0,   666,     0,   667,     0,
+   747,   666,   745,   702,   388,   707,   706,   730,   753,     0,
+   667,   436,     0,   435,   739,   740,   735,   176,   679,   187,
+   667,   189,   682,   173,     0,     0,     0,   666,   402,     0,
+     0,     0,   754,   755,   715,   689,   434,   667,   668,   693,
+     0,   696,   179,     0,   178,   703,     0,   708,     0,   753,
+     0,     0,   736,   188,   174,   699,   667,   180,     0,     0,
+   716,   756,     0,   704,     0,   757,     0,     0,     0,   181,
+   758,     0,   717,   700,     0,     0,     0,   759,   718,   667,
+   701,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1542,
-   404,     2,   405,   160,   654,   310,   228,     3,     4,    38,
-   624,   351,   722,   370,    40,   723,   380,   630,   631,   632,
-    42,    43,   413,   166,   164,    44,   724,   739,  1000,   744,
-  1002,    46,   725,   726,   167,   168,   414,   656,   908,   909,
-   605,   910,   216,    47,   899,   898,   645,   642,  1064,  1063,
-   866,   863,   135,   897,    48,    49,   522,   311,   312,   313,
-   314,  1291,  1486,  1432,  1504,  1441,  1525,  1200,  1481,  1499,
-   345,   855,   315,   559,   818,   316,   317,   346,   319,   337,
-    51,   235,   372,   393,    52,    53,   320,   517,   321,   322,
-   323,   324,   415,   325,  1292,   454,   580,   326,  1293,    55,
-   199,   635,   327,   200,   495,   201,   179,   192,    59,   437,
-   180,  1114,   455,  1215,   193,  1115,    60,   991,   466,    61,
-    62,   620,   621,   622,  1269,   420,   781,   782,  1426,  1427,
-  1390,  1323,  1243,    63,   609,   340,  1141,  1324,  1021,   869,
-    64,    65,    66,    67,   220,    68,    69,    70,   222,   708,
-   709,   710,   711,   224,   462,   463,   730,   731,   732,   971,
-   981,   972,  1232,   973,   974,  1233,  1234,   606,   607,   560,
-   845,   329,   423,   424,   173,   181,    72,    73,    74,   182,
-   183,   152,    76,   131,   330,   331,   332,    78,   333,    80,
-   713,   122,   123,   124,   104,    81,   334,   823,   824,   840,
-   583,  1296,  1297,  1398,  1270,  1201,  1202,  1203,   660,  1298,
-   915,  1299,  1347,  1457,  1400,  1434,  1300,  1301,  1418,  1471,
-  1348,  1458,  1349,  1460,  1350,  1462,  1523,  1537,  1488,  1517,
-  1445,  1490,  1405,   416,   657,  1197,  1302,  1361,  1448,  1266,
-  1267,  1338,  1455,  1498,  1443,  1429,  1303,  1438,  1364,   788,
-  1492,  1493,  1494,  1532,   677,   678,   937,  1110,  1210,   679,
-   680,   681,   933,   682,   145,   935,   684,  1112,  1113,   489,
-    83,    84
+static const short yydefgoto[] = {  1552,
+   403,     2,   404,   160,   659,   323,   228,     3,     4,    38,
+   626,   350,   726,   369,    40,   727,   379,   634,   885,   635,
+   636,   637,    42,    43,   412,   166,   164,    44,   728,   743,
+  1008,   748,  1010,    46,   729,   730,   167,   168,   413,   661,
+   916,   917,   504,   918,   216,    47,   907,   906,   650,   647,
+  1017,  1016,   764,   761,   135,   905,    48,    49,   492,   280,
+   281,   282,   283,   494,   324,  1301,  1496,  1442,  1514,  1451,
+  1535,  1210,  1491,  1509,   326,   872,   327,   576,   835,   328,
+   329,   330,   331,   286,    51,   235,   371,   392,    52,    53,
+   332,   535,   333,   334,   335,   336,   414,   337,  1302,   453,
+   598,   680,  1303,    55,   199,   640,    57,   200,   513,   201,
+   179,   192,    59,   436,   180,  1124,   454,  1225,   193,  1125,
+    60,   999,   465,    61,    62,   622,   623,   624,  1279,   419,
+   796,   797,  1436,  1437,  1400,  1333,  1253,    63,   508,   289,
+  1151,  1334,  1037,   767,    64,    65,    66,    67,   220,    68,
+    69,    70,   222,   713,   714,   715,   716,   224,   461,   462,
+   734,   735,   736,   979,   989,   980,  1242,   981,   982,  1243,
+  1244,   505,   506,   577,   862,    71,   422,   423,   173,   181,
+    72,    73,    74,   182,   183,   152,    76,   131,   342,   343,
+   344,    78,   345,    80,   718,   122,   123,   124,   104,    81,
+   346,   840,   841,   857,   601,  1306,  1307,  1408,  1280,  1211,
+  1212,  1213,   665,  1308,   923,  1309,  1357,  1467,  1410,  1444,
+  1310,  1311,  1428,  1481,  1358,  1468,  1359,  1470,  1360,  1472,
+  1533,  1547,  1498,  1527,  1455,  1500,  1415,   415,   662,  1207,
+  1312,  1371,  1458,  1276,  1277,  1348,  1465,  1508,  1453,  1439,
+  1313,  1448,  1374,   805,  1502,  1503,  1504,  1542,   682,   683,
+   945,  1120,  1220,   684,   685,   686,   941,   687,   145,   943,
+   689,  1122,  1123,   488,    83,    84
 };
 
-static const short yypact[] = {   106,
-   133,-32768,-32768,  3307,-32768,   107,   139,   196,   214,   153,
-   209,-32768,-32768,   656,-32768,-32768,   109,   189,   233,-32768,
--32768,-32768,   859,   890,  1126,   269,-32768,   299,   435,-32768,
-  1195,  1195,-32768,  4408,-32768,  3307,   327,-32768,   374,    19,
 5741,-32768,-32768,   352,-32768,   448,   441,   465,-32768,-32768,
--32768,-32768,   165,  1751,-32768, 10229,-32768,  1852,   351,-32768,
-   491,-32768,-32768,   852,-32768,-32768,   472,-32768,-32768,   498,
10636,-32768,-32768,-32768,  1207,-32768,-32768,-32768,   315,-32768,
--32768,   795,  4165,   475,-32768,-32768,  9136,-32768,  9136,-32768,
-  9136,-32768,-32768,-32768,   196,   214,   299,   524,   471,   530,
-   465,-32768,   795,-32768,   795,  9136,  9136,   512,-32768,-32768,
--32768,-32768,-32768,    51,   553,   590,   641,   688,   560,   567,
--32768,-32768,   819,-32768,  1160,   196,   214,   947,   299,   524,
--32768,  1299,   676,   586, 10441,  9136,-32768,  9136,  2428,-32768,
-   785,   928,  2428,-32768,  1275,  2590,  2590,  4408,   522,   578,
-   588,   585,   610,-32768,-32768,   663,-32768,   617,-32768,  4910,
-   107,-32768,-32768,-32768,   747,   129,    33,   698,-32768,-32768,
-   651,   247,-32768,-32768,  2697,  2697,  5425,  1207,   379,-32768,
--32768,   288,-32768,-32768,  1548,-32768,-32768,-32768,-32768,-32768,
-  1852,   418,-32768,   491,  1207,-32768,-32768,-32768,  2046,  1852,
--32768,   491,-32768,  5468,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   465,  1381,  1381,   472,
--32768,-32768,-32768,-32768,-32768,  1450,   795,   672,   491,   393,
-  1677,-32768,   292,-32768,-32768,-32768,-32768,-32768,  2875,-32768,
--32768,   154,-32768,   681,   683,-32768,-32768,-32768,-32768,   718,
+static const short yypact[] = {   101,
+   116,-32768,-32768, 10331,-32768,    78,    44,   121,   289,    82,
+   145,-32768,-32768,   848,-32768,-32768,   103,   168,   182,-32768,
+-32768,-32768,   691,   559,   966,   209,-32768,   216,   479,-32768,
+  2358,  2358,-32768,  2401,-32768, 10331,   215,-32768,   292,    14,
10390,-32768,-32768,   236,-32768,   331,   319,   328,-32768,-32768,
+-32768,-32768,   345,  2831,-32768,  3110,-32768,  1750,   408,-32768,
+   388,-32768,-32768,  1130,-32768,-32768,   378,-32768,-32768,   406,
 4170,-32768,-32768,-32768,   804,-32768,-32768,-32768,   792,-32768,
+-32768,   327,  7871,   360,-32768,-32768,   699,-32768,   699,-32768,
+   699,-32768,-32768,-32768,   121,   289,   216,   428,   424,   497,
+   328,-32768,   327,-32768,   327,  9299,  9299,   484,-32768,-32768,
+-32768,-32768,-32768,    15,   528,   605,   629,   713,   544,   558,
+-32768,-32768,   695,-32768,   855,   121,   289,   620,   216,   428,
+-32768,  2602,  1004,   555, 10494,   699,-32768,-32768,  2859,-32768,
+  1470,   414,  2859,-32768,  1270,  3454,  3454,  2401,   557,   561,
+   591,   583,   587,-32768,-32768,   692,-32768,   601,-32768,  4252,
+    78,-32768,-32768,-32768,   716,    84,   295,   682,-32768,-32768,
+   674,    61,-32768,-32768,  3511,  3511,  5038,   804,   490,-32768,
+-32768,   356,-32768,-32768,  2290,-32768,-32768,-32768,-32768,-32768,
+  1750,   655,-32768,   388,   804,-32768,-32768,-32768,  2002,  1750,
+-32768,   388,-32768,  5148,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   328,  1368,  1368,   378,
+-32768,-32768,-32768,-32768,-32768,   886,   327,   662,   388,   521,
+  1578,-32768,   232,-32768,-32768,-32768,-32768,-32768,  3621,-32768,
+-32768,   398,-32768,   717,   725,-32768,-32768,-32768,-32768,   731,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   705,-32768,-32768,  1450, 10636,  1190,-32768,-32768,
-   722,-32768,-32768,  9751,  9838,  9925,  9925,-32768,-32768,-32768,
--32768,-32768,   731,   761,   764,   772,   776,   524,  9223,  1275,
-  9925,-32768,-32768,  9925,-32768,-32768,  9925,  7249,-32768,  9925,
-   272,   769,-32768,  9925,-32768,  9310,-32768,  6375,-32768,  1040,
-  5601,  9397,-32768,   847,  1936,-32768,   294,  4094,  2443,-32768,
-   329,-32768,  1701,  1942,   272,   272,  9136, 10441,-32768,  1275,
-   730,-32768,-32768,   755,   807, 10744,   771,   778,   787,   561,
-   617,-32768,   947,-32768,-32768,-32768,-32768,-32768,-32768,   553,
-   590,   641,   688,   560,-32768,-32768,-32768,   196,   214,   818,
--32768,-32768,-32768,   676,-32768,-32768,-32768,-32768,-32768,  2313,
--32768,-32768,  5468,  3000,  1328,-32768,   272,   709,-32768,   356,
--32768,-32768,-32768,  2428,-32768,-32768,  2428,-32768,   792,-32768,
--32768,  2875,    42,   775,   797,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,    50,-32768,-32768,-32768,-32768,  7341,  9223,-32768,
--32768,-32768,  9223,   802,-32768,  6669,   140,  2992,-32768,  2992,
--32768,  3622,  3622,  5425,   809,-32768,   491,  5468,-32768,   814,
--32768,-32768,  3932,  2046,  1852,  5468,-32768,   491,-32768,-32768,
-   491,  2046,-32768,   511,-32768,-32768,   465,-32768,  1381,-32768,
-  1183,  3796,    58,  1450,   663,   855,   491,-32768,-32768,   863,
-   891,   895,-32768,-32768,-32768,-32768,   477,-32768,   355,   860,
-   864,-32768,-32768,  1450,-32768,-32768,   412,-32768,-32768,  9136,
-  9223,   722,  7249,-32768,   497,  7249,-32768,-32768,-32768,  9136,
- 10681, 10681, 10681, 10681, 10812,-32768,-32768,-32768,-32768,   812,
- 10012, 10012,  7249,   869,   522,   870,   906,   880,-32768,-32768,
--32768,-32768,  9136,-32768,  7058,  7249,-32768,  9223,  9223,  7433,
-  9223,  9223,  9223,  9223,  9223,  9223,  9223,  9223,  9223,  9223,
-  9223,  9223,  9223,  9223,  9223,  9223,  9223,  9223,  9223,-32768,
--32768,-32768,-32768,-32768,  9223,  9223,  9223,  9136, 10542,   382,
-   571,  8072,-32768,-32768,-32768,   937,   987,   505,   556,   564,
-  1946,   928,-32768,  1816,  1816,-32768,  4574,   887,   907,   959,
--32768,-32768,   542,  8579,   836,-32768,   539,   795,-32768,-32768,
-  9223,-32768,-32768,-32768,-32768,    45,-32768,-32768,-32768,   272,
--32768,  5468,  1436,-32768,   945,   953,-32768,-32768,  1275,-32768,
-  7801,  7893,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   127,
--32768,   927,   917,   617,   963,-32768,-32768,-32768,  1028,   286,
-   969,-32768,-32768,  3014, 10497,  3014,  2768,   852,  3155,-32768,
-   973,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   931,
--32768,   988,-32768,-32768,   352,   311,   991,   906,-32768,-32768,
--32768,-32768,  6779, 10812,-32768,   807,   940, 10744,-32768,-32768,
-   941,-32768,-32768,   946,   145,  5356,   950,-32768,   163, 10290,
-  1009,  1017,   569,-32768,-32768,-32768,  2992,  2992,-32768,  3932,
-  1019,-32768,-32768,   993,   140,-32768,  2046,-32768,  1036,   491,
--32768,   590,   641,-32768,  1014,-32768,   567,  1016,-32768,-32768,
-   177,-32768,-32768,  1390,-32768,   600,   703,   269,-32768,  9223,
- 10168,-32768,  2140,   573,   573,   211,   579,  2004, 10335,  4479,
--32768,   166,   573,  1047,   491,    69,-32768,   140,  1684,  9136,
-  9136,  9136,   140,  1684,-32768,-32768,-32768,-32768,-32768,-32768,
-  1564,  1564,  1564,   272,  1001,  1003,  9490,   959,  1004,  1008,
-  1015,  1048,  4695,  1050,  1061,  1064,-32768,  1031,-32768,-32768,
-  1033,-32768,-32768,  1082,   646,   740,    98,   282,  9223,  1084,
--32768,  1089,  1041, 10812, 10812,-32768,-32768,  1087, 10830,  3578,
-  4782,  5214,  5639,  3222,  3390,  2039,  2039,  2039,  1011,  1011,
-   982,   982,   462,   462,   462,-32768,-32768,  1043,  1044,  1045,
-  1049,  1057, 10681,   382,-32768,  7341,  9223,-32768,-32768,-32768,
-  9223,-32768,-32768,  1059,  9925,  1056,  1071,  1122,-32768,  9223,
--32768,  9223,-32768,  9223,  4750,-32768,  4750,-32768,   237,  1063,
-  1067,-32768,  1066, 10681,   140,-32768,   140,  4975,-32768,  1684,
-  1069,  8771,  8771,  6463,  1079,  9310,  1083,  1598,  1942,   687,
-  1093,-32768,-32768,-32768,-32768,-32768,  9223,  1275,  1081,   953,
--32768, 10812,-32768, 10812,   561,  1095,  9577,-32768,  1099,-32768,
--32768,  2313,-32768, 10681,  1705,  1705,  3548,-32768,-32768,-32768,
--32768,  1548,-32768,-32768,   754,  9223,-32768,-32768,-32768,-32768,
--32768,-32768,   553,-32768,   688,   560,  9223,  1146,-32768,   591,
-   599,   603,   906,-32768,-32768,-32768,    44,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  8675,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1017,  1150,-32768,-32768,-32768, 10681,-32768,
--32768,-32768,-32768,  1155,-32768,  9136,-32768,-32768,-32768,-32768,
-  1171,-32768,  1684, 10812,-32768,-32768,-32768,   491,   491,-32768,
--32768,-32768,-32768,-32768,  1684,   191,   881,  9223,   511,-32768,
-  1164,-32768,-32768,-32768,   432,   810,   315,   928,   901,   573,
-  1170,-32768,   966,-32768,-32768,-32768,   491,  6004,-32768,-32768,
-  7341,-32768,  1123,   272,   272,   272,-32768,  1133,   140,  1684,
-   140,  1684,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1152,  1161,  1168,  1175,   931,-32768, 10676,  7341,  6874,
-  1138,-32768,  9223,-32768,-32768,-32768,-32768,   390,  1144,-32768,
--32768,  1148,    72,  1292,  1292,  1157,  1292,-32768,-32768,  9925,
-  1257,-32768,  1165,  1176,  1177,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   140,  1181,-32768,  1180,-32768,-32768,  2307,
--32768,-32768,-32768,-32768,-32768, 10812,-32768,-32768,  1184,-32768,
--32768,   184,  1196,-32768,-32768,-32768,  3454,  3454,  4278,  4278,
-  3548,-32768,  1548,-32768,  5166,  6375,-32768,-32768,  1198,-32768,
-   311,-32768,  9223,-32768,  9223,-32768,  9223,-32768,    24,  6966,
--32768,  8864,  8864,  6573,   371,  1199,   464,-32768,  7341,  7153,
--32768,-32768,   186,  7341,  7341,-32768,  1201,  1202,  1183,-32768,
--32768,-32768,   140,  1203,  1216,  1216,   140,  1205,  9223,  9223,
-  5793,   491,  3172,   491,   491,   725,   491,  3808,  1216,  6115,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1206,-32768,
-  1208,  9223,  9223,  9223,  9223,  7341,-32768,  9223,  1256,-32768,
--32768, 10812,  9223,-32768,   390,-32768,-32768,-32768,-32768,-32768,
--32768,  1213,-32768,  1272,-32768,-32768,-32768,   140,-32768,-32768,
--32768,-32768,-32768,-32768,  9223,-32768,-32768,  3454,  3454,-32768,
-  5166,-32768,-32768,  1217,  1218,  1219,  1233,  1275,-32768,-32768,
-  6339,  1300,-32768,-32768,  1230,   192,-32768,-32768,-32768,-32768,
- 10681,-32768,-32768,-32768,  7341,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  5793,  5793,-32768,  1216,   304,   912,
-  9223,-32768,-32768,-32768,   511,   511,  1216,  1216,   477,  1216,
--32768,-32768,  5889,   140,   140,-32768,-32768,  1236,  1241,  1243,
-  1244,-32768, 10767,  7341,  1242,-32768,-32768,-32768,-32768,   140,
-  1248,-32768,-32768,-32768,-32768,  1233,-32768,-32768,   751,-32768,
-   201,  1280,   913,   980,-32768,-32768,-32768,-32768,-32768,  9223,
-  1298,  1301,  1303,  8957,   459,   332,-32768,-32768,  9049,  1358,
-  1308,-32768,  5326, 10396,  5005,  6224,-32768,-32768,  1354,-32768,
--32768,-32768,  8183,-32768,   493,-32768,-32768,   140,   140,-32768,
--32768,-32768,  9223,  9223,  5793,   491,   491,-32768,-32768,-32768,
--32768,  7985,-32768,-32768,-32768,-32768,   140,   140,-32768,-32768,
--32768,-32768,  7341,-32768,-32768,-32768,-32768,-32768,-32768,  1275,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   906,  1277,
-  1281, 10541,-32768,-32768,-32768,-32768,  1316,  9223,  1317,-32768,
-   906,-32768,-32768,  1297,-32768,-32768,   511,   760,-32768,   830,
-   511,  9664,   894,   227,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  5793,  5793,-32768,  1216,  1216,  1287, 10698,  1304,
--32768,-32768,-32768,  1305,-32768,   608,   608,-32768,-32768,  1383,
-  4026,  9136,  9223,-32768,  8293,-32768,  1343,-32768,-32768,   663,
--32768,-32768, 10099, 10099,  7525,-32768,-32768,   906,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   448,   352, 10623,-32768,-32768,
-  9136,-32768,-32768,  8485,-32768,    24,-32768,-32768,  1344,-32768,
-  1296,   383,  5468, 10790,  8293,-32768,-32768,  1233,    88,-32768,
-   138,-32768,  1302,  1306,   906,  1307,   906,  8389,-32768,   609,
--32768,-32768,-32768,-32768,   511,-32768,-32768,  1233,  1397,  1348,
--32768,-32768,    50,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  9223,  1349,  7617,   906,   491,  8293,
-  1327,    31,  1365,-32768,-32768,-32768,-32768,-32768,    24,-32768,
-  1318,-32768,-32768,  1368,-32768,-32768,  1369,-32768,  9223,  1397,
-  1372,  1397,-32768,-32768,-32768,-32768,-32768,-32768,  1325,   122,
--32768,-32768,  7709,-32768,  7341,-32768,  1425,  1395,  1341,-32768,
--32768,   212,-32768,-32768,  1449,  1401,  8389,-32768,-32768,-32768,
--32768,  1465,  1467,-32768
+-32768,-32768,   730,-32768,-32768,   886,  4170,  1222,-32768,   737,
+   769,-32768,  9299,   737,   737,   699, 10494,-32768,  1270,   744,
+-32768,-32768,-32768,   754,-32768,-32768,  9914, 10001, 10088, 10088,
+-32768,-32768,-32768,-32768,-32768,   772,   793,   797,   799,   801,
+   428,  9386,  1270, 10088,-32768,-32768, 10088,-32768,-32768, 10088,
+  7343,-32768, 10088, 10088,   768,   829,-32768,  9473,-32768, 10649,
+-32768,   453,  1785,  9560,-32768,   887,  2644,   794,  2796,  1926,
+  5618,-32768,   364,-32768,  2939,  1518,   798,   806,  1734,   601,
+-32768,   620,-32768,-32768,-32768,-32768,-32768,-32768,   528,   605,
+   629,   713,   544,-32768,-32768,-32768,   121,   289,   865,-32768,
+-32768,-32768,  1004,-32768,-32768,-32768,-32768,-32768,  5209,-32768,
+-32768,  5148,  5386,  1941,-32768,   737,   912,-32768,   442,-32768,
+-32768,-32768,  2859,-32768,-32768,  2859,-32768,   820,-32768,-32768,
+  3621,    57,   823,   828,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,    77,-32768,-32768,-32768,-32768,  7435,  9386,-32768,-32768,
+-32768,  9386,   796,-32768,  6763,   104,  3685,-32768,  3685,-32768,
+  3904,  3904,  5038,   831,-32768,   388,  5148,-32768,   834,-32768,
+-32768,  4096,  2002,  1750,  5148,-32768,   388,-32768,-32768,   388,
+  2002,-32768,   733,-32768,-32768,   328,-32768,  1368,-32768,  2037,
+  3361,    37,   886,   692,   852,   388,-32768,-32768,   869,   880,
+   893,-32768,-32768,-32768,-32768,   670,-32768,   376,   862,   866,
+-32768,-32768,   886,-32768,-32768,   500,-32768,-32768,   699,-32768,
+-32768,-32768,-32768,-32768, 10545,-32768,-32768,-32768,   737,-32768,
+  5148,  2125,-32768,   896,   918,-32768,-32768,  1270,  9386,   754,
+  7343,-32768,   386,  7343,-32768,-32768,-32768,  9299,  5129,  5129,
+  5129,  5129, 10717,-32768,-32768,-32768,-32768,   870, 10175, 10175,
+  7343,   877,   557,   879,   932,   883,-32768,-32768,-32768,  7964,
+  7152,  7343,-32768,  8056,  9386,  9386,  7527,  9386,  9386,  9386,
+  9386,  9386,  9386,  9386,  9386,  9386,  9386,  9386,  9386,  9386,
+  9386,  9386,  9386,  9386,  9386,  9386,-32768,-32768,-32768,-32768,
+-32768,  9386,  9386,  9386,  9299,  2243,   302,   766,  8235,-32768,
+-32768,-32768,   939,   992,   396,   436,   445,  2995,   414,-32768,
+-32768,  1530,  1530,-32768,  1717,   888,   908,   964,-32768,-32768,
+   465,  8742,  1604,-32768,   548,   327,-32768,-32768,  9386,-32768,
+-32768,-32768,-32768,   284,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,    31,-32768,   922,   906,   601,   957,-32768,-32768,-32768,
+   650,   209,   982,   346,   963,   965,-32768,-32768,  2187, 10550,
+  2187,  3219,  1130,  4466,-32768,   973,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   919,-32768,   961,-32768,-32768,   236,
+   563,   977,   932,-32768,-32768,-32768,-32768,  6873, 10717,-32768,
+   829,   921, 10649,-32768,-32768,   934,-32768,-32768,   935,   172,
+  4015,   941,-32768,   192,  5055,   987,   991,   476,-32768,-32768,
+-32768,  3685,  3685,-32768,  4096,   993,-32768,-32768,   944,   104,
+-32768,  2002,-32768,   994,   388,-32768,   605,   629,-32768,   970,
+-32768,   558,  1000,-32768,-32768,   287,-32768,-32768,  1392,-32768,
+   707,   368,-32768,  9386,  6270,-32768,  2632,   199,   199,   315,
+   488,  4322,  5814,  4905,-32768,   114,   199,  1010,   388,    71,
+-32768,   104,  1333,   699,   699,   699,   104,  1333,-32768,-32768,
+-32768,-32768,-32768,-32768,  1045,  1045,  1045,   737,-32768,-32768,
+-32768,-32768,-32768,-32768,  9386,  1270,   972,   918,   975,   978,
+  9653,   964,   988,   989,   995,  1016,  2416,  1021,  1025,  1031,
+-32768,   998,-32768,-32768,  1002,-32768,-32768, 10717,  1051,   659,
+   665,   191,   128,  9386,  1061,-32768,  1065,  1018,-32768, 10717,
+ 10717, 10717,-32768,-32768,  1073, 10735,  8261,  4799,  3709,  5757,
+  3558,  3889,  3136,  3136,  3136,  1159,  1159,   952,   952,   719,
+   719,   719,-32768,-32768,  1033,  1028,  1034,  1038,  1040,  5129,
+   302,-32768,  7435,  9386,-32768,-32768,-32768,  9386,-32768,-32768,
+  1049, 10088,  1048,  1062,  1105,-32768,  9386,-32768,  9386,-32768,
+  9386,  3668,-32768,  3668,-32768,   138,  1053,  1055,-32768,  1056,
+  5129,   104,-32768,   104,  3804,-32768,  1333,  1057,  8934,  8934,
+  6571,  1058,  9473,  1063,  2499,  1518,   570,  1066,  1734,  1071,
+  9740,-32768,  1075,-32768,-32768,-32768,  2262,  5209,-32768,  5129,
+  1109,  1797,  1797,  4709,-32768,-32768,-32768,-32768,  2290,-32768,
+-32768,-32768,   815,  9386,-32768,-32768,-32768,-32768,-32768,-32768,
+   528,-32768,   713,   544,  9386,  1124,-32768,   525,   553,   582,
+   932,-32768,-32768,-32768,    24,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  8838,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   991,  1125,-32768,-32768,-32768,  5129,-32768,-32768,-32768,
+-32768,  1137,-32768,  9299,-32768,-32768,-32768,-32768,  1867,-32768,
+  1333, 10717,-32768,-32768,-32768,   388,   388,-32768,-32768,-32768,
+-32768,-32768,  1333,   379,   704,  9386,   733,-32768,  1135,-32768,
+-32768,-32768,   610,   783,   792,   414,  1095,   199,  1143,-32768,
+  1171,-32768,-32768,-32768,   388,  5463,-32768,-32768,  7435,-32768,
+  1094,   737,   737,   737,-32768,  1096,   104,  1333,   104,  1333,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 10717,-32768,
+-32768,  1098,-32768,-32768,-32768,-32768,-32768,  1111,  1120,  1121,
+  1126,   919,-32768, 10581,  7435,  6968,  1107,-32768,  9386,-32768,
+-32768,-32768,-32768,   367,  1112,-32768,-32768,  1114,   217,   372,
+   372,  1106,   372,-32768,-32768, 10088,  1221,-32768,  1122,  1123,
+  1138,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   104,
+  1139,-32768,  1118,-32768,-32768,  2999,-32768,-32768,-32768,   133,
+  1140,-32768,-32768,-32768,-32768,-32768,  1899,  1899,  2060,  2060,
+  4709,-32768,  2290,-32768,  2139, 10545,-32768,-32768,  1141,-32768,
+   563,-32768,  9386,-32768,  9386,-32768,  9386,-32768,    26,  7060,
+-32768,  9027,  9027,  6667,   203,  1142,   220,-32768,  7435,  7247,
+-32768,-32768,   135,  7435,  7435,-32768,  1149,  1150,  2037,-32768,
+-32768,-32768,   104,  1153,  1180,  1180,   104,  1158,  9386,  9386,
+  6034,   388,  4339,   388,   388,   684,   388,  4925,  1180,  5687,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1166,-32768,
+  1172,-32768,-32768,-32768,  9386,  9386,  9386,  9386,  7435,-32768,
+  9386,  1184,-32768,-32768, 10717,  9386,-32768,   367,-32768,-32768,
+-32768,-32768,-32768,-32768,  1156,-32768,  1205,-32768,-32768,-32768,
+   104,-32768,-32768,-32768,  9386,-32768,-32768,  1899,  1899,-32768,
+  2139,-32768,-32768,  1173,  1178,  1181,  1193,  1270,-32768,-32768,
+  6477,  1247,-32768,-32768,  1182,  1610,-32768,-32768,-32768,-32768,
+  5129,-32768,-32768,-32768,  7435,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  6034,  6034,-32768,  1180,   446,   770,
+  9386,-32768,-32768,-32768,   733,   733,  1180,  1180,   670,  1180,
+-32768,-32768,  6143,   104,   104,-32768,-32768,  1189,  1194,  1197,
+  1201,-32768, 10672,  7435,  1203,-32768,-32768,-32768,-32768,   104,
+  1204,-32768,-32768,-32768,-32768,  1193,-32768,-32768,   723,-32768,
+   142,  1231,   807,   856,-32768,-32768,-32768,-32768,-32768,  9386,
+  1254,  1259,  1260,  9120,   107,   581,-32768,-32768,  9212,  1313,
+  1262,-32768,  4846, 10449,  4560,  6365,-32768,-32768,  1308,-32768,
+-32768,-32768,  8346,-32768,   306,-32768,-32768,   104,   104,-32768,
+-32768,-32768,  9386,  9386,  6034,   388,   388,-32768,-32768,-32768,
+-32768,  8148,-32768,-32768,-32768,-32768,   104,   104,-32768,-32768,
+-32768,-32768,  7435,-32768,-32768,-32768,-32768,-32768,-32768,  1270,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   932,  1232,
+  1235,  5887,-32768,-32768,-32768,-32768,  1264,  9386,  1269,-32768,
+   932,-32768,-32768,  1237,-32768,-32768,   733,   841,-32768,   904,
+   733,  9827,   913,   185,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  6034,  6034,-32768,  1180,  1180,  1224, 10603,  1240,
+-32768,-32768,-32768,  1242,-32768,   585,   585,-32768,-32768,  1326,
+  5980,  9299,  9386,-32768,  8456,-32768,  1285,-32768,-32768,   692,
+-32768,-32768, 10262, 10262,  7619,-32768,-32768,   932,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   331,   236,  2554,-32768,-32768,
+  9299,-32768,-32768,  8648,-32768,    26,-32768,-32768,  1287,-32768,
+  1239,   201,  5148, 10695,  8456,-32768,-32768,  1193,    52,-32768,
+   143,-32768,  1241,  1243,   932,  1244,   932,  8552,-32768,   643,
+-32768,-32768,-32768,-32768,   733,-32768,-32768,  1193,  1339,  1291,
+-32768,-32768,    77,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  9386,  1297,  7711,   932,   388,  8456,
+  1266,   157,  1301,-32768,-32768,-32768,-32768,-32768,    26,-32768,
+  1256,-32768,-32768,  1306,-32768,-32768,  1303,-32768,  9386,  1339,
+  1316,  1339,-32768,-32768,-32768,-32768,-32768,-32768,  1273,   193,
+-32768,-32768,  7803,-32768,  7435,-32768,  1358,  1319,  1275,-32768,
+-32768,   190,-32768,-32768,  1363,  1325,  8552,-32768,-32768,-32768,
+-32768,  1393,  1394,-32768
 };
 
 static const short yypgoto[] = {-32768,
-  1471,-32768,  -321,-32768,  1073,    21,    35,  1472,-32768,   159,
--32768,-32768,   467,  1132,-32768,   766,-32768,-32768,-32768,   593,
--32768,  1331,  -647,    68,  -643,  1335,   104,-32768,-32768,-32768,
--32768,-32768,   770,   780,-32768,-32768,-32768,-32768,-32768,   407,
-   994,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1411,  -618,  5454,    26,  -198,   -72,  1375,   983,
--32768,   616,-32768,   110,-32768, -1345,-32768, -1381,   -27,-32768,
-  1058,  1475,  -243,-32768,  -778,  4606,   220,  3860,  3238,  1237,
--32768,   -84,   -43,   128,   -64,   -33,-32768,-32768,-32768,  -311,
--32768,  -154,-32768,-32768, -1215,   -51,  -323,  4313,    71,   298,
-  -144,    56,    87,  -165,    -4,   -74,  -867,   223,-32768,    47,
--32768,-32768,   -83,-32768,-32768,-32768,-32768,-32768,   707,  1628,
-     5,-32768,   648,-32768,-32768, -1057,  -410,   861,-32768,-32768,
--32768,-32768,-32768,    30,-32768,-32768,-32768,-32768,-32768,   657,
-  -356,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1310,-32768,
-   409,   575,-32768,-32768,-32768,-32768,   546,  -686,   813,-32768,
--32768,-32768,-32768,-32768,   806,-32768,   399,   929,   673,   985,
-  4289,    18,    -8,  -424,  1366,  1608,  -447,-32768,   -10,-32768,
-  4946,  -140,     0,   -90,  3582,  1222,-32768,  2033,  1525,  1399,
-   -13,  -107,-32768,  1437,-32768,  4466,  2404,  -348,-32768,  2854,
--32768,-32768,   267,  -895,  -887,-32768,-32768,   362,    92,  -350,
--32768,-32768,-32768,-32768, -1064,-32768, -1167, -1341,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   116,-32768,-32768,-32768,-32768,-32768,   123,
- -1235,-32768,-32768,-32768,   -54,-32768,-32768,-32768,-32768, -1373,
-    60,-32768,    64,-32768,  -674,  -544,   644,-32768,-32768,-32768,
--32768,  -371,-32768,  -367,  -175,-32768,   521,   369,-32768,     1,
--32768,  -210
+  1398,-32768,  -324,-32768,   996,     2,     0,  1397,-32768,   392,
+-32768,-32768,   492,  1054,-32768,     9,-32768,-32768,  -586,-32768,
+-32768,   531,-32768,  1249,  -655,   -14,  -644,  1267,    25,-32768,
+-32768,-32768,-32768,-32768,   700,   708,-32768,-32768,-32768,-32768,
+-32768,   335,   176,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  1345,  -619,  5219,    47,  -164,    72,
+  1304,   946,-32768,-32768,-32768,   -36,-32768,    34,-32768, -1369,
+-32768, -1382,  -102,-32768,   313,   374,  -251,-32768,  -810,  2843,
+   -42,  4754,  3156,  1168,-32768,  -104,    -3,   171,   -45,   -23,
+-32768,-32768,-32768,  -321,-32768,  -142,-32768,-32768, -1241,   -49,
+  -339,  1165,    51,   885,  -138,    -1,  4157,  -182,    -4,   -92,
+  -657,   148,-32768,   -63,-32768,-32768,  -176,-32768,-32768,-32768,
+-32768,-32768,   639,    30,    -2,-32768,   574,-32768,-32768, -1031,
+  -143,   788,-32768,-32768,-32768,-32768,-32768,   303,-32768,-32768,
+-32768,-32768,-32768,   690,  -362,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1245,-32768,   333,   504,-32768,-32768,-32768,-32768,
+   470,  -701,   742,-32768,-32768,-32768,-32768,-32768,   739,-32768,
+   334,   976,   726,   909,  1728,    66,    -5,  -409,  1312,  1651,
+  -437,-32768,     1,-32768,  2919,  -127,     5,   -11,  3697,  1164,
+-32768,  4316,  1484,   974,   -22,  -117,-32768,  1372,-32768,  3773,
+  2378,  -401,-32768,  1977,-32768,-32768,   197,  -872, -1145,-32768,
+-32768,   293,    23,  -356,-32768,-32768,-32768,-32768, -1329,-32768,
+ -1237, -1379,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,    49,-32768,-32768,
+-32768,-32768,-32768,    53, -1234,-32768,-32768,-32768,   -56,-32768,
+-32768,-32768,-32768, -1362,    -7,-32768,    -8,-32768,  -653,  -502,
+   575,-32768,-32768,-32768,-32768,  -369,-32768,  -357,  -167,-32768,
+   968,   309,-32768,   196,-32768,  -213
 };
 
 
-#define        YYLAST          10915
+#define        YYLAST          10820
 
 
 static const short yytable[] = {    58,
-   151,   403,   178,   102,   585,   395,   398,   665,   640,   913,
-   121,   902,   641,   712,   236,   694,   335,   367,   336,  1099,
-   472,    71,   594,   638,    36,   445,   900,  1439,   278,   623,
-  1339,    58,   841,   153,   955,  1030,    58,   373,    37,   841,
-   494,   497,   378,   984,   172,   461,   444,   375,   139,   143,
-   658,   191,   564,    71,  1461,   452,    36,  1198,    71,    56,
-   464,    36,   661,   387,   993,   206,   226,  1221,  1222,   998,
-    37,   240,   527,  1362,    54,    37,   236,   158,   276,   564,
-   417,  1242,   328,   288,   328,  1456,   328,   203,   376,   377,
-    57,    56,  1459,  1510,   342,   734,    56,   418,   564,    27,
-   277,   328,   328,  1100,   233,    -1,    54,    45,   659,   352,
-   484,    54,   151,   151,   151,   353,  1482,  1514,   159,   573,
-   236,   229,    57,   597,   450,   453,   419,    57,  1377,   410,
-   385,   328,    -2,   328,  1199,  1380,   598,   599,  1472,    45,
-  1511,  1505,   172,   151,    45,   153,   153,   153,   475,  1529,
-  1469,   652,    71,   843,  1101,    58,   921,     8,   477,   190,
-  -123,   150,   484,   394,   397,   757,   771,    85,   735,   275,
-  1312,   758,   136,   172,   927,  1055,   153,    71,   990,  1318,
-  1319,  1167,  1320,   949,  1527,  1437,   875,  -324,   646,   647,
-   384,   411,   428,   430,   155,  1482,  -324,  1470,   206,   162,
-   411,   683,   106,  -275,   922,   383,   206,   923,   911,  -788,
-   129,   130,  -548,    87,   950,    56,   240,    86,  -275,  -275,
-   203,    57,   928,  -275,   412,   929,   985,    92,   203,   203,
-    54,  1528,  1339,   412,   478,   960,   876,  1446,   382,  -275,
-   568,   448,   924,  1185,  1062,  1211,    57,  1065,   921,  1164,
-    88,  -275,  -275,  1129,  -275,   203,  -275,    93,  -548,   171,
-   930,  1342,   373,    45,   600,    87,   561,   479,    90,   961,
-    89,  1535,   226,   962,   396,   399,   986,  1467,  1124,  1087,
-  1088,   569,   107,   628,   594,  -275,  -275,  1342,    91,  -275,
-  1128,   395,   398,  1186,   425,  1212,   922,   126,   127,   923,
-   697,  -275,   879,   328,   150,   203,   963,   914,   640,   841,
-   736,  1343,   934,   903,   702,   703,   276,     7,     8,   230,
-    10,  1536,  1508,   240,   226,  1149,   108,  1151,  1421,  1422,
-   627,   643,   328,   603,   924,  -548,   137,  1417,   277,   473,
-   426,   573,   841,   134,  -124,   882,   772,   520,    27,   521,
-   129,   130,   585,  1450,   692,    71,    22,   203,   904,   126,
-   127,   883,   698,   231,   574,    27,  1313,   905,   906,   450,
-   453,    28,    29,   136,   575,   637,   590,   450,    87,   191,
-   841,  -548,   440,  1351,   576,   474,  1256,   577,   578,   453,
-   197,   198,  1479,   384,  1360,   232,    14,   639,   151,   151,
-   151,   862,   747,    33,   907,  1031,   136,   275,   602,   453,
-   204,   205,   129,   130,   203,   126,   127,   754,  -273,    21,
-   156,   676,   591,  1506,    57,  1368,  1057,  1373,    24,   815,
-   573,   153,   153,   153,   157,   516,   478,   815,   438,   439,
-   468,   601,  1394,   639,  1182,  1183,   816,    90,   748,   687,
-   688,  1396,  1397,   984,   816,   206,  -333,    58,    15,    16,
-   163,    94,   109,   110,  -273,  -273,   636,    91,   129,   130,
-    39,   206,   165,   203,   203,   817,   757,   446,   447,    71,
-  -266,   203,   721,   817,  1163,   328,   469,   727,   328,   137,
-  -333,   328,   232,   203,  -333,   328,   763,   763,   763,   763,
-   700,   169,    39,   712,   561,   498,   499,    39,   328,   138,
-   640,  -588,   636,   203,   641,   111,   112,   729,   328,   170,
-   507,   328,    19,   508,   745,   638,   509,  -333,   945,   519,
-   947,    90,   728,   524,   221,   951,   841,    15,    16,  1358,
-  -275,   563,     8,     9,   573,   548,   549,   594,    57,   279,
-   864,    91,   829,   328,   276,  1006,   223,  -588,  -588,   841,
-   396,   399,  1098,    94,   109,   110,  1487,   616,   617,   618,
-   746,  1483,   637,  -588,   126,   127,   277,   240,   137,   676,
-  1142,   339,   888,  1496,   893,   894,  -275,  -275,   341,   849,
-   757,   835,   837,  1500,   639,   129,   130,   484,   830,    15,
-    16,   639,  -269,   831,  -383,   350,   367,   354,  1157,  1160,
-  1513,   833,   527,  1172,   358,   121,   938,   111,   112,   232,
-   516,   359,   450,   516,   894,    27,   964,   129,   130,  1524,
-   191,  -266,   203,  -383,   226,   850,   851,  -383,  1092,   396,
-   768,   819,   912,   911,   355,   275,  1094,   952,   597,   832,
-  1096,   820,  1541,   516,    90,  1430,  1484,   834,    94,    95,
-    96,   379,   939,   636,    89,   821,   203,   994,   995,   996,
-   636,   712,   965,   283,    91,   637,   970,   634,   280,   368,
-   369,    10,   171,  -383,  1093,  1168,  1169,   400,  1171,  1160,
-     8,     9,  1095,   953,   401,   356,  1097,   639,  1207,  1209,
-    88,  1431,  1485,  1213,  1214,   203,   126,   127,  -121,   758,
-    27,   857,    97,    98,    99,    91,    58,    22,    58,  -583,
-    89,   344,   348,   634,   191,    58,   203,    -7,   126,  1239,
-   507,   508,    28,   298,   637,   328,   328,   328,    71,   637,
-    71,   721,   357,   129,   130,  1252,   727,    71,   727,   409,
-   721,  1003,  1004,  1005,   727,   727,   639,    27,   421,   129,
-   130,   639,   136,   422,    33,   465,   636,   478,   523,    41,
-   958,   959,  1119,  1120,  1121,   480,   729,   481,   729,   987,
-   482,   129,   130,  1452,   520,   729,   521,     7,   126,   127,
-    10,   728,   203,   728,    90,  1144,  1145,  1146,     8,     9,
-   728,    41,  -122,  1473,  1307,   478,    41,    57,   763,    57,
-  1340,  1341,  1033,   -45,    91,   491,    57,   483,   -45,   438,
-  1411,   360,   361,   362,   500,   636,    22,   236,   523,   -45,
-   636,   969,   979,   231,  -334,   501,    15,    16,   502,   763,
-   608,    28,    29,  1334,  -544,   637,   503,  -544,   240,   676,
-   504,   129,   130,   151,    94,    95,    96,   564,   207,   208,
-   209,    94,   109,   110,   610,   232,   611,   639,  -334,   835,
-   837,   639,  -334,    33,   634,   363,   364,   637,   626,   763,
-   613,   634,   637,   846,   857,    -6,   153,   614,   210,   446,
-  1412,   151,   115,   116,   117,  -544,   615,  -544,  -544,   639,
-  -544,   650,  1077,  1078,   639,  -334,    27,   653,    97,    98,
-   211,  -544,   236,  -544,   670,   111,   112,   113,   689,   737,
-   676,   767,  1393,   514,   153,   -99,   693,    15,    16,  -544,
-  -544,   126,   127,  -544,   763,    88,   636,   740,   395,   398,
-   636,   328,   639,  1130,    27,  -544,   118,   119,   637,   280,
-   368,   369,    10,   438,  1416,    89,   212,   213,   214,   -99,
-   637,   395,   398,   -99,   659,   741,    88,    88,   636,   742,
-   639,   758,   749,   636,  1314,  1345,   750,   634,   769,   770,
-   396,   768,   639,    58,   129,   130,    89,    89,    22,   772,
-   -97,   827,    15,    16,   828,   637,   -99,   637,  1399,   842,
-   844,    27,   233,    28,   298,    71,   846,   100,   721,   867,
-  1409,   636,   868,   727,   150,  1132,   114,   639,   236,   639,
-   877,  1134,  1135,   880,   -97,  1132,  1137,   878,   -97,  1135,
-   360,   361,   362,   884,    90,    33,   634,   896,   669,   636,
-  -269,   634,  1346,   729,  1039,   151,   151,   151,   901,   918,
-   919,   636,  1106,   411,    91,   920,   640,   215,   728,   926,
-  1454,   -97,   545,   546,   547,   548,   549,  1399,   151,   151,
-   151,   507,   508,  -787,    57,   948,   637,   912,   153,   153,
-   153,   936,    27,   940,   363,   364,   636,   550,   636,   543,
-   544,   545,   546,   547,   548,   549,  1188,  1189,   639,   676,
-   943,   153,   153,   153,  1477,   941,  1399,   946,   514,   988,
-  1007,   514,  1008,  1009,  1530,   760,   365,  1010,   758,  1188,
-  1189,   639,   661,  1012,  1011,  1013,   551,   552,   514,   126,
-   127,   553,   554,   555,   556,    58,  1014,  1399,   392,  1015,
-  1016,   514,  1017,   691,  -120,   787,  1019,   634,  1020,  1023,
-  1022,   634,  1024,  1038,   699,  1026,  1025,    71,  1027,  1041,
-   721,   479,   115,   116,   117,   727,  1028,   636,  1040,  1042,
-   128,   809,  1048,   115,   702,   703,  1049,   826,  1050,   634,
-    27,  1056,   129,   130,   634,   115,   702,   703,  1058,   704,
-   636,  1068,  1059,   126,   127,   729,  1295,     7,   126,   127,
-    10,   705,  1061,    13,  1071,  1091,   763,   396,   399,  1074,
-   728,   456,   458,   705,  1109,   942,   118,   119,    71,  1116,
-   706,  1289,   634,  1133,   471,    27,    57,   118,   119,  1138,
-   396,  1205,  1143,    15,    16,  1290,    22,    27,  -383,   118,
-   119,  1367,  1147,  1367,    27,  1152,   129,   130,  1161,    27,
-   634,    28,    29,  1165,  1153,  1449,  1294,  1166,   992,  1173,
-   485,  1154,   634,   997,  1174,    31,  -383,  -383,  1155,  1170,
-   486,  -383,   395,   398,  1175,    32,   484,    94,   109,   110,
-   418,  1316,  1317,    33,  1295,  1176,  1177,    57,    34,   191,
-  1180,  1295,  1181,   506,  1184,   126,   127,   634,  1295,   634,
-   475,   280,   368,   369,    10,  1187,    71,  1192,  1206,  1289,
-  1216,  1217,  1220,    71,  1224,  1246,  1289,  1247,  1254,  1258,
-    71,   507,   508,  1289,   203,  1257,  1262,  1263,  1264,  1265,
-  1290,   111,   112,  1198,   196,   197,   198,  1290,   151,  1305,
-    22,    14,  1344,   619,  1294,  1329,    27,   231,   129,   130,
-  1330,  1294,  1331,  1332,  1335,    28,   298,  1337,  1294,    19,
-  1353,  1354,   819,  1355,    21,  1051,  1363,  1052,  1365,  1378,
-  1401,   153,   820,    24,  1402,    57,  1406,  1408,   634,   151,
-   151,   151,    57,    94,    95,    96,   821,    33,   644,    57,
-  1410,  1465,   115,   702,   703,  1423,  1295,  1442,  1428,  1435,
-  1295,   634,  1425,  1447,  1463,  1464,   944,  1491,  1495,  1502,
-   328,  1475,   153,   153,   153,  1476,  1478,   448,    71,   277,
-  1509,  1289,    71,   637,  1512,  1289,  1442,  1515,  1516,  1295,
-   687,   688,  1521,  1518,  1526,  1531,  1036,    97,    98,  1290,
-  1295,   989,   196,   197,   198,   639,   118,   119,   277,    14,
-  1534,    71,   701,  1295,  1289,  1533,  1294,   197,   198,  1538,
-  1294,  1539,    71,    14,  1543,  1289,  1544,    19,  1290,   514,
-     1,   203,    21,     5,  1075,    71,   666,   238,  1289,  1290,
-   655,    24,  1442,   666,   625,  1295,    21,    57,   275,  1294,
-   407,    57,  1290,  1451,   408,    24,   865,  1193,   980,  1106,
-  1294,   238,   956,   338,   277,   773,  1433,    71,   519,  1540,
-  1289,  1489,   388,  1294,   636,   490,  1370,   275,   780,  1148,
-    57,  1150,  1070,   917,  1290,  1122,  1069,  1218,    79,   460,
-   238,    57,  1295,  1140,   982,   957,  1241,   870,   103,   238,
-  1067,   396,  1205,   814,    57,  1294,   570,   441,   666,   132,
-     7,     8,     9,    10,    71,   141,   141,  1289,   141,   366,
-    79,  1117,  1376,  1304,  1497,    79,  1474,   126,   127,  1520,
-  1468,  1290,   475,   275,  1179,  1522,    57,  1108,   185,  1306,
-    79,     0,     0,   238,     0,     0,     0,     0,   218,    22,
-     0,     0,  1294,     0,     0,   103,   231,     0,     0,     0,
-   280,     8,     9,    10,    28,    29,   242,   103,     0,     0,
-     0,     0,   666,     0,   666,   666,   238,     0,    27,     0,
-   129,   130,   881,    57,     0,     0,     0,     0,   232,   103,
-     0,   895,   507,   508,   485,     0,    33,     0,     0,    22,
-   238,   666,     0,  1219,   486,     0,   231,  1223,   666,     0,
-     0,     0,   132,     0,    28,   298,   780,   132,     0,    79,
-     0,     0,     0,   141,  1125,  1126,   390,   141,     0,     0,
-   141,   141,   141,     0,     0,     0,     0,     0,   232,    94,
-   109,   110,   470,   194,    79,   202,    33,     8,     9,     0,
-   381,    12,    13,  1139,     0,   672,     0,    14,  1259,   185,
-   185,   185,     0,   280,     8,     9,    10,     7,     8,     9,
-    10,     0,    17,    13,    18,    19,     0,     0,    22,   514,
-    21,     0,     0,     0,     0,   634,     0,     0,   185,    24,
-     0,   238,     0,   111,   112,     0,     0,     0,    27,     0,
-   129,   130,    22,   459,     0,     0,    22,     0,     0,   231,
-     0,   103,   573,     7,     8,     9,    10,    28,   298,    27,
-     0,    28,    29,   141,  1325,  1326,     0,  1248,  1249,  1250,
-  1251,     0,     0,     0,     0,   885,     0,     0,  1255,     0,
-  1336,   673,   429,   431,   435,   886,     0,     0,   238,    33,
-     0,     0,    22,    33,     0,   576,     0,     0,   887,   578,
-     0,   103,   487,     0,     0,    27,     0,    28,    29,     0,
-     0,   174,     0,     0,   666,     0,     0,     0,   202,   126,
-   127,   175,     0,     0,    13,     0,   451,   202,  1381,  1382,
-     0,   176,     0,     0,     0,     0,     0,  1227,  1228,    33,
-  1237,  1238,     0,  1240,   177,   103,     0,  1391,  1392,   571,
-     0,   487,   487,   587,     0,     0,   467,   238,   196,   197,
-   198,     0,    79,   573,     0,    14,     0,     0,   619,     0,
-    27,     0,   129,   130,   666,     0,     0,   132,     0,     0,
-     0,     0,     0,    19,     0,   238,   574,   666,    21,   666,
-     0,   666,     0,   667,     0,     0,   575,    24,   132,  1357,
-   674,     0,     0,     0,   103,     0,   576,   185,   103,   577,
-   578,     0,     0,     0,     0,     0,     0,     0,   141,     0,
-     0,   141,     0,     0,     0,     0,   141,     0,     0,     0,
-     0,  1310,  1311,     0,   666,     0,   565,     0,   280,   368,
-   369,    10,     0,   566,   592,     8,     9,     0,   280,   126,
-   127,    10,   185,     0,   185,     0,   185,   185,   185,     0,
-     0,     0,   185,     0,   666,   755,     0,   185,     0,   238,
-   185,     0,     0,  1407,     0,     0,     0,    22,     0,     0,
-   288,   593,   666,    22,   231,   238,    79,    22,     0,     0,
-    27,     0,    28,   298,   231,     0,    27,     0,   129,   130,
-     0,     0,    28,   298,     0,     0,   966,   967,     9,    10,
-     0,   194,   202,  1159,     0,     0,   787,  1440,     0,     0,
-     0,  1385,  1386,  1387,   567,   103,   103,   103,   103,   808,
-   514,   810,   811,     0,    33,   685,     0,   686,     0,   429,
-   431,   435,     0,     0,     0,    22,  1440,     0,     0,     0,
-   696,     0,   449,   197,   198,     0,     0,     0,    27,    14,
-    28,    29,     0,     0,   467,   861,   968,     0,     0,     0,
-     0,   451,   202,     0,   175,   467,     0,    19,     0,   451,
-     0,     0,    21,   103,   176,   487,   184,     0,     0,  1419,
-  1420,    24,    33,  1159,     0,     0,   571,   177,   487,   487,
-  1501,   587,  1440,     0,     0,     0,     0,     0,   858,     0,
-     0,   237,   860,     0,   241,   541,   542,   543,   544,   545,
-   546,   547,   548,   549,  1519,     0,   185,     0,     0,     0,
-     0,     0,     0,     0,     0,   237,     0,   343,   787,     0,
-   715,     0,     7,     8,   716,    10,   381,    12,    13,     0,
-   666,     0,   666,    14,   666,     0,     0,     0,   185,   892,
-   185,   185,   218,   587,     0,     0,     0,     0,    17,     0,
+   603,   121,    56,    37,   178,    36,   921,   366,   444,   645,
+   151,   229,    41,   402,   102,   910,   643,   471,   394,   397,
+  1046,   646,   717,   963,   612,   625,   278,   374,    45,   699,
+   908,    58,   992,   236,    56,    37,    58,    36,   153,    56,
+    37,  1349,    36,   463,    41,   512,   515,   172,  1449,    41,
+  1109,   191,   443,   460,    54,   666,   902,  1372,   206,  1208,
+    45,   451,   581,  1471,  1469,    45,   226,   581,  1387,   325,
+   347,  1466,   158,   351,   738,  1390,   543,   663,   276,   352,
+   190,   581,   240,  1110,   409,   194,    54,   202,  1492,  1001,
+   879,    54,   858,   483,  1006,   236,   139,   143,  1460,   858,
+    -1,   340,   340,  1231,  1232,   291,   449,   452,   424,    94,
+   109,   110,   474,   159,  1479,    -2,   372,  1252,    87,   497,
+   498,   377,   151,   151,   151,   233,  1524,  1515,   375,   376,
+   384,   447,   615,   383,  1111,   664,  1209,  1489,    85,   236,
+   880,  1015,  -329,  1482,  1018,   172,   410,   739,   277,   929,
+   153,   153,   153,   151,   425,    58,    92,   483,    56,   381,
+   284,  1480,   285,   111,   112,   688,   657,  1492,  1516,  1447,
+  1539,   341,   341,   772,   993,    88,   172,  1456,   785,   411,
+   998,   153,   137,   929,    45,   382,   860,  1368,    86,   100,
+  -127,   206,  1195,    93,  1221,    89,   106,   930,   114,   206,
+   931,  -329,  1352,   935,   150,   410,  1322,   386,   197,   198,
+    54,   393,   396,  1071,    14,  1328,  1329,  1477,  1330,  1520,
+   202,   651,   652,   919,   994,    15,    16,   240,   450,   202,
+  -388,   930,   585,  1177,   931,   932,  -793,    21,   411,   215,
+   427,   429,  1196,  1349,  1222,  1352,    24,   786,   591,  1545,
+  -278,   936,  1353,  -126,   937,  1537,   516,   517,   466,  -388,
+   697,   107,  1518,  -388,   591,   136,  1521,  -593,   703,   932,
+   887,   525,   226,   670,   526,   108,   578,   527,   340,   472,
+   537,   538,   502,   134,   532,   383,  1097,  1098,   478,   938,
+   136,   580,   612,   957,   771,  1427,  -278,  -278,   364,  1546,
+  1083,   883,  1538,   394,   397,   702,   922,  1134,   156,  -388,
+   771,   500,  -271,  -593,  -593,   645,   340,   395,   398,  1138,
+   391,   740,   301,  1493,   958,   473,  1180,   942,   276,  -593,
+     8,     9,   648,   586,   760,  1506,   226,   501,    27,   968,
+   372,   603,   416,    90,   163,  1510,   240,   150,   341,   832,
+   449,   452,   157,  -280,  1159,   165,  1161,   499,   449,   417,
+   203,   630,  1523,    91,  1431,  1432,   833,  1266,   858,   629,
+   452,   126,   127,   969,   642,   126,   127,   970,   191,   169,
+   474,  1534,   170,   129,   130,   674,   341,   633,   418,   705,
+   452,   858,  -553,   455,   457,   834,  1162,  1163,   277,  -280,
+  -280,     8,   476,  -553,  1551,   888,   470,   151,   151,   151,
+   971,   608,   194,   202,   832,  -274,  1361,   126,   127,    19,
+   681,   889,    27,   751,   129,   130,    27,   155,   129,   130,
+   858,   833,   162,   591,   279,   153,   153,   153,  -553,   171,
+   221,  1139,   836,   846,   644,   126,   127,   206,   992,  -553,
+   439,   762,   837,    87,   129,   130,    58,   609,  1073,   733,
+   834,  1176,   725,   206,   223,   466,   838,   204,   205,   752,
+   129,   130,   450,   202,   532,  1404,   466,   532,   477,   771,
+   450,   774,   137,   848,  1406,  1407,   525,   526,   524,   847,
+   644,   534,   850,   203,   532,    39,   692,   693,   129,   130,
+   567,   203,   203,   126,   127,   532,   340,   731,  1323,   340,
+   804,   732,   866,   340,   777,   777,   777,   777,   645,   578,
+    87,   717,   477,   946,   621,   643,   340,    39,   203,   849,
+   646,   202,    39,   137,   288,   972,   826,   340,   851,   568,
+   569,   953,   843,   955,   570,   571,   572,   573,   959,   437,
+   438,     8,     9,   138,   612,   290,   129,   130,   867,   868,
+   758,   115,   116,   117,  1108,   911,   707,   708,   467,   947,
+   340,   276,  1102,     8,     9,    90,   341,   349,   203,   341,
+   232,   973,   353,   341,   341,   341,   341,   341,   858,   895,
+   642,   900,   901,  1014,   483,    91,   341,   681,   357,  1497,
+  1104,   366,   395,   398,   129,   130,   240,   341,   121,   449,
+   912,   858,   358,    27,   468,   118,   119,    27,  1103,   913,
+   914,   543,   293,   367,   368,    10,   129,   130,   232,  1106,
+   378,   901,  1440,   706,  -338,   191,    15,    16,   920,   226,
+   341,   277,   203,  1370,  1185,  1378,  1105,  1383,  1181,  1182,
+   477,  1184,   359,   360,   361,   136,   915,   852,   854,   354,
+   644,    22,   615,   919,   966,   967,  -271,   644,  -338,   194,
+   399,   202,  -338,   995,    27,  1107,    28,   311,  1441,    89,
+   642,   534,   978,   355,   534,   171,   203,   126,  1249,  1047,
+  1494,   717,   400,    94,   109,   110,  -588,   359,   360,   361,
+   395,   782,   296,    91,    27,  -338,   362,   363,    33,   772,
+   202,    -7,   534,    88,   445,   446,   795,   749,   408,    90,
+    58,  -124,    58,   733,    90,   733,   725,  -125,   191,    58,
+   671,   450,   733,    89,   466,   725,  1495,   671,   642,    91,
+   129,   130,   420,   642,    91,   203,   203,   111,   112,   113,
+   644,   362,   363,   203,   960,   464,   977,   987,    88,    15,
+    16,    90,   194,   750,   477,   203,  1140,   356,   466,   126,
+   127,   731,   874,   731,  -158,   732,  -158,   732,    89,   731,
+   731,    91,  1350,  1351,   732,   203,   421,   136,  1129,  1130,
+  1131,   672,  1462,   481,     7,     8,   230,    10,   679,  1055,
+   961,  1052,   565,   566,   203,  1483,   886,  -339,   644,    15,
+    16,   479,   490,   644,   491,  1002,  1003,  1004,   903,   480,
+    27,   671,   129,   130,    88,   777,   525,   526,   493,  1049,
+    15,    16,  1324,    22,   532,  -388,   836,  1154,  1155,  1156,
+   231,  -339,   482,   795,    89,  -339,   837,   509,    28,    29,
+    94,    95,    96,   236,   507,  1152,   777,   115,   116,   117,
+   838,    88,   642,  -388,  -388,   518,   681,   519,  -388,  1355,
+   151,   520,   232,   521,   -44,   522,   240,   539,  -339,   -44,
+    33,    89,   769,   642,   671,   777,   671,   671,   540,   642,
+   -44,  1170,  1173,   197,   198,   341,   633,   581,   153,    14,
+   437,  1421,    27,   590,    97,    98,    99,   616,   675,   151,
+    90,   118,   119,  1142,   671,   617,   741,  1127,  1356,  1144,
+  1145,   671,    21,  1142,  1147,   628,   341,  1145,   681,   655,
+    91,    24,   644,    -6,   852,   854,   644,   153,   658,   236,
+   694,   874,   777,   744,   203,   825,   698,   827,   828,   340,
+  1011,  1012,  1013,   644,   745,   341,   642,  1087,  1088,   644,
+   765,   394,   397,   445,  1422,   772,  1173,   746,   642,   126,
+   127,   493,   437,  1426,   753,  1217,  1219,   766,   754,   781,
+  1223,  1224,   878,   203,   394,   397,   783,   490,   784,   491,
+   664,    58,   786,   844,   733,   466,   466,   725,   644,   845,
+   859,   861,  1409,   642,   203,   642,   293,   367,   368,    10,
+   128,   863,   341,  1186,  1419,   881,   882,   884,    21,   341,
+    27,   909,   129,   130,   466,  1262,   644,   890,  -274,   891,
+   926,   233,   562,   563,   564,   565,   566,   904,   644,   410,
+   395,   782,   731,   927,   928,    22,   732,   236,   126,   127,
+   934,  -792,   238,   474,   621,   944,   949,   948,   951,   956,
+    28,   311,   886,   954,   150,   151,   151,   151,   645,   525,
+   526,  1409,   996,   644,   696,   644,   238,   532,   920,   203,
+  1464,  1317,  1021,   671,  1023,   704,   642,  1024,   151,   151,
+   151,  1028,    33,   153,   153,   153,  1029,  1025,  1026,    27,
+  1030,   129,   130,  1116,  1027,   238,  1031,  1032,  1487,   681,
+  1409,  1033,   772,  -123,   238,   484,   153,   153,   153,  -102,
+  1344,    15,    16,  1035,  1036,   485,   666,  1038,  1258,  1259,
+  1260,  1261,    94,    95,    96,  1039,   207,   208,   209,  1265,
+  1041,  1409,  1040,  1054,  1042,    58,   671,  1043,   733,  1044,
+  1057,   725,  1058,  -102,  1198,  1199,   644,  -102,   238,   671,
+  1056,   671,  1064,   671,  1065,  1086,   210,  1074,  1066,  1072,
+   466,   466,  1075,   466,   466,  1077,   466,  1198,  1199,   644,
+  1079,  1326,  1327,  1101,    27,  1082,    97,    98,   211,  1119,
+  -102,   238,   478,   671,  1143,  -100,   731,    15,    16,  1403,
+   732,  1126,  1148,  1153,  1165,  1157,  1305,  1048,  1164,  1304,
+  1300,  1172,  1299,  1166,  1167,   238,   777,  1174,  1183,  1168,
+  1059,  1178,  1060,  1179,  1061,   126,   127,   671,  1187,  -100,
+  1194,  1188,  1189,  -100,   212,   213,   214,   560,   561,   562,
+   563,   564,   565,   566,   417,   671,  1264,  1190,  1193,  1197,
+  1202,  1216,  1268,  1377,  1081,  1377,   537,  1367,  1226,  1227,
+   395,   398,  1230,   639,   466,   466,  -100,  1234,  1267,   483,
+   338,   348,    94,   109,   110,  1256,    27,  1459,   129,   130,
+  1208,  1257,  1272,   395,  1215,  1172,   341,  1273,  1099,  1275,
+  1274,  1315,   484,  1354,  1305,   394,   397,  1304,  1339,   191,
+  1299,  1305,   485,  1340,  1304,  1300,  1341,  1299,  1305,   639,
+  1342,  1304,  1300,  1347,  1299,  1345,  1363,   447,   238,  1364,
+  1365,  1373,  1375,  1388,  1416,  1411,   111,   112,  1412,  1418,
+  1420,  1417,  1433,   194,   202,  1438,     8,     9,  1435,   380,
+    12,    13,  1445,   952,   677,  1457,    14,  1473,  1474,  1501,
+  1485,  1505,  1486,  1488,   466,   466,   466,  1512,   151,  1519,
+  1522,    17,   238,    18,    19,  1525,  1526,  1528,  1541,    21,
+    94,    95,    96,  1548,   804,  1450,  1531,   997,    24,  1543,
+   525,   526,  1536,  1278,  1544,  1549,   153,    27,   532,   129,
+   130,  1540,  1553,  1554,   115,   707,   708,     1,     5,   151,
+   151,   151,   660,  1475,  1450,   627,  1305,  1452,   406,  1304,
+  1305,  1499,  1299,  1304,  1300,   671,  1299,   671,  1084,   671,
+   340,  1461,   466,   466,    97,    98,   407,   153,   153,   153,
+   678,   238,   988,   642,   964,  1203,  1452,   287,   759,  1305,
+  1443,   387,  1304,  1300,  1550,  1299,   489,   496,   118,   119,
+  1305,  1380,  1078,  1304,  1300,   925,  1299,  1022,  1511,   238,
+  1450,  1228,  1132,  1305,   459,  1150,  1304,  1300,   965,  1299,
+  1369,   990,     7,   126,   127,    10,  1204,   277,  1205,   639,
+  1206,  1251,  1529,   768,   831,   536,   639,    79,   692,   693,
+   341,  1020,  1452,   440,   365,  1305,   804,   103,  1304,  1300,
+   587,  1299,  1386,   644,  1314,  1507,   277,   671,   132,  1484,
+  1478,    22,  1530,  1532,   141,   141,  1118,   141,   231,    79,
+   610,     8,     9,     0,    79,  1405,    28,    29,   466,  1316,
+     0,     0,     0,   126,   127,     0,     0,   185,    13,    79,
+     0,     0,  1305,   638,     0,  1304,  1300,   218,  1299,     0,
+   232,     0,  1116,     0,   103,     0,   301,   611,    33,    22,
+     0,   238,   277,     0,     0,   242,   103,     0,  1271,   639,
+     0,     0,    27,     0,   129,   130,     0,   591,   238,     0,
+    94,   109,   110,   469,    27,     0,   129,   130,   103,     0,
+     0,     0,     0,     0,   395,  1215,     0,     0,     0,     0,
+   592,     0,     0,     0,  1135,  1136,     0,   203,     0,     0,
+   593,   132,  -549,     0,     0,  -549,   132,     0,    79,    22,
+   594,  -280,   141,   595,   596,   389,   141,   639,     0,   141,
+   141,   141,   639,  1149,   111,   112,  -280,  -280,     0,     0,
+     0,  -280,     0,    79,     0,     0,     0,     0,     0,     0,
+     0,   863,     0,     0,     0,     0,     0,  -280,   185,   185,
+   185,     0,     0,  -549,     0,  -549,  -549,   950,  -549,  -280,
+  -280,     0,  -280,     0,  -280,   770,     0,     0,   773,  -549,
+     0,  -549,   775,   776,   778,   779,   780,   185,     0,     0,
+     0,     0,     0,     0,   671,   536,     0,  -549,  -549,     0,
+     0,  -549,   458,  -280,  -280,     0,   798,  -280,     0,  1000,
+   103,     0,     0,  -549,  1005,     0,     0,     0,     0,  -280,
+     8,     9,   141,   380,    12,    13,     0,     0,   677,     0,
+    14,     0,     0,     0,     0,     0,    94,   109,   110,   829,
+   618,   619,   620,     0,     0,    17,     0,    18,    19,     0,
+     0,   639,     0,    21,   203,   639,   196,   197,   198,   856,
+   103,   486,    24,    14,   591,     0,   856,     0,     0,     0,
+    79,    27,   639,   129,   130,     0,     0,     0,   639,  1237,
+  1238,    19,  1247,  1248,     0,  1250,    21,   592,     8,     9,
+   111,   112,    12,    13,     0,    24,     0,   593,    14,     7,
+     8,     9,    10,     0,     0,    13,     0,   594,   239,     0,
+   595,   596,     0,    17,   678,    18,   103,   639,     0,     0,
+   588,    21,   486,   486,   605,   428,   430,   434,     0,  1067,
+    24,  1068,     0,     0,     0,   132,     0,     0,    22,    27,
+     0,   129,   130,   574,   591,   639,     0,     0,   238,   638,
+   238,    27,     0,    28,    29,     0,   132,   639,     0,     0,
+     0,     0,   103,     0,     0,   185,   103,   892,     0,   115,
+   707,   708,   238,  1320,  1321,     0,   141,   893,   575,   141,
+     0,   401,     0,     0,   141,    33,     0,   594,     0,     0,
+   894,   596,   639,     0,   639,     0,     0,   710,     0,     0,
+   426,     7,     8,     9,    10,     0,     0,   225,     0,     0,
+   185,     0,   185,   442,   185,   185,   185,     0,     0,     0,
+   185,    27,     0,   118,   119,   185,     0,     0,   185,   126,
+   127,     0,     0,   197,   198,     0,     0,     0,     0,    14,
+    22,     0,     0,     0,    79,     0,   591,   196,   197,   198,
+     0,     0,     0,    27,    14,    28,    29,     0,   238,     0,
+     0,     0,    21,  1395,  1396,  1397,     0,     0,     0,   892,
+     0,    24,    19,   591,  1158,   639,  1160,    21,     0,   893,
+    27,     0,   129,   130,   185,     0,    24,    33,     0,   594,
+     0,     0,   894,   596,  1045,     0,   592,     0,   639,     0,
+     0,   649,   103,   103,   103,   103,   593,     0,   448,   197,
+   198,     0,     0,     0,     0,    14,   594,     0,     0,   602,
+   596,     0,     0,     0,     0,   798,     0,     0,     0,     0,
+     0,  1429,  1430,    19,     0,   856,     0,  1192,    21,   115,
+   707,   708,     0,   709,     0,     0,     0,    24,     0,   238,
+     0,     0,   638,     0,  1085,     0,     0,     0,   856,   103,
+     0,   486,     7,     8,     9,    10,   238,   710,    13,     0,
+     0,     0,   588,     0,   711,   486,   486,   690,   605,   691,
+     0,   428,   430,   434,     0,   875,     0,     0,     0,   877,
+     0,    27,   701,   118,   119,     0,     0,   856,     0,     0,
+  1229,    22,     0,     0,  1233,     0,     0,   591,     0,     0,
+     0,  1121,     0,     0,    27,     0,    28,    29,  1128,   238,
+     0,     0,   185,   899,   185,   185,   218,   605,     0,     0,
+  1089,   196,   197,   198,     0,     0,     0,  1517,    14,     0,
+  1090,     7,     8,     9,    10,     0,     0,   474,    33,     0,
+   594,     0,     0,  1091,   596,     0,    19,     0,  1269,     0,
+     0,    21,   695,     0,   185,     0,     0,   700,   899,     0,
+    24,     0,     0,     0,     0,   185,   185,     0,   185,     0,
+    22,     0,     0,     0,     0,   763,   591,     0,     0,     7,
+     8,     9,    10,    27,   742,    28,    29,     0,     0,   747,
+     0,     0,     0,     0,     0,   132,     0,     0,    79,   892,
+    79,   755,   756,     0,   757,   985,    79,    79,     0,   893,
+     0,  1335,  1336,     0,     0,     0,   103,    33,    22,   594,
+     0,   103,   894,   596,   591,     0,     0,  1346,   486,   486,
+   486,    27,     0,    28,    29,     0,     8,     9,     0,     0,
+    12,    13,     0,     0,     0,   856,    14,   892,     0,     0,
+   486,     0,     0,     0,    94,   109,   110,   893,   207,   208,
+   209,    17,     0,    18,     0,    33,     0,   594,   856,    21,
+   894,   596,     0,     0,     0,  1391,  1392,     0,    24,     0,
+     0,     0,     7,     8,     9,    10,     0,    27,   210,   129,
+   130,     0,     0,     0,  1401,  1402,     0,     0,     0,     0,
+     0,     0,     0,   103,     0,   600,   604,   607,   111,   112,
+     0,     0,   639,     0,     0,   864,   865,     0,     0,     0,
+   864,    22,     0,     0,     0,   486,   830,   486,   231,     0,
+     0,     0,   690,   691,   103,   701,    28,    29,   486,     0,
+   103,     0,   875,   875,   875,     0,     0,     0,     0,  1076,
+     7,   126,   127,    10,     0,     0,    13,     0,     0,     0,
+   232,   103,     0,   103,     0,   185,   185,  1093,    33,     0,
+     0,    82,   983,     0,     0,  1121,     0,     0,     0,     0,
+     0,   105,     0,     0,     0,     0,     0,     0,     0,    22,
+     0,   125,   133,     7,   126,   127,    10,     0,   142,   142,
+     0,   142,    27,    82,    28,    29,  1093,     0,    82,   126,
+   127,     0,     0,   197,   198,     0,     0,     0,    31,    14,
+   103,   142,     0,    82,     0,     0,     0,     0,    32,     0,
+     0,   219,    22,     0,   103,     0,    33,     0,   227,     0,
+     0,    34,    21,     0,     0,    27,   103,    28,    29,     0,
+   227,    24,     0,   591,     0,     0,     0,     0,     0,  1146,
+    27,   146,   129,   130,     0,     0,  1007,     0,  1009,    79,
+     0,   147,     0,     0,     0,     0,   592,     0,     0,    33,
+     0,   103,     0,   103,   148,     0,   593,     0,     0,     0,
+     0,   293,     8,     9,    10,   373,   594,     0,     0,   595,
+   596,     0,    82,     0,     0,     0,   142,     0,     0,     0,
+   142,     0,     0,   142,   142,   142,     0,     0,     0,     0,
+     0,     0,     0,   486,   486,     0,   486,    82,     0,     0,
+    22,     0,   428,   430,   434,     0,     0,   231,     0,     0,
+     0,     0,   142,   142,   142,    28,   311,     8,     9,     0,
+   380,    12,    13,  1050,  1051,  1463,  1053,    14,   853,   855,
+   185,   185,   185,   185,  1093,     0,     0,     0,   185,   232,
+     0,   142,    17,   434,    18,    19,     0,    33,     0,   536,
+    21,     0,     0,  1070,     0,  1093,  1093,  1093,     0,    24,
+     0,     0,   638,     0,   293,   367,   368,    10,    27,     0,
+   129,   130,     0,     0,     0,   897,   142,   600,   604,     0,
+   607,     0,     0,  1095,     0,     0,   185,     0,     0,     0,
+     0,   141,   720,    79,     7,     8,   721,    10,   380,    12,
+    13,     0,     0,    22,   582,    14,   293,   367,   368,    10,
+   231,   583,     0,     0,   227,   142,     0,   604,    28,   311,
+    17,     0,    18,    19,    82,     0,     0,     0,    21,     0,
+     0,     0,     0,    22,     0,     0,     0,    24,   722,     0,
+   632,   185,   185,     0,   185,    22,    27,  1133,    28,    29,
+    33,     0,   231,     0,   724,     0,     0,     0,    27,  1137,
+    28,   311,    31,     0,   103,     0,     0,     0,     0,     0,
+   227,     0,    32,     0,   589,     0,   142,   142,   606,     0,
+    33,     0,     0,   614,     0,    34,     0,     0,     0,   373,
+     0,     0,   584,     0,     0,     0,     0,   690,   691,   428,
+   430,   434,     0,     0,     0,   701,     0,     0,     0,     0,
+     0,     0,     0,   604,     0,     0,   227,     0,     0,   142,
+   227,     0,   428,   430,   434,     0,     0,     0,     0,     0,
+   142,     0,     0,   142,     0,     0,     0,     0,   142,     0,
+     0,     0,     0,     0,     0,     0,   185,   899,   185,     0,
+     0,     0,  1191,  1245,     0,     0,     0,     0,     0,   126,
+   127,     0,     0,     0,   142,     0,   142,     0,   142,   142,
+   142,     0,     0,     0,   142,     0,     0,     0,     0,   142,
+     0,  1201,   142,     0,     0,     0,     0,     0,  1062,     0,
+  1063,     0,     0,     7,     8,     9,    10,   719,    82,     0,
+     0,  1069,     0,   591,     0,   853,   855,     0,   690,   691,
+    27,   701,   129,   130,     0,     0,     0,     0,     0,     0,
+     0,     7,   126,   127,    10,  1093,   592,   225,   853,   855,
+     0,     0,    22,     0,     0,     0,   593,     0,   142,     0,
+  1254,     0,     0,     0,  1255,    27,   594,    28,    29,   595,
+   596,   174,     0,     0,     0,     0,   227,   227,   227,   227,
+    22,   175,     0,     0,     0,     0,  1093,  1093,  1093,     0,
+     0,   176,     0,    27,     0,    28,    29,     0,     0,    33,
+  1270,   103,    75,     0,   177,     0,     0,     0,     0,    31,
+     0,     0,     0,     0,     0,     0,   185,     0,     0,    32,
+     0,   293,     8,     9,    10,     0,     0,    33,     0,   140,
+   144,     0,    34,   227,    75,   142,     0,  1318,     0,    75,
+     0,  1319,     0,     0,     0,     0,     0,     0,     0,   142,
+   142,     0,   606,     0,   195,     0,     0,     0,     0,   876,
+    22,     0,     0,  1337,  1338,     0,     0,   231,     0,     0,
+     0,   614,     0,     0,     0,    28,   311,   293,   126,   127,
+    10,   293,     8,     9,    10,     0,     0,     0,   125,     0,
+     0,     0,     0,     0,     0,     0,   142,   606,   142,   142,
+   219,   606,     0,     0,     0,     0,     0,    33,     0,     0,
+     0,     0,   434,     0,     0,     0,    22,     0,   719,     0,
+    22,     0,     0,   231,     0,     0,     0,   231,     0,     0,
+     0,    28,   311,   385,     0,    28,   311,   388,   142,     0,
+     0,   390,   606,  1062,  1063,   853,   855,     0,     0,   142,
+   142,  1069,   142,   428,   430,   434,     0,     0,    75,   477,
+     0,     0,     0,    33,     0,     0,     0,    33,   853,   855,
+     0,     0,     0,   140,   144,     0,     0,     0,     0,   133,
+     0,     0,    82,     0,    82,     0,     0,     0,     0,   986,
+    82,    82,     7,     8,     9,    10,   187,    12,   188,     0,
+   227,     0,     0,    14,     0,   227,     0,     0,     0,     0,
+     0,     0,   142,   142,   142,     0,     0,     0,    17,     0,
     18,    19,     0,     0,     0,     0,    21,     0,     0,     0,
-     0,    22,     0,     0,     0,    24,   717,     0,   718,     0,
-     0,  1268,     0,     0,    27,  1507,    28,    29,     0,     0,
-   185,     0,   720,     0,   892,     0,     0,   184,   184,   184,
-    31,   185,   185,     0,   185,     0,     0,   442,     0,     0,
-    32,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-   202,     0,     0,    34,     0,     0,   184,     0,     0,     0,
-     0,   132,   666,     0,     0,    79,     0,    79,     0,     0,
-     0,     0,   977,    79,    79,     0,   238,     0,   238,   241,
-     0,     0,   194,   103,   202,     0,     0,     0,   103,     0,
-     0,     0,     0,     0,   237,   487,   487,   487,  1359,     0,
-     0,     0,     0,     0,     0,     0,     0,   487,     0,     0,
-   238,  1032,     0,     0,   685,   686,     0,   696,     0,     0,
-     0,     0,     0,   202,  1043,     0,  1044,     0,  1045,   280,
-     8,     9,    10,     0,     0,     0,     8,     9,     0,   381,
-    12,    13,     0,     0,   451,     0,    14,   467,     0,     0,
-     0,     0,     0,  1395,     0,   975,     0,   103,     0,     0,
-     0,    17,     0,    18,    19,     0,     0,     0,    22,    21,
-     0,  1073,     0,     0,     0,   231,   194,     0,   629,   487,
-     0,   487,   467,    28,   298,   237,   241,    27,   103,   129,
-   130,     0,   487,     0,   103,   238,   858,   858,   858,     0,
-     0,  1089,     0,  1060,     0,     0,     0,   478,     0,     0,
-     0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   103,    82,   103,   185,
-   185,  1083,     0,     0,     0,   184,     0,   105,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   125,   133,   666,
-     7,   126,   127,    10,   142,   142,   225,   142,     0,    82,
-     0,     0,     0,     0,    82,     0,     8,     9,     0,  1083,
-    12,   225,     0,     0,     0,     0,    14,   142,   238,    82,
-   184,     0,   184,   103,   184,   184,   184,   219,     0,    22,
-   184,    17,     0,    18,   227,   184,     0,   103,   184,    21,
-     0,   238,    27,     0,    28,    29,   227,     0,    24,   103,
-   573,     0,   429,   431,   435,     0,     0,    27,    31,   129,
-   130,     0,  1136,     0,     0,     0,     0,     0,    32,     0,
-     0,     0,    79,   574,     0,     0,    33,     0,     0,     0,
-     0,    34,     0,   575,   103,     0,   103,     0,     0,     0,
-     0,   374,   435,   576,   238,     0,   577,   578,    82,     0,
-     0,     0,   142,     0,     0,     0,   142,     0,     0,   142,
-   142,   142,     0,     0,     0,     0,     0,     0,   487,   487,
-     0,   487,     0,    82,     0,     0,     0,  1194,     0,  1195,
-     0,  1196,     0,     0,     0,     0,     0,     0,   142,   142,
-   142,     0,     0,     0,     0,   467,   467,     0,     0,     0,
-     0,     0,     7,   126,   127,    10,     0,     0,    13,     0,
-     0,   185,   185,   185,   185,  1083,     0,   142,     0,   185,
-     0,     0,     0,     0,   467,     0,     0,     0,     0,   237,
-   241,     0,     0,     0,     0,     0,  1083,  1083,  1083,     0,
-     0,    22,     0,     0,   184,     0,     0,     0,     0,     0,
-     0,     0,   142,     0,    27,     0,    28,    29,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   185,     0,  1261,
-   146,     0,   141,     0,    79,     0,   184,     0,   184,   184,
-   147,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-   227,   142,     0,   148,   685,   686,   429,   431,   435,     0,
-     0,     0,   696,     0,     0,     0,     0,     0,     0,     7,
-     8,     9,    10,     0,     0,    13,     0,     0,   184,   429,
-   431,   435,   185,   185,     0,   185,     0,     0,     0,   184,
-   184,     0,   184,     0,   227,     0,     0,     0,   572,     0,
-   142,   142,   588,     0,     0,   103,     0,   596,    22,     0,
-  1235,    82,     0,     0,     0,     0,   241,     0,     0,     0,
-     0,    27,     0,    28,    29,     0,   374,     0,   467,   467,
-   184,   467,   467,     0,   467,     0,     0,   175,     0,     0,
-     7,     8,     9,    10,   196,   197,   198,   176,     0,     0,
-     0,    14,     0,   227,     0,    33,   142,   227,     0,     0,
-   177,     0,     0,     0,     0,   685,   686,   142,   696,    19,
-   142,     0,     0,     0,    21,   142,     0,     0,     0,    22,
-     0,     0,     0,    24,     0,   573,     0,   185,   892,   185,
-     0,     0,    27,     0,    28,    29,     0,     0,     0,     0,
-     0,   142,     0,   142,     0,   142,   142,   142,   885,     0,
-     0,   142,     0,     0,     0,     0,   142,     0,   886,   142,
-     0,     0,   467,   467,     0,     0,    33,     0,   576,     0,
-     0,   887,   578,     0,   714,    82,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     7,   126,   127,
-    10,     0,     0,   475,     0,     0,     0,     0,     0,     0,
-   237,   241,   237,     0,     0,     0,  1083,     0,     0,     0,
-     0,     0,     0,     0,   227,   227,   227,   227,     0,     0,
-     0,     0,     0,     0,     0,     0,    22,   184,   184,  1082,
-     0,   194,   202,     0,   237,     0,     0,     0,     0,    27,
-     0,    28,    29,     0,     0,     0,     0,  1083,  1083,  1083,
-     0,     0,   467,   467,   467,    31,     0,     0,     0,     0,
-     0,     0,   103,     0,     0,    32,     0,  1082,     0,     0,
-     0,     0,   227,    33,   142,     0,     0,   185,    34,     0,
-     0,     0,     0,     0,     0,     0,     0,   142,   142,   435,
-   588,     0,     0,     0,     0,     0,     0,   859,     0,     0,
-     0,     0,     0,     0,     7,     8,     9,    10,     0,   596,
-   225,     0,     0,     8,     9,   142,   187,    12,   188,   442,
-   467,   467,     0,    14,     0,     0,     7,     8,     9,    10,
-   429,   431,   435,     0,     0,     0,     0,     0,    17,     0,
-    18,    19,   125,    22,     0,     0,    21,   142,   588,   142,
-   142,   219,   588,     0,     0,    24,    27,     0,    28,    29,
-     0,     0,     0,     0,    27,    22,   129,   130,     0,   714,
-     0,   573,   175,     0,     0,     0,     0,     0,    27,     0,
-    28,    29,   176,     0,     0,     0,     0,     0,     0,   142,
-    33,     0,     0,   588,   885,   177,     0,     0,     0,     0,
-   142,   142,   237,   142,   886,     0,     0,     0,     0,     0,
-     0,     0,    33,     0,   576,     0,     0,   887,   578,   184,
-   184,   184,   184,  1082,     0,  1190,   467,   184,     0,     0,
-   133,     0,     0,     0,    82,     0,    82,     0,     0,     0,
-     0,   978,    82,    82,  1082,  1082,  1082,     0,     0,     0,
-     0,     0,   227,     0,     0,     0,     0,   227,     0,     0,
-     0,     0,     0,     0,   142,   142,   142,  -355,     8,     9,
-  -355,  -355,    12,   225,     0,   184,   142,     0,    14,     0,
-     0,     0,     0,     0,  1229,  1230,     9,    10,     0,     0,
-   582,   586,   589,    17,     0,    18,  -355,     0,     0,     0,
-     0,    21,     0,     0,     0,     0,  -355,     0,     0,     0,
-    24,     0,   573,     0,     0,     0,     0,     0,     0,    27,
-     0,   129,   130,    22,     0,     0,   227,     0,     0,     0,
-   184,   184,     0,   184,     0,   574,    27,     0,    28,    29,
-     0,     0,     0,     0,  1231,   575,     0,     0,   142,     0,
-   142,    50,   175,  -355,     0,   576,     0,   227,   577,   578,
-     0,   142,   176,   227,     0,   859,   859,   859,     0,     0,
-    33,     0,   596,     0,     0,   177,     0,     0,    50,    50,
-     0,   149,     0,    50,     0,     0,     0,     0,    50,     0,
-     0,     0,     0,     0,     0,   227,     0,   227,   142,   142,
-   588,    50,     0,    50,   537,   538,   539,   540,   541,   542,
-   543,   544,   545,   546,   547,   548,   549,     6,     0,     7,
-     8,     9,    10,    11,    12,    13,   234,     0,     0,     0,
-    14,     0,     0,     0,     0,   184,     0,   184,   859,     0,
-     0,     0,     0,    15,    16,    17,     0,    18,    19,    20,
-     0,     0,   227,    21,     0,     0,     0,     0,    22,     0,
-     0,    23,    24,    25,   714,    26,   227,     0,     0,     0,
-     0,    27,     0,    28,    29,   371,     0,    30,   227,   371,
-   371,     0,    50,     0,     0,     0,    50,    31,   234,     0,
-    50,     0,     0,   149,   149,   149,     0,    32,     0,     0,
-     0,    82,     0,     0,     0,    33,     0,    50,     0,     0,
-    34,     0,     0,   227,  1082,   227,    35,     0,     0,     0,
-     0,     0,    50,    50,   149,     0,     0,     0,     0,     0,
-     0,     0,   234,     0,     0,     0,     0,   836,   838,     0,
-     0,     0,     0,     0,     0,     0,     0,   142,   142,     0,
-   142,    50,     0,     0,     0,  1082,  1082,  1082,     0,     0,
-     0,     0,     0,     0,     0,     0,     7,     8,     9,    10,
-     0,     0,   225,   538,   539,   540,   541,   542,   543,   544,
-   545,   546,   547,   548,   549,   184,    50,     0,     0,     0,
-   142,   142,   142,   142,   588,     0,     0,   890,   142,   582,
-   586,     0,   589,     0,   714,    22,     0,     0,     0,     0,
-     0,   573,     0,     0,     0,   859,   859,   859,    27,     0,
-    28,    29,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   714,     0,   885,     0,     0,     0,     0,   586,
-     0,     0,     0,     0,   886,     0,   142,     0,     0,     0,
-     0,   142,    33,    82,   576,   515,     0,   887,   578,     0,
-     7,     8,     9,    10,   381,    12,    13,     0,     0,   672,
-     0,    14,   371,     0,     0,     0,     0,     0,     0,     0,
-   234,     0,     0,     0,     0,    50,    17,     0,    18,    19,
-     0,     0,     0,     0,    21,    77,     0,     0,     0,    22,
-   371,   142,   142,    24,   142,   573,     0,     0,     0,     0,
-     0,     0,    27,     0,    28,    29,     0,     0,     0,     0,
-     0,   371,    77,    77,   227,    77,   586,    77,  1079,     0,
-    50,     0,    77,     0,     7,     8,     9,    10,  1080,     0,
-    13,    50,     0,     0,    50,    77,    33,    77,   576,    50,
-     0,  1081,   578,     0,     0,   673,   533,   534,   535,   536,
-   537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
-   547,   548,   549,    22,     0,    50,     0,    50,     0,   149,
-   149,   149,     0,     0,     0,    50,    27,     0,    28,    29,
-    50,     0,     0,    50,     0,     0,     0,     0,  1046,     0,
-  1047,     0,   432,     0,     0,     0,   142,   588,   142,    50,
-     0,  1053,   433,     0,     0,   836,   838,     0,     0,     0,
-    33,     0,     0,     0,     0,   434,    77,     0,     0,     0,
-    77,     0,     0,     0,    77,     0,     0,    77,    77,    77,
-   515,     0,     0,   515,     0,     0,     0,     0,   836,   838,
-     0,    77,     0,     0,     0,     0,     0,     0,   515,   515,
-   515,     0,     0,     0,     0,     0,    77,    77,    77,     0,
-     0,     0,     0,   515,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   859,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    77,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   715,     0,     7,     8,
-   716,    10,   381,    12,    13,     0,     0,     0,   234,    14,
-  1229,   126,   127,    10,     0,     0,   859,   859,   859,     0,
-    77,   515,     0,     0,    17,     0,    18,    19,    20,     0,
-     0,   227,    21,  -492,     0,     0,     0,    22,     0,    50,
-     0,    24,   717,     0,   718,     0,   142,     0,     0,    22,
-    27,     0,    28,    29,     0,     0,   719,     0,   720,     0,
-     0,     0,    27,     0,    28,    29,    31,     0,     0,     0,
-  1231,    50,    50,    50,    50,     0,    32,     0,    31,     0,
-     0,     0,     0,     0,    33,     0,     0,     0,    32,    34,
-     0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
-     0,    34,     0,     0,     0,     0,  -492,     0,     0,     0,
-     0,     0,     0,    50,     0,   595,     0,    50,     0,    77,
-     0,     0,     0,     0,    50,    50,     0,    50,     0,     0,
-  1046,  1047,   836,   838,     7,     8,     9,    10,  1053,     0,
-   475,     0,     0,     0,     0,     0,   318,     0,   318,     0,
-   318,     0,     0,     0,     0,   836,   838,     0,    50,     0,
-    50,     0,     0,     0,    77,    50,    50,    50,     0,     0,
-     0,     0,     0,    22,     0,    77,     0,     0,    77,     0,
-     0,     0,     0,    77,     0,     0,    27,     0,    28,    29,
-     0,     0,     0,     0,   515,   318,     0,   318,     0,     0,
-     0,     0,   175,     0,     0,     0,     0,     0,     0,    77,
-     0,    77,   176,    77,    77,    77,     0,     0,     0,    77,
-    33,     0,     0,     0,    77,   177,   786,    77,   280,     8,
-     9,    10,   381,    12,   281,   282,   283,     0,   284,    14,
-     0,  1046,  1047,    77,  1053,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    17,   285,    18,    19,    20,     0,
-   286,   287,    21,     0,   288,   289,   290,    22,   291,   292,
-     0,    24,     0,     0,     0,   293,   294,   295,   296,   297,
-    27,     0,    28,   298,  1436,     0,  -745,   299,     0,   515,
-   515,   515,     0,   300,     0,   234,   301,   126,   127,     0,
-     0,   197,   198,     0,   302,   303,   304,    14,     0,     0,
-     0,     0,   305,   306,   307,     0,     0,     0,     0,   308,
-     0,     0,    50,    50,   149,     0,     0,     0,     0,   234,
-    21,     0,     0,     0,     0,     0,     0,   309,     0,    24,
-     0,   573,     0,     0,     0,     0,     0,     0,    27,     0,
-   129,   130,     0,   595,     0,     0,     0,     0,   505,     0,
-     0,     0,  1105,     0,   574,   243,     0,     0,     8,     9,
-     0,     0,    12,    13,   575,     0,     0,     0,    14,     0,
-     0,     0,     0,    77,   576,     0,     0,   584,   578,     0,
-     0,     0,     0,    17,     0,    18,   318,     0,     0,     0,
-     0,    21,     0,   244,   245,     0,     0,     0,     0,     0,
-    24,     0,   246,     0,   234,    77,    77,    77,    77,    27,
-     0,   129,   130,     0,   247,    50,     0,     0,   248,   249,
-   250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-   260,   261,   262,   263,   264,   265,   266,   267,   268,     0,
-     0,   269,   270,   271,     0,     0,   272,    77,     0,   273,
-     0,    77,     0,     0,     0,     0,     0,     0,    77,    77,
-     0,    77,     0,     0,     0,     0,   274,   664,   668,     0,
-     7,     8,     9,    10,     0,   668,    13,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   234,     0,     0,
-     0,     0,    77,     0,    77,     0,     0,     0,     0,    77,
-    77,    77,     0,     0,    50,    50,   149,   149,   149,    22,
-   234,     0,    50,     0,     0,   573,     0,     0,     0,     0,
-     0,     0,    27,     0,    28,    29,     0,     0,     0,  1105,
-  1105,  1105,     0,     0,     0,     0,     0,     0,  1079,   318,
-   668,     0,     0,     0,     0,     0,     0,     0,  1080,     0,
-     0,     0,     0,     0,     0,     0,    33,     0,   576,   239,
-    50,  1081,   578,     0,     0,    50,     0,    50,     0,     0,
-     0,     0,   318,     0,   664,     0,     0,   784,   785,     0,
-   789,   790,   791,   792,   793,   794,   795,   796,   797,   798,
-   799,   800,   801,   802,   803,   804,   805,   806,   807,     0,
-     7,   126,   127,    10,   668,     0,   668,   668,   347,   349,
-     0,     0,     0,     0,     0,    50,    50,     0,    50,     0,
+     0,    22,     0,     0,   142,    24,     0,   475,     0,    50,
+     0,     0,     0,     0,    27,     0,    28,    29,     0,     0,
+   189,     0,     0,     0,  1062,  1063,     0,  1069,     0,     0,
+    31,   597,   597,   597,     0,     0,    50,    50,     0,   149,
+    32,    50,     0,     0,     0,     0,    50,     0,    33,     0,
+     0,     0,     0,    34,     0,   503,     0,   227,     0,    50,
+     0,    50,   558,   559,   560,   561,   562,   563,   564,   565,
+   566,     7,     8,     9,    10,   196,   197,   198,     0,   142,
+     0,   142,    14,     0,   234,     0,     0,     0,   227,     0,
+     0,     0,   142,     0,   227,     0,   876,   876,   876,     0,
+    19,     0,     0,   614,     0,    21,     0,     0,     0,     0,
+    22,     0,     0,     0,    24,   227,   591,   227,     0,   142,
+   142,   606,     0,    27,     0,    28,    29,     0,     0,     0,
+     0,     0,     0,   370,     0,     0,     0,   370,   370,   892,
+    50,     0,     0,     0,    50,     0,   234,     0,    50,   893,
+     0,   149,   149,   149,     0,     0,     0,    33,     0,   594,
+   876,   653,   894,   596,   654,    50,     0,     0,     0,   656,
+     0,     0,     0,     0,   227,     0,     0,     0,     0,     0,
+    50,    50,   149,     0,     0,     0,   719,     0,   227,     0,
+   234,     0,     0,     0,     0,   388,     0,   390,     0,     0,
+   227,     0,     0,     0,     0,     0,     0,     0,     0,    50,
+   475,   720,     0,     7,     8,   721,    10,   380,    12,    13,
+     0,     0,     0,    82,    14,     0,     0,     0,     0,   737,
+     0,     0,     0,     0,     0,   227,     0,   227,     0,    17,
+     0,    18,    19,    20,    50,     0,     0,    21,  -497,     0,
+     0,     0,    22,     0,     0,     0,    24,   722,     0,   632,
+     0,     0,     0,     0,     0,    27,     0,    28,    29,     0,
+     0,   723,     0,   724,     0,     0,     0,   142,   142,     0,
+   142,    31,     0,     0,   597,   597,     0,   597,     0,     0,
+     0,    32,    50,     0,   873,     0,     0,     0,     0,    33,
+     0,     0,     0,     0,    34,     0,     7,   126,   127,    10,
+     0,     0,    13,     0,   142,   142,   142,   142,   606,     0,
+     0,  -497,   142,     0,     0,     0,   533,     0,   719,     0,
+     0,   597,     0,   597,   597,     0,   597,     0,     0,   876,
+   876,   876,   370,     0,     0,    22,     0,     0,     0,     0,
+   234,     0,     0,     0,     0,     0,   719,   370,    27,     0,
+    28,    29,     0,     7,     8,     9,    10,     0,     0,    13,
+   142,     0,     0,   597,   146,   142,     0,    82,   370,     0,
+     0,     0,     0,     0,   147,     0,     0,    50,     0,     0,
+     0,     0,    33,     0,     0,     0,     0,   148,    50,     0,
+     0,    50,    22,     0,     0,     0,    50,     0,   898,     0,
+     0,     0,     0,     0,     0,    27,     0,    28,    29,     0,
+     0,     0,     0,     0,     0,   142,   142,     0,   142,     0,
+     0,   175,    50,     0,    50,     0,   149,   149,   149,     0,
+     0,   176,    50,     0,     0,     0,     0,    50,   227,    33,
+    50,     0,     0,   940,   177,     0,     0,     0,     0,     0,
+   653,   654,     0,   656,     0,     0,    50,     0,     0,   597,
+     0,     0,     0,     7,   126,   127,    10,     0,     0,   474,
+   554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
+   564,   565,   566,   737,     0,   737,     0,     0,     0,     0,
+   984,   991,   737,     0,     0,     0,    50,     0,     0,     0,
+     0,     0,    22,     0,     0,     0,   533,     0,     0,   533,
+     0,   126,   127,     0,     0,    27,   225,    28,    29,     0,
+   142,   606,   142,     0,   533,   533,   533,     7,     8,     9,
+    10,    31,     0,   225,   597,     0,   597,   533,     0,     0,
+    77,    32,     0,     0,     0,     0,     0,   597,     0,    33,
+     0,   873,   873,   873,    34,   591,     0,     0,     0,     0,
+     0,     0,    27,     0,   129,   130,    22,    77,    77,     0,
+    77,     0,    77,     0,   597,   597,   597,    77,   592,    27,
+     0,    28,    29,   234,     0,     0,     0,     0,   593,     0,
+    77,     0,    77,     0,     0,   175,     0,   533,   594,   876,
+     0,   595,   596,     0,     0,   176,     0,     0,     0,     0,
+     0,     0,     0,    33,     0,   873,     0,     0,   177,   552,
+   553,   554,   555,   556,   557,   558,   559,   560,   561,   562,
+   563,   564,   565,   566,    50,    50,    50,    50,     0,     0,
+   876,   876,   876,     0,     0,     0,   154,   126,   127,     0,
+   140,   144,   474,     0,     0,   227,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   186,     0,     0,     0,
+   142,    77,     0,     0,     0,    77,    50,     0,     0,    77,
+    50,     0,    77,    77,    77,     0,     0,    50,    50,     0,
+    50,   591,     0,     0,     0,     0,    77,     0,    27,     0,
+   129,   130,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    77,    77,    77,   592,     0,     0,     0,     0,     0,
+    50,     0,    50,     0,   593,     0,     0,    50,    50,    50,
+     0,     0,     0,     0,   594,     0,     0,   595,   596,     0,
+    77,     0,     0,     0,     0,     0,     7,     8,     9,    10,
+     0,     0,    13,     0,   737,     0,     0,     0,   154,   154,
+   154,     0,     0,     0,     0,     0,   533,     0,     0,   597,
+   597,   597,   597,   597,     0,    77,     0,   597,     0,     0,
+     0,     0,     0,     0,     0,    22,     0,   186,   186,   435,
+     0,     0,     0,     0,   873,   873,   873,     0,    27,     0,
+    28,    29,   555,   556,   557,   558,   559,   560,   561,   562,
+   563,   564,   565,   566,   431,     0,   186,     0,     0,     0,
+     0,     0,     0,    77,   432,     0,     0,     0,     0,     0,
+     0,     0,    33,     0,     0,     0,     0,   433,     0,     0,
+     0,     0,     0,     0,     0,   388,   390,     0,     0,     0,
+     0,     0,     0,   475,     0,     0,     0,     7,     8,     9,
+    10,   196,   197,   198,   533,   533,   533,     0,    14,     0,
+   234,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   597,   597,   613,   597,     0,     0,    19,    50,    50,   149,
+   487,    21,     0,     0,   234,     0,    22,     0,     0,     0,
+    24,  1246,   591,     0,     0,     0,  1246,     0,   737,    27,
+     0,    28,    29,     0,     0,     0,     0,     0,    77,     0,
+     0,     0,     0,     0,     0,   892,     0,     0,  1115,    77,
+     0,     0,    77,     0,     0,   893,     0,    77,     7,     8,
+     9,    10,     0,    33,   474,   594,     0,     0,   933,   596,
+     0,   599,   599,   599,     0,     0,   653,   654,     0,   656,
+     0,     0,     0,    77,     0,    77,     0,    77,    77,    77,
+     0,     0,     0,    77,     0,     0,     0,    22,    77,     0,
+   234,    77,     0,     0,     0,     0,     0,     0,     0,     0,
+    27,    50,    28,    29,   186,     0,     0,    77,     0,     0,
+     0,     0,     0,     0,     0,     0,   175,     0,     0,     0,
+     0,     0,     0,     8,     9,     0,   176,    12,   225,     0,
+     0,     0,     0,    14,    33,     0,     0,     0,     0,   177,
+     0,     0,     0,     0,     0,     0,     0,    77,    17,   186,
+    18,   186,     0,   435,   435,   435,    21,     0,     0,   186,
+     0,     0,     0,     0,   186,    24,     0,   186,     0,     0,
+     0,     0,  1381,     0,    27,     0,   129,   130,     0,     0,
+     0,   234,     0,     0,     0,     0,     0,     0,     0,   275,
+     0,     0,    50,    50,   149,   149,   149,     0,   234,     0,
+    50,     0,     6,     0,     7,     8,     9,    10,    11,    12,
+    13,     0,   339,   339,     0,    14,     0,  1115,  1115,  1115,
+     0,     0,     0,   186,     0,     0,     0,     0,     0,     0,
+    17,     0,    18,    19,     0,   613,     0,     0,    21,     0,
+     0,     0,     0,    22,     0,     0,     0,    24,    50,     0,
+   405,     0,     0,    50,     0,    50,    27,     0,    28,    29,
+     0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    31,     0,   974,   975,     9,    10,     0,     0,
+     0,     0,    32,     0,     0,    77,    77,    77,    77,     0,
+    33,  1239,  1240,     9,    10,    34,     0,     0,     0,     0,
+   839,     0,     0,    50,    50,     0,    50,     0,     0,     0,
+     0,     0,     0,    22,   599,   599,     0,   599,     0,   184,
+     0,     0,     0,     0,   599,     0,    27,    77,    28,    29,
+    22,    77,     0,     0,   976,     0,     0,     0,    77,    77,
+     0,    77,   175,    27,   237,    28,    29,   241,     0,     0,
+     0,  1241,   176,     0,     0,     0,     0,     0,     0,   175,
+    33,   896,     0,   896,   896,   177,   599,     0,   237,   176,
+   292,    77,     0,    77,     0,     0,     0,    33,    77,    77,
+    77,     0,   177,     0,     0,     0,     0,     0,     0,   339,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   595,     0,   402,   668,     0,     0,     0,     0,     0,    22,
-   668,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   427,    27,     0,    28,    29,    77,    77,    77,     0,
-   872,   874,     0,     0,   443,     0,     0,     0,   146,   715,
-     0,     7,     8,   716,    10,   381,    12,    13,   147,     0,
-     0,     0,    14,     0,     0,     0,    33,     0,     0,   154,
-     0,   148,     0,     0,     0,     0,  1107,    17,     0,    18,
-    19,    20,     0,     0,     0,    21,  -493,     0,     0,   186,
-    22,     0,   664,     0,    24,   717,     0,   718,     0,     0,
-    50,    50,    50,    27,     0,    28,    29,     0,     0,   719,
-     0,   720,     0,     0,     0,     0,     0,     0,     0,    31,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    32,
-     0,     0,     0,     0,     0,     0,     0,    33,     0,    77,
-     0,     0,    34,     0,     0,     0,     0,     8,     9,   954,
-   381,    12,    13,     0,     0,   672,     0,    14,     0,  -493,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   318,
-   318,   318,    17,     0,    18,    19,     0,     0,     0,  1105,
-    21,   154,   154,   154,     0,     0,   668,     0,     0,    24,
-   518,   573,     0,     0,     0,     0,     0,     0,    27,     0,
-   129,   130,     0,     0,     0,     0,     0,     0,  1018,     0,
-   186,   186,   436,     0,   574,     0,     0,     0,     0,     0,
-  1105,  1105,  1105,     0,   575,     0,     0,     0,    77,    77,
-    77,    77,    77,     0,   576,     0,    77,   577,   578,   186,
-     0,   673,     0,     0,     0,   664,   668,     0,     0,     0,
-    50,     0,     0,  1107,  1107,  1107,     0,     0,     0,   668,
-     0,   668,   633,   668,     0,     0,     0,     0,   126,   127,
-     0,     0,   197,   198,     0,     0,     0,     0,    14,     0,
-     0,     0,     0,     0,    77,     0,     0,     0,     0,    77,
-     0,    77,     0,     0,   690,     0,  1066,     0,     0,   695,
-     0,    21,     0,     0,     0,     0,   668,     0,   675,     0,
-    24,     0,   573,   488,     0,     0,     0,     0,     0,    27,
-     0,   129,   130,   126,   127,  1086,   738,     0,   225,     0,
-     0,   743,     0,     0,     0,   574,   668,     0,     0,    77,
-    77,     0,    77,   751,   752,   575,   753,     0,     0,     0,
-     0,     0,     0,     0,   668,   576,     0,     0,   577,   578,
-     0,     0,   581,   581,   581,     0,     0,   573,     0,     0,
-     0,     0,     0,     0,    27,   756,   129,   130,   759,     0,
-     0,     0,   761,   762,   764,   765,   766,     0,     0,     0,
-   574,     0,     0,     0,     0,   518,     0,  1131,     0,     0,
-   575,     0,     0,     0,     0,     0,     0,     0,   783,     0,
-   576,     0,     0,   577,   578,     0,     0,     0,   186,     0,
-   664,   534,   535,   536,   537,   538,   539,   540,   541,   542,
-   543,   544,   545,   546,   547,   548,   549,     0,   847,   848,
-   812,     0,     0,   847,    77,    77,    77,     0,   664,   664,
-     0,     0,  1162,     0,     0,     0,     0,     0,     0,   839,
-     0,     0,     0,   186,     0,   186,   839,   436,   436,   436,
-     0,     0,     0,   186,     0,     0,     0,     0,   186,     0,
-     6,   186,     7,     8,     9,    10,    11,    12,    13,     0,
-     0,     0,     0,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,   579,   579,   579,     0,     0,     0,    17,     0,
-    18,    19,     0,     0,     0,     0,    21,     0,     0,    75,
-     0,    22,   668,  1107,   668,    24,   668,     0,   406,   664,
-     0,     0,     0,     0,    27,     0,    28,    29,   664,   664,
-    30,     0,     0,   664,   664,     0,   140,   144,   126,   127,
-    31,    75,     0,   475,     0,     0,    75,     0,  1225,  1226,
-    32,     0,   633,     0,  1107,  1107,  1107,     0,    33,     0,
-     0,   195,     0,    34,     0,     0,     0,     7,     8,     9,
-    10,   196,   197,   198,     0,   664,     0,  1253,    14,     0,
-     0,     0,   573,     0,    77,     0,   822,     0,     0,    27,
-     0,   129,   130,   999,     0,  1001,    19,     0,     0,   581,
-   581,    21,   581,     0,   668,   574,    22,     0,     0,   581,
-    24,   675,   573,     0,     0,   575,   675,     0,     0,    27,
-     0,    28,    29,     0,     0,   576,     0,   186,   577,   578,
-     0,     0,     0,     0,   664,   175,     0,     0,     0,     0,
-   386,     0,     0,     0,   389,   176,     0,     0,   391,     0,
-  1315,     0,     0,    33,     0,     0,     0,     0,  1372,   889,
-     0,   889,   889,     0,   581,    75,     0,  1034,  1035,     0,
-  1037,     0,     0,   664,     0,     0,     0,     0,     0,     0,
-   140,   144,     0,     0,     0,  1029,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  1054,     0,  1352,
-     0,   889,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   186,   186,     0,   186,   783,     0,     0,     0,
-     0,     0,   675,     0,     0,     0,   839,     0,     7,     8,
-     9,    10,  1383,  1384,   475,     0,     0,  1085,     0,   579,
-   579,  1389,   579,     0,   476,     0,     0,     0,     0,   856,
-     0,     0,   664,   186,   633,     0,  1076,     0,     0,   839,
-     0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-     0,     0,     0,   573,     0,     0,   488,   488,   488,     0,
-    27,     0,    28,    29,     0,     0,     0,     0,   581,     0,
-     0,   668,     0,     0,     0,     0,   885,   839,     0,   579,
-  1123,   579,   579,     0,   579,     0,   886,     0,     0,     0,
-     0,  1111,  1127,     0,    33,     0,   576,     0,  1118,   887,
-   578,     0,  1444,     0,     0,   675,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   675,     0,     0,
-     0,   579,     0,   604,   535,   536,   537,   538,   539,   540,
-   541,   542,   543,   544,   545,   546,   547,   548,   549,     0,
-   581,     0,   581,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   675,   581,   675,     0,     0,   581,   581,   581,
-     0,     0,     0,     0,     0,     0,     0,     0,     7,     8,
-     9,    10,     0,     0,     0,     0,     0,  1178,     0,   648,
-     0,     0,   649,     0,     0,     0,     0,   651,     0,     0,
-   889,   889,  1084,     0,     0,     0,     0,     0,     7,     8,
-     9,    10,   196,   197,   198,     0,     0,    22,   579,    14,
-     0,     0,  1191,   389,     0,   391,     0,     0,     0,     0,
-    27,     0,    28,    29,   664,     0,  1366,    19,   476,     0,
-  1084,     0,    21,   839,     0,     0,   175,    22,     0,     0,
-     0,    24,     0,   573,     0,     0,   176,   733,     0,     0,
-    27,     0,    28,    29,    33,     0,   839,     0,     0,   177,
-     0,     0,     0,     0,     0,     0,   885,     7,     8,     9,
-    10,  1244,     0,     0,     0,  1245,   886,     0,     0,     0,
-   579,     0,   579,     0,    33,     0,   576,     0,     0,   925,
-   578,     0,     0,   579,     0,     0,     0,   856,   856,   856,
-     0,     0,     0,     0,     0,     0,    22,   101,  1260,     0,
-     7,     8,     9,    10,     0,     0,     0,   120,   101,    27,
-     0,    28,    29,     0,   101,   101,     0,   101,     0,     0,
-   579,   579,   579,     0,     0,   432,     0,     0,     0,   822,
-   822,     0,   822,     0,     0,   433,     0,     0,  1308,    22,
-     0,     0,  1309,    33,     0,     0,     0,   217,   434,     0,
-     0,     0,    27,  1111,    28,    29,     0,     0,     0,     0,
-   856,     0,     0,     0,  1327,  1328,     0,     0,   175,     0,
-     0,     0,   889,   889,  1084,  1084,  1084,     0,   176,     0,
-   889,     0,     0,     0,     0,     0,    33,     0,     0,     0,
-     0,   177,     0,     0,     0,     0,     0,  1084,  1084,  1084,
-     0,     0,     0,     0,     0,     0,   120,     0,   120,     0,
-   891,   101,     0,     0,     0,   101,   101,     0,     0,     0,
-     0,     0,   101,     0,   101,   101,   101,     0,   186,   101,
-   101,   101,     0,     0,     8,     9,     0,     0,    12,    13,
-     0,     0,     0,     0,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   932,     0,     0,     0,    17,
-     0,    18,   648,   649,     0,   651,     0,    21,     0,     0,
-     0,     0,     0,     0,     0,     0,    24,     0,     0,     0,
-     0,     0,     0,   889,   889,    27,   889,   129,   130,   557,
-     0,     0,     0,     0,     0,     0,   733,     0,   733,     0,
-     0,   457,   101,   976,   983,   733,     0,     0,     0,     0,
-     0,     0,   579,   579,   579,   579,   579,     0,     0,     0,
-   579,     0,   101,     0,   558,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   856,   856,   856,
-   536,   537,   538,   539,   540,   541,   542,   543,   544,   545,
-   546,   547,   548,   549,     0,     0,     0,   518,     0,     0,
-     0,   101,     0,     0,     0,     0,     0,     0,     0,     0,
-   633,   161,     0,     7,     8,     9,    10,    11,    12,    13,
-     0,     0,     0,     0,    14,     0,     0,     0,   186,     0,
-   186,     0,     0,     0,     0,     0,     0,    15,    16,    17,
-     0,    18,    19,    20,     0,     0,     0,    21,   101,     0,
-   101,   101,    22,     0,     0,    23,    24,    25,     0,    26,
-     0,     0,     0,   579,   579,    27,   579,    28,    29,     0,
-     0,    30,     0,     0,     0,     0,   101,     0,     0,     0,
-     0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    32,     0,     0,    19,     0,     0,   101,     0,    33,
-   140,   144,     0,     0,    34,     0,     0,   436,     0,     0,
-    35,     0,     0,   101,     0,     0,     0,   101,     0,     0,
-   101,     0,     0,     0,     0,   101,   528,   529,   530,   531,
-   532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
-   542,   543,   544,   545,   546,   547,   548,   549,   436,   436,
-   436,     0,     0,     0,     0,     0,     0,     0,     0,  1321,
-     0,  -449,  -449,  -449,  -449,  -449,  -449,  -449,     0,     0,
-  -449,     0,  -449,     0,     0,     0,     0,     0,   186,     0,
-     0,     0,   101,  -449,   707,  -449,  -449,     0,     0,     0,
-  -449,     0,     0,     0,     0,  -449,     0,     0,     0,     0,
-  -449,     0,     0,   733,  -449,     0,  -449,     0,     0,     0,
-   101,     0,     0,  -449,     0,  -449,  -449,  -449,  -449,  -449,
-     0,  -449,  -449,  -449,  -449,  -449,  -449,  -449,  -449,  -449,
-  -449,  -449,  -449,  -449,  -449,  -449,  -449,  -449,  -449,  -449,
-  -449,  -449,  -449,  -449,     0,  -449,  -449,  -449,     0,  -449,
-  -449,  -449,  -449,  -449,  -449,     0,  -449,  -449,     0,     0,
-     0,     0,  1322,     0,     0,     0,     0,  -449,  -449,  -449,
-     0,  -449,     0,     0,   715,     0,     7,     8,   716,    10,
-   381,    12,    13,     0,   101,     0,     0,    14,     0,     0,
-     0,     0,   389,   391,   101,   101,     0,   101,   101,     0,
-   476,     0,    17,     0,    18,    19,    20,     0,     0,     0,
-    21,  -495,     0,     0,     0,    22,     0,     0,     0,    24,
-   717,     0,   718,     0,     0,     0,     0,     0,    27,     0,
-    28,    29,     0,     0,   719,     0,   720,     0,     0,     0,
-     0,     0,     0,     0,    31,     0,     0,     0,  1236,     0,
-     0,     0,   120,  1236,    32,   733,     0,     0,     0,     0,
-     0,   217,    33,     0,     0,     0,     0,    34,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   707,
-     0,     0,     0,     0,  -495,   715,     0,     7,     8,   716,
-    10,   381,    12,    13,     0,     0,     0,     0,    14,     0,
-     0,     0,     0,   648,   649,     0,   651,     0,     0,     0,
-     0,     0,     0,    17,     0,    18,    19,    20,     0,     0,
-     0,    21,  -494,     0,     0,     0,    22,     0,     0,     0,
-    24,   717,     0,   718,     0,     0,     0,   707,     0,    27,
-   101,    28,    29,     0,     0,   719,     0,   720,     0,     0,
-     0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-     0,     0,     0,    33,   101,   101,   101,     0,    34,     0,
-     0,     0,     0,     0,     0,     0,   101,     0,     0,     0,
-     0,     0,     0,     0,  1374,  -494,  1272,  1273,  1274,    10,
-   381,    12,   281,   282,   283,     0,   284,    14,  1275,  1371,
-  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,  1284,  1285,
-    15,    16,    17,   285,    18,    19,    20,     0,   286,   287,
-    21,     0,   288,   289,   290,    22,   291,   292,     0,    24,
-     0,     0,     0,   293,   294,   295,   296,   297,    27,     0,
-  1286,   298,   659,     0,  1287,   299,     0,     0,   101,     0,
-   101,   300,     0,     0,   301,     0,     0,     0,     0,     0,
-     0,   101,   302,   303,   304,     0,     0,     0,     0,     0,
-   305,   306,   307,     0,     0,     0,     0,   308,     0,  1288,
+     0,     0,     0,   896,     0,     0,     0,     0,    50,    50,
+    50,     0,     0,     0,   186,   186,     0,   186,  -360,     8,
+     9,  -360,  -360,    12,   225,     0,     0,   339,     0,    14,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   275,
+   184,   184,   184,     0,    17,     0,    18,  -360,     0,     0,
+   441,     0,    21,     0,   186,     0,     0,  -360,     0,     0,
+     0,    24,     0,   591,     0,     0,     0,     0,     0,   184,
+    27,     0,   129,   130,     0,     0,     0,   487,   487,   487,
+     0,     0,     0,     0,     0,   641,   592,  1115,     0,     0,
+     0,     0,   241,     0,     0,     0,   593,     0,     0,   599,
+     0,     0,     0,     0,  -360,     0,   594,   237,     0,   595,
+   596,     0,     7,     8,     9,    10,   196,   197,   198,     0,
+     0,     0,   613,    14,     0,     0,     0,     0,  1115,  1115,
+  1115,   641,     0,     0,     0,     0,     0,     0,    77,    77,
+    77,    19,     0,     0,     0,     0,    21,     0,     0,     0,
+     0,    22,     0,     0,     0,    24,     0,   591,    50,     0,
+     0,     0,     0,     0,    27,     0,    28,    29,     0,     0,
+     0,     0,     0,     0,   599,     0,   599,     0,     0,  1117,
+   175,     0,     0,     0,     0,     0,     0,   599,     0,     0,
+   176,   599,   599,   599,     0,     0,     0,     0,    33,     0,
+     0,     0,     0,  1382,     0,     0,     0,     0,     0,     0,
+   237,   241,     0,     0,   896,   896,  1094,   339,     0,     0,
+   339,     0,     0,     0,   339,   339,   339,   339,   339,     0,
+     0,     0,     0,     0,     0,     0,     0,   339,     0,     0,
+     0,     0,    77,     0,     0,     0,     0,   184,   339,     0,
+     0,     0,     0,     0,     0,  1094,     0,     0,     0,     0,
+     0,     7,     8,     9,    10,   380,    12,    13,     0,     0,
+   677,     0,    14,     0,     0,     0,     0,     0,     0,     0,
+     0,   339,   275,     0,     0,     0,     0,    17,     0,    18,
+    19,     0,   184,     0,   184,    21,   184,   184,   184,     0,
+    22,   641,   184,     0,    24,     0,   591,   184,   641,     0,
+   184,     0,     0,    27,     0,    28,    29,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,  1089,
+     0,     0,     0,    77,    77,    77,    77,    77,     0,  1090,
+     0,    77,     0,     0,     0,     0,     0,    33,     0,   594,
+     0,     0,  1091,   596,     0,     0,   678,     0,  1117,  1117,
+  1117,     0,     0,     0,     0,     0,   184,     0,     0,     0,
+     0,     0,   839,   839,     0,   839,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
+     0,   641,     0,     0,    77,     0,    77,     0,     7,     8,
+     9,    10,     0,     0,     0,     0,     0,     0,     0,   896,
+   896,  1094,  1094,  1094,     0,     0,     0,   896,   551,   552,
+   553,   554,   555,   556,   557,   558,   559,   560,   561,   562,
+   563,   564,   565,   566,  1094,  1094,  1094,    22,     0,     0,
+     0,     0,     0,     0,    77,    77,     0,    77,     0,   641,
+    27,     0,    28,    29,   641,   720,  1376,     7,     8,   721,
+    10,   380,    12,    13,     0,   186,   175,     0,    14,     0,
+   237,   241,     0,     0,     0,     0,   176,  1239,   126,   127,
+    10,     0,     0,    17,    33,    18,    19,    20,     0,   177,
+     0,    21,  -498,     0,     0,     0,    22,     0,     0,     0,
+    24,   722,     0,   632,   184,     0,   184,   184,     0,    27,
+     0,    28,    29,     0,     0,   723,    22,   724,     0,     0,
+   896,   896,     0,   896,     0,    31,     0,     0,     0,    27,
+     0,    28,    29,     0,     0,    32,   339,  1241,     0,     0,
+     0,     0,     0,    33,     0,    31,   184,     0,    34,    77,
+    77,    77,     0,     0,     0,    32,     0,   184,   184,     0,
+   184,     0,     0,    33,     0,  -498,     0,   339,    34,     0,
+     0,     0,     0,   641,     0,     0,     0,   641,     0,     0,
+     0,     0,     0,     0,   241,     0,   495,     0,     0,     0,
+     7,     8,     9,    10,   641,     0,   339,   184,     0,     0,
+   641,     0,     0,     0,     0,     0,     0,     7,     8,     9,
+    10,   380,    12,    13,     0,   523,   939,     0,    14,     0,
+     0,     0,     0,     0,     0,   186,     0,   186,  1117,    22,
+     0,     0,     0,    17,     0,    18,    19,     0,     0,   641,
+     0,    21,    27,     0,    28,    29,    22,     0,     0,     0,
+    24,     0,     0,   339,     0,     0,     0,     0,   431,    27,
+   339,    28,    29,     0,     0,     0,     0,   641,   432,  1117,
+  1117,  1117,     0,     0,     0,    31,    33,     0,     0,   641,
+     0,   433,     8,     9,     0,    32,    12,    13,     0,     0,
+     0,     0,    14,    33,     0,     0,     0,     0,    34,    77,
+     7,     8,     9,    10,   435,     0,     0,    17,     0,    18,
+     0,     0,     0,     0,   641,    21,   641,     0,     0,     0,
+   669,   673,     0,     0,    24,     0,     0,     0,   673,     0,
+     0,     0,     0,    27,     0,   129,   130,     0,     0,    22,
+   237,   241,   237,     0,     0,   435,   435,   435,     0,     0,
+     0,     0,    27,     0,    28,    29,     0,   184,   184,  1092,
+     0,     0,     8,     9,   237,   380,    12,    13,   175,     0,
+     0,     0,    14,     0,     0,   186,     0,     0,   176,     0,
+     0,     0,   101,     0,     0,     0,    33,    17,     0,    18,
+    19,   177,   120,   101,     0,    21,     0,   641,  1092,   101,
+   101,     0,   101,     0,   631,     0,     0,   632,     0,     0,
+     0,     0,   673,    27,     0,   129,   130,     0,     0,     0,
+   641,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   217,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   788,   669,     0,     0,   800,   801,   802,
+   441,   806,   807,   808,   809,   810,   811,   812,   813,   814,
+   815,   816,   817,   818,   819,   820,   821,   822,   823,   824,
+     0,     0,     0,     0,     0,   673,     0,   673,   673,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,  1375,   309,     0,     0,     0,  1271,
-     0,  1272,  1273,  1274,    10,   381,    12,   281,   282,   283,
-     0,   284,    14,  1275,     0,  1276,  1277,  1278,  1279,  1280,
-  1281,  1282,  1283,  1284,  1285,    15,    16,    17,   285,    18,
-    19,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,  1286,   298,   659,     0,  1287,
-   299,     0,     0,     0,   707,     0,   300,     0,     0,   301,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   304,
-     0,     0,     0,     0,     0,   305,   306,   307,     0,     0,
-     0,   101,   308,     0,  1288,     0,     0,     0,   528,   529,
-   530,   531,   532,   533,   534,   535,   536,   537,   538,   539,
-   309,   541,   542,   543,   544,   545,   546,   547,   548,   549,
-     0,     0,     0,   510,     0,   280,     8,     9,    10,   381,
-    12,   281,   282,   283,   672,   284,    14,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   101,   101,     0,
-   101,    17,   285,    18,    19,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-   573,     0,   293,   294,   295,   296,   297,    27,     0,    28,
-   298,  -283,     0,     0,   299,     0,     0,     0,     0,     0,
-   300,     0,     0,   852,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,   853,   707,     0,     0,     0,     0,   305,
-   306,   307,     0,   576,     0,     0,   854,   578,     0,     0,
-   673,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   707,   510,   309,     7,     8,     9,    10,   381,
-    12,   281,   282,   283,   672,   284,    14,     0,     0,   101,
-     0,   101,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    17,   285,    18,    19,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-   573,     0,   293,   294,   295,   296,   297,    27,     0,    28,
-    29,  -283,     0,     0,   299,     0,     0,     0,     0,     0,
-   300,     0,     0,  1102,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,  1103,     0,     0,     0,     0,     0,   305,
-   306,   307,     0,   576,     0,     0,  1104,   578,     0,   671,
-   673,   280,     8,     9,    10,   381,    12,   281,   282,   283,
-   672,   284,    14,     0,   309,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    17,   285,    18,
-    19,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,    28,   298,     0,     0,     0,
-   299,     0,     0,     0,     0,     0,   300,     0,     0,   301,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   304,
-     0,     0,     0,     0,     0,   305,   306,   307,     0,     0,
-     0,     0,   308,     0,     0,     0,   673,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,  -755,   662,
-   309,   774,   775,   776,    10,     0,    12,   492,   282,   283,
-     0,   284,    14,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    17,   285,    18,
-     0,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,   777,   778,   663,     0,     0,
-   299,     0,     0,     0,     0,     0,   300,     0,     0,   301,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   304,
-     0,     0,     0,     0,     0,   305,   306,   307,     0,     0,
-     0,     0,   308,   779,   662,     0,   774,   775,   776,    10,
-     0,    12,   492,   282,   283,     0,   284,    14,     0,   916,
-   309,     0,     0,     0,  1158,     0,     0,     0,     0,     0,
-     0,     0,    17,   285,    18,     0,    20,     0,   286,   287,
-    21,     0,   288,   289,   290,    22,   291,   292,     0,    24,
-     0,     0,     0,   293,   294,   295,   296,   297,    27,     0,
-   777,   778,   663,     0,     0,   299,     0,     0,     0,     0,
-     0,   300,     0,     0,   301,     0,     0,     0,     0,     0,
-     0,     0,   302,   303,   304,     0,     0,     0,     0,     0,
-   305,   306,   307,     0,     0,     0,   662,   308,   774,   775,
-   776,    10,     0,    12,   492,   282,   283,     0,   284,    14,
-     0,     0,     0,     0,  -453,   309,  1158,     0,     0,     0,
-     0,     0,     0,     0,    17,   285,    18,     0,    20,     0,
-   286,   287,    21,     0,   288,   289,   290,    22,   291,   292,
-     0,    24,     0,     0,     0,   293,   294,   295,   296,   297,
-    27,     0,   777,   778,   663,     0,     0,   299,     0,     0,
-     0,     0,     0,   300,     0,     0,   301,     0,     0,     0,
-     0,     0,     0,     0,   302,   303,   304,     0,     0,     0,
-     0,     0,   305,   306,   307,     0,     0,     0,   662,   308,
-   774,   775,   776,    10,     0,    12,   492,   282,   283,     0,
-   284,    14,     0,     0,     0,     0,  1204,   309,     0,     0,
-     0,     0,     0,     0,     0,     0,    17,   285,    18,     0,
-    20,     0,   286,   287,    21,     0,   288,   289,   290,    22,
-   291,   292,     0,    24,     0,     0,     0,   293,   294,   295,
-   296,   297,    27,     0,   777,   778,   663,     0,     0,   299,
-     0,     0,     0,     0,     0,   300,     0,     0,   301,     0,
-     0,     0,     0,     0,     0,     0,   302,   303,   304,     0,
-     0,     0,     0,     0,   305,   306,   307,     0,     0,     0,
-     0,   308,   779,   662,     0,   280,     8,     9,    10,     0,
-    12,   492,   282,   283,     0,   284,    14,     0,     0,   309,
+     0,   120,     0,   120,     0,     0,   101,     0,     0,     0,
+   101,   101,     0,     0,     0,   673,     0,   101,     0,   101,
+   101,   101,   673,     0,   101,   101,   101,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   339,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     8,
+     9,   237,   187,    12,   188,     0,     0,     0,     0,    14,
+     0,     0,   184,   184,   184,   184,  1092,     0,  1200,     0,
+   184,     0,     0,     0,    17,     0,    18,    19,     0,     0,
+     0,   669,    21,     0,     0,     0,     0,  1092,  1092,  1092,
+     0,    24,     0,     0,     0,     0,   456,   101,     0,     0,
+    27,     0,   129,   130,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   101,   184,     0,
+     0,     0,     0,   720,     0,     7,     8,   721,    10,   380,
+    12,    13,     0,     0,     0,     0,    14,   962,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    17,   285,    18,     0,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-     0,     0,   293,   294,   295,   296,   297,    27,     0,    28,
-   298,   663,     0,     0,   299,     0,     0,     0,     0,     0,
-   300,     0,     0,   301,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,   304,     0,     0,     0,     0,     0,   305,
-   306,   307,     0,     0,     0,     0,   308,     0,     0,   510,
-     0,   280,     8,     9,    10,  1208,    12,   281,   282,   283,
-     0,   284,    14,     0,   309,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    17,   285,    18,
-     0,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,    28,   298,  -283,     0,     0,
-   299,     0,     0,     0,     0,     0,   300,     0,     0,   511,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   512,
-     0,     0,     0,     0,     0,   305,   306,   307,     0,     0,
-     0,   662,   513,   280,     8,     9,    10,     0,    12,   492,
-   282,   283,     0,   284,    14,     0,     0,     0,     0,     0,
-   309,     0,     0,     0,     0,     0,     0,     0,     0,    17,
-   285,    18,     0,    20,     0,   286,   287,    21,     0,   288,
-   289,   290,    22,   291,   292,     0,    24,     0,     0,     0,
-   293,   294,   295,   296,   297,    27,     0,    28,   298,   663,
-     0,     0,   299,     0,     0,     0,     0,     0,   300,     0,
-     0,   301,     0,     0,     0,     0,     0,     0,     0,   302,
-   303,   304,     0,     0,     0,     0,     0,   305,   306,   307,
-     0,     0,     0,   786,   308,   280,     8,     9,    10,     0,
-    12,   492,   282,   283,     0,   284,    14,     0,     0,     0,
-     0,     0,   309,     0,     0,     0,     0,     0,     0,     0,
-     0,    17,   285,    18,     0,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-     0,     0,   293,   294,   295,   296,   297,    27,     0,    28,
-   298,     0,     0,     0,   299,  -745,     0,     0,     0,     0,
-   300,     0,     0,   301,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,   304,     0,     0,     0,     0,     0,   305,
-   306,   307,     0,     0,     0,   510,   308,     7,     8,     9,
-    10,     0,    12,   281,   282,   283,     0,   284,    14,     0,
-     0,     0,     0,     0,   309,     0,     0,     0,     0,     0,
-     0,     0,     0,    17,   285,    18,     0,    20,     0,   286,
-   287,    21,     0,   288,   289,   290,    22,   291,   292,     0,
-    24,     0,     0,     0,   293,   294,   295,   296,   297,    27,
-     0,    28,    29,  -283,     0,     0,   299,     0,     0,     0,
-     0,     0,   300,     0,     0,  1413,     0,     0,     0,     0,
-     0,     0,     0,   302,   303,  1414,     0,     0,     0,     0,
-     0,   305,   306,   307,     0,     0,     0,  1503,  1415,   280,
-     8,     9,    10,     0,    12,   281,   282,   283,     0,   284,
-    14,     0,     0,     0,     0,     0,   309,     0,     0,     0,
-     0,     0,     0,     0,     0,    17,   285,    18,     0,    20,
-     0,   286,   287,    21,     0,   288,   289,   290,    22,   291,
-   292,     0,    24,     0,     0,     0,   293,   294,   295,   296,
-   297,    27,     0,    28,   298,     0,     0,  -172,   299,     0,
-     0,     0,     0,     0,   300,     0,     0,   301,     0,     0,
-     0,     0,     0,     0,     0,   302,   303,   304,     0,     0,
-     0,     0,     0,   305,   306,   307,     0,     0,     0,   786,
-   308,   280,     8,     9,    10,     0,    12,   492,   282,   283,
-     0,   284,    14,     0,     0,     0,     0,     0,   309,     0,
-     0,     0,     0,     0,     0,     0,     0,    17,   285,    18,
-     0,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,    28,   298,     0,     0,     0,
-   299,     0,     0,     0,     0,     0,   300,     0,     0,   301,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   304,
-     0,     0,     0,     0,     0,   305,   306,   307,     0,     0,
-     0,   871,   308,   280,     8,     9,    10,     0,    12,   492,
-   282,   283,     0,   284,    14,     0,     0,     0,  -745,     0,
-   309,     0,     0,     0,     0,     0,     0,     0,     0,    17,
-   285,    18,     0,    20,     0,   286,   287,    21,     0,   288,
-   289,   290,    22,   291,   292,     0,    24,     0,     0,     0,
-   293,   294,   295,   296,   297,    27,     0,    28,   298,     0,
-     0,     0,   299,     0,     0,     0,     0,     0,   300,     0,
-     0,   301,     0,     0,     0,     0,     0,     0,     0,   302,
-   303,   304,     0,     0,     0,     0,     0,   305,   306,   307,
-     0,     0,     0,   873,   308,   280,     8,     9,    10,     0,
-    12,   492,   282,   283,     0,   284,    14,     0,     0,     0,
-     0,     0,   309,     0,     0,     0,     0,     0,     0,     0,
-     0,    17,   285,    18,     0,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-     0,     0,   293,   294,   295,   296,   297,    27,     0,    28,
-   298,     0,     0,     0,   299,     0,     0,     0,     0,     0,
-   300,     0,     0,   301,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,   304,     0,     0,     0,     0,     0,   305,
-   306,   307,     0,     0,     0,  1388,   308,   280,     8,     9,
-    10,     0,    12,   492,   282,   283,     0,   284,    14,     0,
-     0,     0,     0,     0,   309,     0,     0,     0,     0,     0,
-     0,     0,     0,    17,   285,    18,     0,    20,     0,   286,
-   287,    21,     0,   288,   289,   290,    22,   291,   292,     0,
-    24,     0,     0,     0,   293,   294,   295,   296,   297,    27,
-     0,    28,   298,     0,     0,     0,   299,     0,     0,     0,
-     0,     0,   300,     0,     0,   301,     0,     0,     0,     0,
-     0,     0,     0,   302,   303,   304,     0,     0,     0,     0,
-     0,   305,   306,   307,   280,     8,     9,    10,   308,    12,
-   492,   282,   283,     0,   284,    14,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   309,     0,     0,     0,
-    17,   285,    18,     0,    20,     0,   286,   287,    21,     0,
-   288,   289,   290,    22,   291,   292,     0,    24,     0,     0,
-     0,   293,   294,   295,   296,   297,    27,     0,    28,   298,
-     0,     0,     0,   299,     0,     0,     0,     0,     0,   300,
-     0,     0,   301,     0,     0,     0,     0,     0,     0,     0,
-   302,   303,   304,     0,     0,     0,     0,     0,   305,   306,
-   307,     0,     0,     0,     0,   308,     0,     0,     0,     0,
+     0,    17,     0,    18,    19,    20,   101,     0,     0,    21,
+  -500,     0,     0,     0,    22,     0,     0,     0,    24,   722,
+     0,   632,     0,   184,   184,     0,   184,    27,  1019,    28,
+    29,     0,     0,   723,   673,   724,     0,     0,     0,     0,
+     0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    32,     0,     0,     0,  1034,     0,     0,
+     0,    33,     0,     0,     0,   101,    34,   101,   101,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   275,     0,
+   101,     0,     0,  -500,     0,     0,     0,     0,     0,     0,
+     0,   339,     0,     0,     0,     0,   669,   673,     0,     0,
+     0,   101,     0,     0,   641,     0,     0,   275,     0,     0,
+   673,     0,   673,     0,   673,     0,     0,   101,     0,     0,
+     0,   101,     0,     0,   101,     0,     0,     0,   184,   101,
+   184,     8,     9,     0,     0,    12,   225,     0,     0,     0,
+     0,    14,     0,     0,   673,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    17,     0,    18,     0,
+     0,     0,     0,   275,    21,     0,     0,  1096,     0,     0,
+     0,     0,     0,    24,     0,   591,     0,     0,   673,     0,
+     0,     0,    27,     0,   129,   130,   101,     0,   712,     0,
+     0,     0,     0,     0,     0,     0,   673,   720,   592,     7,
+     8,   721,    10,   380,    12,    13,     0,  1092,   593,     0,
+    14,     0,     0,     0,   101,     0,     0,     0,   594,     0,
+     0,   595,   596,     0,     0,    17,     0,    18,    19,    20,
+     0,     0,     0,    21,  -499,     0,     0,     0,    22,  1141,
+     0,     0,    24,   722,     0,   632,     0,     0,  1092,  1092,
+  1092,    27,     0,    28,    29,     0,     0,   723,     0,   724,
+     0,     0,   669,     0,     0,     0,     0,    31,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    32,   184,     0,
+     0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
+    34,     0,     0,     0,     0,     0,     0,     0,   669,   669,
+     0,     0,  1175,     0,     0,     0,   101,  -499,     0,     0,
+     0,     0,     0,     0,     0,     0,   101,   101,     0,     0,
+   101,   101,     0,     0,     0,     0,   974,     8,   721,    10,
+   187,    12,   188,     0,     0,     0,     0,    14,   553,   554,
+   555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+   565,   566,    17,     0,    18,    19,     0,     0,     0,   120,
+    21,     0,     0,     0,     0,    22,   673,     0,   673,    24,
+   673,   217,     0,   669,     0,     0,     0,     0,    27,     0,
+    28,    29,   669,   669,     0,     0,   976,   669,   669,   712,
+     0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
+     0,     0,  1235,  1236,    32,     0,     0,     0,  1413,     0,
+     0,     0,    33,     0,     0,     0,     0,    34,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   309,   825,  1272,  1273,  1274,    10,   381,
-    12,   281,   282,   283,     0,   284,    14,  1275,     0,  1276,
-  1277,  1278,  1279,  1280,  1281,  1282,  1283,  1284,  1285,    15,
-    16,    17,   285,    18,    19,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-     0,     0,   293,   294,   295,   296,   297,    27,     0,  1286,
-   298,   659,     0,  1287,   299,     0,     0,     0,     0,     0,
-   300,     0,     0,   301,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,   304,     0,     0,     0,     0,     0,   305,
-   306,   307,     0,     0,     0,     0,   308,     0,  1288,     0,
+     0,     0,   669,     0,  1263,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   712,     0,     0,
+   101,     0,     0,     0,     0,     0,     0,     0,   673,  1414,
+   545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
+   555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+   565,   566,     0,   101,   101,   101,     0,     0,   669,     0,
+   803,     0,   293,     8,     9,    10,   380,    12,   294,   295,
+   296,     0,   297,    14,  1325,   101,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    17,   298,
+    18,    19,    20,     0,   299,   300,    21,   669,   301,   302,
+   303,    22,   304,   305,     0,    24,     0,     0,     0,   306,
+   307,   308,   309,   310,    27,     0,    28,   311,  1446,     0,
+  -750,   312,     0,  1362,     0,     0,     0,   313,     0,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,   315,   316,
+   317,     0,     0,     0,     0,    19,   318,   319,   320,     0,
+   101,     0,   101,   321,     0,     0,  1393,  1394,     0,     0,
+     0,     0,     0,   101,     0,  1399,     0,     0,     0,     0,
+     0,   322,     0,     0,     0,     0,   669,   545,   546,   547,
+   548,   549,   550,   551,   552,   553,   554,   555,   556,   557,
+   558,   559,   560,   561,   562,   563,   564,   565,   566,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  1379,   309,  1272,  1273,  1274,    10,   381,
-    12,   281,   282,   283,     0,   284,    14,  1275,     0,  1276,
-  1277,  1278,  1279,  1280,  1281,  1282,  1283,  1284,  1285,    15,
-    16,    17,   285,    18,    19,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-     0,     0,   293,   294,   295,   296,   297,    27,     0,  1286,
-   298,   659,     0,  1287,   299,     0,     0,     0,     0,     0,
-   300,     0,     0,   301,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,   304,     0,     0,     0,     0,     0,   305,
-   306,   307,     0,     0,     0,     0,   308,     0,  1288,     0,
-     0,  1272,  1273,  1274,    10,   381,    12,   281,   282,   283,
-     0,   284,    14,  1275,   309,  1276,  1277,  1278,  1279,  1280,
-  1281,  1282,  1283,  1284,  1285,    15,    16,    17,   285,    18,
-    19,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,  1286,   298,  1480,     0,  1287,
-   299,     0,     0,     0,     0,     0,   300,     0,     0,   301,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   304,
-     0,     0,     0,     0,     0,   305,   306,   307,     0,     0,
-     0,     0,   308,     0,  1288,     0,     0,  1272,  1273,  1274,
-    10,   381,    12,   281,   282,   283,     0,   284,    14,  1275,
-   309,  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,  1284,
-  1285,    15,    16,    17,   285,    18,    19,    20,     0,   286,
-   287,    21,     0,   288,   289,   290,    22,   291,   292,     0,
-    24,     0,     0,     0,   293,   294,   295,   296,   297,    27,
-     0,  1286,   298,     0,     0,  1287,   299,     0,     0,     0,
-     0,     0,   300,     0,     0,   301,     0,     0,     0,     0,
-     0,     0,     0,   302,   303,   304,     0,     0,     0,     0,
-     0,   305,   306,   307,     0,     0,     0,     0,   308,     0,
-  1288,   280,     8,     9,    10,   381,    12,   281,   282,   283,
-   672,   284,    14,     0,     0,     0,   309,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    17,   285,    18,
-    19,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,   573,     0,   293,   294,
-   295,   296,   297,    27,     0,    28,   298,     0,     0,     0,
-   299,     0,     0,     0,     0,     0,   300,     0,     0,   852,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   853,
-     0,     0,     0,     0,     0,   305,   306,   307,     0,   576,
-     0,     0,   854,   578,     0,     0,   673,     7,     8,     9,
-    10,   381,    12,   281,   282,   283,   672,   284,    14,     0,
-   309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    17,   285,    18,    19,    20,     0,   286,
-   287,    21,     0,   288,   289,   290,    22,   291,   292,     0,
-    24,     0,   573,     0,   293,   294,   295,   296,   297,    27,
-     0,    28,    29,     0,     0,     0,   299,     0,     0,     0,
-     0,     0,   300,     0,     0,  1102,     0,     0,     0,     0,
-     0,     0,     0,   302,   303,  1103,     0,     0,     0,     0,
-     0,   305,   306,   307,     0,   576,     0,     0,  1104,   578,
-     0,     0,   673,   280,     8,     9,    10,     0,    12,   281,
-   282,   283,     0,   284,    14,     0,   309,     0,     0,     0,
+     0,     0,     0,     0,     0,   673,     0,     0,     0,     0,
+     0,     0,     0,  1331,     0,  -454,  -454,  -454,  -454,  -454,
+  -454,  -454,     0,     0,  -454,     0,  -454,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,  1454,  -454,     0,  -454,
+  -454,     0,     0,     0,  -454,     0,     0,   712,     0,  -454,
+     0,     0,     0,     0,  -454,     0,     0,     0,  -454,     0,
+  -454,     0,     0,     0,     0,     0,     0,  -454,     0,  -454,
+  -454,  -454,  -454,  -454,   101,  -454,  -454,  -454,  -454,  -454,
+  -454,  -454,  -454,  -454,  -454,  -454,  -454,  -454,  -454,  -454,
+  -454,  -454,  -454,  -454,  -454,  -454,  -454,  -454,     0,  -454,
+  -454,  -454,     0,  -454,  -454,  -454,  -454,  -454,  -454,     0,
+  -454,  -454,     0,     0,     0,     0,  1332,     0,     0,     0,
+     0,  -454,  -454,  -454,     0,  -454,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   101,   101,
+   720,   101,     7,     8,   721,    10,   380,    12,    13,     0,
+     0,     0,     0,    14,     0,     0,     0,     0,   669,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    17,     0,
+    18,    19,    20,     0,     0,     0,    21,     0,     0,     0,
+     0,    22,     0,     0,     0,    24,   722,     0,   632,   712,
+     0,     0,     0,     0,    27,     0,    28,    29,     0,     0,
+   723,     0,   724,     0,     0,     0,     0,     0,     0,     0,
+    31,     0,     0,     0,     0,     0,     0,   712,     0,     0,
+    32,     0,     0,     0,     0,     0,     0,     0,    33,     0,
+     0,     0,     0,    34,   101,  1384,   101,  1282,  1283,  1284,
+    10,   380,    12,   294,   295,   296,     0,   297,    14,  1285,
+     0,  1286,  1287,  1288,  1289,  1290,  1291,  1292,  1293,  1294,
+  1295,    15,    16,    17,   298,    18,    19,    20,     0,   299,
+   300,    21,     0,   301,   302,   303,    22,   304,   305,     0,
+    24,     0,     0,     0,   306,   307,   308,   309,   310,    27,
+     0,  1296,   311,   664,     0,  1297,   312,     0,     0,     0,
+     0,     0,   313,     0,     0,   314,     0,     0,     0,     0,
+     0,     0,     0,   315,   316,   317,     0,     0,     0,     0,
+     0,   318,   319,   320,     0,     0,     0,     0,   321,     0,
+  1298,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,  1385,   322,  1281,     0,  1282,
+  1283,  1284,    10,   380,    12,   294,   295,   296,     0,   297,
+    14,  1285,     0,  1286,  1287,  1288,  1289,  1290,  1291,  1292,
+  1293,  1294,  1295,    15,    16,    17,   298,    18,    19,    20,
+     0,   299,   300,    21,     0,   301,   302,   303,    22,   304,
+   305,     0,    24,     0,     0,     0,   306,   307,   308,   309,
+   310,    27,     0,  1296,   311,   664,     0,  1297,   312,     0,
+     0,     0,     0,     0,   313,     0,     0,   314,     0,     0,
+     0,     0,     0,     0,     0,   315,   316,   317,     0,     0,
+     0,     0,     0,   318,   319,   320,     0,     0,     0,     0,
+   321,   528,  1298,   293,     8,     9,    10,   380,    12,   294,
+   295,   296,   677,   297,    14,     0,     0,     0,   322,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,    17,
-   285,    18,     0,    20,     0,   286,   287,    21,     0,   288,
-   289,   290,    22,   291,   292,     0,    24,     0,   573,     0,
-   293,   294,   295,   296,   297,    27,     0,    28,   298,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   300,     0,
-     0,   852,     0,     0,     0,     0,     0,     0,     0,   302,
-   303,   853,     0,     0,     0,     0,     0,   305,   306,   307,
-     0,   576,     0,     0,   854,   578,     7,     8,     9,    10,
-     0,    12,   281,   282,   283,     0,   284,    14,     0,     0,
-     0,     0,   309,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    17,   285,    18,     0,    20,     0,   286,   287,
-    21,     0,   288,   289,   290,    22,   291,   292,     0,    24,
-     0,   573,     0,   293,   294,   295,   296,   297,    27,     0,
-    28,    29,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   300,     0,     0,  1102,     0,     0,     0,     0,     0,
-     0,     0,   302,   303,  1103,     0,     0,     0,     0,     0,
-   305,   306,   307,     0,   576,     0,     0,  1104,   578,   280,
-     8,     9,    10,     0,    12,   492,   282,   283,     0,   284,
-    14,     0,     0,     0,     0,   309,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    17,   285,    18,     0,    20,
-     0,   286,   287,    21,     0,   288,   289,   290,    22,   291,
-   292,     0,    24,     0,     0,     0,   293,   294,   295,   296,
-   297,    27,     0,    28,   298,     0,     0,  1356,   299,     0,
-     0,     0,     0,     0,   300,     0,     0,   301,     0,     0,
-     0,     0,     0,     0,     0,   302,   303,   304,     0,     0,
-     0,     0,     0,   305,   306,   307,     0,     0,     0,     0,
-   308,   280,     8,     9,    10,   381,    12,   281,   282,   283,
-     0,   284,    14,     0,     0,     0,     0,     0,   309,     0,
-     0,     0,     0,     0,     0,     0,     0,    17,   285,    18,
-    19,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,    28,   298,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   300,     0,     0,   301,
-     0,     0,     0,     0,     0,     0,     0,   302,   303,   304,
-     0,     0,     0,     0,     0,   305,   306,   307,   280,     8,
-     9,    10,   308,    12,   281,   282,   283,     0,   284,    14,
+   298,    18,    19,    20,     0,   299,   300,    21,     0,   301,
+   302,   303,    22,   304,   305,     0,    24,     0,   591,     0,
+   306,   307,   308,   309,   310,    27,     0,    28,   311,  -288,
+     0,     0,   312,     0,     0,     0,     0,     0,   313,     0,
+     0,   869,     0,     0,     0,     0,     0,     0,     0,   315,
+   316,   870,     0,     0,     0,     0,     0,   318,   319,   320,
+     0,   594,     0,     0,   871,   596,     0,   528,   678,     7,
+     8,     9,    10,   380,    12,   294,   295,   296,   677,   297,
+    14,     0,   322,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    17,   298,    18,    19,    20,
+     0,   299,   300,    21,     0,   301,   302,   303,    22,   304,
+   305,     0,    24,     0,   591,     0,   306,   307,   308,   309,
+   310,    27,     0,    28,    29,  -288,     0,     0,   312,     0,
+     0,     0,     0,     0,   313,     0,     0,  1112,     0,     0,
+     0,     0,     0,     0,     0,   315,   316,  1113,     0,     0,
+     0,     0,     0,   318,   319,   320,     0,   594,     0,     0,
+  1114,   596,     0,   676,   678,   293,     8,     9,    10,   380,
+    12,   294,   295,   296,   677,   297,    14,     0,   322,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   309,     0,     0,     0,    17,   285,    18,     0,    20,     0,
-   286,   287,    21,     0,   288,   289,   290,    22,   291,   292,
-     0,    24,     0,     0,     0,   293,   294,   295,   296,   297,
-    27,     0,    28,   298,     0,     0,     0,   299,     0,     0,
-     0,     0,     0,   300,     0,     0,   301,     0,     0,     0,
-     0,     0,     0,     0,   302,   303,   304,     0,     0,     0,
-     0,     0,   305,   306,   307,   280,     8,     9,    10,   308,
-    12,   492,   282,   283,     0,   284,    14,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   309,     0,     0,
-     0,    17,   285,    18,     0,    20,     0,   286,   287,    21,
-     0,   288,   289,   290,    22,   291,   292,     0,    24,     0,
-     0,     0,   293,   294,   295,   296,   297,    27,     0,    28,
-   298,     0,     0,     0,   299,     0,     0,     0,     0,     0,
-   300,     0,     0,   301,     0,     0,     0,     0,     0,     0,
-     0,   302,   303,   304,     0,     0,     0,     0,     0,   305,
-   306,   307,   280,     8,     9,    10,   308,    12,   492,   282,
-   283,     0,   284,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   309,     0,     0,     0,    17,   285,
-    18,     0,    20,     0,   286,   287,    21,     0,   288,   289,
-   290,    22,   291,   292,     0,    24,     0,     0,     0,   293,
-   294,   295,   296,   297,    27,     0,    28,   298,   525,     0,
-     0,     0,     0,     0,     0,     0,     0,   300,     0,     0,
-   301,     0,     0,     0,     0,     0,     0,     0,   302,   303,
-   304,     0,     0,     0,     0,     0,   305,   306,   307,   280,
-     8,     9,    10,   526,    12,   492,   282,   283,     0,   284,
-    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   309,     0,     0,     0,    17,   285,    18,     0,    20,
-     0,   286,   287,    21,     0,   288,   289,   290,    22,   291,
-   292,     0,    24,     0,     0,     0,   293,   294,   295,   296,
-   297,    27,     0,    28,   298,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   300,     0,     0,   301,     0,     0,
-     0,     0,     0,     0,     0,   302,   303,   304,     0,     0,
-     0,     0,     0,   305,   306,   307,     0,     0,     0,     0,
-   308,   562,   280,     8,     9,    10,     0,    12,   492,   282,
-   283,     0,   284,    14,     0,     0,     0,     0,   309,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    17,   285,
-    18,     0,    20,     0,   286,   287,    21,     0,   288,   289,
-   290,    22,   291,   292,     0,    24,     0,     0,     0,   293,
-   294,   295,   296,   297,    27,     0,    28,   298,     0,     0,
-     0,   299,     0,     0,     0,     0,     0,   300,     0,     0,
-   511,     0,     0,     0,     0,     0,     0,     0,   302,   303,
-   512,     0,     0,     0,     0,     0,   305,   306,   307,  1072,
-     8,     9,    10,   513,    12,   492,   282,   283,     0,   284,
-    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   309,     0,     0,     0,    17,   285,    18,     0,    20,
-     0,   286,   287,    21,     0,   288,   289,   290,    22,   291,
-   292,     0,    24,     0,     0,     0,   293,   294,   295,   296,
-   297,    27,     0,    28,   298,     0,     0,     0,   299,     0,
-     0,     0,     0,     0,   300,     0,     0,   301,     0,     0,
-     0,     0,     0,     0,     0,   302,   303,   304,     0,     0,
-     0,     0,     0,   305,   306,   307,     7,     8,     9,    10,
-   308,    12,   492,   282,   283,     0,   284,    14,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   309,     0,
-     0,     0,    17,   285,    18,     0,    20,     0,   286,   287,
-    21,     0,   288,   289,   290,    22,   291,   292,     0,    24,
-     0,     0,     0,   293,   294,   295,   296,   297,    27,     0,
-    28,    29,     0,     0,     0,   299,     0,     0,     0,     0,
-     0,   300,     0,     0,  1413,     0,     0,     0,     0,     0,
-     0,     0,   302,   303,  1414,     0,     0,     0,     0,     0,
-   305,   306,   307,   280,     8,     9,    10,  1415,    12,   492,
-   282,   283,     0,   284,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   309,     0,     0,     0,    17,
-   285,    18,     0,    20,     0,   286,   287,    21,     0,   288,
-   289,   290,    22,   291,   292,     0,    24,     0,     0,     0,
-   293,   294,   295,   296,   297,    27,     0,    28,   298,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   300,     0,
-     0,   301,     0,     0,     0,     0,     0,     0,     0,   302,
-   303,   304,     0,     0,     0,     0,     0,   305,   306,   307,
-   280,     8,     9,    10,   493,    12,   492,   282,   283,     0,
-   284,    14,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   309,     0,     0,     0,    17,   285,    18,     0,
-    20,     0,   286,   287,    21,     0,   288,   289,   290,    22,
-   291,   292,     0,    24,     0,     0,     0,   293,   294,   295,
-   296,   297,    27,     0,    28,   298,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   300,     0,     0,   301,     0,
-     0,     0,     0,     0,     0,     0,   302,   303,   304,     0,
-     0,     0,     0,     0,   305,   306,   307,   280,     8,     9,
-    10,   496,    12,   492,   282,   283,     0,   284,    14,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   309,
-     0,     0,     0,    17,   285,    18,     0,    20,     0,   286,
-   287,    21,     0,   288,   289,   290,    22,   291,   292,     0,
-    24,     0,     0,     0,   293,   294,   295,   296,   297,    27,
-     0,    28,   298,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   300,     0,     0,   301,     0,     0,     0,     0,
-     0,     0,     0,   302,   303,   304,     0,     0,     0,     0,
-     0,   305,   306,   307,   280,     8,     9,    10,   308,    12,
-   492,   282,   283,     0,   284,    14,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   309,     0,     0,     0,
-    17,   285,    18,     0,    20,     0,   286,   287,    21,     0,
-   288,   289,   290,    22,   291,   292,     0,    24,     0,     0,
-     0,   293,   294,   295,   296,   297,    27,     0,    28,   298,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   300,
-     0,     0,   511,     0,     0,     0,     0,     0,     0,     0,
-   302,   303,   512,     0,     0,     0,     0,     0,   305,   306,
-   307,     7,     8,     9,    10,   513,    12,   281,   282,   283,
-     0,   284,    14,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   309,     0,     0,     0,    17,   285,    18,
-     0,    20,     0,   286,   287,    21,     0,   288,   289,   290,
-    22,   291,   292,     0,    24,     0,     0,     0,   293,   294,
-   295,   296,   297,    27,     0,    28,    29,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   300,     0,   715,  1413,
-     7,     8,   716,    10,   381,    12,    13,   302,   303,  1414,
-     0,    14,     0,     0,     0,   305,   306,   307,     0,     0,
-     0,     0,  1415,     0,     0,     0,    17,     0,    18,    19,
-    20,     0,     0,     0,    21,     0,     0,     0,     0,    22,
-   309,     0,     0,    24,   717,     0,   718,     0,     0,     0,
-     0,     0,    27,     0,    28,    29,     0,     0,   719,     0,
-   720,     7,     8,     9,    10,   187,    12,   188,    31,     0,
-     0,     0,    14,     0,     0,     0,     0,     0,    32,     0,
-     0,     0,     0,     0,     0,     0,    33,    17,     0,    18,
-    19,    34,     0,     0,     0,    21,     0,     0,     0,     0,
-    22,     0,     0,     0,    24,     0,     0,     0,     0,     0,
-     0,     0,     0,    27,     0,    28,    29,     0,     0,   189,
-     0,     0,     7,     8,     9,    10,   381,    12,    13,    31,
-     0,   931,     0,    14,     0,     0,     0,     0,     0,    32,
-     0,     0,     0,     0,     0,     0,     0,    33,    17,     0,
-    18,    19,    34,     0,     0,     0,    21,     0,     0,     0,
-     0,    22,     0,     0,     0,    24,     0,   966,     8,   716,
-    10,   187,    12,   188,    27,     0,    28,    29,    14,     0,
+     0,    17,   298,    18,    19,    20,     0,   299,   300,    21,
+     0,   301,   302,   303,    22,   304,   305,     0,    24,     0,
+     0,     0,   306,   307,   308,   309,   310,    27,     0,    28,
+   311,     0,     0,     0,   312,     0,     0,     0,     0,     0,
+   313,     0,     0,   314,     0,     0,     0,     0,     0,     0,
+     0,   315,   316,   317,     0,     0,     0,     0,     0,   318,
+   319,   320,     0,     0,     0,     0,   321,     0,     0,     0,
+   678,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  -760,   667,   322,   789,   790,   791,    10,     0,
+    12,   510,   295,   296,     0,   297,    14,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    31,     0,     0,    17,     0,    18,    19,     0,     0,     0,
-    32,    21,     0,     0,     0,     0,    22,     0,    33,     0,
-    24,     0,     0,    34,     0,     0,     0,     0,     0,    27,
-     0,    28,    29,     0,     0,     0,     0,   968,     7,     8,
-     9,    10,   187,    12,   188,    31,     0,     0,     0,    14,
-     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-     0,     0,     0,    33,    17,     0,    18,    19,    34,     0,
-     0,     0,    21,     0,     0,     0,     0,    22,     0,     0,
-     0,    24,     0,     7,     8,     9,    10,   381,    12,    13,
-    27,     0,    28,    29,    14,     0,  1369,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    31,     0,     0,    17,
-     0,    18,    19,     0,     0,     0,    32,    21,     0,     0,
-     0,     0,    22,     0,    33,     0,    24,     0,     0,    34,
-     0,     0,     0,     0,     0,    27,     0,    28,    29,     7,
-     8,     9,    10,   187,    12,   188,     0,     0,     0,     0,
-    14,    31,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    32,     0,     0,     0,    17,     0,    18,    19,    33,
-     0,     0,     0,    21,    34,     0,     0,     0,    22,     0,
-     0,     0,    24,     0,     0,     8,     9,     0,     0,    12,
-    13,    27,  1403,    28,    29,    14,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-    17,     0,    18,     0,     0,     0,     0,    32,    21,     0,
-     0,     0,     0,     0,     0,    33,     0,    24,     0,     0,
-    34,     0,     0,     0,     0,     0,    27,     0,   129,   130,
-     0,     0,     0,  1404,   528,   529,   530,   531,   532,   533,
-   534,   535,   536,   537,   538,   539,   540,   541,   542,   543,
-   544,   545,   546,   547,   548,   549,     8,     9,     0,   381,
-    12,    13,     0,     0,  1453,   813,    14,     0,     0,     8,
-     9,     0,     0,    12,   225,     0,     0,     0,     0,    14,
-     0,    17,     0,    18,    19,     0,     0,     0,     0,    21,
-     0,     0,     0,     0,    17,     0,    18,     0,    24,     0,
-     0,     0,    21,     0,     0,     0,     0,    27,     0,   129,
-   130,    24,     0,     0,     8,     9,     0,     0,    12,    13,
-    27,     0,   129,   130,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    17,
-     0,    18,     0,     0,     0,     0,     0,    21,     0,     0,
-     0,     0,     0,     0,     0,     0,    24,     0,     0,     0,
-     0,     0,     0,     0,     0,    27,     0,   129,   130,   528,
-   529,   530,   531,   532,   533,   534,   535,   536,   537,   538,
-   539,   540,   541,   542,   543,   544,   545,   546,   547,   548,
-   549,   528,   529,   530,   531,   532,   533,   534,   535,   536,
-   537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
-   547,   548,   549,     0,     0,     0,     0,     0,  1156,     0,
+     0,    17,   298,    18,     0,    20,     0,   299,   300,    21,
+     0,   301,   302,   303,    22,   304,   305,     0,    24,     0,
+     0,     0,   306,   307,   308,   309,   310,    27,     0,   792,
+   793,   668,     0,     0,   312,     0,     0,     0,     0,     0,
+   313,     0,     0,   314,     0,     0,     0,     0,     0,     0,
+     0,   315,   316,   317,     0,     0,     0,     0,     0,   318,
+   319,   320,     0,     0,     0,     0,   321,   794,   667,     0,
+   789,   790,   791,    10,     0,    12,   510,   295,   296,     0,
+   297,    14,     0,   924,   322,     0,     0,     0,  1171,     0,
+     0,     0,     0,     0,     0,     0,    17,   298,    18,     0,
+    20,     0,   299,   300,    21,     0,   301,   302,   303,    22,
+   304,   305,     0,    24,     0,     0,     0,   306,   307,   308,
+   309,   310,    27,     0,   792,   793,   668,     0,     0,   312,
+     0,     0,     0,     0,     0,   313,     0,     0,   314,     0,
+     0,     0,     0,     0,     0,     0,   315,   316,   317,     0,
+     0,     0,     0,     0,   318,   319,   320,     0,     0,     0,
+   667,   321,   789,   790,   791,    10,     0,    12,   510,   295,
+   296,     0,   297,    14,     0,     0,     0,     0,  -458,   322,
+  1171,     0,     0,     0,     0,     0,     0,     0,    17,   298,
+    18,     0,    20,     0,   299,   300,    21,     0,   301,   302,
+   303,    22,   304,   305,     0,    24,     0,     0,     0,   306,
+   307,   308,   309,   310,    27,     0,   792,   793,   668,     0,
+     0,   312,     0,     0,     0,     0,     0,   313,     0,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,   315,   316,
+   317,     0,     0,     0,     0,     0,   318,   319,   320,     0,
+     0,     0,   667,   321,   789,   790,   791,    10,     0,    12,
+   510,   295,   296,     0,   297,    14,     0,     0,     0,     0,
+  1214,   322,     0,     0,     0,     0,     0,     0,     0,     0,
+    17,   298,    18,     0,    20,     0,   299,   300,    21,     0,
+   301,   302,   303,    22,   304,   305,     0,    24,     0,     0,
+     0,   306,   307,   308,   309,   310,    27,     0,   792,   793,
+   668,     0,     0,   312,     0,     0,     0,     0,     0,   313,
+     0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
+   315,   316,   317,     0,     0,     0,     0,     0,   318,   319,
+   320,     0,     0,     0,     0,   321,   794,   667,     0,   293,
+     8,     9,    10,     0,    12,   510,   295,   296,     0,   297,
+    14,     0,     0,   322,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    17,   298,    18,     0,    20,
+     0,   299,   300,    21,     0,   301,   302,   303,    22,   304,
+   305,     0,    24,     0,     0,     0,   306,   307,   308,   309,
+   310,    27,     0,    28,   311,   668,     0,     0,   312,     0,
+     0,     0,     0,     0,   313,     0,     0,   314,     0,     0,
+     0,     0,     0,     0,     0,   315,   316,   317,     0,     0,
+     0,     0,     0,   318,   319,   320,     0,     0,     0,     0,
+   321,     0,     0,   528,     0,   293,     8,     9,    10,  1218,
+    12,   294,   295,   296,     0,   297,    14,     0,   322,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    17,   298,    18,     0,    20,     0,   299,   300,    21,
+     0,   301,   302,   303,    22,   304,   305,     0,    24,     0,
+     0,     0,   306,   307,   308,   309,   310,    27,     0,    28,
+   311,  -288,     0,     0,   312,     0,     0,     0,     0,     0,
+   313,     0,     0,   529,     0,     0,     0,     0,     0,     0,
+     0,   315,   316,   530,     0,     0,     0,     0,     0,   318,
+   319,   320,     0,     0,     0,   667,   531,   293,     8,     9,
+    10,     0,    12,   510,   295,   296,     0,   297,    14,     0,
+     0,     0,     0,     0,   322,     0,     0,     0,     0,     0,
+     0,     0,     0,    17,   298,    18,     0,    20,     0,   299,
+   300,    21,     0,   301,   302,   303,    22,   304,   305,     0,
+    24,     0,     0,     0,   306,   307,   308,   309,   310,    27,
+     0,    28,   311,   668,     0,     0,   312,     0,     0,     0,
+     0,     0,   313,     0,     0,   314,     0,     0,     0,     0,
+     0,     0,     0,   315,   316,   317,     0,     0,     0,     0,
+     0,   318,   319,   320,     0,     0,     0,   803,   321,   293,
+     8,     9,    10,     0,    12,   510,   295,   296,     0,   297,
+    14,     0,     0,     0,     0,     0,   322,     0,     0,     0,
+     0,     0,     0,     0,     0,    17,   298,    18,     0,    20,
+     0,   299,   300,    21,     0,   301,   302,   303,    22,   304,
+   305,     0,    24,     0,     0,     0,   306,   307,   308,   309,
+   310,    27,     0,    28,   311,     0,     0,     0,   312,  -750,
+     0,     0,     0,     0,   313,     0,     0,   314,     0,     0,
+     0,     0,     0,     0,     0,   315,   316,   317,     0,     0,
+     0,     0,     0,   318,   319,   320,     0,     0,     0,   528,
+   321,     7,     8,     9,    10,     0,    12,   294,   295,   296,
+     0,   297,    14,     0,     0,     0,     0,     0,   322,     0,
+     0,     0,     0,     0,     0,     0,     0,    17,   298,    18,
+     0,    20,     0,   299,   300,    21,     0,   301,   302,   303,
+    22,   304,   305,     0,    24,     0,     0,     0,   306,   307,
+   308,   309,   310,    27,     0,    28,    29,  -288,     0,     0,
+   312,     0,     0,     0,     0,     0,   313,     0,     0,  1423,
+     0,     0,     0,     0,     0,     0,     0,   315,   316,  1424,
+     0,     0,     0,     0,     0,   318,   319,   320,     0,     0,
+     0,  1513,  1425,   293,     8,     9,    10,     0,    12,   294,
+   295,   296,     0,   297,    14,     0,     0,     0,     0,     0,
+   322,     0,     0,     0,     0,     0,     0,     0,     0,    17,
+   298,    18,     0,    20,     0,   299,   300,    21,     0,   301,
+   302,   303,    22,   304,   305,     0,    24,     0,     0,     0,
+   306,   307,   308,   309,   310,    27,     0,    28,   311,     0,
+     0,  -177,   312,     0,     0,     0,     0,     0,   313,     0,
+     0,   314,     0,     0,     0,     0,     0,     0,     0,   315,
+   316,   317,     0,     0,     0,     0,     0,   318,   319,   320,
+     0,     0,     0,   803,   321,   293,     8,     9,    10,     0,
+    12,   510,   295,   296,     0,   297,    14,     0,     0,     0,
+     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
+     0,    17,   298,    18,     0,    20,     0,   299,   300,    21,
+     0,   301,   302,   303,    22,   304,   305,     0,    24,     0,
+     0,     0,   306,   307,   308,   309,   310,    27,     0,    28,
+   311,     0,     0,     0,   312,     0,     0,     0,     0,     0,
+   313,   243,     0,   314,     8,     9,     0,     0,    12,    13,
+     0,   315,   316,   317,    14,     0,     0,     0,     0,   318,
+   319,   320,     0,     0,     0,     0,   321,     0,     0,    17,
+     0,    18,     0,     0,     0,     0,     0,    21,     0,   244,
+   245,     0,  -750,     0,   322,     0,    24,     0,   246,     0,
+     0,     0,     0,     0,     0,    27,     0,   129,   130,     0,
+   247,     0,     0,     0,   248,   249,   250,   251,   252,   253,
+   254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+   264,   265,   266,   267,   268,     0,     0,   269,   270,   271,
+     0,     0,   272,     0,   787,   273,   293,     8,     9,    10,
+     0,    12,   510,   295,   296,     0,   297,    14,     0,     0,
+     0,     0,   274,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    17,   298,    18,     0,    20,     0,   299,   300,
+    21,     0,   301,   302,   303,    22,   304,   305,     0,    24,
+     0,     0,     0,   306,   307,   308,   309,   310,    27,     0,
+    28,   311,     0,     0,     0,   312,     0,     0,     0,     0,
+     0,   313,     0,     0,   314,     0,     0,     0,     0,     0,
+     0,     0,   315,   316,   317,     0,     0,     0,     0,     0,
+   318,   319,   320,     0,     0,     0,   799,   321,   293,     8,
+     9,    10,     0,    12,   510,   295,   296,     0,   297,    14,
+     0,     0,     0,     0,     0,   322,     0,     0,     0,     0,
+     0,     0,     0,     0,    17,   298,    18,     0,    20,     0,
+   299,   300,    21,     0,   301,   302,   303,    22,   304,   305,
+     0,    24,     0,     0,     0,   306,   307,   308,   309,   310,
+    27,     0,    28,   311,     0,     0,     0,   312,     0,     0,
+     0,     0,     0,   313,     0,     0,   314,     0,     0,     0,
+     0,     0,     0,     0,   315,   316,   317,     0,     0,     0,
+     0,     0,   318,   319,   320,     0,     0,     0,  1398,   321,
+   293,     8,     9,    10,     0,    12,   510,   295,   296,     0,
+   297,    14,     0,     0,     0,     0,     0,   322,     0,     0,
+     0,     0,     0,     0,     0,     0,    17,   298,    18,     0,
+    20,     0,   299,   300,    21,     0,   301,   302,   303,    22,
+   304,   305,     0,    24,     0,     0,     0,   306,   307,   308,
+   309,   310,    27,     0,    28,   311,     0,     0,     0,   312,
+     0,     0,     0,     0,     0,   313,     0,     0,   314,     0,
+     0,     0,     0,     0,     0,     0,   315,   316,   317,     0,
+     0,     0,     0,     0,   318,   319,   320,   293,     8,     9,
+    10,   321,    12,   510,   295,   296,     0,   297,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   322,
+     0,     0,     0,    17,   298,    18,     0,    20,     0,   299,
+   300,    21,     0,   301,   302,   303,    22,   304,   305,     0,
+    24,     0,     0,     0,   306,   307,   308,   309,   310,    27,
+     0,    28,   311,     0,     0,     0,   312,     0,     0,     0,
+     0,     0,   313,     0,     0,   314,     0,     0,     0,     0,
+     0,     0,     0,   315,   316,   317,     0,     0,     0,     0,
+     0,   318,   319,   320,     0,     0,     0,     0,   321,   550,
+   551,   552,   553,   554,   555,   556,   557,   558,   559,   560,
+   561,   562,   563,   564,   565,   566,   322,   842,  1282,  1283,
+  1284,    10,   380,    12,   294,   295,   296,     0,   297,    14,
+  1285,     0,  1286,  1287,  1288,  1289,  1290,  1291,  1292,  1293,
+  1294,  1295,    15,    16,    17,   298,    18,    19,    20,     0,
+   299,   300,    21,     0,   301,   302,   303,    22,   304,   305,
+     0,    24,     0,     0,     0,   306,   307,   308,   309,   310,
+    27,     0,  1296,   311,   664,     0,  1297,   312,     0,     0,
+     0,     0,     0,   313,     0,     0,   314,     0,     0,     0,
+     0,     0,     0,     0,   315,   316,   317,     0,     0,     0,
+     0,     0,   318,   319,   320,     0,     0,     0,     0,   321,
+     0,  1298,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,  1389,   322,  1282,  1283,
+  1284,    10,   380,    12,   294,   295,   296,     0,   297,    14,
+  1285,     0,  1286,  1287,  1288,  1289,  1290,  1291,  1292,  1293,
+  1294,  1295,    15,    16,    17,   298,    18,    19,    20,     0,
+   299,   300,    21,     0,   301,   302,   303,    22,   304,   305,
+     0,    24,     0,     0,     0,   306,   307,   308,   309,   310,
+    27,     0,  1296,   311,   664,     0,  1297,   312,     0,     0,
+     0,     0,     0,   313,     0,     0,   314,     0,     0,     0,
+     0,     0,     0,     0,   315,   316,   317,     0,     0,     0,
+     0,     0,   318,   319,   320,     0,     0,     0,     0,   321,
+     0,  1298,     0,     0,  1282,  1283,  1284,    10,   380,    12,
+   294,   295,   296,     0,   297,    14,  1285,   322,  1286,  1287,
+  1288,  1289,  1290,  1291,  1292,  1293,  1294,  1295,    15,    16,
+    17,   298,    18,    19,    20,     0,   299,   300,    21,     0,
+   301,   302,   303,    22,   304,   305,     0,    24,     0,     0,
+     0,   306,   307,   308,   309,   310,    27,     0,  1296,   311,
+  1490,     0,  1297,   312,     0,     0,     0,     0,     0,   313,
+     0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
+   315,   316,   317,     0,     0,     0,     0,     0,   318,   319,
+   320,     0,     0,     0,     0,   321,     0,  1298,     0,     0,
+  1282,  1283,  1284,    10,   380,    12,   294,   295,   296,     0,
+   297,    14,  1285,   322,  1286,  1287,  1288,  1289,  1290,  1291,
+  1292,  1293,  1294,  1295,    15,    16,    17,   298,    18,    19,
+    20,     0,   299,   300,    21,     0,   301,   302,   303,    22,
+   304,   305,     0,    24,     0,     0,     0,   306,   307,   308,
+   309,   310,    27,     0,  1296,   311,     0,     0,  1297,   312,
+     0,     0,     0,     0,     0,   313,     0,     0,   314,     0,
+     0,     0,     0,     0,     0,     0,   315,   316,   317,     0,
+     0,     0,     0,     0,   318,   319,   320,     0,     0,     0,
+     0,   321,     0,  1298,   293,     8,     9,    10,   380,    12,
+   294,   295,   296,   677,   297,    14,     0,     0,     0,   322,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   612,     0,     0,  1424,   528,   529,   530,
-   531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
-   541,   542,   543,   544,   545,   546,   547,   548,   549,  1333,
-   528,   529,   530,   531,   532,   533,   534,   535,   536,   537,
-   538,   539,   540,   541,   542,   543,   544,   545,   546,   547,
-   548,   549,  1466,   528,   529,   530,   531,   532,   533,   534,
-   535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
-   545,   546,   547,   548,   549,   528,   529,   530,   531,   532,
-   533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
-   543,   544,   545,   546,   547,   548,   549,   532,   533,   534,
-   535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
-   545,   546,   547,   548,   549
+    17,   298,    18,    19,    20,     0,   299,   300,    21,     0,
+   301,   302,   303,    22,   304,   305,     0,    24,     0,   591,
+     0,   306,   307,   308,   309,   310,    27,     0,    28,   311,
+     0,     0,     0,   312,     0,     0,     0,     0,     0,   313,
+     0,     0,   869,     0,     0,     0,     0,     0,     0,     0,
+   315,   316,   870,     0,     0,     0,     0,     0,   318,   319,
+   320,     0,   594,     0,     0,   871,   596,     0,     0,   678,
+     7,     8,     9,    10,   380,    12,   294,   295,   296,   677,
+   297,    14,     0,   322,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    17,   298,    18,    19,
+    20,     0,   299,   300,    21,     0,   301,   302,   303,    22,
+   304,   305,     0,    24,     0,   591,     0,   306,   307,   308,
+   309,   310,    27,     0,    28,    29,     0,     0,     0,   312,
+     0,     0,     0,     0,     0,   313,     0,     0,  1112,     0,
+     0,     0,     0,     0,     0,     0,   315,   316,  1113,     0,
+     0,     0,     0,     0,   318,   319,   320,     0,   594,     0,
+     0,  1114,   596,     0,     0,   678,   293,     8,     9,    10,
+     0,    12,   294,   295,   296,     0,   297,    14,     0,   322,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    17,   298,    18,     0,    20,     0,   299,   300,
+    21,     0,   301,   302,   303,    22,   304,   305,     0,    24,
+     0,   591,     0,   306,   307,   308,   309,   310,    27,     0,
+    28,   311,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   313,     0,     0,   869,     0,     0,     0,     0,     0,
+     0,     0,   315,   316,   870,     0,     0,     0,     0,     0,
+   318,   319,   320,     0,   594,     0,     0,   871,   596,     7,
+     8,     9,    10,     0,    12,   294,   295,   296,     0,   297,
+    14,     0,     0,     0,     0,   322,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    17,   298,    18,     0,    20,
+     0,   299,   300,    21,     0,   301,   302,   303,    22,   304,
+   305,     0,    24,     0,   591,     0,   306,   307,   308,   309,
+   310,    27,     0,    28,    29,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   313,     0,     0,  1112,     0,     0,
+     0,     0,     0,     0,     0,   315,   316,  1113,     0,     0,
+     0,     0,     0,   318,   319,   320,     0,   594,     0,     0,
+  1114,   596,   293,     8,     9,    10,     0,    12,   510,   295,
+   296,     0,   297,    14,     0,     0,     0,     0,   322,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    17,   298,
+    18,     0,    20,     0,   299,   300,    21,     0,   301,   302,
+   303,    22,   304,   305,     0,    24,     0,     0,     0,   306,
+   307,   308,   309,   310,    27,     0,    28,   311,     0,     0,
+  1366,   312,     0,     0,     0,     0,     0,   313,     0,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,   315,   316,
+   317,     0,     0,     0,     0,     0,   318,   319,   320,     0,
+     0,     0,     0,   321,   293,     8,     9,    10,   380,    12,
+   294,   295,   296,     0,   297,    14,     0,     0,     0,     0,
+     0,   322,     0,     0,     0,     0,     0,     0,     0,     0,
+    17,   298,    18,    19,    20,     0,   299,   300,    21,     0,
+   301,   302,   303,    22,   304,   305,     0,    24,     0,     0,
+     0,   306,   307,   308,   309,   310,    27,     0,    28,   311,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   313,
+     0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
+   315,   316,   317,     0,     0,     0,     0,     0,   318,   319,
+   320,   293,     8,     9,    10,   321,    12,   294,   295,   296,
+     0,   297,    14,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   322,     0,     0,     0,    17,   298,    18,
+     0,    20,     0,   299,   300,    21,     0,   301,   302,   303,
+    22,   304,   305,     0,    24,     0,     0,     0,   306,   307,
+   308,   309,   310,    27,     0,    28,   311,     0,     0,     0,
+   312,     0,     0,     0,     0,     0,   313,     0,     0,   314,
+     0,     0,     0,     0,     0,     0,     0,   315,   316,   317,
+     0,     0,     0,     0,     0,   318,   319,   320,   293,     8,
+     9,    10,   321,    12,   510,   295,   296,     0,   297,    14,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   322,     0,     0,     0,    17,   298,    18,     0,    20,     0,
+   299,   300,    21,     0,   301,   302,   303,    22,   304,   305,
+     0,    24,     0,     0,     0,   306,   307,   308,   309,   310,
+    27,     0,    28,   311,     0,     0,     0,   312,     0,     0,
+     0,     0,     0,   313,     0,     0,   314,     0,     0,     0,
+     0,     0,     0,     0,   315,   316,   317,     0,     0,     0,
+     0,     0,   318,   319,   320,   293,     8,     9,    10,   321,
+    12,   510,   295,   296,     0,   297,    14,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   322,     0,     0,
+     0,    17,   298,    18,     0,    20,     0,   299,   300,    21,
+     0,   301,   302,   303,    22,   304,   305,     0,    24,     0,
+     0,     0,   306,   307,   308,   309,   310,    27,     0,    28,
+   311,   541,     0,     0,     0,     0,     0,     0,     0,     0,
+   313,     0,     0,   314,     0,     0,     0,     0,     0,     0,
+     0,   315,   316,   317,     0,     0,     0,     0,     0,   318,
+   319,   320,   293,     8,     9,    10,   542,    12,   510,   295,
+   296,     0,   297,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   322,     0,     0,     0,    17,   298,
+    18,     0,    20,     0,   299,   300,    21,     0,   301,   302,
+   303,    22,   304,   305,     0,    24,     0,     0,     0,   306,
+   307,   308,   309,   310,    27,     0,    28,   311,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   313,     0,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,   315,   316,
+   317,     0,     0,     0,     0,     0,   318,   319,   320,     0,
+     0,     0,     0,   321,   579,   293,     8,     9,    10,     0,
+    12,   510,   295,   296,     0,   297,    14,     0,     0,     0,
+     0,   322,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    17,   298,    18,     0,    20,     0,   299,   300,    21,
+     0,   301,   302,   303,    22,   304,   305,     0,    24,     0,
+     0,     0,   306,   307,   308,   309,   310,    27,     0,    28,
+   311,     0,     0,     0,   312,     0,     0,     0,     0,     0,
+   313,     0,     0,   529,     0,     0,     0,     0,     0,     0,
+     0,   315,   316,   530,     0,     0,     0,     0,     0,   318,
+   319,   320,  1080,     8,     9,    10,   531,    12,   510,   295,
+   296,     0,   297,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   322,     0,     0,     0,    17,   298,
+    18,     0,    20,     0,   299,   300,    21,     0,   301,   302,
+   303,    22,   304,   305,     0,    24,     0,     0,     0,   306,
+   307,   308,   309,   310,    27,     0,    28,   311,     0,     0,
+     0,   312,     0,     0,     0,     0,     0,   313,     0,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,   315,   316,
+   317,     0,     0,     0,     0,     0,   318,   319,   320,     7,
+     8,     9,    10,   321,    12,   510,   295,   296,     0,   297,
+    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   322,     0,     0,     0,    17,   298,    18,     0,    20,
+     0,   299,   300,    21,     0,   301,   302,   303,    22,   304,
+   305,     0,    24,     0,     0,     0,   306,   307,   308,   309,
+   310,    27,     0,    28,    29,     0,     0,     0,   312,     0,
+     0,     0,     0,     0,   313,     0,     0,  1423,     0,     0,
+     0,     0,     0,     0,     0,   315,   316,  1424,     0,     0,
+     0,     0,     0,   318,   319,   320,   293,     8,     9,    10,
+  1425,    12,   510,   295,   296,     0,   297,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   322,     0,
+     0,     0,    17,   298,    18,     0,    20,     0,   299,   300,
+    21,     0,   301,   302,   303,    22,   304,   305,     0,    24,
+     0,     0,     0,   306,   307,   308,   309,   310,    27,     0,
+    28,   311,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   313,     0,     0,   314,     0,     0,     0,     0,     0,
+     0,     0,   315,   316,   317,     0,     0,     0,     0,     0,
+   318,   319,   320,   293,     8,     9,    10,   511,    12,   510,
+   295,   296,     0,   297,    14,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   322,     0,     0,     0,    17,
+   298,    18,     0,    20,     0,   299,   300,    21,     0,   301,
+   302,   303,    22,   304,   305,     0,    24,     0,     0,     0,
+   306,   307,   308,   309,   310,    27,     0,    28,   311,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   313,     0,
+     0,   314,     0,     0,     0,     0,     0,     0,     0,   315,
+   316,   317,     0,     0,     0,     0,     0,   318,   319,   320,
+   293,     8,     9,    10,   514,    12,   510,   295,   296,     0,
+   297,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   322,     0,     0,     0,    17,   298,    18,     0,
+    20,     0,   299,   300,    21,     0,   301,   302,   303,    22,
+   304,   305,     0,    24,     0,     0,     0,   306,   307,   308,
+   309,   310,    27,     0,    28,   311,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   313,     0,     0,   314,     0,
+     0,     0,     0,     0,     0,     0,   315,   316,   317,     0,
+     0,     0,     0,     0,   318,   319,   320,   293,     8,     9,
+    10,   321,    12,   510,   295,   296,     0,   297,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   322,
+     0,     0,     0,    17,   298,    18,     0,    20,     0,   299,
+   300,    21,     0,   301,   302,   303,    22,   304,   305,     0,
+    24,     0,     0,     0,   306,   307,   308,   309,   310,    27,
+     0,    28,   311,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   313,     0,     0,   529,     0,     0,     0,     0,
+     0,     0,     0,   315,   316,   530,     0,     0,     0,     0,
+     0,   318,   319,   320,     7,     8,     9,    10,   531,    12,
+   294,   295,   296,     0,   297,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   322,     0,     0,     0,
+    17,   298,    18,     0,    20,     0,   299,   300,    21,     0,
+   301,   302,   303,    22,   304,   305,     0,    24,     0,     0,
+     0,   306,   307,   308,   309,   310,    27,     0,    28,    29,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   313,
+     0,     6,  1423,     7,     8,     9,    10,    11,    12,    13,
+   315,   316,  1424,     0,    14,     0,     0,     0,   318,   319,
+   320,     0,     0,     0,     0,  1425,     0,    15,    16,    17,
+     0,    18,    19,    20,     0,     0,     0,    21,     0,     0,
+     0,     0,    22,   322,     0,    23,    24,    25,     0,    26,
+     0,     0,     0,     0,     0,    27,     0,    28,    29,     0,
+   161,    30,     7,     8,     9,    10,    11,    12,    13,     0,
+     0,    31,     0,    14,     0,     0,     0,     0,     0,     0,
+     0,    32,     0,     0,     0,     0,    15,    16,    17,    33,
+    18,    19,    20,     0,    34,     0,    21,     0,     0,     0,
+    35,    22,     0,     0,    23,    24,    25,     0,    26,     0,
+     0,     0,     0,     0,    27,     0,    28,    29,     0,     0,
+    30,     7,     8,     9,    10,   187,    12,   188,     0,     0,
+    31,     0,    14,     0,     0,     0,     0,     0,     0,     0,
+    32,     0,     0,     0,     0,     0,     0,    17,    33,    18,
+    19,     0,     0,    34,     0,    21,     0,     0,     0,    35,
+    22,     0,     0,     0,    24,     0,     7,     8,     9,    10,
+   380,    12,    13,    27,     0,    28,    29,    14,     0,  1379,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
+     0,     0,    17,     0,    18,    19,     0,     0,     0,    32,
+    21,     0,     0,     0,     0,    22,     0,    33,     0,    24,
+     0,     0,    34,     0,     0,     0,     0,     0,    27,     0,
+    28,    29,     7,     8,     9,    10,   187,    12,   188,     0,
+     0,     0,     0,    14,    31,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    32,     0,     0,     0,    17,     0,
+    18,    19,    33,     0,     0,     0,    21,    34,     0,     0,
+     0,    22,     0,     0,     0,    24,     0,     0,     0,     0,
+     0,     0,     0,     0,    27,     0,    28,    29,   545,   546,
+   547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
+    31,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+    32,     0,     0,     0,     0,     0,     0,     0,    33,     0,
+     0,     0,     0,    34,   545,   546,   547,   548,   549,   550,
+   551,   552,   553,   554,   555,   556,   557,   558,   559,   560,
+   561,   562,   563,   564,   565,   566,   545,   546,   547,   548,
+   549,   550,   551,   552,   553,   554,   555,   556,   557,   558,
+   559,   560,   561,   562,   563,   564,   565,   566,     0,     0,
+     0,     0,     0,  1169,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   544,     0,
+     0,  1434,   545,   546,   547,   548,   549,   550,   551,   552,
+   553,   554,   555,   556,   557,   558,   559,   560,   561,   562,
+   563,   564,   565,   566,  1343,   545,   546,   547,   548,   549,
+   550,   551,   552,   553,   554,   555,   556,   557,   558,   559,
+   560,   561,   562,   563,   564,   565,   566,  1476,   545,   546,
+   547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
+   557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+   545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
+   555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+   565,   566,   549,   550,   551,   552,   553,   554,   555,   556,
+   557,   558,   559,   560,   561,   562,   563,   564,   565,   566
 };
 
 static const short yycheck[] = {     4,
-    34,   156,    54,    14,   328,   146,   147,   418,   380,   657,
-    24,   655,   380,   461,    79,   440,    89,   125,    91,   915,
-   231,     4,   334,   380,     4,   191,   645,  1401,    83,   351,
-  1266,    36,   577,    34,   721,   814,    41,   128,     4,   584,
-   284,   285,   133,   730,    53,   221,   191,   132,    31,    32,
-     1,    56,    11,    36,  1436,   200,    36,    34,    41,     4,
-   226,    41,   413,   136,   739,    61,    71,  1125,  1126,   744,
-    36,    82,   316,  1289,     4,    41,   141,    59,    83,    11,
-    48,  1139,    87,    39,    89,  1431,    91,    58,   132,   133,
-     4,    36,  1434,    63,   105,    38,    41,    65,    11,    55,
-    83,   106,   107,    60,    79,     0,    36,     4,    59,    59,
-   276,    41,   146,   147,   148,    65,  1458,  1499,   100,    48,
-   185,    75,    36,   334,   199,   200,    94,    41,  1296,     1,
-   135,   136,     0,   138,   111,  1303,   335,   336,     1,    36,
-   110,  1487,   151,   177,    41,   146,   147,   148,     9,  1523,
-    63,   110,   135,   578,   111,   160,    12,     4,     5,    56,
-    63,    34,   328,   146,   147,    94,   517,    61,   111,    83,
-  1228,   495,    75,   182,    12,   850,   177,   160,   110,  1237,
-  1238,   110,  1240,     7,    63,  1401,    60,    59,   387,   388,
-   135,    63,   175,   176,    36,  1537,    59,   110,   194,    41,
-    63,    62,    94,    12,    60,   135,   202,    63,   656,    65,
-    57,    58,    48,    75,    38,   160,   227,   111,    27,    28,
-   191,   135,    60,    32,    96,    63,    61,    75,   199,   200,
-   160,   110,  1468,    96,    81,    25,   110,  1405,   135,    48,
-   325,   195,    98,    60,   863,    60,   160,   866,    12,  1028,
-    55,    60,    61,    63,    63,   226,    65,    49,    94,    95,
-    98,    61,   353,   160,   337,    75,   321,   242,    55,    59,
-    75,    60,   277,    63,   147,   148,   111,  1445,   953,   898,
-   899,   325,    94,   374,   596,    94,    95,    61,    75,    98,
-   965,   432,   433,   110,    48,   110,    60,     4,     5,    63,
-   445,   110,   624,   308,   177,   276,    96,   658,   680,   854,
-   465,   111,   680,     3,     4,     5,   321,     3,     4,     5,
-     6,   110,  1490,   334,   329,  1000,    94,  1002,  1386,  1387,
-   374,   383,   337,   338,    98,    48,    55,   111,   321,    48,
-    94,    48,   887,    75,    63,    60,   110,    76,    55,    78,
-    57,    58,   676,  1418,   438,   338,    42,   328,    48,     4,
-     5,    76,   446,    49,    71,    55,    63,    57,    58,   444,
-   445,    57,    58,    75,    81,   380,    48,   452,    75,   384,
-   925,    94,    95,  1279,    91,    94,  1165,    94,    95,   464,
-     8,     9,  1457,   338,    63,    81,    14,   380,   432,   433,
-   434,   600,    48,    89,    94,   816,    75,   321,   338,   484,
-    60,    61,    57,    58,   385,     4,     5,   490,    48,    37,
-    94,   426,    94,  1488,   338,  1293,   851,  1295,    46,    48,
-    48,   432,   433,   434,    61,   308,    81,    48,    60,    61,
-    48,   338,  1338,   426,  1063,  1064,    65,    55,    94,   432,
-   433,  1347,  1348,  1140,    65,   451,    25,   462,    27,    28,
-   109,     3,     4,     5,    94,    95,   380,    75,    57,    58,
-     4,   467,    25,   444,   445,    94,    94,    60,    61,   462,
-   110,   452,   462,    94,    95,   490,    94,   462,   493,    55,
-    59,   496,    81,   464,    63,   500,   501,   502,   503,   504,
-   454,    61,    36,   951,   559,   286,   287,    41,   513,    75,
-   882,    48,   426,   484,   882,    57,    58,   462,   523,    55,
-   301,   526,    32,   304,    48,   882,   307,    96,   704,   310,
-   706,    55,   462,   314,    63,   711,  1081,    27,    28,    81,
-    48,   322,     4,     5,    48,    84,    85,   859,   462,    75,
-   602,    75,    48,   558,   559,   754,    59,    94,    95,  1104,
-   433,   434,   913,     3,     4,     5,  1462,     7,     8,     9,
-    94,  1459,   577,   110,     4,     5,   559,   588,    55,   584,
-   991,   111,   634,  1471,   636,   637,    94,    95,    59,    48,
-    94,   574,   575,  1481,   577,    57,    58,   763,    94,    27,
-    28,   584,   110,    48,    32,    94,   714,    55,  1019,  1020,
-  1498,    48,   856,  1038,    55,   629,    48,    57,    58,    81,
-   493,    55,   697,   496,   676,    55,    48,    57,    58,  1517,
-   635,   110,   603,    61,   639,    94,    95,    65,    48,   512,
-   513,    71,   656,  1091,    55,   559,    48,    48,   859,    94,
-    48,    81,  1540,   526,    55,    48,    48,    94,     3,     4,
-     5,    76,    94,   577,    75,    95,   637,   740,   741,   742,
-   584,  1119,    94,    11,    75,   680,   728,   380,     3,     4,
-     5,     6,    95,   111,    94,  1034,  1035,   110,  1037,  1100,
-     4,     5,    94,    94,   110,    55,    94,   680,  1109,  1110,
-    55,    94,    94,  1114,  1115,   676,     4,     5,    63,  1033,
-    55,   584,    57,    58,    59,    75,   721,    42,   723,   110,
-    75,   106,   107,   426,   729,   730,   697,   111,     4,     5,
-   511,   512,    57,    58,   739,   740,   741,   742,   721,   744,
-   723,   721,    55,    57,    58,  1156,   721,   730,   723,     3,
-   730,   751,   752,   753,   729,   730,   739,    55,    61,    57,
-    58,   744,    75,   113,    89,    94,   680,    81,    60,     4,
-   724,   725,   948,   949,   950,    95,   721,    95,   723,   733,
-    63,    57,    58,  1427,    76,   730,    78,     3,     4,     5,
-     6,   721,   763,   723,    55,   994,   995,   996,     4,     5,
-   730,    36,    63,  1451,  1215,    81,    41,   721,   813,   723,
-    60,    61,   817,    60,    75,    94,   730,   113,    65,    60,
-    61,     3,     4,     5,    94,   739,    42,   892,    60,    76,
-   744,   728,   729,    49,    25,    75,    27,    28,    75,   844,
-   111,    57,    58,  1254,     9,   850,    75,    12,   859,   854,
-    75,    57,    58,   887,     3,     4,     5,    11,     7,     8,
-     9,     3,     4,     5,   110,    81,    60,   850,    59,   852,
-   853,   854,    63,    89,   577,    57,    58,   882,    61,   884,
-   110,   584,   887,    48,   757,   111,   887,   110,    37,    60,
-    61,   925,     3,     4,     5,    60,   110,    62,    63,   882,
-    65,   110,   885,   886,   887,    96,    55,   111,    57,    58,
-    59,    76,   977,    78,   113,    57,    58,    59,   110,    65,
-   925,   110,  1333,   308,   925,    25,   113,    27,    28,    94,
-    95,     4,     5,    98,   939,    55,   850,    75,  1079,  1080,
-   854,   946,   925,    63,    55,   110,    57,    58,   953,     3,
-     4,     5,     6,    60,    61,    75,   105,   106,   107,    59,
-   965,  1102,  1103,    63,    59,    75,    55,    55,   882,    75,
-   953,  1295,   113,   887,    63,    63,   113,   680,   110,   110,
-   853,   854,   965,   988,    57,    58,    75,    75,    42,   110,
-    25,    55,    27,    28,     8,  1000,    96,  1002,  1349,   113,
-    94,    55,   977,    57,    58,   988,    48,    14,   988,    65,
-  1361,   925,    60,   988,   887,   969,    23,  1000,  1083,  1002,
-    94,   975,   976,    61,    59,   979,   980,   111,    63,   983,
-     3,     4,     5,    65,    55,    89,   739,    65,   423,   953,
-   110,   744,    63,   988,   825,  1079,  1080,  1081,    61,   110,
-   110,   965,   925,    63,    75,   110,  1428,    64,   988,   110,
-  1428,    96,    81,    82,    83,    84,    85,  1418,  1102,  1103,
-  1104,   852,   853,    65,   988,    60,  1081,  1091,  1079,  1080,
-  1081,    65,    55,    65,    57,    58,  1000,    48,  1002,    79,
-    80,    81,    82,    83,    84,    85,  1079,  1080,  1081,  1104,
-    65,  1102,  1103,  1104,  1455,   113,  1457,    94,   493,    63,
-   110,   496,   110,   110,  1525,   500,   123,   110,  1442,  1102,
-  1103,  1104,  1473,    76,   110,    76,    87,    88,   513,     4,
-     5,    92,    93,    94,    95,  1140,    76,  1488,   145,    76,
-   110,   526,   110,   437,    63,   530,    63,   850,    60,    63,
-   110,   854,   110,    95,   448,   111,   113,  1140,   110,    89,
-  1140,  1136,     3,     4,     5,  1140,   110,  1081,   113,    48,
-    45,   556,   110,     3,     4,     5,   110,   562,   113,   882,
-    55,   113,    57,    58,   887,     3,     4,     5,   110,     7,
-  1104,   111,   110,     4,     5,  1140,  1201,     3,     4,     5,
-     6,    31,   110,     9,   110,    60,  1211,  1080,  1081,   111,
-  1140,   218,   219,    31,    65,   695,    57,    58,  1201,    65,
-    38,  1201,   925,    60,   231,    55,  1140,    57,    58,    60,
-  1103,  1104,   110,    27,    28,  1201,    42,    55,    32,    57,
-    58,  1293,   110,  1295,    55,    94,    57,    58,   111,    55,
-   953,    57,    58,   110,    94,  1410,  1201,   110,   738,  1040,
-    71,    94,   965,   743,     8,    71,    60,    61,    94,   113,
-    81,    65,  1413,  1414,   110,    81,  1442,     3,     4,     5,
-    65,  1235,  1236,    89,  1289,   110,   110,  1201,    94,  1294,
-   110,  1296,   113,   300,   111,     4,     5,  1000,  1303,  1002,
-     9,     3,     4,     5,     6,   110,  1289,   110,   110,  1289,
-   110,   110,   110,  1296,   110,   110,  1296,   110,    63,    48,
-  1303,  1102,  1103,  1303,  1295,   113,   110,   110,   110,    97,
-  1296,    57,    58,    34,     7,     8,     9,  1303,  1372,   110,
-    42,    14,    63,   350,  1289,   110,    55,    49,    57,    58,
-   110,  1296,   110,   110,   113,    57,    58,   110,  1303,    32,
-    63,    61,    71,    61,    37,   845,     9,   847,    61,    16,
-    94,  1372,    81,    46,    94,  1289,    61,    61,  1081,  1413,
-  1414,  1415,  1296,     3,     4,     5,    95,    89,    61,  1303,
-    94,  1443,     3,     4,     5,   109,  1401,  1402,    94,    17,
-  1405,  1104,    99,    61,    61,   110,   700,    11,    61,    61,
-  1415,   110,  1413,  1414,  1415,   110,   110,  1371,  1401,  1402,
-    94,  1401,  1405,  1428,    60,  1405,  1431,   110,    61,  1434,
-  1413,  1414,    61,    65,   110,    11,   821,    57,    58,  1405,
-  1445,   735,     7,     8,     9,  1428,    57,    58,  1431,    14,
-   110,  1434,   459,  1458,  1434,    61,  1401,     8,     9,    11,
-  1405,    61,  1445,    14,     0,  1445,     0,    32,  1434,   854,
-     0,  1442,    37,     2,   882,  1458,   419,    79,  1458,  1445,
-   408,    46,  1487,   426,   353,  1490,    37,  1401,  1402,  1434,
-   160,  1405,  1458,  1426,   160,    46,    61,  1091,   729,  1372,
-  1445,   103,   723,    93,  1487,   523,  1397,  1490,  1289,  1537,
-  1490,  1465,   138,  1458,  1428,   279,  1294,  1431,   525,   999,
-  1434,  1001,   875,   663,  1490,   951,   870,  1119,     4,   220,
-   132,  1445,  1537,   988,   729,   723,  1138,   609,    14,   141,
-   868,  1414,  1415,   559,  1458,  1490,   325,   182,   491,    25,
-     3,     4,     5,     6,  1537,    31,    32,  1537,    34,   123,
-    36,   946,  1296,  1202,  1473,    41,  1451,     4,     5,  1510,
-  1448,  1537,     9,  1487,  1054,  1512,  1490,   934,    54,  1211,
-    56,    -1,    -1,   185,    -1,    -1,    -1,    -1,    64,    42,
-    -1,    -1,  1537,    -1,    -1,    71,    49,    -1,    -1,    -1,
-     3,     4,     5,     6,    57,    58,    82,    83,    -1,    -1,
-    -1,    -1,   555,    -1,   557,   558,   218,    -1,    55,    -1,
-    57,    58,   629,  1537,    -1,    -1,    -1,    -1,    81,   105,
-    -1,   638,  1413,  1414,    71,    -1,    89,    -1,    -1,    42,
-   242,   584,    -1,  1123,    81,    -1,    49,  1127,   591,    -1,
-    -1,    -1,   128,    -1,    57,    58,   663,   133,    -1,   135,
-    -1,    -1,    -1,   139,   958,   959,   142,   143,    -1,    -1,
-   146,   147,   148,    -1,    -1,    -1,    -1,    -1,    81,     3,
-     4,     5,     6,    56,   160,    58,    89,     4,     5,    -1,
-     7,     8,     9,   987,    -1,    12,    -1,    14,  1178,   175,
-   176,   177,    -1,     3,     4,     5,     6,     3,     4,     5,
-     6,    -1,    29,     9,    31,    32,    -1,    -1,    42,  1104,
-    37,    -1,    -1,    -1,    -1,  1428,    -1,    -1,   204,    46,
-    -1,   333,    -1,    57,    58,    -1,    -1,    -1,    55,    -1,
-    57,    58,    42,   219,    -1,    -1,    42,    -1,    -1,    49,
-    -1,   227,    48,     3,     4,     5,     6,    57,    58,    55,
-    -1,    57,    58,   239,  1244,  1245,    -1,  1152,  1153,  1154,
-  1155,    -1,    -1,    -1,    -1,    71,    -1,    -1,  1163,    -1,
-  1260,    98,   175,   176,   177,    81,    -1,    -1,   390,    89,
-    -1,    -1,    42,    89,    -1,    91,    -1,    -1,    94,    95,
-    -1,   277,   278,    -1,    -1,    55,    -1,    57,    58,    -1,
-    -1,    61,    -1,    -1,   757,    -1,    -1,    -1,   191,     4,
-     5,    71,    -1,    -1,     9,    -1,   199,   200,  1308,  1309,
-    -1,    81,    -1,    -1,    -1,    -1,    -1,  1131,  1132,    89,
-  1134,  1135,    -1,  1137,    94,   321,    -1,  1327,  1328,   325,
-    -1,   327,   328,   329,    -1,    -1,   229,   459,     7,     8,
-     9,    -1,   338,    48,    -1,    14,    -1,    -1,   875,    -1,
-    55,    -1,    57,    58,   817,    -1,    -1,   353,    -1,    -1,
-    -1,    -1,    -1,    32,    -1,   487,    71,   830,    37,   832,
-    -1,   834,    -1,   419,    -1,    -1,    81,    46,   374,  1284,
-   426,    -1,    -1,    -1,   380,    -1,    91,   383,   384,    94,
-    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   394,    -1,
-    -1,   397,    -1,    -1,    -1,    -1,   402,    -1,    -1,    -1,
-    -1,  1225,  1226,    -1,   877,    -1,     1,    -1,     3,     4,
-     5,     6,    -1,     8,     3,     4,     5,    -1,     3,     4,
-     5,     6,   428,    -1,   430,    -1,   432,   433,   434,    -1,
-    -1,    -1,   438,    -1,   907,   491,    -1,   443,    -1,   571,
-   446,    -1,    -1,  1358,    -1,    -1,    -1,    42,    -1,    -1,
-    39,    40,   925,    42,    49,   587,   462,    42,    -1,    -1,
-    55,    -1,    57,    58,    49,    -1,    55,    -1,    57,    58,
-    -1,    -1,    57,    58,    -1,    -1,     3,     4,     5,     6,
-    -1,   384,   385,  1020,    -1,    -1,  1401,  1402,    -1,    -1,
-    -1,  1315,  1316,  1317,    89,   501,   502,   503,   504,   555,
-  1415,   557,   558,    -1,    89,   428,    -1,   430,    -1,   432,
-   433,   434,    -1,    -1,    -1,    42,  1431,    -1,    -1,    -1,
-   443,    -1,     7,     8,     9,    -1,    -1,    -1,    55,    14,
-    57,    58,    -1,    -1,   437,   591,    63,    -1,    -1,    -1,
-    -1,   444,   445,    -1,    71,   448,    -1,    32,    -1,   452,
-    -1,    -1,    37,   559,    81,   561,    54,    -1,    -1,  1383,
-  1384,    46,    89,  1100,    -1,    -1,   572,    94,   574,   575,
-  1485,   577,  1487,    -1,    -1,    -1,    -1,    -1,   584,    -1,
-    -1,    79,   588,    -1,    82,    77,    78,    79,    80,    81,
-    82,    83,    84,    85,  1509,    -1,   602,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   103,    -1,   105,  1523,    -1,
-     1,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
-  1093,    -1,  1095,    14,  1097,    -1,    -1,    -1,   634,   635,
-   636,   637,   638,   639,    -1,    -1,    -1,    -1,    29,    -1,
+   340,    24,     4,     4,    54,     4,   662,   125,   191,   379,
+    34,    75,     4,   156,    14,   660,   379,   231,   146,   147,
+   831,   379,   460,   725,   346,   350,    83,   132,     4,   439,
+   650,    36,   734,    79,    36,    36,    41,    36,    34,    41,
+    41,  1276,    41,   226,    36,   297,   298,    53,  1411,    41,
+   923,    56,   191,   221,     4,   412,   643,  1299,    61,    34,
+    36,   200,    11,  1446,  1444,    41,    71,    11,  1306,   106,
+   107,  1441,    59,    59,    38,  1313,   328,     1,    83,    65,
+    56,    11,    82,    60,     1,    56,    36,    58,  1468,   743,
+    60,    41,   595,   276,   748,   141,    31,    32,  1428,   602,
+     0,   106,   107,  1135,  1136,   105,   199,   200,    48,     3,
+     4,     5,     9,   100,    63,     0,   128,  1149,    75,   284,
+   285,   133,   146,   147,   148,    79,  1509,  1497,   132,   133,
+   135,   195,   346,   135,   111,    59,   111,  1467,    61,   185,
+   110,   761,    59,     1,   764,   151,    63,   111,    83,    12,
+   146,   147,   148,   177,    94,   160,    75,   340,   160,   135,
+    89,   110,    91,    57,    58,    62,   110,  1547,  1498,  1411,
+  1533,   106,   107,   513,    61,    55,   182,  1415,   535,    96,
+   110,   177,    55,    12,   160,   135,   596,    81,   111,    14,
+    63,   194,    60,    49,    60,    75,    94,    60,    23,   202,
+    63,    59,    61,    12,    34,    63,  1238,   136,     8,     9,
+   160,   146,   147,   867,    14,  1247,  1248,  1455,  1250,    63,
+   191,   386,   387,   661,   111,    27,    28,   227,   199,   200,
+    32,    60,   337,  1044,    63,    98,    65,    37,    96,    64,
+   175,   176,   110,  1478,   110,    61,    46,   110,    48,    60,
+    48,    60,   111,    63,    63,    63,   299,   300,   229,    61,
+   437,    94,  1500,    65,    48,    75,   110,    48,   445,    98,
+   633,   314,   277,   417,   317,    94,   333,   320,   283,    48,
+   323,   324,   287,    75,   321,   287,   906,   907,   242,    98,
+    75,   334,   614,     7,    94,   111,    94,    95,   123,   110,
+   887,   626,   110,   431,   432,   444,   663,   961,    94,   111,
+    94,   287,   110,    94,    95,   685,   321,   147,   148,   973,
+   145,   464,    39,  1469,    38,    94,   110,   685,   333,   110,
+     4,     5,   382,   337,   499,  1481,   341,   287,    55,    25,
+   352,   681,    48,    55,   109,  1491,   346,   177,   283,    48,
+   443,   444,    61,    48,  1008,    25,  1010,   286,   451,    65,
+    58,   373,  1508,    75,  1396,  1397,    65,  1178,   871,   373,
+   463,     4,     5,    59,   379,     4,     5,    63,   383,    61,
+     9,  1527,    55,    57,    58,   422,   321,   379,    94,   453,
+   483,   894,    48,   218,   219,    94,  1016,  1017,   333,    94,
+    95,     4,     5,    48,  1550,    60,   231,   431,   432,   433,
+    96,    48,   383,   384,    48,   110,  1289,     4,     5,    32,
+   425,    76,    55,    48,    57,    58,    55,    36,    57,    58,
+   933,    65,    41,    48,    75,   431,   432,   433,    94,    95,
+    63,    63,    71,    48,   379,     4,     5,   450,  1150,    94,
+    95,   501,    81,    75,    57,    58,   461,    94,   868,   461,
+    94,    95,   461,   466,    59,   436,    95,    60,    61,    94,
+    57,    58,   443,   444,   511,  1348,   447,   514,    81,    94,
+   451,   518,    55,    48,  1357,  1358,   529,   530,   313,    94,
+   425,   321,    48,   191,   531,     4,   431,   432,    57,    58,
+    48,   199,   200,     4,     5,   542,   511,   461,    63,   514,
+   547,   461,    48,   518,   519,   520,   521,   522,   888,   576,
+    75,   959,    81,    48,   349,   888,   531,    36,   226,    94,
+   888,   502,    41,    55,   111,    48,   573,   542,    94,    87,
+    88,   709,   579,   711,    92,    93,    94,    95,   716,    60,
+    61,     4,     5,    75,   876,    59,    57,    58,    94,    95,
+   489,     3,     4,     5,   921,     3,     4,     5,    48,    94,
+   575,   576,    48,     4,     5,    55,   511,    94,   276,   514,
+    81,    94,    55,   518,   519,   520,   521,   522,  1091,   639,
+   595,   641,   642,   758,   777,    75,   531,   602,    55,  1472,
+    48,   719,   432,   433,    57,    58,   606,   542,   631,   702,
+    48,  1114,    55,    55,    94,    57,    58,    55,    94,    57,
+    58,   873,     3,     4,     5,     6,    57,    58,    81,    48,
+    76,   681,    48,   458,    25,   640,    27,    28,   661,   644,
+   575,   576,   340,    63,  1054,  1303,    94,  1305,  1050,  1051,
+    81,  1053,     3,     4,     5,    75,    94,   592,   593,    55,
+   595,    42,   876,  1101,   728,   729,   110,   602,    59,   640,
+   110,   642,    63,   737,    55,    94,    57,    58,    94,    75,
+   685,   511,   732,    55,   514,    95,   384,     4,     5,   833,
+    48,  1129,   110,     3,     4,     5,   110,     3,     4,     5,
+   530,   531,    11,    75,    55,    96,    57,    58,    89,  1049,
+   681,   111,   542,    55,    60,    61,   541,    48,     3,    55,
+   725,    63,   727,   725,    55,   727,   725,    63,   733,   734,
+   418,   702,   734,    75,   705,   734,    94,   425,   743,    75,
+    57,    58,    61,   748,    75,   443,   444,    57,    58,    59,
+   685,    57,    58,   451,    48,    94,   732,   733,    55,    27,
+    28,    55,   733,    94,    81,   463,    63,    55,   739,     4,
+     5,   725,   602,   727,    76,   725,    78,   727,    75,   733,
+   734,    75,    60,    61,   734,   483,   113,    75,   956,   957,
+   958,   418,  1437,    63,     3,     4,     5,     6,   425,   842,
+    94,   838,    84,    85,   502,  1461,   631,    25,   743,    27,
+    28,    95,    76,   748,    78,   744,   745,   746,   643,    95,
+    55,   509,    57,    58,    55,   830,   869,   870,    60,   834,
+    27,    28,    63,    42,   871,    32,    71,  1002,  1003,  1004,
+    49,    59,   113,   668,    75,    63,    81,    94,    57,    58,
+     3,     4,     5,   899,   111,   999,   861,     3,     4,     5,
+    95,    55,   867,    60,    61,    94,   871,    75,    65,    63,
+   894,    75,    81,    75,    60,    75,   876,   110,    96,    65,
+    89,    75,   509,   888,   572,   890,   574,   575,    60,   894,
+    76,  1035,  1036,     8,     9,   830,   888,    11,   894,    14,
+    60,    61,    55,   110,    57,    58,    59,   110,   113,   933,
+    55,    57,    58,   977,   602,   110,    65,   954,    63,   983,
+   984,   609,    37,   987,   988,    61,   861,   991,   933,   110,
+    75,    46,   867,   111,   869,   870,   871,   933,   111,   985,
+   110,   771,   947,    75,   642,   572,   113,   574,   575,   954,
+   755,   756,   757,   888,    75,   890,   961,   892,   893,   894,
+    65,  1089,  1090,    60,    61,  1305,  1110,    75,   973,     4,
+     5,    60,    60,    61,   113,  1119,  1120,    60,   113,   110,
+  1124,  1125,   609,   681,  1112,  1113,   110,    76,   110,    78,
+    59,   996,   110,    55,   996,   966,   967,   996,   933,     8,
+   113,    94,  1359,  1008,   702,  1010,     3,     4,     5,     6,
+    45,    48,   947,  1056,  1371,    94,   111,    61,    37,   954,
+    55,    61,    57,    58,   995,  1169,   961,    65,   110,    65,
+   110,   985,    81,    82,    83,    84,    85,    65,   973,    63,
+   870,   871,   996,   110,   110,    42,   996,  1093,     4,     5,
+   110,    65,    79,     9,   879,    65,   113,    65,    65,    60,
+    57,    58,   887,    94,   894,  1089,  1090,  1091,  1438,  1112,
+  1113,  1428,    63,  1008,   436,  1010,   103,  1114,  1101,   777,
+  1438,  1225,   111,   771,   110,   447,  1091,   110,  1112,  1113,
+  1114,    76,    89,  1089,  1090,  1091,    76,   110,   110,    55,
+    76,    57,    58,   933,   110,   132,    76,   110,  1465,  1114,
+  1467,   110,  1452,    63,   141,    71,  1112,  1113,  1114,    25,
+  1264,    27,    28,    63,    60,    81,  1483,   110,  1165,  1166,
+  1167,  1168,     3,     4,     5,    63,     7,     8,     9,  1176,
+   113,  1498,   110,    95,   111,  1150,   834,   110,  1150,   110,
+    89,  1150,    48,    59,  1089,  1090,  1091,    63,   185,   847,
+   113,   849,   110,   851,   110,    57,    37,   110,   113,   113,
+  1141,  1142,   110,  1144,  1145,   110,  1147,  1112,  1113,  1114,
+   110,  1245,  1246,    60,    55,   111,    57,    58,    59,    65,
+    96,   218,  1146,   881,    60,    25,  1150,    27,    28,  1343,
+  1150,    65,    60,   110,    94,   110,  1211,   834,   111,  1211,
+  1211,  1036,  1211,    94,    94,   242,  1221,   111,   113,    94,
+   847,   110,   849,   110,   851,     4,     5,   915,     8,    59,
+   113,   110,   110,    63,   105,   106,   107,    79,    80,    81,
+    82,    83,    84,    85,    65,   933,    63,   110,   110,   110,
+   110,   110,    48,  1303,   881,  1305,  1299,  1294,   110,   110,
+  1090,  1091,   110,   379,  1235,  1236,    96,   110,   113,  1452,
+   106,   107,     3,     4,     5,   110,    55,  1420,    57,    58,
+    34,   110,   110,  1113,  1114,  1110,  1221,   110,   915,    97,
+   110,   110,    71,    63,  1299,  1423,  1424,  1299,   110,  1304,
+  1299,  1306,    81,   110,  1306,  1306,   110,  1306,  1313,   425,
+   110,  1313,  1313,   110,  1313,   113,    63,  1381,   345,    61,
+    61,     9,    61,    16,    61,    94,    57,    58,    94,    61,
+    94,  1368,   109,  1304,  1305,    94,     4,     5,    99,     7,
+     8,     9,    17,   705,    12,    61,    14,    61,   110,    11,
+   110,    61,   110,   110,  1325,  1326,  1327,    61,  1382,    94,
+    60,    29,   389,    31,    32,   110,    61,    65,    11,    37,
+     3,     4,     5,    11,  1411,  1412,    61,   739,    46,    61,
+  1423,  1424,   110,  1208,   110,    61,  1382,    55,  1425,    57,
+    58,  1535,     0,     0,     3,     4,     5,     0,     2,  1423,
+  1424,  1425,   407,  1453,  1441,   352,  1411,  1412,   160,  1411,
+  1415,  1475,  1411,  1415,  1415,  1103,  1415,  1105,   888,  1107,
+  1425,  1436,  1393,  1394,    57,    58,   160,  1423,  1424,  1425,
+    98,   458,   733,  1438,   727,  1101,  1441,    93,   493,  1444,
+  1407,   138,  1444,  1444,  1547,  1444,   279,   283,    57,    58,
+  1455,  1304,   879,  1455,  1455,   668,  1455,   768,  1495,   486,
+  1497,  1129,   959,  1468,   220,   996,  1468,  1468,   727,  1468,
+  1295,   733,     3,     4,     5,     6,  1103,  1412,  1105,   595,
+  1107,  1148,  1519,   508,   576,   321,   602,     4,  1423,  1424,
+  1425,   766,  1497,   182,   123,  1500,  1533,    14,  1500,  1500,
+   337,  1500,  1306,  1438,  1212,  1483,  1441,  1195,    25,  1461,
+  1458,    42,  1520,  1522,    31,    32,   942,    34,    49,    36,
+     3,     4,     5,    -1,    41,  1350,    57,    58,  1499,  1221,
+    -1,    -1,    -1,     4,     5,    -1,    -1,    54,     9,    56,
+    -1,    -1,  1547,   379,    -1,  1547,  1547,    64,  1547,    -1,
+    81,    -1,  1382,    -1,    71,    -1,    39,    40,    89,    42,
+    -1,   588,  1497,    -1,    -1,    82,    83,    -1,  1195,   685,
+    -1,    -1,    55,    -1,    57,    58,    -1,    48,   605,    -1,
+     3,     4,     5,     6,    55,    -1,    57,    58,   105,    -1,
+    -1,    -1,    -1,    -1,  1424,  1425,    -1,    -1,    -1,    -1,
+    71,    -1,    -1,    -1,   966,   967,    -1,  1305,    -1,    -1,
+    81,   128,     9,    -1,    -1,    12,   133,    -1,   135,    42,
+    91,    12,   139,    94,    95,   142,   143,   743,    -1,   146,
+   147,   148,   748,   995,    57,    58,    27,    28,    -1,    -1,
+    -1,    32,    -1,   160,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    48,    -1,    -1,    -1,    -1,    -1,    48,   175,   176,
+   177,    -1,    -1,    60,    -1,    62,    63,   700,    65,    60,
+    61,    -1,    63,    -1,    65,   511,    -1,    -1,   514,    76,
+    -1,    78,   518,   519,   520,   521,   522,   204,    -1,    -1,
+    -1,    -1,    -1,    -1,  1382,   531,    -1,    94,    95,    -1,
+    -1,    98,   219,    94,    95,    -1,   542,    98,    -1,   742,
+   227,    -1,    -1,   110,   747,    -1,    -1,    -1,    -1,   110,
+     4,     5,   239,     7,     8,     9,    -1,    -1,    12,    -1,
+    14,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,   575,
+     7,     8,     9,    -1,    -1,    29,    -1,    31,    32,    -1,
+    -1,   867,    -1,    37,  1452,   871,     7,     8,     9,   595,
+   277,   278,    46,    14,    48,    -1,   602,    -1,    -1,    -1,
+   287,    55,   888,    57,    58,    -1,    -1,    -1,   894,  1141,
+  1142,    32,  1144,  1145,    -1,  1147,    37,    71,     4,     5,
+    57,    58,     8,     9,    -1,    46,    -1,    81,    14,     3,
+     4,     5,     6,    -1,    -1,     9,    -1,    91,    81,    -1,
+    94,    95,    -1,    29,    98,    31,   333,   933,    -1,    -1,
+   337,    37,   339,   340,   341,   175,   176,   177,    -1,   862,
+    46,   864,    -1,    -1,    -1,   352,    -1,    -1,    42,    55,
+    -1,    57,    58,    59,    48,   961,    -1,    -1,   875,   685,
+   877,    55,    -1,    57,    58,    -1,   373,   973,    -1,    -1,
+    -1,    -1,   379,    -1,    -1,   382,   383,    71,    -1,     3,
+     4,     5,   899,  1235,  1236,    -1,   393,    81,    94,   396,
+    -1,   154,    -1,    -1,   401,    89,    -1,    91,    -1,    -1,
+    94,    95,  1008,    -1,  1010,    -1,    -1,    31,    -1,    -1,
+   173,     3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,
+   427,    -1,   429,   186,   431,   432,   433,    -1,    -1,    -1,
+   437,    55,    -1,    57,    58,   442,    -1,    -1,   445,     4,
+     5,    -1,    -1,     8,     9,    -1,    -1,    -1,    -1,    14,
+    42,    -1,    -1,    -1,   461,    -1,    48,     7,     8,     9,
+    -1,    -1,    -1,    55,    14,    57,    58,    -1,   985,    -1,
+    -1,    -1,    37,  1325,  1326,  1327,    -1,    -1,    -1,    71,
+    -1,    46,    32,    48,  1007,  1091,  1009,    37,    -1,    81,
+    55,    -1,    57,    58,   501,    -1,    46,    89,    -1,    91,
+    -1,    -1,    94,    95,   830,    -1,    71,    -1,  1114,    -1,
+    -1,    61,   519,   520,   521,   522,    81,    -1,     7,     8,
+     9,    -1,    -1,    -1,    -1,    14,    91,    -1,    -1,    94,
+    95,    -1,    -1,    -1,    -1,   861,    -1,    -1,    -1,    -1,
+    -1,  1393,  1394,    32,    -1,   871,    -1,  1070,    37,     3,
+     4,     5,    -1,     7,    -1,    -1,    -1,    46,    -1,  1076,
+    -1,    -1,   888,    -1,   890,    -1,    -1,    -1,   894,   576,
+    -1,   578,     3,     4,     5,     6,  1093,    31,     9,    -1,
+    -1,    -1,   589,    -1,    38,   592,   593,   427,   595,   429,
+    -1,   431,   432,   433,    -1,   602,    -1,    -1,    -1,   606,
+    -1,    55,   442,    57,    58,    -1,    -1,   933,    -1,    -1,
+  1133,    42,    -1,    -1,  1137,    -1,    -1,    48,    -1,    -1,
+    -1,   947,    -1,    -1,    55,    -1,    57,    58,   954,  1146,
+    -1,    -1,   639,   640,   641,   642,   643,   644,    -1,    -1,
+    71,     7,     8,     9,    -1,    -1,    -1,  1499,    14,    -1,
+    81,     3,     4,     5,     6,    -1,    -1,     9,    89,    -1,
+    91,    -1,    -1,    94,    95,    -1,    32,    -1,  1191,    -1,
+    -1,    37,   435,    -1,   681,    -1,    -1,   440,   685,    -1,
+    46,    -1,    -1,    -1,    -1,   692,   693,    -1,   695,    -1,
+    42,    -1,    -1,    -1,    -1,    61,    48,    -1,    -1,     3,
+     4,     5,     6,    55,   467,    57,    58,    -1,    -1,   472,
+    -1,    -1,    -1,    -1,    -1,   722,    -1,    -1,   725,    71,
+   727,   484,   485,    -1,   487,   732,   733,   734,    -1,    81,
+    -1,  1254,  1255,    -1,    -1,    -1,   743,    89,    42,    91,
+    -1,   748,    94,    95,    48,    -1,    -1,  1270,   755,   756,
+   757,    55,    -1,    57,    58,    -1,     4,     5,    -1,    -1,
+     8,     9,    -1,    -1,    -1,  1091,    14,    71,    -1,    -1,
+   777,    -1,    -1,    -1,     3,     4,     5,    81,     7,     8,
+     9,    29,    -1,    31,    -1,    89,    -1,    91,  1114,    37,
+    94,    95,    -1,    -1,    -1,  1318,  1319,    -1,    46,    -1,
+    -1,    -1,     3,     4,     5,     6,    -1,    55,    37,    57,
+    58,    -1,    -1,    -1,  1337,  1338,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   830,    -1,   339,   340,   341,    57,    58,
+    -1,    -1,  1438,    -1,    -1,   598,   599,    -1,    -1,    -1,
+   603,    42,    -1,    -1,    -1,   852,    94,   854,    49,    -1,
+    -1,    -1,   692,   693,   861,   695,    57,    58,   865,    -1,
+   867,    -1,   869,   870,   871,    -1,    -1,    -1,    -1,   876,
+     3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,
+    81,   888,    -1,   890,    -1,   892,   893,   894,    89,    -1,
+    -1,     4,   732,    -1,    -1,  1221,    -1,    -1,    -1,    -1,
+    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+    -1,    24,    25,     3,     4,     5,     6,    -1,    31,    32,
+    -1,    34,    55,    36,    57,    58,   933,    -1,    41,     4,
+     5,    -1,    -1,     8,     9,    -1,    -1,    -1,    71,    14,
+   947,    54,    -1,    56,    -1,    -1,    -1,    -1,    81,    -1,
+    -1,    64,    42,    -1,   961,    -1,    89,    -1,    71,    -1,
+    -1,    94,    37,    -1,    -1,    55,   973,    57,    58,    -1,
+    83,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,   986,
+    55,    71,    57,    58,    -1,    -1,   749,    -1,   751,   996,
+    -1,    81,    -1,    -1,    -1,    -1,    71,    -1,    -1,    89,
+    -1,  1008,    -1,  1010,    94,    -1,    81,    -1,    -1,    -1,
+    -1,     3,     4,     5,     6,   128,    91,    -1,    -1,    94,
+    95,    -1,   135,    -1,    -1,    -1,   139,    -1,    -1,    -1,
+   143,    -1,    -1,   146,   147,   148,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,  1050,  1051,    -1,  1053,   160,    -1,    -1,
+    42,    -1,   892,   893,   894,    -1,    -1,    49,    -1,    -1,
+    -1,    -1,   175,   176,   177,    57,    58,     4,     5,    -1,
+     7,     8,     9,   836,   837,    12,   839,    14,   592,   593,
+  1087,  1088,  1089,  1090,  1091,    -1,    -1,    -1,  1095,    81,
+    -1,   204,    29,   933,    31,    32,    -1,    89,    -1,  1425,
+    37,    -1,    -1,   866,    -1,  1112,  1113,  1114,    -1,    46,
+    -1,    -1,  1438,    -1,     3,     4,     5,     6,    55,    -1,
+    57,    58,    -1,    -1,    -1,   639,   239,   641,   642,    -1,
+   644,    -1,    -1,   896,    -1,    -1,  1143,    -1,    -1,    -1,
+    -1,  1148,     1,  1150,     3,     4,     5,     6,     7,     8,
+     9,    -1,    -1,    42,     1,    14,     3,     4,     5,     6,
+    49,     8,    -1,    -1,   277,   278,    -1,   681,    57,    58,
+    29,    -1,    31,    32,   287,    -1,    -1,    -1,    37,    -1,
+    -1,    -1,    -1,    42,    -1,    -1,    -1,    46,    47,    -1,
+    49,  1198,  1199,    -1,  1201,    42,    55,   960,    57,    58,
+    89,    -1,    49,    -1,    63,    -1,    -1,    -1,    55,   972,
+    57,    58,    71,    -1,  1221,    -1,    -1,    -1,    -1,    -1,
+   333,    -1,    81,    -1,   337,    -1,   339,   340,   341,    -1,
+    89,    -1,    -1,   346,    -1,    94,    -1,    -1,    -1,   352,
+    -1,    -1,    89,    -1,    -1,    -1,    -1,  1087,  1088,  1089,
+  1090,  1091,    -1,    -1,    -1,  1095,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   777,    -1,    -1,   379,    -1,    -1,   382,
+   383,    -1,  1112,  1113,  1114,    -1,    -1,    -1,    -1,    -1,
+   393,    -1,    -1,   396,    -1,    -1,    -1,    -1,   401,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1303,  1304,  1305,    -1,
+    -1,    -1,  1065,  1143,    -1,    -1,    -1,    -1,    -1,     4,
+     5,    -1,    -1,    -1,   427,    -1,   429,    -1,   431,   432,
+   433,    -1,    -1,    -1,   437,    -1,    -1,    -1,    -1,   442,
+    -1,  1094,   445,    -1,    -1,    -1,    -1,    -1,   852,    -1,
+   854,    -1,    -1,     3,     4,     5,     6,   460,   461,    -1,
+    -1,   865,    -1,    48,    -1,   869,   870,    -1,  1198,  1199,
+    55,  1201,    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,     3,     4,     5,     6,  1382,    71,     9,   892,   893,
+    -1,    -1,    42,    -1,    -1,    -1,    81,    -1,   501,    -1,
+  1153,    -1,    -1,    -1,  1157,    55,    91,    57,    58,    94,
+    95,    61,    -1,    -1,    -1,    -1,   519,   520,   521,   522,
+    42,    71,    -1,    -1,    -1,    -1,  1423,  1424,  1425,    -1,
+    -1,    81,    -1,    55,    -1,    57,    58,    -1,    -1,    89,
+  1193,  1438,     4,    -1,    94,    -1,    -1,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,  1453,    -1,    -1,    81,
+    -1,     3,     4,     5,     6,    -1,    -1,    89,    -1,    31,
+    32,    -1,    94,   576,    36,   578,    -1,  1230,    -1,    41,
+    -1,  1234,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   592,
+   593,    -1,   595,    -1,    56,    -1,    -1,    -1,    -1,   602,
+    42,    -1,    -1,  1256,  1257,    -1,    -1,    49,    -1,    -1,
+    -1,   614,    -1,    -1,    -1,    57,    58,     3,     4,     5,
+     6,     3,     4,     5,     6,    -1,    -1,    -1,   631,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   639,   640,   641,   642,
+   643,   644,    -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,
+    -1,    -1,  1382,    -1,    -1,    -1,    42,    -1,   661,    -1,
+    42,    -1,    -1,    49,    -1,    -1,    -1,    49,    -1,    -1,
+    -1,    57,    58,   135,    -1,    57,    58,   139,   681,    -1,
+    -1,   143,   685,  1087,  1088,  1089,  1090,    -1,    -1,   692,
+   693,  1095,   695,  1423,  1424,  1425,    -1,    -1,   160,    81,
+    -1,    -1,    -1,    89,    -1,    -1,    -1,    89,  1112,  1113,
+    -1,    -1,    -1,   175,   176,    -1,    -1,    -1,    -1,   722,
+    -1,    -1,   725,    -1,   727,    -1,    -1,    -1,    -1,   732,
+   733,   734,     3,     4,     5,     6,     7,     8,     9,    -1,
+   743,    -1,    -1,    14,    -1,   748,    -1,    -1,    -1,    -1,
+    -1,    -1,   755,   756,   757,    -1,    -1,    -1,    29,    -1,
     31,    32,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
-    -1,    42,    -1,    -1,    -1,    46,    47,    -1,    49,    -1,
-    -1,  1198,    -1,    -1,    55,  1489,    57,    58,    -1,    -1,
-   676,    -1,    63,    -1,   680,    -1,    -1,   175,   176,   177,
-    71,   687,   688,    -1,   690,    -1,    -1,   185,    -1,    -1,
-    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,
-   603,    -1,    -1,    94,    -1,    -1,   204,    -1,    -1,    -1,
-    -1,   717,  1185,    -1,    -1,   721,    -1,   723,    -1,    -1,
-    -1,    -1,   728,   729,   730,    -1,   858,    -1,   860,   227,
-    -1,    -1,   635,   739,   637,    -1,    -1,    -1,   744,    -1,
-    -1,    -1,    -1,    -1,   242,   751,   752,   753,  1285,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   763,    -1,    -1,
-   892,   817,    -1,    -1,   687,   688,    -1,   690,    -1,    -1,
-    -1,    -1,    -1,   676,   830,    -1,   832,    -1,   834,     3,
-     4,     5,     6,    -1,    -1,    -1,     4,     5,    -1,     7,
-     8,     9,    -1,    -1,   697,    -1,    14,   700,    -1,    -1,
-    -1,    -1,    -1,  1340,    -1,   728,    -1,   813,    -1,    -1,
-    -1,    29,    -1,    31,    32,    -1,    -1,    -1,    42,    37,
-    -1,   877,    -1,    -1,    -1,    49,   729,    -1,    46,   835,
-    -1,   837,   735,    57,    58,   333,   334,    55,   844,    57,
-    58,    -1,   848,    -1,   850,   977,   852,   853,   854,    -1,
-    -1,   907,    -1,   859,    -1,    -1,    -1,    81,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   882,     4,   884,   885,
-   886,   887,    -1,    -1,    -1,   383,    -1,    14,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,  1372,
-     3,     4,     5,     6,    31,    32,     9,    34,    -1,    36,
-    -1,    -1,    -1,    -1,    41,    -1,     4,     5,    -1,   925,
-     8,     9,    -1,    -1,    -1,    -1,    14,    54,  1060,    56,
-   428,    -1,   430,   939,   432,   433,   434,    64,    -1,    42,
-   438,    29,    -1,    31,    71,   443,    -1,   953,   446,    37,
-    -1,  1083,    55,    -1,    57,    58,    83,    -1,    46,   965,
-    48,    -1,   885,   886,   887,    -1,    -1,    55,    71,    57,
-    58,    -1,   978,    -1,    -1,    -1,    -1,    -1,    81,    -1,
-    -1,    -1,   988,    71,    -1,    -1,    89,    -1,    -1,    -1,
-    -1,    94,    -1,    81,  1000,    -1,  1002,    -1,    -1,    -1,
-    -1,   128,   925,    91,  1136,    -1,    94,    95,   135,    -1,
-    -1,    -1,   139,    -1,    -1,    -1,   143,    -1,    -1,   146,
-   147,   148,    -1,    -1,    -1,    -1,    -1,    -1,  1034,  1035,
-    -1,  1037,    -1,   160,    -1,    -1,    -1,  1093,    -1,  1095,
-    -1,  1097,    -1,    -1,    -1,    -1,    -1,    -1,   175,   176,
-   177,    -1,    -1,    -1,    -1,   958,   959,    -1,    -1,    -1,
-    -1,    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,
-    -1,  1077,  1078,  1079,  1080,  1081,    -1,   204,    -1,  1085,
-    -1,    -1,    -1,    -1,   987,    -1,    -1,    -1,    -1,   587,
-   588,    -1,    -1,    -1,    -1,    -1,  1102,  1103,  1104,    -1,
-    -1,    42,    -1,    -1,   602,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   239,    -1,    55,    -1,    57,    58,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1133,    -1,  1185,
-    71,    -1,  1138,    -1,  1140,    -1,   634,    -1,   636,   637,
-    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,
-   277,   278,    -1,    94,  1077,  1078,  1079,  1080,  1081,    -1,
-    -1,    -1,  1085,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-     4,     5,     6,    -1,    -1,     9,    -1,    -1,   676,  1102,
-  1103,  1104,  1188,  1189,    -1,  1191,    -1,    -1,    -1,   687,
-   688,    -1,   690,    -1,   321,    -1,    -1,    -1,   325,    -1,
-   327,   328,   329,    -1,    -1,  1211,    -1,   334,    42,    -1,
-  1133,   338,    -1,    -1,    -1,    -1,   714,    -1,    -1,    -1,
-    -1,    55,    -1,    57,    58,    -1,   353,    -1,  1131,  1132,
-   728,  1134,  1135,    -1,  1137,    -1,    -1,    71,    -1,    -1,
-     3,     4,     5,     6,     7,     8,     9,    81,    -1,    -1,
-    -1,    14,    -1,   380,    -1,    89,   383,   384,    -1,    -1,
-    94,    -1,    -1,    -1,    -1,  1188,  1189,   394,  1191,    32,
-   397,    -1,    -1,    -1,    37,   402,    -1,    -1,    -1,    42,
-    -1,    -1,    -1,    46,    -1,    48,    -1,  1293,  1294,  1295,
-    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    -1,    -1,
-    -1,   428,    -1,   430,    -1,   432,   433,   434,    71,    -1,
-    -1,   438,    -1,    -1,    -1,    -1,   443,    -1,    81,   446,
-    -1,    -1,  1225,  1226,    -1,    -1,    89,    -1,    91,    -1,
-    -1,    94,    95,    -1,   461,   462,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,    -1,
-   858,   859,   860,    -1,    -1,    -1,  1372,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   501,   502,   503,   504,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    42,   885,   886,   887,
-    -1,  1294,  1295,    -1,   892,    -1,    -1,    -1,    -1,    55,
-    -1,    57,    58,    -1,    -1,    -1,    -1,  1413,  1414,  1415,
-    -1,    -1,  1315,  1316,  1317,    71,    -1,    -1,    -1,    -1,
-    -1,    -1,  1428,    -1,    -1,    81,    -1,   925,    -1,    -1,
-    -1,    -1,   559,    89,   561,    -1,    -1,  1443,    94,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   574,   575,  1372,
-   577,    -1,    -1,    -1,    -1,    -1,    -1,   584,    -1,    -1,
-    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,   596,
-     9,    -1,    -1,     4,     5,   602,     7,     8,     9,   977,
-  1383,  1384,    -1,    14,    -1,    -1,     3,     4,     5,     6,
-  1413,  1414,  1415,    -1,    -1,    -1,    -1,    -1,    29,    -1,
-    31,    32,   629,    42,    -1,    -1,    37,   634,   635,   636,
-   637,   638,   639,    -1,    -1,    46,    55,    -1,    57,    58,
-    -1,    -1,    -1,    -1,    55,    42,    57,    58,    -1,   656,
-    -1,    48,    71,    -1,    -1,    -1,    -1,    -1,    55,    -1,
-    57,    58,    81,    -1,    -1,    -1,    -1,    -1,    -1,   676,
-    89,    -1,    -1,   680,    71,    94,    -1,    -1,    -1,    -1,
-   687,   688,  1060,   690,    81,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    89,    -1,    91,    -1,    -1,    94,    95,  1077,
-  1078,  1079,  1080,  1081,    -1,  1083,  1489,  1085,    -1,    -1,
-   717,    -1,    -1,    -1,   721,    -1,   723,    -1,    -1,    -1,
-    -1,   728,   729,   730,  1102,  1103,  1104,    -1,    -1,    -1,
-    -1,    -1,   739,    -1,    -1,    -1,    -1,   744,    -1,    -1,
-    -1,    -1,    -1,    -1,   751,   752,   753,     3,     4,     5,
-     6,     7,     8,     9,    -1,  1133,   763,    -1,    14,    -1,
-    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,    -1,
-   327,   328,   329,    29,    -1,    31,    32,    -1,    -1,    -1,
-    -1,    37,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,
-    -1,    57,    58,    42,    -1,    -1,   813,    -1,    -1,    -1,
-  1188,  1189,    -1,  1191,    -1,    71,    55,    -1,    57,    58,
-    -1,    -1,    -1,    -1,    63,    81,    -1,    -1,   835,    -1,
-   837,     4,    71,    89,    -1,    91,    -1,   844,    94,    95,
-    -1,   848,    81,   850,    -1,   852,   853,   854,    -1,    -1,
-    89,    -1,   859,    -1,    -1,    94,    -1,    -1,    31,    32,
-    -1,    34,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    -1,    -1,    -1,   882,    -1,   884,   885,   886,
-   887,    54,    -1,    56,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    85,     1,    -1,     3,
-     4,     5,     6,     7,     8,     9,    79,    -1,    -1,    -1,
-    14,    -1,    -1,    -1,    -1,  1293,    -1,  1295,   925,    -1,
-    -1,    -1,    -1,    27,    28,    29,    -1,    31,    32,    33,
-    -1,    -1,   939,    37,    -1,    -1,    -1,    -1,    42,    -1,
-    -1,    45,    46,    47,   951,    49,   953,    -1,    -1,    -1,
-    -1,    55,    -1,    57,    58,   128,    -1,    61,   965,   132,
-   133,    -1,   135,    -1,    -1,    -1,   139,    71,   141,    -1,
-   143,    -1,    -1,   146,   147,   148,    -1,    81,    -1,    -1,
-    -1,   988,    -1,    -1,    -1,    89,    -1,   160,    -1,    -1,
-    94,    -1,    -1,  1000,  1372,  1002,   100,    -1,    -1,    -1,
-    -1,    -1,   175,   176,   177,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   185,    -1,    -1,    -1,    -1,   574,   575,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1034,  1035,    -1,
-  1037,   204,    -1,    -1,    -1,  1413,  1414,  1415,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
-    -1,    -1,     9,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    85,  1443,   239,    -1,    -1,    -1,
-  1077,  1078,  1079,  1080,  1081,    -1,    -1,   634,  1085,   636,
-   637,    -1,   639,    -1,  1091,    42,    -1,    -1,    -1,    -1,
-    -1,    48,    -1,    -1,    -1,  1102,  1103,  1104,    55,    -1,
-    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1119,    -1,    71,    -1,    -1,    -1,    -1,   676,
-    -1,    -1,    -1,    -1,    81,    -1,  1133,    -1,    -1,    -1,
-    -1,  1138,    89,  1140,    91,   308,    -1,    94,    95,    -1,
-     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    12,
-    -1,    14,   325,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   333,    -1,    -1,    -1,    -1,   338,    29,    -1,    31,    32,
-    -1,    -1,    -1,    -1,    37,     4,    -1,    -1,    -1,    42,
-   353,  1188,  1189,    46,  1191,    48,    -1,    -1,    -1,    -1,
-    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    -1,    -1,
-    -1,   374,    31,    32,  1211,    34,   763,    36,    71,    -1,
-   383,    -1,    41,    -1,     3,     4,     5,     6,    81,    -1,
-     9,   394,    -1,    -1,   397,    54,    89,    56,    91,   402,
-    -1,    94,    95,    -1,    -1,    98,    69,    70,    71,    72,
+    -1,    42,    -1,    -1,   777,    46,    -1,   239,    -1,     4,
+    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,
+    61,    -1,    -1,    -1,  1198,  1199,    -1,  1201,    -1,    -1,
+    71,   339,   340,   341,    -1,    -1,    31,    32,    -1,    34,
+    81,    36,    -1,    -1,    -1,    -1,    41,    -1,    89,    -1,
+    -1,    -1,    -1,    94,    -1,   287,    -1,   830,    -1,    54,
+    -1,    56,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,     3,     4,     5,     6,     7,     8,     9,    -1,   852,
+    -1,   854,    14,    -1,    79,    -1,    -1,    -1,   861,    -1,
+    -1,    -1,   865,    -1,   867,    -1,   869,   870,   871,    -1,
+    32,    -1,    -1,   876,    -1,    37,    -1,    -1,    -1,    -1,
+    42,    -1,    -1,    -1,    46,   888,    48,   890,    -1,   892,
+   893,   894,    -1,    55,    -1,    57,    58,    -1,    -1,    -1,
+    -1,    -1,    -1,   128,    -1,    -1,    -1,   132,   133,    71,
+   135,    -1,    -1,    -1,   139,    -1,   141,    -1,   143,    81,
+    -1,   146,   147,   148,    -1,    -1,    -1,    89,    -1,    91,
+   933,   393,    94,    95,   396,   160,    -1,    -1,    -1,   401,
+    -1,    -1,    -1,    -1,   947,    -1,    -1,    -1,    -1,    -1,
+   175,   176,   177,    -1,    -1,    -1,   959,    -1,   961,    -1,
+   185,    -1,    -1,    -1,    -1,   427,    -1,   429,    -1,    -1,
+   973,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,
+   442,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,    -1,   996,    14,    -1,    -1,    -1,    -1,   461,
+    -1,    -1,    -1,    -1,    -1,  1008,    -1,  1010,    -1,    29,
+    -1,    31,    32,    33,   239,    -1,    -1,    37,    38,    -1,
+    -1,    -1,    42,    -1,    -1,    -1,    46,    47,    -1,    49,
+    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,
+    -1,    61,    -1,    63,    -1,    -1,    -1,  1050,  1051,    -1,
+  1053,    71,    -1,    -1,   592,   593,    -1,   595,    -1,    -1,
+    -1,    81,   287,    -1,   602,    -1,    -1,    -1,    -1,    89,
+    -1,    -1,    -1,    -1,    94,    -1,     3,     4,     5,     6,
+    -1,    -1,     9,    -1,  1087,  1088,  1089,  1090,  1091,    -1,
+    -1,   111,  1095,    -1,    -1,    -1,   321,    -1,  1101,    -1,
+    -1,   639,    -1,   641,   642,    -1,   644,    -1,    -1,  1112,
+  1113,  1114,   337,    -1,    -1,    42,    -1,    -1,    -1,    -1,
+   345,    -1,    -1,    -1,    -1,    -1,  1129,   352,    55,    -1,
+    57,    58,    -1,     3,     4,     5,     6,    -1,    -1,     9,
+  1143,    -1,    -1,   681,    71,  1148,    -1,  1150,   373,    -1,
+    -1,    -1,    -1,    -1,    81,    -1,    -1,   382,    -1,    -1,
+    -1,    -1,    89,    -1,    -1,    -1,    -1,    94,   393,    -1,
+    -1,   396,    42,    -1,    -1,    -1,   401,    -1,   640,    -1,
+    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,
+    -1,    -1,    -1,    -1,    -1,  1198,  1199,    -1,  1201,    -1,
+    -1,    71,   427,    -1,   429,    -1,   431,   432,   433,    -1,
+    -1,    81,   437,    -1,    -1,    -1,    -1,   442,  1221,    89,
+   445,    -1,    -1,   685,    94,    -1,    -1,    -1,    -1,    -1,
+   692,   693,    -1,   695,    -1,    -1,   461,    -1,    -1,   777,
+    -1,    -1,    -1,     3,     4,     5,     6,    -1,    -1,     9,
     73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    85,    42,    -1,   428,    -1,   430,    -1,   432,
-   433,   434,    -1,    -1,    -1,   438,    55,    -1,    57,    58,
-   443,    -1,    -1,   446,    -1,    -1,    -1,    -1,   835,    -1,
-   837,    -1,    71,    -1,    -1,    -1,  1293,  1294,  1295,   462,
-    -1,   848,    81,    -1,    -1,   852,   853,    -1,    -1,    -1,
-    89,    -1,    -1,    -1,    -1,    94,   135,    -1,    -1,    -1,
-   139,    -1,    -1,    -1,   143,    -1,    -1,   146,   147,   148,
-   493,    -1,    -1,   496,    -1,    -1,    -1,    -1,   885,   886,
-    -1,   160,    -1,    -1,    -1,    -1,    -1,    -1,   511,   512,
-   513,    -1,    -1,    -1,    -1,    -1,   175,   176,   177,    -1,
-    -1,    -1,    -1,   526,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,  1372,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   204,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
-     5,     6,     7,     8,     9,    -1,    -1,    -1,   571,    14,
-     3,     4,     5,     6,    -1,    -1,  1413,  1414,  1415,    -1,
-   239,   584,    -1,    -1,    29,    -1,    31,    32,    33,    -1,
-    -1,  1428,    37,    38,    -1,    -1,    -1,    42,    -1,   602,
-    -1,    46,    47,    -1,    49,    -1,  1443,    -1,    -1,    42,
-    55,    -1,    57,    58,    -1,    -1,    61,    -1,    63,    -1,
-    -1,    -1,    55,    -1,    57,    58,    71,    -1,    -1,    -1,
-    63,   634,   635,   636,   637,    -1,    81,    -1,    71,    -1,
-    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,    81,    94,
-    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,
-    -1,    94,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-    -1,    -1,    -1,   676,    -1,   334,    -1,   680,    -1,   338,
-    -1,    -1,    -1,    -1,   687,   688,    -1,   690,    -1,    -1,
-  1077,  1078,  1079,  1080,     3,     4,     5,     6,  1085,    -1,
-     9,    -1,    -1,    -1,    -1,    -1,    87,    -1,    89,    -1,
-    91,    -1,    -1,    -1,    -1,  1102,  1103,    -1,   721,    -1,
-   723,    -1,    -1,    -1,   383,   728,   729,   730,    -1,    -1,
-    -1,    -1,    -1,    42,    -1,   394,    -1,    -1,   397,    -1,
-    -1,    -1,    -1,   402,    -1,    -1,    55,    -1,    57,    58,
-    -1,    -1,    -1,    -1,   757,   136,    -1,   138,    -1,    -1,
-    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,   428,
-    -1,   430,    81,   432,   433,   434,    -1,    -1,    -1,   438,
-    89,    -1,    -1,    -1,   443,    94,     1,   446,     3,     4,
-     5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
-    -1,  1188,  1189,   462,  1191,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    -1,
-    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
-    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,
-    55,    -1,    57,    58,    59,    -1,    61,    62,    -1,   852,
-   853,   854,    -1,    68,    -1,   858,    71,     4,     5,    -1,
-    -1,     8,     9,    -1,    79,    80,    81,    14,    -1,    -1,
-    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,
-    -1,    -1,   885,   886,   887,    -1,    -1,    -1,    -1,   892,
-    37,    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    46,
-    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,
-    57,    58,    -1,   572,    -1,    -1,    -1,    -1,   299,    -1,
-    -1,    -1,   925,    -1,    71,     1,    -1,    -1,     4,     5,
-    -1,    -1,     8,     9,    81,    -1,    -1,    -1,    14,    -1,
-    -1,    -1,    -1,   602,    91,    -1,    -1,    94,    95,    -1,
-    -1,    -1,    -1,    29,    -1,    31,   337,    -1,    -1,    -1,
-    -1,    37,    -1,    39,    40,    -1,    -1,    -1,    -1,    -1,
-    46,    -1,    48,    -1,   977,   634,   635,   636,   637,    55,
-    -1,    57,    58,    -1,    60,   988,    -1,    -1,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-    -1,    87,    88,    89,    -1,    -1,    92,   676,    -1,    95,
-    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,   687,   688,
-    -1,   690,    -1,    -1,    -1,    -1,   112,   418,   419,    -1,
-     3,     4,     5,     6,    -1,   426,     9,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1060,    -1,    -1,
-    -1,    -1,   721,    -1,   723,    -1,    -1,    -1,    -1,   728,
-   729,   730,    -1,    -1,  1077,  1078,  1079,  1080,  1081,    42,
-  1083,    -1,  1085,    -1,    -1,    48,    -1,    -1,    -1,    -1,
-    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    -1,  1102,
-  1103,  1104,    -1,    -1,    -1,    -1,    -1,    -1,    71,   490,
-   491,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,    91,    81,
-  1133,    94,    95,    -1,    -1,  1138,    -1,  1140,    -1,    -1,
-    -1,    -1,   523,    -1,   525,    -1,    -1,   528,   529,    -1,
-   531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
-   541,   542,   543,   544,   545,   546,   547,   548,   549,    -1,
-     3,     4,     5,     6,   555,    -1,   557,   558,   106,   107,
-    -1,    -1,    -1,    -1,    -1,  1188,  1189,    -1,  1191,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   859,    -1,   154,   584,    -1,    -1,    -1,    -1,    -1,    42,
-   591,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   173,    55,    -1,    57,    58,   885,   886,   887,    -1,
-   611,   612,    -1,    -1,   186,    -1,    -1,    -1,    71,     1,
-    -1,     3,     4,     5,     6,     7,     8,     9,    81,    -1,
-    -1,    -1,    14,    -1,    -1,    -1,    89,    -1,    -1,    34,
-    -1,    94,    -1,    -1,    -1,    -1,   925,    29,    -1,    31,
-    32,    33,    -1,    -1,    -1,    37,    38,    -1,    -1,    54,
-    42,    -1,   663,    -1,    46,    47,    -1,    49,    -1,    -1,
-  1293,  1294,  1295,    55,    -1,    57,    58,    -1,    -1,    61,
-    -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,   988,
-    -1,    -1,    94,    -1,    -1,    -1,    -1,     4,     5,   720,
-     7,     8,     9,    -1,    -1,    12,    -1,    14,    -1,   111,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   740,
-   741,   742,    29,    -1,    31,    32,    -1,    -1,    -1,  1372,
-    37,   146,   147,   148,    -1,    -1,   757,    -1,    -1,    46,
-   308,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,
-    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,
-   175,   176,   177,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-  1413,  1414,  1415,    -1,    81,    -1,    -1,    -1,  1077,  1078,
-  1079,  1080,  1081,    -1,    91,    -1,  1085,    94,    95,   204,
-    -1,    98,    -1,    -1,    -1,   816,   817,    -1,    -1,    -1,
-  1443,    -1,    -1,  1102,  1103,  1104,    -1,    -1,    -1,   830,
-    -1,   832,   380,   834,    -1,    -1,    -1,    -1,     4,     5,
-    -1,    -1,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,
-    -1,    -1,    -1,    -1,  1133,    -1,    -1,    -1,    -1,  1138,
-    -1,  1140,    -1,    -1,   436,    -1,   867,    -1,    -1,   441,
-    -1,    37,    -1,    -1,    -1,    -1,   877,    -1,   426,    -1,
-    46,    -1,    48,   278,    -1,    -1,    -1,    -1,    -1,    55,
-    -1,    57,    58,     4,     5,   896,   468,    -1,     9,    -1,
-    -1,   473,    -1,    -1,    -1,    71,   907,    -1,    -1,  1188,
-  1189,    -1,  1191,   485,   486,    81,   488,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   925,    91,    -1,    -1,    94,    95,
-    -1,    -1,   327,   328,   329,    -1,    -1,    48,    -1,    -1,
-    -1,    -1,    -1,    -1,    55,   493,    57,    58,   496,    -1,
-    -1,    -1,   500,   501,   502,   503,   504,    -1,    -1,    -1,
-    71,    -1,    -1,    -1,    -1,   513,    -1,   968,    -1,    -1,
-    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   526,    -1,
-    91,    -1,    -1,    94,    95,    -1,    -1,    -1,   383,    -1,
-   991,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    85,    -1,   580,   581,
-   558,    -1,    -1,   585,  1293,  1294,  1295,    -1,  1019,  1020,
-    -1,    -1,  1023,    -1,    -1,    -1,    -1,    -1,    -1,   577,
-    -1,    -1,    -1,   428,    -1,   430,   584,   432,   433,   434,
-    -1,    -1,    -1,   438,    -1,    -1,    -1,    -1,   443,    -1,
-     1,   446,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   327,   328,   329,    -1,    -1,    -1,    29,    -1,
-    31,    32,    -1,    -1,    -1,    -1,    37,    -1,    -1,     4,
-    -1,    42,  1093,  1372,  1095,    46,  1097,    -1,    49,  1100,
-    -1,    -1,    -1,    -1,    55,    -1,    57,    58,  1109,  1110,
-    61,    -1,    -1,  1114,  1115,    -1,    31,    32,     4,     5,
-    71,    36,    -1,     9,    -1,    -1,    41,    -1,  1129,  1130,
-    81,    -1,   680,    -1,  1413,  1414,  1415,    -1,    89,    -1,
-    -1,    56,    -1,    94,    -1,    -1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    -1,  1156,    -1,  1158,    14,    -1,
-    -1,    -1,    48,    -1,  1443,    -1,   561,    -1,    -1,    55,
-    -1,    57,    58,   745,    -1,   747,    32,    -1,    -1,   574,
-   575,    37,   577,    -1,  1185,    71,    42,    -1,    -1,   584,
-    46,   739,    48,    -1,    -1,    81,   744,    -1,    -1,    55,
-    -1,    57,    58,    -1,    -1,    91,    -1,   602,    94,    95,
-    -1,    -1,    -1,    -1,  1215,    71,    -1,    -1,    -1,    -1,
-   135,    -1,    -1,    -1,   139,    81,    -1,    -1,   143,    -1,
-  1231,    -1,    -1,    89,    -1,    -1,    -1,    -1,    94,   634,
-    -1,   636,   637,    -1,   639,   160,    -1,   819,   820,    -1,
-   822,    -1,    -1,  1254,    -1,    -1,    -1,    -1,    -1,    -1,
-   175,   176,    -1,    -1,    -1,   813,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   849,    -1,  1280,
-    -1,   676,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   687,   688,    -1,   690,   844,    -1,    -1,    -1,
-    -1,    -1,   850,    -1,    -1,    -1,   854,    -1,     3,     4,
-     5,     6,  1313,  1314,     9,    -1,    -1,   889,    -1,   574,
-   575,  1322,   577,    -1,   239,    -1,    -1,    -1,    -1,   584,
-    -1,    -1,  1333,   728,   882,    -1,   884,    -1,    -1,   887,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,
-    -1,    -1,    -1,    48,    -1,    -1,   751,   752,   753,    -1,
-    55,    -1,    57,    58,    -1,    -1,    -1,    -1,   763,    -1,
-    -1,  1372,    -1,    -1,    -1,    -1,    71,   925,    -1,   634,
-   952,   636,   637,    -1,   639,    -1,    81,    -1,    -1,    -1,
-    -1,   939,   964,    -1,    89,    -1,    91,    -1,   946,    94,
-    95,    -1,  1403,    -1,    -1,   953,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   965,    -1,    -1,
-    -1,   676,    -1,   338,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    85,    -1,
-   835,    -1,   837,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1000,   848,  1002,    -1,    -1,   852,   853,   854,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-     5,     6,    -1,    -1,    -1,    -1,    -1,  1049,    -1,   394,
-    -1,    -1,   397,    -1,    -1,    -1,    -1,   402,    -1,    -1,
-   885,   886,   887,    -1,    -1,    -1,    -1,    -1,     3,     4,
-     5,     6,     7,     8,     9,    -1,    -1,    42,   763,    14,
-    -1,    -1,  1084,   428,    -1,   430,    -1,    -1,    -1,    -1,
-    55,    -1,    57,    58,  1525,    -1,    61,    32,   443,    -1,
-   925,    -1,    37,  1081,    -1,    -1,    71,    42,    -1,    -1,
-    -1,    46,    -1,    48,    -1,    -1,    81,   462,    -1,    -1,
-    55,    -1,    57,    58,    89,    -1,  1104,    -1,    -1,    94,
-    -1,    -1,    -1,    -1,    -1,    -1,    71,     3,     4,     5,
-     6,  1143,    -1,    -1,    -1,  1147,    81,    -1,    -1,    -1,
-   835,    -1,   837,    -1,    89,    -1,    91,    -1,    -1,    94,
-    95,    -1,    -1,   848,    -1,    -1,    -1,   852,   853,   854,
-    -1,    -1,    -1,    -1,    -1,    -1,    42,    14,  1180,    -1,
-     3,     4,     5,     6,    -1,    -1,    -1,    24,    25,    55,
-    -1,    57,    58,    -1,    31,    32,    -1,    34,    -1,    -1,
-   885,   886,   887,    -1,    -1,    71,    -1,    -1,    -1,  1034,
-  1035,    -1,  1037,    -1,    -1,    81,    -1,    -1,  1220,    42,
-    -1,    -1,  1224,    89,    -1,    -1,    -1,    64,    94,    -1,
-    -1,    -1,    55,  1211,    57,    58,    -1,    -1,    -1,    -1,
-   925,    -1,    -1,    -1,  1246,  1247,    -1,    -1,    71,    -1,
-    -1,    -1,  1077,  1078,  1079,  1080,  1081,    -1,    81,    -1,
-  1085,    -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,
-    -1,    94,    -1,    -1,    -1,    -1,    -1,  1102,  1103,  1104,
-    -1,    -1,    -1,    -1,    -1,    -1,   123,    -1,   125,    -1,
-   635,   128,    -1,    -1,    -1,   132,   133,    -1,    -1,    -1,
-    -1,    -1,   139,    -1,   141,   142,   143,    -1,  1133,   146,
-   147,   148,    -1,    -1,     4,     5,    -1,    -1,     8,     9,
-    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,    29,
-    -1,    31,   687,   688,    -1,   690,    -1,    37,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,
-    -1,    -1,    -1,  1188,  1189,    55,  1191,    57,    58,    59,
-    -1,    -1,    -1,    -1,    -1,    -1,   721,    -1,   723,    -1,
-    -1,   218,   219,   728,   729,   730,    -1,    -1,    -1,    -1,
-    -1,    -1,  1077,  1078,  1079,  1080,  1081,    -1,    -1,    -1,
-  1085,    -1,   239,    -1,    94,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,  1103,  1104,
+    83,    84,    85,   725,    -1,   727,    -1,    -1,    -1,    -1,
+   732,   733,   734,    -1,    -1,    -1,   501,    -1,    -1,    -1,
+    -1,    -1,    42,    -1,    -1,    -1,   511,    -1,    -1,   514,
+    -1,     4,     5,    -1,    -1,    55,     9,    57,    58,    -1,
+  1303,  1304,  1305,    -1,   529,   530,   531,     3,     4,     5,
+     6,    71,    -1,     9,   852,    -1,   854,   542,    -1,    -1,
+     4,    81,    -1,    -1,    -1,    -1,    -1,   865,    -1,    89,
+    -1,   869,   870,   871,    94,    48,    -1,    -1,    -1,    -1,
+    -1,    -1,    55,    -1,    57,    58,    42,    31,    32,    -1,
+    34,    -1,    36,    -1,   892,   893,   894,    41,    71,    55,
+    -1,    57,    58,   588,    -1,    -1,    -1,    -1,    81,    -1,
+    54,    -1,    56,    -1,    -1,    71,    -1,   602,    91,  1382,
+    -1,    94,    95,    -1,    -1,    81,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    89,    -1,   933,    -1,    -1,    94,    71,
     72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    85,    -1,    -1,    -1,  1415,    -1,    -1,
-    -1,   278,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1428,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,  1293,    -1,
-  1295,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,    29,
-    -1,    31,    32,    33,    -1,    -1,    -1,    37,   325,    -1,
-   327,   328,    42,    -1,    -1,    45,    46,    47,    -1,    49,
-    -1,    -1,    -1,  1188,  1189,    55,  1191,    57,    58,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,   353,    -1,    -1,    -1,
-    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    81,    -1,    -1,    32,    -1,    -1,   374,    -1,    89,
-   885,   886,    -1,    -1,    94,    -1,    -1,  1372,    -1,    -1,
-   100,    -1,    -1,   390,    -1,    -1,    -1,   394,    -1,    -1,
-   397,    -1,    -1,    -1,    -1,   402,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    85,  1413,  1414,
-  1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,
+    82,    83,    84,    85,   639,   640,   641,   642,    -1,    -1,
+  1423,  1424,  1425,    -1,    -1,    -1,    34,     4,     5,    -1,
+   892,   893,     9,    -1,    -1,  1438,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,
+  1453,   135,    -1,    -1,    -1,   139,   681,    -1,    -1,   143,
+   685,    -1,   146,   147,   148,    -1,    -1,   692,   693,    -1,
+   695,    48,    -1,    -1,    -1,    -1,   160,    -1,    55,    -1,
+    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   175,   176,   177,    71,    -1,    -1,    -1,    -1,    -1,
+   725,    -1,   727,    -1,    81,    -1,    -1,   732,   733,   734,
+    -1,    -1,    -1,    -1,    91,    -1,    -1,    94,    95,    -1,
+   204,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+    -1,    -1,     9,    -1,   996,    -1,    -1,    -1,   146,   147,
+   148,    -1,    -1,    -1,    -1,    -1,   771,    -1,    -1,  1087,
+  1088,  1089,  1090,  1091,    -1,   239,    -1,  1095,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    42,    -1,   175,   176,   177,
+    -1,    -1,    -1,    -1,  1112,  1113,  1114,    -1,    55,    -1,
+    57,    58,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    85,    71,    -1,   204,    -1,    -1,    -1,
+    -1,    -1,    -1,   287,    81,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1087,  1088,    -1,    -1,    -1,
+    -1,    -1,    -1,  1095,    -1,    -1,    -1,     3,     4,     5,
+     6,     7,     8,     9,   869,   870,   871,    -1,    14,    -1,
+   875,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+  1198,  1199,   346,  1201,    -1,    -1,    32,   892,   893,   894,
+   278,    37,    -1,    -1,   899,    -1,    42,    -1,    -1,    -1,
+    46,  1143,    48,    -1,    -1,    -1,  1148,    -1,  1150,    55,
+    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,   382,    -1,
+    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,   933,   393,
+    -1,    -1,   396,    -1,    -1,    81,    -1,   401,     3,     4,
+     5,     6,    -1,    89,     9,    91,    -1,    -1,    94,    95,
+    -1,   339,   340,   341,    -1,    -1,  1198,  1199,    -1,  1201,
+    -1,    -1,    -1,   427,    -1,   429,    -1,   431,   432,   433,
+    -1,    -1,    -1,   437,    -1,    -1,    -1,    42,   442,    -1,
+   985,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    55,   996,    57,    58,   382,    -1,    -1,   461,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,     4,     5,    -1,    81,     8,     9,    -1,
+    -1,    -1,    -1,    14,    89,    -1,    -1,    -1,    -1,    94,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   501,    29,   427,
+    31,   429,    -1,   431,   432,   433,    37,    -1,    -1,   437,
+    -1,    -1,    -1,    -1,   442,    46,    -1,   445,    -1,    -1,
+    -1,    -1,  1304,    -1,    55,    -1,    57,    58,    -1,    -1,
+    -1,  1076,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
+    -1,    -1,  1087,  1088,  1089,  1090,  1091,    -1,  1093,    -1,
+  1095,    -1,     1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    -1,   106,   107,    -1,    14,    -1,  1112,  1113,  1114,
+    -1,    -1,    -1,   501,    -1,    -1,    -1,    -1,    -1,    -1,
+    29,    -1,    31,    32,    -1,   589,    -1,    -1,    37,    -1,
+    -1,    -1,    -1,    42,    -1,    -1,    -1,    46,  1143,    -1,
+    49,    -1,    -1,  1148,    -1,  1150,    55,    -1,    57,    58,
+    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    71,    -1,     3,     4,     5,     6,    -1,    -1,
+    -1,    -1,    81,    -1,    -1,   639,   640,   641,   642,    -1,
+    89,     3,     4,     5,     6,    94,    -1,    -1,    -1,    -1,
+   578,    -1,    -1,  1198,  1199,    -1,  1201,    -1,    -1,    -1,
+    -1,    -1,    -1,    42,   592,   593,    -1,   595,    -1,    54,
+    -1,    -1,    -1,    -1,   602,    -1,    55,   681,    57,    58,
+    42,   685,    -1,    -1,    63,    -1,    -1,    -1,   692,   693,
+    -1,   695,    71,    55,    79,    57,    58,    82,    -1,    -1,
+    -1,    63,    81,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+    89,   639,    -1,   641,   642,    94,   644,    -1,   103,    81,
+   105,   725,    -1,   727,    -1,    -1,    -1,    89,   732,   733,
+   734,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,   283,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   681,    -1,    -1,    -1,    -1,  1303,  1304,
+  1305,    -1,    -1,    -1,   692,   693,    -1,   695,     3,     4,
+     5,     6,     7,     8,     9,    -1,    -1,   321,    -1,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   333,
+   175,   176,   177,    -1,    29,    -1,    31,    32,    -1,    -1,
+   185,    -1,    37,    -1,   732,    -1,    -1,    42,    -1,    -1,
+    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,   204,
+    55,    -1,    57,    58,    -1,    -1,    -1,   755,   756,   757,
+    -1,    -1,    -1,    -1,    -1,   379,    71,  1382,    -1,    -1,
+    -1,    -1,   227,    -1,    -1,    -1,    81,    -1,    -1,   777,
+    -1,    -1,    -1,    -1,    89,    -1,    91,   242,    -1,    94,
+    95,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
+    -1,    -1,   876,    14,    -1,    -1,    -1,    -1,  1423,  1424,
+  1425,   425,    -1,    -1,    -1,    -1,    -1,    -1,   892,   893,
+   894,    32,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
+    -1,    42,    -1,    -1,    -1,    46,    -1,    48,  1453,    -1,
+    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,
+    -1,    -1,    -1,    -1,   852,    -1,   854,    -1,    -1,   933,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,   865,    -1,    -1,
+    81,   869,   870,   871,    -1,    -1,    -1,    -1,    89,    -1,
+    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+   345,   346,    -1,    -1,   892,   893,   894,   511,    -1,    -1,
+   514,    -1,    -1,    -1,   518,   519,   520,   521,   522,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   531,    -1,    -1,
+    -1,    -1,   996,    -1,    -1,    -1,    -1,   382,   542,    -1,
+    -1,    -1,    -1,    -1,    -1,   933,    -1,    -1,    -1,    -1,
     -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,  1443,    -1,
-    -1,    -1,   459,    25,   461,    27,    28,    -1,    -1,    -1,
-    32,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,
-    42,    -1,    -1,   988,    46,    -1,    48,    -1,    -1,    -1,
-   487,    -1,    -1,    55,    -1,    57,    58,    59,    60,    61,
-    -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   575,   576,    -1,    -1,    -1,    -1,    29,    -1,    31,
+    32,    -1,   427,    -1,   429,    37,   431,   432,   433,    -1,
+    42,   595,   437,    -1,    46,    -1,    48,   442,   602,    -1,
+   445,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+    -1,    -1,    -1,  1087,  1088,  1089,  1090,  1091,    -1,    81,
+    -1,  1095,    -1,    -1,    -1,    -1,    -1,    89,    -1,    91,
+    -1,    -1,    94,    95,    -1,    -1,    98,    -1,  1112,  1113,
+  1114,    -1,    -1,    -1,    -1,    -1,   501,    -1,    -1,    -1,
+    -1,    -1,  1050,  1051,    -1,  1053,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1143,
+    -1,   685,    -1,    -1,  1148,    -1,  1150,    -1,     3,     4,
+     5,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1087,
+  1088,  1089,  1090,  1091,    -1,    -1,    -1,  1095,    70,    71,
     72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    85,    -1,    87,    88,    89,    -1,    91,
-    92,    93,    94,    95,    96,    -1,    98,    99,    -1,    -1,
-    -1,    -1,   104,    -1,    -1,    -1,    -1,   109,   110,   111,
-    -1,   113,    -1,    -1,     1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    -1,   561,    -1,    -1,    14,    -1,    -1,
-    -1,    -1,  1077,  1078,   571,   572,    -1,   574,   575,    -1,
-  1085,    -1,    29,    -1,    31,    32,    33,    -1,    -1,    -1,
-    37,    38,    -1,    -1,    -1,    42,    -1,    -1,    -1,    46,
-    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    55,    -1,
-    57,    58,    -1,    -1,    61,    -1,    63,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,  1133,    -1,
-    -1,    -1,   629,  1138,    81,  1140,    -1,    -1,    -1,    -1,
-    -1,   638,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   656,
-    -1,    -1,    -1,    -1,   111,     1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,
-    -1,    -1,    -1,  1188,  1189,    -1,  1191,    -1,    -1,    -1,
-    -1,    -1,    -1,    29,    -1,    31,    32,    33,    -1,    -1,
+    82,    83,    84,    85,  1112,  1113,  1114,    42,    -1,    -1,
+    -1,    -1,    -1,    -1,  1198,  1199,    -1,  1201,    -1,   743,
+    55,    -1,    57,    58,   748,     1,    61,     3,     4,     5,
+     6,     7,     8,     9,    -1,  1143,    71,    -1,    14,    -1,
+   605,   606,    -1,    -1,    -1,    -1,    81,     3,     4,     5,
+     6,    -1,    -1,    29,    89,    31,    32,    33,    -1,    94,
     -1,    37,    38,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-    46,    47,    -1,    49,    -1,    -1,    -1,   714,    -1,    55,
-   717,    57,    58,    -1,    -1,    61,    -1,    63,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    89,   751,   752,   753,    -1,    94,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   763,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,     1,   111,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    -1,    13,    14,    15,  1294,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    -1,    35,    36,
-    37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
-    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
-    57,    58,    59,    -1,    61,    62,    -1,    -1,   835,    -1,
-   837,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-    -1,   848,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
-    87,    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    96,
+    46,    47,    -1,    49,   639,    -1,   641,   642,    -1,    55,
+    -1,    57,    58,    -1,    -1,    61,    42,    63,    -1,    -1,
+  1198,  1199,    -1,  1201,    -1,    71,    -1,    -1,    -1,    55,
+    -1,    57,    58,    -1,    -1,    81,   830,    63,    -1,    -1,
+    -1,    -1,    -1,    89,    -1,    71,   681,    -1,    94,  1303,
+  1304,  1305,    -1,    -1,    -1,    81,    -1,   692,   693,    -1,
+   695,    -1,    -1,    89,    -1,   111,    -1,   861,    94,    -1,
+    -1,    -1,    -1,   867,    -1,    -1,    -1,   871,    -1,    -1,
+    -1,    -1,    -1,    -1,   719,    -1,   283,    -1,    -1,    -1,
+     3,     4,     5,     6,   888,    -1,   890,   732,    -1,    -1,
+   894,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    -1,   312,    12,    -1,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,  1303,    -1,  1305,  1382,    42,
+    -1,    -1,    -1,    29,    -1,    31,    32,    -1,    -1,   933,
+    -1,    37,    55,    -1,    57,    58,    42,    -1,    -1,    -1,
+    46,    -1,    -1,   947,    -1,    -1,    -1,    -1,    71,    55,
+   954,    57,    58,    -1,    -1,    -1,    -1,   961,    81,  1423,
+  1424,  1425,    -1,    -1,    -1,    71,    89,    -1,    -1,   973,
+    -1,    94,     4,     5,    -1,    81,     8,     9,    -1,    -1,
+    -1,    -1,    14,    89,    -1,    -1,    -1,    -1,    94,  1453,
+     3,     4,     5,     6,  1382,    -1,    -1,    29,    -1,    31,
+    -1,    -1,    -1,    -1,  1008,    37,  1010,    -1,    -1,    -1,
+   417,   418,    -1,    -1,    46,    -1,    -1,    -1,   425,    -1,
+    -1,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    42,
+   875,   876,   877,    -1,    -1,  1423,  1424,  1425,    -1,    -1,
+    -1,    -1,    55,    -1,    57,    58,    -1,   892,   893,   894,
+    -1,    -1,     4,     5,   899,     7,     8,     9,    71,    -1,
+    -1,    -1,    14,    -1,    -1,  1453,    -1,    -1,    81,    -1,
+    -1,    -1,    14,    -1,    -1,    -1,    89,    29,    -1,    31,
+    32,    94,    24,    25,    -1,    37,    -1,  1091,   933,    31,
+    32,    -1,    34,    -1,    46,    -1,    -1,    49,    -1,    -1,
+    -1,    -1,   509,    55,    -1,    57,    58,    -1,    -1,    -1,
+  1114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   540,   541,    -1,    -1,   544,   545,   546,
+   985,   548,   549,   550,   551,   552,   553,   554,   555,   556,
+   557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+    -1,    -1,    -1,    -1,    -1,   572,    -1,   574,   575,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   111,   112,    -1,    -1,    -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,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
-    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    59,    -1,    61,
-    62,    -1,    -1,    -1,   951,    -1,    68,    -1,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
-    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
-    -1,   978,    94,    -1,    96,    -1,    -1,    -1,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-   112,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    -1,   123,    -1,   125,    -1,    -1,   128,    -1,    -1,    -1,
+   132,   133,    -1,    -1,    -1,   602,    -1,   139,    -1,   141,
+   142,   143,   609,    -1,   146,   147,   148,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1221,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,
+     5,  1076,     7,     8,     9,    -1,    -1,    -1,    -1,    14,
+    -1,    -1,  1087,  1088,  1089,  1090,  1091,    -1,  1093,    -1,
+  1095,    -1,    -1,    -1,    29,    -1,    31,    32,    -1,    -1,
+    -1,   668,    37,    -1,    -1,    -1,    -1,  1112,  1113,  1114,
+    -1,    46,    -1,    -1,    -1,    -1,   218,   219,    -1,    -1,
+    55,    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   239,  1143,    -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,    -1,  1034,  1035,    -1,
-  1037,    29,    30,    31,    32,    33,    -1,    35,    36,    37,
+     8,     9,    -1,    -1,    -1,    -1,    14,   724,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    29,    -1,    31,    32,    33,   278,    -1,    -1,    37,
+    38,    -1,    -1,    -1,    42,    -1,    -1,    -1,    46,    47,
+    -1,    49,    -1,  1198,  1199,    -1,  1201,    55,   765,    57,
+    58,    -1,    -1,    61,   771,    63,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    81,    -1,    -1,    -1,   794,    -1,    -1,
+    -1,    89,    -1,    -1,    -1,   337,    94,   339,   340,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1412,    -1,
+   352,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1425,    -1,    -1,    -1,    -1,   833,   834,    -1,    -1,
+    -1,   373,    -1,    -1,  1438,    -1,    -1,  1441,    -1,    -1,
+   847,    -1,   849,    -1,   851,    -1,    -1,   389,    -1,    -1,
+    -1,   393,    -1,    -1,   396,    -1,    -1,    -1,  1303,   401,
+  1305,     4,     5,    -1,    -1,     8,     9,    -1,    -1,    -1,
+    -1,    14,    -1,    -1,   881,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    29,    -1,    31,    -1,
+    -1,    -1,    -1,  1497,    37,    -1,    -1,   904,    -1,    -1,
+    -1,    -1,    -1,    46,    -1,    48,    -1,    -1,   915,    -1,
+    -1,    -1,    55,    -1,    57,    58,   458,    -1,   460,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   933,     1,    71,     3,
+     4,     5,     6,     7,     8,     9,    -1,  1382,    81,    -1,
+    14,    -1,    -1,    -1,   486,    -1,    -1,    -1,    91,    -1,
+    -1,    94,    95,    -1,    -1,    29,    -1,    31,    32,    33,
+    -1,    -1,    -1,    37,    38,    -1,    -1,    -1,    42,   976,
+    -1,    -1,    46,    47,    -1,    49,    -1,    -1,  1423,  1424,
+  1425,    55,    -1,    57,    58,    -1,    -1,    61,    -1,    63,
+    -1,    -1,   999,    -1,    -1,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,  1453,    -1,
+    -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,
+    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1035,  1036,
+    -1,    -1,  1039,    -1,    -1,    -1,   578,   111,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   588,   589,    -1,    -1,
+   592,   593,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+     7,     8,     9,    -1,    -1,    -1,    -1,    14,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    85,    29,    -1,    31,    32,    -1,    -1,    -1,   631,
+    37,    -1,    -1,    -1,    -1,    42,  1103,    -1,  1105,    46,
+  1107,   643,    -1,  1110,    -1,    -1,    -1,    -1,    55,    -1,
+    57,    58,  1119,  1120,    -1,    -1,    63,  1124,  1125,   661,
+    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1139,  1140,    81,    -1,    -1,    -1,    12,    -1,
+    -1,    -1,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1169,    -1,  1171,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   719,    -1,    -1,
+   722,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1195,    63,
+    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    85,    -1,   755,   756,   757,    -1,    -1,  1225,    -1,
+     1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+    11,    -1,    13,    14,  1241,   777,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    33,    -1,    35,    36,    37,  1264,    39,    40,
+    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
+    51,    52,    53,    54,    55,    -1,    57,    58,    59,    -1,
+    61,    62,    -1,  1290,    -1,    -1,    -1,    68,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
+    81,    -1,    -1,    -1,    -1,    32,    87,    88,    89,    -1,
+   852,    -1,   854,    94,    -1,    -1,  1323,  1324,    -1,    -1,
+    -1,    -1,    -1,   865,    -1,  1332,    -1,    -1,    -1,    -1,
+    -1,   112,    -1,    -1,    -1,    -1,  1343,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1382,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,    12,    -1,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1413,    25,    -1,    27,
+    28,    -1,    -1,    -1,    32,    -1,    -1,   959,    -1,    37,
+    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    46,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,
+    58,    59,    60,    61,   986,    63,    64,    65,    66,    67,
+    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,    85,    -1,    87,
+    88,    89,    -1,    91,    92,    93,    94,    95,    96,    -1,
+    98,    99,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,
+    -1,   109,   110,   111,    -1,   113,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1050,  1051,
+     1,  1053,     3,     4,     5,     6,     7,     8,     9,    -1,
+    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,  1535,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    -1,
+    31,    32,    33,    -1,    -1,    -1,    37,    -1,    -1,    -1,
+    -1,    42,    -1,    -1,    -1,    46,    47,    -1,    49,  1101,
+    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,
+    61,    -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,  1129,    -1,    -1,
+    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,
+    -1,    -1,    -1,    94,  1146,     1,  1148,     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,    33,    -1,    35,
+    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
+    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
+    -1,    57,    58,    59,    -1,    61,    62,    -1,    -1,    -1,
+    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
+    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,    -1,
+    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   111,   112,     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,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    59,    -1,    61,    62,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
+    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
+    94,     1,    96,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,    12,    13,    14,    -1,    -1,    -1,   112,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
+    30,    31,    32,    33,    -1,    35,    36,    37,    -1,    39,
+    40,    41,    42,    43,    44,    -1,    46,    -1,    48,    -1,
+    50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
+    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+    -1,    91,    -1,    -1,    94,    95,    -1,     1,    98,     3,
+     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+    14,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    48,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    59,    -1,    -1,    62,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
+    -1,    -1,    -1,    87,    88,    89,    -1,    91,    -1,    -1,
+    94,    95,    -1,     1,    98,     3,     4,     5,     6,     7,
+     8,     9,    10,    11,    12,    13,    14,    -1,   112,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    29,    30,    31,    32,    33,    -1,    35,    36,    37,
     -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
-    48,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
-    58,    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
     68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    79,    80,    81,  1091,    -1,    -1,    -1,    -1,    87,
-    88,    89,    -1,    91,    -1,    -1,    94,    95,    -1,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
     98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1119,     1,   112,     3,     4,     5,     6,     7,
-     8,     9,    10,    11,    12,    13,    14,    -1,    -1,  1136,
-    -1,  1138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    -1,    35,    36,    37,
+    -1,    -1,   110,     1,   112,     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,
+    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,    37,
     -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
-    48,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
     58,    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
     68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
-    88,    89,    -1,    91,    -1,    -1,    94,    95,    -1,     1,
-    98,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    14,    -1,   112,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
-    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
-    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
-    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
-    -1,    -1,    94,    -1,    -1,    -1,    98,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,     1,
-   112,     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,    -1,    29,    30,    31,
-    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
-    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    59,    -1,    -1,
-    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
-    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
-    -1,    -1,    94,    95,     1,    -1,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,   111,
-   112,    -1,    -1,    -1,    21,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,
-    37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
-    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
-    57,    58,    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,
-    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
-    87,    88,    89,    -1,    -1,    -1,     1,    94,     3,     4,
-     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,    -1,   111,   112,    21,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,
-    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
-    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,
-    55,    -1,    57,    58,    59,    -1,    -1,    62,    -1,    -1,
-    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
-    -1,    -1,    87,    88,    89,    -1,    -1,    -1,     1,    94,
+    88,    89,    -1,    -1,    -1,    -1,    94,    95,     1,    -1,
      3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
-    13,    14,    -1,    -1,    -1,    -1,   111,   112,    -1,    -1,
+    13,    14,    -1,   111,   112,    -1,    -1,    -1,    21,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    -1,
     33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
     43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,
@@ -3155,8 +3150,36 @@ static const short yycheck[] = {     4,
     -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,
     -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,
-    -1,    94,    95,     1,    -1,     3,     4,     5,     6,    -1,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,   112,
+     1,    94,     3,     4,     5,     6,    -1,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,   111,   112,
+    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
+    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,
+    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
+    51,    52,    53,    54,    55,    -1,    57,    58,    59,    -1,
+    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
+    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,
+    -1,    -1,     1,    94,     3,     4,     5,     6,    -1,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    29,    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,    -1,    -1,    -1,    -1,    94,    95,     1,    -1,     3,
+     4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    -1,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    59,    -1,    -1,    62,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
+    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
+    94,    -1,    -1,     1,    -1,     3,     4,     5,     6,   103,
+     8,     9,    10,    11,    -1,    13,    14,    -1,   112,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    29,    30,    31,    -1,    33,    -1,    35,    36,    37,
     -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
@@ -3164,34 +3187,6 @@ static const short yycheck[] = {     4,
     58,    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
     68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
-    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,     1,
-    -1,     3,     4,     5,     6,   103,     8,     9,    10,    11,
-    -1,    13,    14,    -1,   112,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
-    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
-    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    59,    -1,    -1,
-    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
-    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
-    -1,     1,    94,     3,     4,     5,     6,    -1,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
-   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
-    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,
-    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,
-    50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
-    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-    -1,    -1,    -1,     1,    94,     3,     4,     5,     6,    -1,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
-    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,    37,
-    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
-    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
-    58,    -1,    -1,    -1,    62,    63,    -1,    -1,    -1,    -1,
-    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
     88,    89,    -1,    -1,    -1,     1,    94,     3,     4,     5,
      6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
     -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,
@@ -3207,7 +3202,7 @@ static const short yycheck[] = {     4,
     -1,    -1,    -1,    -1,    -1,    29,    30,    31,    -1,    33,
     -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
     44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
-    54,    55,    -1,    57,    58,    -1,    -1,    61,    62,    -1,
+    54,    55,    -1,    57,    58,    -1,    -1,    -1,    62,    63,
     -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
     -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,     1,
@@ -3216,17 +3211,17 @@ static const short yycheck[] = {     4,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
     -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
     42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
+    52,    53,    54,    55,    -1,    57,    58,    59,    -1,    -1,
     62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
     -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
     -1,     1,    94,     3,     4,     5,     6,    -1,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,   110,    -1,
+    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
    112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
     30,    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,
     40,    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,
     50,    51,    52,    53,    54,    55,    -1,    57,    58,    -1,
-    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
     -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
     80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
     -1,    -1,    -1,     1,    94,     3,     4,     5,     6,    -1,
@@ -3236,99 +3231,115 @@ static const short yycheck[] = {     4,
     -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
     -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
     58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
-    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
-    88,    89,    -1,    -1,    -1,     1,    94,     3,     4,     5,
-     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
-    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,
+    68,     1,    -1,    71,     4,     5,    -1,    -1,     8,     9,
+    -1,    79,    80,    81,    14,    -1,    -1,    -1,    -1,    87,
+    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,    29,
+    -1,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    39,
+    40,    -1,   110,    -1,   112,    -1,    46,    -1,    48,    -1,
+    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,
+    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    -1,    -1,    87,    88,    89,
+    -1,    -1,    92,    -1,     1,    95,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,
+    37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
+    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
+    57,    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,
+    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
+    87,    88,    89,    -1,    -1,    -1,     1,    94,     3,     4,
+     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,
+    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,
+    55,    -1,    57,    58,    -1,    -1,    -1,    62,    -1,    -1,
+    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+    -1,    -1,    87,    88,    89,    -1,    -1,    -1,     1,    94,
+     3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    -1,
+    33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
+    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,
+    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,    62,
+    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,
+    -1,    -1,    -1,    -1,    87,    88,    89,     3,     4,     5,
+     6,    94,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
     -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,
     36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
     46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
     -1,    57,    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,
     -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
-    -1,    87,    88,    89,     3,     4,     5,     6,    94,     8,
-     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,
-    29,    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,
+    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,   112,   113,     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,    33,    -1,
+    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,
+    55,    -1,    57,    58,    59,    -1,    61,    62,    -1,    -1,
+    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,
+    -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,     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,    33,    -1,
+    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,
+    55,    -1,    57,    58,    59,    -1,    61,    62,    -1,    -1,
+    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,
+    -1,    96,    -1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    -1,    13,    14,    15,   112,    17,    18,
+    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+    29,    30,    31,    32,    33,    -1,    35,    36,    37,    -1,
     39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
     -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,
+    59,    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,    68,
     -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
-    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
+    89,    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,    -1,
+     3,     4,     5,     6,     7,     8,     9,    10,    11,    -1,
+    13,    14,    15,   112,    17,    18,    19,    20,    21,    22,
+    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+    33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
+    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,
+    53,    54,    55,    -1,    57,    58,    -1,    -1,    61,    62,
+    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,
+    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,
+    -1,    94,    -1,    96,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    12,    13,    14,    -1,    -1,    -1,   112,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   112,   113,     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,    33,    -1,    35,    36,    37,
-    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
-    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
-    58,    59,    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,
-    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
-    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,
+    29,    30,    31,    32,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    48,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,    -1,    91,    -1,    -1,    94,    95,    -1,    -1,    98,
+     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+    13,    14,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
+    43,    44,    -1,    46,    -1,    48,    -1,    50,    51,    52,
+    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,    62,
+    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,
+    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    91,    -1,
+    -1,    94,    95,    -1,    -1,    98,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,   112,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,   112,     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,    33,    -1,    35,    36,    37,
-    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
-    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
-    58,    59,    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,
-    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
-    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,
-    -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    -1,    13,    14,    15,   112,    17,    18,    19,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
-    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    59,    -1,    61,
-    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
-    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
-    -1,    -1,    94,    -1,    96,    -1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
-   112,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,    33,    -1,    35,
-    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
-    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
-    -1,    57,    58,    -1,    -1,    61,    62,    -1,    -1,    -1,
-    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
-    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,    -1,
-    96,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    14,    -1,    -1,    -1,   112,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
-    42,    43,    44,    -1,    46,    -1,    48,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
-    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
-    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    91,
-    -1,    -1,    94,    95,    -1,    -1,    98,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    12,    13,    14,    -1,
-   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    -1,    35,
-    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
-    46,    -1,    48,    -1,    50,    51,    52,    53,    54,    55,
-    -1,    57,    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,
-    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
-    -1,    87,    88,    89,    -1,    91,    -1,    -1,    94,    95,
-    -1,    -1,    98,     3,     4,     5,     6,    -1,     8,     9,
-    10,    11,    -1,    13,    14,    -1,   112,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
-    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,
-    40,    41,    42,    43,    44,    -1,    46,    -1,    48,    -1,
-    50,    51,    52,    53,    54,    55,    -1,    57,    58,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-    -1,    91,    -1,    -1,    94,    95,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,
     37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
     -1,    48,    -1,    50,    51,    52,    53,    54,    55,    -1,
@@ -3340,18 +3351,36 @@ static const short yycheck[] = {     4,
     14,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    29,    30,    31,    -1,    33,
     -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
-    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
-    54,    55,    -1,    57,    58,    -1,    -1,    61,    62,    -1,
+    44,    -1,    46,    -1,    48,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
-    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
-    94,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,   112,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
+    -1,    -1,    -1,    87,    88,    89,    -1,    91,    -1,    -1,
+    94,    95,     3,     4,     5,     6,    -1,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,   112,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
+    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,
+    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
+    51,    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,
+    61,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
+    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,
+    -1,    -1,    -1,    94,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    29,    30,    31,    32,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,     3,     4,     5,     6,    94,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   112,    -1,    -1,    -1,    29,    30,    31,
+    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
     42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
     52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
+    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
     -1,    -1,    -1,    -1,    -1,    87,    88,    89,     3,     4,
      5,     6,    94,     8,     9,    10,    11,    -1,    13,    14,
@@ -3368,7 +3397,7 @@ static const short yycheck[] = {     4,
     -1,    29,    30,    31,    -1,    33,    -1,    35,    36,    37,
     -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
     -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
-    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+    58,    59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
     88,    89,     3,     4,     5,     6,    94,     8,     9,    10,
@@ -3376,22 +3405,22 @@ static const short yycheck[] = {     4,
     -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    29,    30,
     31,    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,
     41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
-    51,    52,    53,    54,    55,    -1,    57,    58,    59,    -1,
+    51,    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
     71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
-    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,     3,
-     4,     5,     6,    94,     8,     9,    10,    11,    -1,    13,
-    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   112,    -1,    -1,    -1,    29,    30,    31,    -1,    33,
-    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
-    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
-    54,    55,    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
-    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
-    94,    95,     3,     4,     5,     6,    -1,     8,     9,    10,
-    11,    -1,    13,    14,    -1,    -1,    -1,    -1,   112,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
+    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,
+    -1,    -1,    -1,    94,    95,     3,     4,     5,     6,    -1,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,    37,
+    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,     3,     4,     5,     6,    94,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    29,    30,
     31,    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,
     41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
     51,    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,
@@ -3412,7 +3441,7 @@ static const short yycheck[] = {     4,
     -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,
     37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
     -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
-    57,    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,
+    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
     87,    88,    89,     3,     4,     5,     6,    94,     8,     9,
@@ -3448,90 +3477,55 @@ static const short yycheck[] = {     4,
     39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
     -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
-    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
-    89,     3,     4,     5,     6,    94,     8,     9,    10,    11,
-    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   112,    -1,    -1,    -1,    29,    30,    31,
-    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
-    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
-    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,     1,    71,
-     3,     4,     5,     6,     7,     8,     9,    79,    80,    81,
-    -1,    14,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
-    -1,    -1,    94,    -1,    -1,    -1,    29,    -1,    31,    32,
-    33,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    42,
-   112,    -1,    -1,    46,    47,    -1,    49,    -1,    -1,    -1,
-    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    61,    -1,
-    63,     3,     4,     5,     6,     7,     8,     9,    71,    -1,
-    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    81,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    89,    29,    -1,    31,
-    32,    94,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,
-    42,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    61,
-    -1,    -1,     3,     4,     5,     6,     7,     8,     9,    71,
-    -1,    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    81,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    29,    -1,
-    31,    32,    94,    -1,    -1,    -1,    37,    -1,    -1,    -1,
-    -1,    42,    -1,    -1,    -1,    46,    -1,     3,     4,     5,
-     6,     7,     8,     9,    55,    -1,    57,    58,    14,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    71,    -1,    -1,    29,    -1,    31,    32,    -1,    -1,    -1,
-    81,    37,    -1,    -1,    -1,    -1,    42,    -1,    89,    -1,
-    46,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    55,
-    -1,    57,    58,    -1,    -1,    -1,    -1,    63,     3,     4,
-     5,     6,     7,     8,     9,    71,    -1,    -1,    -1,    14,
-    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    89,    29,    -1,    31,    32,    94,    -1,
-    -1,    -1,    37,    -1,    -1,    -1,    -1,    42,    -1,    -1,
-    -1,    46,    -1,     3,     4,     5,     6,     7,     8,     9,
-    55,    -1,    57,    58,    14,    -1,    61,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    29,
-    -1,    31,    32,    -1,    -1,    -1,    81,    37,    -1,    -1,
-    -1,    -1,    42,    -1,    89,    -1,    46,    -1,    -1,    94,
-    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,     3,
-     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,
-    14,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    81,    -1,    -1,    -1,    29,    -1,    31,    32,    89,
-    -1,    -1,    -1,    37,    94,    -1,    -1,    -1,    42,    -1,
-    -1,    -1,    46,    -1,    -1,     4,     5,    -1,    -1,     8,
-     9,    55,    12,    57,    58,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
-    29,    -1,    31,    -1,    -1,    -1,    -1,    81,    37,    -1,
-    -1,    -1,    -1,    -1,    -1,    89,    -1,    46,    -1,    -1,
-    94,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,
-    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,    69,
+    -1,     1,    71,     3,     4,     5,     6,     7,     8,     9,
+    79,    80,    81,    -1,    14,    -1,    -1,    -1,    87,    88,
+    89,    -1,    -1,    -1,    -1,    94,    -1,    27,    28,    29,
+    -1,    31,    32,    33,    -1,    -1,    -1,    37,    -1,    -1,
+    -1,    -1,    42,   112,    -1,    45,    46,    47,    -1,    49,
+    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,
+     1,    61,     3,     4,     5,     6,     7,     8,     9,    -1,
+    -1,    71,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    81,    -1,    -1,    -1,    -1,    27,    28,    29,    89,
+    31,    32,    33,    -1,    94,    -1,    37,    -1,    -1,    -1,
+   100,    42,    -1,    -1,    45,    46,    47,    -1,    49,    -1,
+    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,
+    61,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
+    71,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    81,    -1,    -1,    -1,    -1,    -1,    -1,    29,    89,    31,
+    32,    -1,    -1,    94,    -1,    37,    -1,    -1,    -1,   100,
+    42,    -1,    -1,    -1,    46,    -1,     3,     4,     5,     6,
+     7,     8,     9,    55,    -1,    57,    58,    14,    -1,    61,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+    -1,    -1,    29,    -1,    31,    32,    -1,    -1,    -1,    81,
+    37,    -1,    -1,    -1,    -1,    42,    -1,    89,    -1,    46,
+    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    55,    -1,
+    57,    58,     3,     4,     5,     6,     7,     8,     9,    -1,
+    -1,    -1,    -1,    14,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    29,    -1,
+    31,    32,    89,    -1,    -1,    -1,    37,    94,    -1,    -1,
+    -1,    42,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    71,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,
+    -1,    -1,    -1,    94,    64,    65,    66,    67,    68,    69,
     70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,    85,     4,     5,    -1,     7,
-     8,     9,    -1,    -1,    12,    94,    14,    -1,    -1,     4,
-     5,    -1,    -1,     8,     9,    -1,    -1,    -1,    -1,    14,
-    -1,    29,    -1,    31,    32,    -1,    -1,    -1,    -1,    37,
-    -1,    -1,    -1,    -1,    29,    -1,    31,    -1,    46,    -1,
-    -1,    -1,    37,    -1,    -1,    -1,    -1,    55,    -1,    57,
-    58,    46,    -1,    -1,     4,     5,    -1,    -1,     8,     9,
-    55,    -1,    57,    58,    14,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    64,
-    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    85,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    85,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    60,    -1,    -1,   109,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    85,    63,
+    80,    81,    82,    83,    84,    85,    64,    65,    66,    67,
+    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,    85,    -1,    -1,
+    -1,    -1,    -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    -1,
+    -1,   109,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    85,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,    85,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
     64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
     74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-    84,    85,    63,    64,    65,    66,    67,    68,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    85,    64,    65,    66,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    85,    68,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    85
+    84,    85,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/lib/bison.simple"
@@ -4032,7 +4026,7 @@ yyreduce:
   switch (yyn) {
 
 case 2:
-#line 339 "parse.y"
+#line 346 "parse.y"
 {
                  /* In case there were missing closebraces,
                     get us back to the global binding level.  */
@@ -4042,98 +4036,98 @@ case 2:
                ;
     break;}
 case 3:
-#line 353 "parse.y"
+#line 360 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 4:
-#line 355 "parse.y"
+#line 362 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 5:
-#line 357 "parse.y"
+#line 364 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 8:
-#line 366 "parse.y"
+#line 373 "parse.y"
 { have_extern_spec = 1;
                  used_extern_spec = 0;
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 9:
-#line 371 "parse.y"
+#line 378 "parse.y"
 { have_extern_spec = 0; ;
     break;}
 case 10:
-#line 376 "parse.y"
+#line 383 "parse.y"
 { yyval.itype = pedantic;
                  pedantic = 0; ;
     break;}
 case 13:
-#line 386 "parse.y"
+#line 393 "parse.y"
 { if (pending_lang_change) do_pending_lang_change(); ;
     break;}
 case 14:
-#line 388 "parse.y"
+#line 395 "parse.y"
 { if (! toplevel_bindings_p () && ! pseudo_global_level_p())
                  pop_everything (); ;
     break;}
 case 15:
-#line 394 "parse.y"
+#line 401 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 16:
-#line 396 "parse.y"
+#line 403 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 17:
-#line 398 "parse.y"
+#line 405 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 18:
-#line 400 "parse.y"
+#line 407 "parse.y"
 { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
                  assemble_asm (yyvsp[-2].ttype); ;
     break;}
 case 19:
-#line 403 "parse.y"
+#line 410 "parse.y"
 { pop_lang_context (); ;
     break;}
 case 20:
-#line 405 "parse.y"
+#line 412 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 21:
-#line 408 "parse.y"
+#line 415 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 22:
-#line 411 "parse.y"
+#line 418 "parse.y"
 { push_namespace (yyvsp[-1].ttype); ;
     break;}
 case 23:
-#line 413 "parse.y"
+#line 420 "parse.y"
 { pop_namespace (); ;
     break;}
 case 24:
-#line 415 "parse.y"
+#line 422 "parse.y"
 { push_namespace (NULL_TREE); ;
     break;}
 case 25:
-#line 417 "parse.y"
+#line 424 "parse.y"
 { pop_namespace (); ;
     break;}
 case 26:
-#line 419 "parse.y"
+#line 426 "parse.y"
 { do_namespace_alias (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 27:
-#line 421 "parse.y"
+#line 428 "parse.y"
 { do_toplevel_using_decl (yyvsp[-1].ttype); ;
     break;}
 case 28:
-#line 423 "parse.y"
+#line 430 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyvsp[-1].ttype = lastiddecl;
@@ -4141,65 +4135,72 @@ case 28:
                ;
     break;}
 case 29:
-#line 429 "parse.y"
+#line 436 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 30:
-#line 434 "parse.y"
+#line 441 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 31:
-#line 436 "parse.y"
+#line 443 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 32:
-#line 438 "parse.y"
+#line 445 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 35:
-#line 445 "parse.y"
+#line 452 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 36:
-#line 447 "parse.y"
+#line 454 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 37:
-#line 452 "parse.y"
+#line 459 "parse.y"
 { push_lang_context (yyvsp[0].ttype); ;
     break;}
 case 38:
-#line 454 "parse.y"
+#line 461 "parse.y"
 { if (current_lang_name != yyvsp[0].ttype)
                    cp_error ("use of linkage spec `%D' is different from previous spec `%D'", yyvsp[0].ttype, current_lang_name);
                  pop_lang_context (); push_lang_context (yyvsp[0].ttype); ;
     break;}
 case 39:
-#line 461 "parse.y"
+#line 468 "parse.y"
 { begin_template_parm_list (); ;
     break;}
 case 40:
-#line 463 "parse.y"
+#line 470 "parse.y"
 { yyval.ttype = end_template_parm_list (yyvsp[-1].ttype); ;
     break;}
 case 41:
-#line 465 "parse.y"
+#line 472 "parse.y"
 { begin_specialization(); 
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 42:
-#line 471 "parse.y"
+#line 478 "parse.y"
 { yyval.ttype = process_template_parm (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 43:
-#line 473 "parse.y"
+#line 480 "parse.y"
 { yyval.ttype = process_template_parm (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 44:
-#line 478 "parse.y"
+#line 485 "parse.y"
+{ yyval.ttype = yyvsp[0].ttype; ;
+    break;}
+case 45:
+#line 487 "parse.y"
+{ yyval.ttype = NULL_TREE; ;
+    break;}
+case 46:
+#line 491 "parse.y"
 { 
-                 yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE);
-                ttpa:
+                 yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype);
                  if (TREE_PURPOSE (yyval.ttype) == signature_type_node)
                    sorry ("signature as template type parameter");
                  else if (TREE_PURPOSE (yyval.ttype) != class_type_node)
@@ -4209,36 +4210,64 @@ case 44:
                    }
                ;
     break;}
-case 45:
-#line 490 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); goto ttpa; ;
-    break;}
-case 46:
-#line 492 "parse.y"
-{ yyval.ttype = build_tree_list (class_type_node, NULL_TREE); ;
-    break;}
 case 47:
-#line 494 "parse.y"
+#line 502 "parse.y"
 { yyval.ttype = build_tree_list (class_type_node, yyvsp[0].ttype); ;
     break;}
 case 48:
-#line 506 "parse.y"
+#line 507 "parse.y"
+{
+                 tree decl = build_decl (TYPE_DECL, yyvsp[0].ttype, NULL_TREE);
+                 tree tmpl = build_lang_decl (TEMPLATE_DECL, yyvsp[0].ttype, NULL_TREE);
+                 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
+                 DECL_TEMPLATE_RESULT (tmpl) = decl;
+                 SET_DECL_ARTIFICIAL (decl);
+                 end_template_decl ();
+
+                 if (yyvsp[-1].ttype == signature_type_node)
+                   sorry ("signature as template template parameter");
+                 else if (yyvsp[-1].ttype != class_type_node)
+                   pedwarn ("template template parameters must use the keyword `class'");
+                 yyval.ttype = build_tree_list (class_type_node, tmpl);
+               ;
+    break;}
+case 49:
+#line 532 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 49:
-#line 508 "parse.y"
+case 50:
+#line 534 "parse.y"
 { yyval.ttype = build_tree_list (groktypename (yyvsp[0].ftype.t), yyvsp[-2].ttype); ;
     break;}
-case 50:
-#line 510 "parse.y"
+case 51:
+#line 536 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
-case 51:
-#line 512 "parse.y"
+case 52:
+#line 538 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ftype.t); ;
     break;}
-case 52:
-#line 518 "parse.y"
+case 53:
+#line 540 "parse.y"
+{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
+    break;}
+case 54:
+#line 542 "parse.y"
+{
+                 tree defarg;
+                 arg_looking_for_template = 1;
+                 defarg = lookup_name (yyvsp[0].ttype, 0);
+                 arg_looking_for_template = 0;
+                       
+                 if (!defarg || defarg == error_mark_node
+                     || (TREE_CODE (defarg) != TEMPLATE_DECL
+                         && TREE_CODE (defarg) != TEMPLATE_TEMPLATE_PARM))
+                   defarg = do_identifier (yyvsp[0].ttype, 1);
+                 yyval.ttype = build_tree_list (defarg, yyvsp[-2].ttype);
+               ;
+    break;}
+case 55:
+#line 559 "parse.y"
 { 
                   if (yyvsp[-1].ttype) 
                     end_template_decl (); 
@@ -4246,8 +4275,8 @@ case 52:
                    end_specialization ();
                ;
     break;}
-case 53:
-#line 526 "parse.y"
+case 56:
+#line 567 "parse.y"
 { 
                   if (yyvsp[-1].ttype) 
                     end_template_decl ();
@@ -4255,26 +4284,26 @@ case 53:
                    end_specialization (); 
                 ;
     break;}
-case 54:
-#line 536 "parse.y"
+case 57:
+#line 577 "parse.y"
 {;
     break;}
-case 55:
-#line 538 "parse.y"
+case 58:
+#line 579 "parse.y"
 {;
     break;}
-case 56:
-#line 540 "parse.y"
+case 59:
+#line 581 "parse.y"
 {
                  note_list_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
-case 57:
-#line 544 "parse.y"
+case 60:
+#line 585 "parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
-case 59:
-#line 547 "parse.y"
+case 62:
+#line 588 "parse.y"
 {
                  tree t, attrs;
                  split_specs_attrs (yyvsp[-1].ftype.t, &t, &attrs);
@@ -4282,28 +4311,28 @@ case 59:
                  note_list_got_semicolon (yyvsp[-1].ftype.t);
                ;
     break;}
-case 63:
-#line 560 "parse.y"
+case 66:
+#line 601 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 64:
-#line 562 "parse.y"
+case 67:
+#line 603 "parse.y"
 { yyval.itype = 1; ;
     break;}
-case 70:
-#line 578 "parse.y"
+case 73:
+#line 619 "parse.y"
 { finish_function (lineno, (int)yyvsp[-1].itype, 0); ;
     break;}
-case 71:
-#line 580 "parse.y"
+case 74:
+#line 621 "parse.y"
 { ;
     break;}
-case 72:
-#line 582 "parse.y"
+case 75:
+#line 623 "parse.y"
 { ;
     break;}
-case 73:
-#line 587 "parse.y"
+case 76:
+#line 628 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4313,12 +4342,12 @@ case 73:
                    }
                ;
     break;}
-case 74:
-#line 596 "parse.y"
+case 77:
+#line 637 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 75:
-#line 598 "parse.y"
+case 78:
+#line 639 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4329,8 +4358,8 @@ case 75:
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 76:
-#line 608 "parse.y"
+case 79:
+#line 649 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4340,12 +4369,12 @@ case 76:
                    }
                ;
     break;}
-case 77:
-#line 617 "parse.y"
+case 80:
+#line 658 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 78:
-#line 619 "parse.y"
+case 81:
+#line 660 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4356,8 +4385,8 @@ case 78:
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 79:
-#line 629 "parse.y"
+case 82:
+#line 670 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4367,12 +4396,12 @@ case 79:
                    }
                ;
     break;}
-case 80:
-#line 638 "parse.y"
+case 83:
+#line 679 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 81:
-#line 640 "parse.y"
+case 84:
+#line 681 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4383,8 +4412,8 @@ case 81:
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 82:
-#line 650 "parse.y"
+case 85:
+#line 691 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4394,12 +4423,12 @@ case 82:
                    }
                ;
     break;}
-case 83:
-#line 659 "parse.y"
+case 86:
+#line 700 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 84:
-#line 661 "parse.y"
+case 87:
+#line 702 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4410,8 +4439,8 @@ case 84:
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 85:
-#line 674 "parse.y"
+case 88:
+#line 715 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-1].ftype.t, &specs, &attrs);
                  if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
@@ -4419,8 +4448,8 @@ case 85:
                  reinit_parse_for_function ();
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 86:
-#line 681 "parse.y"
+case 89:
+#line 722 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs);
                  if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
@@ -4428,15 +4457,15 @@ case 86:
                  reinit_parse_for_function ();
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 87:
-#line 688 "parse.y"
+case 90:
+#line 729 "parse.y"
 { if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function ();
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 88:
-#line 693 "parse.y"
+case 91:
+#line 734 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs);
                  if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
@@ -4444,31 +4473,31 @@ case 88:
                  reinit_parse_for_function ();
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 89:
-#line 700 "parse.y"
+case 92:
+#line 741 "parse.y"
 { if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function ();
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 90:
-#line 708 "parse.y"
+case 93:
+#line 749 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 91:
-#line 710 "parse.y"
+case 94:
+#line 751 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 92:
-#line 712 "parse.y"
+case 95:
+#line 753 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 93:
-#line 714 "parse.y"
+case 96:
+#line 755 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 94:
-#line 721 "parse.y"
+case 97:
+#line 762 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype);
                 rest_of_mdef:
@@ -4478,59 +4507,59 @@ case 94:
                    yychar = YYLEX;
                  reinit_parse_for_method (yychar, yyval.ttype); ;
     break;}
-case 95:
-#line 730 "parse.y"
+case 98:
+#line 771 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
-case 96:
-#line 732 "parse.y"
+case 99:
+#line 773 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
-case 97:
-#line 735 "parse.y"
+case 100:
+#line 776 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
-case 98:
-#line 738 "parse.y"
+case 101:
+#line 779 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
     break;}
-case 99:
-#line 740 "parse.y"
+case 102:
+#line 781 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
-case 100:
-#line 743 "parse.y"
+case 103:
+#line 784 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
     break;}
-case 101:
-#line 745 "parse.y"
+case 104:
+#line 786 "parse.y"
 { yyval.ttype = finish_member_template_decl (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 102:
-#line 750 "parse.y"
+case 105:
+#line 791 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 103:
-#line 759 "parse.y"
+case 106:
+#line 800 "parse.y"
 { store_return_init (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 104:
-#line 761 "parse.y"
+case 107:
+#line 802 "parse.y"
 { store_return_init (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 105:
-#line 763 "parse.y"
+case 108:
+#line 804 "parse.y"
 { store_return_init (yyval.ttype, NULL_TREE); ;
     break;}
-case 106:
-#line 768 "parse.y"
+case 109:
+#line 809 "parse.y"
 {
                  if (yyvsp[0].itype == 0)
                    error ("no base initializers given following ':'");
@@ -4541,8 +4570,8 @@ case 106:
                  keep_next_level ();
                ;
     break;}
-case 107:
-#line 781 "parse.y"
+case 110:
+#line 822 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -4560,206 +4589,215 @@ case 107:
                    error ("only constructors take base initializers");
                ;
     break;}
-case 108:
-#line 801 "parse.y"
+case 111:
+#line 842 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 109:
-#line 803 "parse.y"
+case 112:
+#line 844 "parse.y"
 { yyval.itype = 1; ;
     break;}
-case 112:
-#line 810 "parse.y"
+case 115:
+#line 851 "parse.y"
 {
                  if (current_class_name)
                    pedwarn ("anachronistic old style base class initializer");
                  expand_member_init (current_class_ref, NULL_TREE, yyvsp[-1].ttype);
                ;
     break;}
-case 113:
-#line 816 "parse.y"
+case 116:
+#line 857 "parse.y"
 {
                  if (current_class_name)
                    pedwarn ("anachronistic old style base class initializer");
                  expand_member_init (current_class_ref, NULL_TREE, void_type_node);
                ;
     break;}
-case 114:
-#line 822 "parse.y"
+case 117:
+#line 863 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 115:
-#line 824 "parse.y"
+case 118:
+#line 865 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
     break;}
-case 116:
-#line 826 "parse.y"
+case 119:
+#line 867 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 117:
-#line 828 "parse.y"
+case 120:
+#line 869 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
     break;}
-case 118:
-#line 830 "parse.y"
+case 121:
+#line 871 "parse.y"
 { expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-3].ttype),
                                      yyvsp[-1].ttype); ;
     break;}
-case 119:
-#line 833 "parse.y"
+case 122:
+#line 874 "parse.y"
 { expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-1].ttype),
                                      void_type_node); ;
     break;}
-case 131:
-#line 859 "parse.y"
+case 134:
+#line 900 "parse.y"
 { do_type_instantiation (yyvsp[-1].ftype.t, NULL_TREE);
                  yyungetc (';', 1); ;
     break;}
-case 133:
-#line 863 "parse.y"
+case 136:
+#line 904 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  do_decl_instantiation (specs, yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 135:
-#line 867 "parse.y"
+case 138:
+#line 908 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 137:
-#line 870 "parse.y"
+case 140:
+#line 911 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 139:
-#line 873 "parse.y"
+case 142:
+#line 914 "parse.y"
 { do_type_instantiation (yyvsp[-1].ftype.t, yyvsp[-4].ttype);
                  yyungetc (';', 1); ;
     break;}
-case 141:
-#line 878 "parse.y"
+case 144:
+#line 919 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  do_decl_instantiation (specs, yyvsp[0].ttype, yyvsp[-4].ttype); ;
     break;}
-case 143:
-#line 882 "parse.y"
+case 146:
+#line 923 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); ;
     break;}
-case 145:
-#line 885 "parse.y"
+case 148:
+#line 926 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); ;
     break;}
-case 147:
-#line 890 "parse.y"
+case 150:
+#line 931 "parse.y"
 { begin_explicit_instantiation(); ;
     break;}
-case 148:
-#line 893 "parse.y"
+case 151:
+#line 934 "parse.y"
 { end_explicit_instantiation(); ;
     break;}
-case 149:
-#line 901 "parse.y"
+case 152:
+#line 942 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
                    yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
                ;
     break;}
-case 150:
-#line 907 "parse.y"
+case 153:
+#line 948 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
                    yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
                ;
     break;}
-case 152:
-#line 917 "parse.y"
+case 155:
+#line 958 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
                    yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
                ;
     break;}
-case 154:
-#line 927 "parse.y"
+case 157:
+#line 968 "parse.y"
 {
                  /* Handle `Class<Class<Type>>' without space in the `>>' */
                  pedwarn ("`>>' should be `> >' in template class name");
                  yyungetc ('>', 1);
                ;
     break;}
-case 155:
-#line 936 "parse.y"
+case 158:
+#line 977 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 157:
-#line 942 "parse.y"
+case 160:
+#line 983 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
-case 158:
-#line 944 "parse.y"
+case 161:
+#line 985 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 159:
-#line 949 "parse.y"
+case 162:
+#line 989 "parse.y"
+{ processing_template_arg = 1; ;
+    break;}
+case 163:
+#line 991 "parse.y"
+{ yyval.ttype = yyvsp[0].ttype;
+                 processing_template_arg = 0; ;
+    break;}
+case 164:
+#line 996 "parse.y"
 { yyval.ttype = groktypename (yyvsp[0].ftype.t); ;
     break;}
-case 161:
-#line 955 "parse.y"
+case 166:
+#line 1002 "parse.y"
 { yyval.code = NEGATE_EXPR; ;
     break;}
-case 162:
-#line 957 "parse.y"
+case 167:
+#line 1004 "parse.y"
 { yyval.code = CONVERT_EXPR; ;
     break;}
-case 163:
-#line 959 "parse.y"
+case 168:
+#line 1006 "parse.y"
 { yyval.code = PREINCREMENT_EXPR; ;
     break;}
-case 164:
-#line 961 "parse.y"
+case 169:
+#line 1008 "parse.y"
 { yyval.code = PREDECREMENT_EXPR; ;
     break;}
-case 165:
-#line 963 "parse.y"
+case 170:
+#line 1010 "parse.y"
 { yyval.code = TRUTH_NOT_EXPR; ;
     break;}
-case 166:
-#line 968 "parse.y"
+case 171:
+#line 1015 "parse.y"
 { yyval.ttype = build_x_compound_expr (yyval.ttype); ;
     break;}
-case 168:
-#line 974 "parse.y"
+case 173:
+#line 1021 "parse.y"
 { error ("ANSI C++ forbids an empty condition for `%s'",
                         cond_stmt_keyword);
                  yyval.ttype = integer_zero_node; ;
     break;}
-case 169:
-#line 978 "parse.y"
+case 174:
+#line 1025 "parse.y"
 { yyval.ttype = condition_conversion (yyvsp[-1].ttype); ;
     break;}
-case 170:
-#line 983 "parse.y"
+case 175:
+#line 1030 "parse.y"
 { error ("ANSI C++ forbids an empty condition for `%s'",
                         cond_stmt_keyword);
                  yyval.ttype = integer_zero_node; ;
     break;}
-case 171:
-#line 987 "parse.y"
+case 176:
+#line 1034 "parse.y"
 { yyval.ttype = condition_conversion (yyvsp[-1].ttype); ;
     break;}
-case 172:
-#line 992 "parse.y"
+case 177:
+#line 1039 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 173:
-#line 994 "parse.y"
+case 178:
+#line 1041 "parse.y"
 { yyval.ttype = condition_conversion (yyval.ttype); ;
     break;}
-case 174:
-#line 996 "parse.y"
+case 179:
+#line 1043 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 175:
-#line 1001 "parse.y"
+case 180:
+#line 1048 "parse.y"
 { {
                  tree d;
                  for (d = getdecls (); d; d = TREE_CHAIN (d))
@@ -4778,8 +4816,8 @@ case 175:
                                         /*prefix_attributes*/ NULL_TREE);
                ;
     break;}
-case 176:
-#line 1019 "parse.y"
+case 181:
+#line 1066 "parse.y"
 { 
                  cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype, 1, LOOKUP_ONLYCONVERTING);
                  resume_momentary (yyvsp[-2].itype);
@@ -4788,8 +4826,8 @@ case 176:
                    cp_error ("definition of array `%#D' in condition", yyval.ttype); 
                ;
     break;}
-case 182:
-#line 1038 "parse.y"
+case 187:
+#line 1085 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -4799,8 +4837,8 @@ case 182:
                    }
                ;
     break;}
-case 183:
-#line 1047 "parse.y"
+case 188:
+#line 1094 "parse.y"
 { 
                  if (processing_template_decl)
                    {
@@ -4811,59 +4849,59 @@ case 183:
                  finish_stmt (); 
                ;
     break;}
-case 185:
-#line 1062 "parse.y"
+case 190:
+#line 1109 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyval.ttype, 
                                  build_expr_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 186:
-#line 1065 "parse.y"
+case 191:
+#line 1112 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyval.ttype, 
                                  build_expr_list (NULL_TREE, error_mark_node)); ;
     break;}
-case 187:
-#line 1068 "parse.y"
+case 192:
+#line 1115 "parse.y"
 { chainon (yyval.ttype, build_expr_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 188:
-#line 1070 "parse.y"
+case 193:
+#line 1117 "parse.y"
 { chainon (yyval.ttype, build_expr_list (NULL_TREE, error_mark_node)); ;
     break;}
-case 189:
-#line 1075 "parse.y"
+case 194:
+#line 1122 "parse.y"
 { yyval.ttype = build_expr_list (NULL_TREE, yyval.ttype); ;
     break;}
-case 191:
-#line 1081 "parse.y"
+case 196:
+#line 1128 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 192:
-#line 1084 "parse.y"
+case 197:
+#line 1131 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
-case 193:
-#line 1087 "parse.y"
+case 198:
+#line 1134 "parse.y"
 { yyval.ttype = build_x_indirect_ref (yyvsp[0].ttype, "unary *"); ;
     break;}
-case 194:
-#line 1089 "parse.y"
+case 199:
+#line 1136 "parse.y"
 { yyval.ttype = build_x_unary_op (ADDR_EXPR, yyvsp[0].ttype); ;
     break;}
-case 195:
-#line 1091 "parse.y"
+case 200:
+#line 1138 "parse.y"
 { yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, yyvsp[0].ttype); ;
     break;}
-case 196:
-#line 1093 "parse.y"
+case 201:
+#line 1140 "parse.y"
 { yyval.ttype = build_x_unary_op (yyvsp[-1].code, yyvsp[0].ttype);
                  if (yyvsp[-1].code == NEGATE_EXPR && TREE_CODE (yyvsp[0].ttype) == INTEGER_CST)
                    TREE_NEGATED_INT (yyval.ttype) = 1;
                  overflow_warning (yyval.ttype);
                ;
     break;}
-case 197:
-#line 1100 "parse.y"
+case 202:
+#line 1147 "parse.y"
 { tree label = lookup_label (yyvsp[0].ttype);
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids `&&'");
@@ -4877,142 +4915,142 @@ case 197:
                    }
                ;
     break;}
-case 198:
-#line 1113 "parse.y"
+case 203:
+#line 1160 "parse.y"
 { yyval.ttype = expr_sizeof (yyvsp[0].ttype); ;
     break;}
-case 199:
-#line 1115 "parse.y"
+case 204:
+#line 1162 "parse.y"
 { yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ftype.t)); ;
     break;}
-case 200:
-#line 1117 "parse.y"
+case 205:
+#line 1164 "parse.y"
 { yyval.ttype = grok_alignof (yyvsp[0].ttype); ;
     break;}
-case 201:
-#line 1119 "parse.y"
+case 206:
+#line 1166 "parse.y"
 { yyval.ttype = c_alignof (groktypename (yyvsp[-1].ftype.t)); 
                  check_for_new_type ("alignof", yyvsp[-1].ftype); ;
     break;}
-case 202:
-#line 1125 "parse.y"
+case 207:
+#line 1172 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-1].itype); 
                  check_for_new_type ("new", yyvsp[0].ftype); ;
     break;}
-case 203:
-#line 1128 "parse.y"
+case 208:
+#line 1175 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-2].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
-case 204:
-#line 1131 "parse.y"
+case 209:
+#line 1178 "parse.y"
 { yyval.ttype = build_new (yyvsp[-1].ttype, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-2].itype); 
                  check_for_new_type ("new", yyvsp[0].ftype); ;
     break;}
-case 205:
-#line 1134 "parse.y"
+case 210:
+#line 1181 "parse.y"
 { yyval.ttype = build_new (yyvsp[-2].ttype, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-3].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
-case 206:
-#line 1137 "parse.y"
+case 211:
+#line 1184 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-1].ftype.t),
                                  NULL_TREE, yyvsp[-3].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
-case 207:
-#line 1141 "parse.y"
+case 212:
+#line 1188 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-4].itype); 
                  check_for_new_type ("new", yyvsp[-2].ftype); ;
     break;}
-case 208:
-#line 1144 "parse.y"
+case 213:
+#line 1191 "parse.y"
 { yyval.ttype = build_new (yyvsp[-3].ttype, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-4].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
-case 209:
-#line 1147 "parse.y"
+case 214:
+#line 1194 "parse.y"
 { yyval.ttype = build_new (yyvsp[-4].ttype, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-5].itype); 
                  check_for_new_type ("new", yyvsp[-2].ftype); ;
     break;}
-case 210:
-#line 1151 "parse.y"
+case 215:
+#line 1198 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 0, yyvsp[-1].itype); ;
     break;}
-case 211:
-#line 1153 "parse.y"
+case 216:
+#line 1200 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 1, yyvsp[-3].itype);
                  if (yychar == YYEMPTY)
                    yychar = YYLEX; ;
     break;}
-case 212:
-#line 1157 "parse.y"
+case 217:
+#line 1204 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, yyvsp[-2].ttype, 2, yyvsp[-4].itype);
                  if (yychar == YYEMPTY)
                    yychar = YYLEX; ;
     break;}
-case 213:
-#line 1161 "parse.y"
+case 218:
+#line 1208 "parse.y"
 { yyval.ttype = build_x_unary_op (REALPART_EXPR, yyvsp[0].ttype); ;
     break;}
-case 214:
-#line 1163 "parse.y"
+case 219:
+#line 1210 "parse.y"
 { yyval.ttype = build_x_unary_op (IMAGPART_EXPR, yyvsp[0].ttype); ;
     break;}
-case 215:
-#line 1168 "parse.y"
+case 220:
+#line 1215 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 216:
-#line 1170 "parse.y"
+case 221:
+#line 1217 "parse.y"
 {
                  yyval.ttype = yyvsp[-1].ttype; 
                  pedwarn ("old style placement syntax, use () instead");
                ;
     break;}
-case 217:
-#line 1178 "parse.y"
+case 222:
+#line 1225 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 218:
-#line 1180 "parse.y"
+case 223:
+#line 1227 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 219:
-#line 1182 "parse.y"
+case 224:
+#line 1229 "parse.y"
 {
                  cp_error ("`%T' is not a valid expression", yyvsp[-1].ftype.t);
                  yyval.ttype = error_mark_node;
                ;
     break;}
-case 220:
-#line 1190 "parse.y"
+case 225:
+#line 1237 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids initialization of new expression with `='");
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 221:
-#line 1200 "parse.y"
+case 226:
+#line 1247 "parse.y"
 { yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node);
                  TREE_PARMLIST (yyvsp[-1].ftype.t) = 1;
                  yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
                  check_for_new_type ("cast", yyvsp[-1].ftype); ;
     break;}
-case 222:
-#line 1205 "parse.y"
+case 227:
+#line 1252 "parse.y"
 { yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node);
                  TREE_PARMLIST (yyvsp[-1].ftype.t) = 1;
                  yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
                  check_for_new_type ("cast", yyvsp[-1].ftype); ;
     break;}
-case 224:
-#line 1214 "parse.y"
+case 229:
+#line 1261 "parse.y"
 { yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 225:
-#line 1216 "parse.y"
+case 230:
+#line 1263 "parse.y"
 { 
                  tree init = build_nt (CONSTRUCTOR, NULL_TREE,
                                        nreverse (yyvsp[-2].ttype)); 
@@ -5024,167 +5062,181 @@ case 225:
                  yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, init);
                ;
     break;}
-case 227:
-#line 1232 "parse.y"
+case 232:
+#line 1279 "parse.y"
 { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 228:
-#line 1234 "parse.y"
+case 233:
+#line 1281 "parse.y"
 { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 229:
-#line 1236 "parse.y"
+case 234:
+#line 1283 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 230:
-#line 1238 "parse.y"
+case 235:
+#line 1285 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 231:
-#line 1240 "parse.y"
+case 236:
+#line 1287 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 232:
-#line 1242 "parse.y"
+case 237:
+#line 1289 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 233:
-#line 1244 "parse.y"
+case 238:
+#line 1291 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 234:
-#line 1246 "parse.y"
+case 239:
+#line 1293 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 235:
-#line 1248 "parse.y"
+case 240:
+#line 1295 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 236:
-#line 1250 "parse.y"
+case 241:
+#line 1297 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 237:
-#line 1252 "parse.y"
+case 242:
+#line 1299 "parse.y"
 { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 238:
-#line 1254 "parse.y"
+case 243:
+#line 1301 "parse.y"
 { yyval.ttype = build_x_binary_op (GT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 239:
-#line 1256 "parse.y"
+case 244:
+#line 1303 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 240:
-#line 1258 "parse.y"
+case 245:
+#line 1305 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 241:
-#line 1260 "parse.y"
+case 246:
+#line 1307 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 242:
-#line 1262 "parse.y"
+case 247:
+#line 1309 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 243:
-#line 1264 "parse.y"
+case 248:
+#line 1311 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 244:
-#line 1266 "parse.y"
+case 249:
+#line 1313 "parse.y"
 { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 245:
-#line 1268 "parse.y"
+case 250:
+#line 1315 "parse.y"
 { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 246:
-#line 1270 "parse.y"
+case 251:
+#line 1317 "parse.y"
 { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 247:
-#line 1272 "parse.y"
+case 252:
+#line 1319 "parse.y"
 { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype);
                  if (yyval.ttype != error_mark_node)
                     C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
     break;}
-case 248:
-#line 1276 "parse.y"
+case 253:
+#line 1323 "parse.y"
 { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
     break;}
-case 249:
-#line 1278 "parse.y"
+case 254:
+#line 1325 "parse.y"
 { yyval.ttype = build_throw (NULL_TREE); ;
     break;}
-case 250:
-#line 1280 "parse.y"
+case 255:
+#line 1327 "parse.y"
 { yyval.ttype = build_throw (yyvsp[0].ttype); ;
     break;}
-case 251:
-#line 1298 "parse.y"
+case 256:
+#line 1345 "parse.y"
 { yyval.ttype = build_parse_node (BIT_NOT_EXPR, yyvsp[0].ttype); ;
     break;}
-case 257:
-#line 1307 "parse.y"
+case 262:
+#line 1354 "parse.y"
 { yyval.ttype = do_identifier (yyvsp[-1].ttype, 1); ;
     break;}
-case 258:
-#line 1311 "parse.y"
+case 263:
+#line 1358 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
-case 259:
-#line 1313 "parse.y"
+case 264:
+#line 1360 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
-case 260:
-#line 1318 "parse.y"
+case 265:
+#line 1365 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 261:
-#line 1320 "parse.y"
+case 266:
+#line 1367 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 262:
-#line 1323 "parse.y"
+case 267:
+#line 1370 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 267:
-#line 1335 "parse.y"
+case 272:
+#line 1382 "parse.y"
 { yyval.ttype = build_parse_node (INDIRECT_REF, yyvsp[0].ttype); ;
     break;}
-case 268:
-#line 1337 "parse.y"
+case 273:
+#line 1384 "parse.y"
 { yyval.ttype = build_parse_node (ADDR_EXPR, yyvsp[0].ttype); ;
     break;}
-case 269:
-#line 1339 "parse.y"
+case 274:
+#line 1386 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 270:
-#line 1344 "parse.y"
+case 275:
+#line 1391 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 271:
-#line 1346 "parse.y"
+case 276:
+#line 1393 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 275:
-#line 1354 "parse.y"
+case 280:
+#line 1401 "parse.y"
 { yyval.ttype = finish_decl_parsing (yyvsp[-1].ttype); ;
     break;}
-case 276:
-#line 1359 "parse.y"
+case 281:
+#line 1406 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == BIT_NOT_EXPR)
                    yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (yyval.ttype, 0));
                  else if (TREE_CODE (yyval.ttype) != TEMPLATE_ID_EXPR)
-                   yyval.ttype = do_identifier (yyval.ttype, 1);
+                   if (processing_template_arg)
+                     {
+                       tree id;
+                       arg_looking_for_template = processing_template_arg;
+                       id = lookup_name (yyval.ttype, 0);
+                       arg_looking_for_template = 0;
+                       
+                       if (!id || id == error_mark_node
+                           || (TREE_CODE (id) != TEMPLATE_DECL
+                               && TREE_CODE (id) != TEMPLATE_TEMPLATE_PARM))
+                         id = do_identifier (yyval.ttype, 1);
+                       yyval.ttype = id;
+                     } 
+                   else
+                     yyval.ttype = do_identifier (yyval.ttype, 1);
                ;
     break;}
-case 279:
-#line 1368 "parse.y"
+case 284:
+#line 1429 "parse.y"
 {
                  if (processing_template_decl)
                    push_obstacks (&permanent_obstack, &permanent_obstack);
@@ -5193,8 +5245,8 @@ case 279:
                    pop_obstacks ();
                ;
     break;}
-case 280:
-#line 1376 "parse.y"
+case 285:
+#line 1437 "parse.y"
 { char class;
                  yyval.ttype = yyvsp[-1].ttype;
                  class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
@@ -5203,8 +5255,8 @@ case 280:
                     /* This inhibits warnings in truthvalue_conversion.  */
                    C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
     break;}
-case 281:
-#line 1384 "parse.y"
+case 286:
+#line 1445 "parse.y"
 { char class;
                  yyval.ttype = reparse_decl_as_expr (NULL_TREE, yyvsp[-1].ttype);
                  class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
@@ -5213,12 +5265,12 @@ case 281:
                     /* This inhibits warnings in truthvalue_conversion.  */
                    C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
     break;}
-case 282:
-#line 1392 "parse.y"
+case 287:
+#line 1453 "parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
-case 283:
-#line 1394 "parse.y"
+case 288:
+#line 1455 "parse.y"
 { if (current_function_decl == 0)
                    {
                      error ("braced-group within expression allowed only inside a function");
@@ -5227,8 +5279,8 @@ case 283:
                  keep_next_level ();
                  yyval.ttype = expand_start_stmt_expr (); ;
     break;}
-case 284:
-#line 1402 "parse.y"
+case 289:
+#line 1463 "parse.y"
 { tree rtl_exp;
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids braced-groups within expressions");
@@ -5250,8 +5302,8 @@ case 284:
                    yyval.ttype = yyvsp[-1].ttype;
                ;
     break;}
-case 285:
-#line 1423 "parse.y"
+case 290:
+#line 1484 "parse.y"
 {
                   yyval.ttype = build_x_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype, current_class_ref); 
                   if (TREE_CODE (yyval.ttype) == CALL_EXPR
@@ -5259,8 +5311,8 @@ case 285:
                    yyval.ttype = require_complete_type (yyval.ttype);
                 ;
     break;}
-case 286:
-#line 1430 "parse.y"
+case 291:
+#line 1491 "parse.y"
 {
                  yyval.ttype = build_x_function_call (yyval.ttype, NULL_TREE, current_class_ref);
                  if (TREE_CODE (yyval.ttype) == CALL_EXPR
@@ -5268,12 +5320,12 @@ case 286:
                    yyval.ttype = require_complete_type (yyval.ttype);
                 ;
     break;}
-case 287:
-#line 1437 "parse.y"
+case 292:
+#line 1498 "parse.y"
 { yyval.ttype = grok_array_decl (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 288:
-#line 1439 "parse.y"
+case 293:
+#line 1500 "parse.y"
 { /* If we get an OFFSET_REF, turn it into what it really
                     means (e.g., a COMPONENT_REF).  This way if we've got,
                     say, a reference to a static member that's being operated
@@ -5283,14 +5335,14 @@ case 288:
                    yyval.ttype = resolve_offset_ref (yyval.ttype);
                  yyval.ttype = build_x_unary_op (POSTINCREMENT_EXPR, yyval.ttype); ;
     break;}
-case 289:
-#line 1448 "parse.y"
+case 294:
+#line 1509 "parse.y"
 { if (TREE_CODE (yyval.ttype) == OFFSET_REF)
                    yyval.ttype = resolve_offset_ref (yyval.ttype);
                  yyval.ttype = build_x_unary_op (POSTDECREMENT_EXPR, yyval.ttype); ;
     break;}
-case 290:
-#line 1453 "parse.y"
+case 295:
+#line 1514 "parse.y"
 { if (current_class_ptr)
                    {
 #ifdef WARNING_ABOUT_CCD
@@ -5314,8 +5366,8 @@ case 290:
                    }
                ;
     break;}
-case 291:
-#line 1476 "parse.y"
+case 296:
+#line 1537 "parse.y"
 {
                  tree type;
                  tree id = yyval.ttype;
@@ -5360,46 +5412,46 @@ case 291:
                    }
                ;
     break;}
-case 293:
-#line 1521 "parse.y"
+case 298:
+#line 1582 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("dynamic_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_dynamic_cast (type, yyvsp[-1].ttype); ;
     break;}
-case 294:
-#line 1525 "parse.y"
+case 299:
+#line 1586 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("static_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_static_cast (type, yyvsp[-1].ttype); ;
     break;}
-case 295:
-#line 1529 "parse.y"
+case 300:
+#line 1590 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("reinterpret_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_reinterpret_cast (type, yyvsp[-1].ttype); ;
     break;}
-case 296:
-#line 1533 "parse.y"
+case 301:
+#line 1594 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("const_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_const_cast (type, yyvsp[-1].ttype); ;
     break;}
-case 297:
-#line 1537 "parse.y"
+case 302:
+#line 1598 "parse.y"
 { yyval.ttype = build_x_typeid (yyvsp[-1].ttype); ;
     break;}
-case 298:
-#line 1539 "parse.y"
+case 303:
+#line 1600 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
                  check_for_new_type ("typeid", yyvsp[-1].ftype);
                  yyval.ttype = get_typeid (TYPE_MAIN_VARIANT (type)); ;
     break;}
-case 299:
-#line 1543 "parse.y"
+case 304:
+#line 1604 "parse.y"
 { yyval.ttype = do_scoped_id (yyvsp[0].ttype, 1); ;
     break;}
-case 300:
-#line 1545 "parse.y"
+case 305:
+#line 1606 "parse.y"
 {
                  got_scope = NULL_TREE;
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
@@ -5408,58 +5460,58 @@ case 300:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 301:
-#line 1553 "parse.y"
+case 306:
+#line 1614 "parse.y"
 { yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); ;
     break;}
-case 302:
-#line 1555 "parse.y"
+case 307:
+#line 1616 "parse.y"
 { if (processing_template_decl)
                    yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-3].ttype), yyvsp[-1].ttype, NULL_TREE);
                  else
                    yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), yyvsp[-1].ttype); ;
     break;}
-case 303:
-#line 1560 "parse.y"
+case 308:
+#line 1621 "parse.y"
 { if (processing_template_decl)
                    yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-1].ttype), 
                                       NULL_TREE, NULL_TREE);
                  else
                    yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), NULL_TREE); ;
     break;}
-case 304:
-#line 1566 "parse.y"
+case 309:
+#line 1627 "parse.y"
 { 
                  yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); 
                ;
     break;}
-case 305:
-#line 1570 "parse.y"
+case 310:
+#line 1631 "parse.y"
 {
                  yyval.ttype = build_method_call (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, 
                                          NULL_TREE, LOOKUP_NORMAL); 
                 ;
     break;}
-case 306:
-#line 1575 "parse.y"
+case 311:
+#line 1636 "parse.y"
 {
                  yyval.ttype = build_method_call (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE,
                                          NULL_TREE, LOOKUP_NORMAL); 
                 ;
     break;}
-case 307:
-#line 1580 "parse.y"
+case 312:
+#line 1641 "parse.y"
 { yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); ;
     break;}
-case 308:
-#line 1582 "parse.y"
+case 313:
+#line 1643 "parse.y"
 { if (processing_template_decl)
                    yyval.ttype = build_min_nt (COMPONENT_REF, yyvsp[-1].ttype, copy_to_permanent (yyvsp[0].ttype));
                  else
                    yyval.ttype = build_object_ref (yyval.ttype, OP0 (yyvsp[0].ttype), OP1 (yyvsp[0].ttype)); ;
     break;}
-case 309:
-#line 1587 "parse.y"
+case 314:
+#line 1648 "parse.y"
 {
 #if 0
                  /* This is a future direction of this code, but because
@@ -5475,8 +5527,8 @@ case 309:
 #endif
                ;
     break;}
-case 310:
-#line 1602 "parse.y"
+case 315:
+#line 1663 "parse.y"
 {
 #if 0
                  /* This is a future direction of this code, but because
@@ -5492,8 +5544,8 @@ case 310:
 #endif
                ;
     break;}
-case 311:
-#line 1617 "parse.y"
+case 316:
+#line 1678 "parse.y"
 {
                  if (IS_SIGNATURE (OP0 (yyvsp[-3].ttype)))
                    {
@@ -5505,8 +5557,8 @@ case 311:
                    yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-3].ttype), OP1 (yyvsp[-3].ttype), yyvsp[-1].ttype);
                ;
     break;}
-case 312:
-#line 1628 "parse.y"
+case 317:
+#line 1689 "parse.y"
 {
                  if (IS_SIGNATURE (OP0 (yyvsp[-1].ttype)))
                    {
@@ -5518,8 +5570,8 @@ case 312:
                    yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-1].ttype), OP1 (yyvsp[-1].ttype), NULL_TREE);
                ;
     break;}
-case 313:
-#line 1640 "parse.y"
+case 318:
+#line 1701 "parse.y"
 {
                  if (IDENTIFIER_GLOBAL_VALUE (yyvsp[-1].ttype)
                      && (TREE_CODE (TREE_TYPE (yyvsp[-3].ttype)) 
@@ -5528,8 +5580,8 @@ case 313:
                  yyval.ttype = cp_convert (void_type_node, yyvsp[-3].ttype);
                ;
     break;}
-case 314:
-#line 1648 "parse.y"
+case 319:
+#line 1709 "parse.y"
 {
                  if (yyvsp[-4].ttype != yyvsp[-1].ttype)
                    cp_error ("destructor specifier `%T::~%T()' must have matching names", yyvsp[-4].ttype, yyvsp[-1].ttype);
@@ -5539,42 +5591,42 @@ case 314:
                  yyval.ttype = cp_convert (void_type_node, yyvsp[-5].ttype);
                ;
     break;}
-case 315:
-#line 1657 "parse.y"
+case 320:
+#line 1718 "parse.y"
 {
                  yyval.ttype = error_mark_node;
                ;
     break;}
-case 316:
-#line 1702 "parse.y"
+case 321:
+#line 1763 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 317:
-#line 1704 "parse.y"
+case 322:
+#line 1765 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
-case 318:
-#line 1709 "parse.y"
+case 323:
+#line 1770 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 319:
-#line 1711 "parse.y"
+case 324:
+#line 1772 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
-case 320:
-#line 1716 "parse.y"
+case 325:
+#line 1777 "parse.y"
 { yyval.ttype = boolean_true_node; ;
     break;}
-case 321:
-#line 1718 "parse.y"
+case 326:
+#line 1779 "parse.y"
 { yyval.ttype = boolean_false_node; ;
     break;}
-case 323:
-#line 1725 "parse.y"
+case 328:
+#line 1786 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 324:
-#line 1730 "parse.y"
+case 329:
+#line 1791 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -5585,220 +5637,220 @@ case 324:
                  keep_next_level ();
                ;
     break;}
-case 325:
-#line 1743 "parse.y"
+case 330:
+#line 1804 "parse.y"
 { got_object = TREE_TYPE (yyval.ttype); ;
     break;}
-case 326:
-#line 1745 "parse.y"
+case 331:
+#line 1806 "parse.y"
 {
                  yyval.ttype = build_x_arrow (yyval.ttype); 
                  got_object = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 327:
-#line 1753 "parse.y"
+case 332:
+#line 1814 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t)))
                    note_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
-case 328:
-#line 1759 "parse.y"
+case 333:
+#line 1820 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  note_list_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
-case 329:
-#line 1764 "parse.y"
+case 334:
+#line 1825 "parse.y"
 { resume_momentary (yyvsp[-1].itype); ;
     break;}
-case 330:
-#line 1766 "parse.y"
+case 335:
+#line 1827 "parse.y"
 {
                  shadow_tag (yyvsp[-1].ftype.t);
                  note_list_got_semicolon (yyvsp[-1].ftype.t);
                ;
     break;}
-case 331:
-#line 1771 "parse.y"
+case 336:
+#line 1832 "parse.y"
 { warning ("empty declaration"); ;
     break;}
-case 332:
-#line 1773 "parse.y"
+case 337:
+#line 1834 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
-case 335:
-#line 1787 "parse.y"
+case 340:
+#line 1848 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (),
                                             NULL_TREE, NULL_TREE); ;
     break;}
-case 336:
-#line 1790 "parse.y"
+case 341:
+#line 1851 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE,
                                             NULL_TREE); ;
     break;}
-case 337:
-#line 1797 "parse.y"
+case 342:
+#line 1858 "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 338:
-#line 1800 "parse.y"
+case 343:
+#line 1861 "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 339:
-#line 1803 "parse.y"
+case 344:
+#line 1864 "parse.y"
 { yyval.ftype.t = build_decl_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 340:
-#line 1806 "parse.y"
+case 345:
+#line 1867 "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 341:
-#line 1809 "parse.y"
+case 346:
+#line 1870 "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 344:
-#line 1825 "parse.y"
+case 349:
+#line 1886 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 345:
-#line 1828 "parse.y"
+case 350:
+#line 1889 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 346:
-#line 1831 "parse.y"
+case 351:
+#line 1892 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, yyvsp[0].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
-case 347:
-#line 1834 "parse.y"
+case 352:
+#line 1895 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 348:
-#line 1837 "parse.y"
+case 353:
+#line 1898 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 349:
-#line 1840 "parse.y"
+case 354:
+#line 1901 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t,
                                         chainon (yyvsp[-1].ttype, chainon (yyvsp[0].ttype, yyvsp[-3].ttype))); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
-case 350:
-#line 1847 "parse.y"
+case 355:
+#line 1908 "parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyval.ttype));
                  yyval.ttype = build_decl_list (NULL_TREE, yyval.ttype); ;
     break;}
-case 351:
-#line 1852 "parse.y"
+case 356:
+#line 1913 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); ;
     break;}
-case 352:
-#line 1854 "parse.y"
+case 357:
+#line 1915 "parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 353:
-#line 1859 "parse.y"
+case 358:
+#line 1920 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 354:
-#line 1861 "parse.y"
+case 359:
+#line 1922 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
-case 355:
-#line 1871 "parse.y"
+case 360:
+#line 1932 "parse.y"
 { yyval.ttype = yyvsp[0].ftype.t; TREE_STATIC (yyval.ttype) = 1; ;
     break;}
-case 356:
-#line 1873 "parse.y"
+case 361:
+#line 1934 "parse.y"
 { yyval.ttype = IDENTIFIER_AS_LIST (yyval.ttype); ;
     break;}
-case 357:
-#line 1875 "parse.y"
+case 362:
+#line 1936 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
-case 358:
-#line 1878 "parse.y"
+case 363:
+#line 1939 "parse.y"
 { if (extra_warnings && TREE_STATIC (yyval.ttype))
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
                  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
     break;}
-case 359:
-#line 1884 "parse.y"
+case 364:
+#line 1945 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 360:
-#line 1886 "parse.y"
+case 365:
+#line 1947 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
-case 361:
-#line 1897 "parse.y"
+case 366:
+#line 1958 "parse.y"
 { yyval.ftype.t = get_decl_list (yyvsp[0].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 362:
-#line 1900 "parse.y"
+case 367:
+#line 1961 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 363:
-#line 1903 "parse.y"
+case 368:
+#line 1964 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 364:
-#line 1906 "parse.y"
+case 369:
+#line 1967 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
-case 365:
-#line 1912 "parse.y"
+case 370:
+#line 1973 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
-case 366:
-#line 1914 "parse.y"
+case 371:
+#line 1975 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 368:
-#line 1924 "parse.y"
+case 373:
+#line 1985 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 369:
-#line 1926 "parse.y"
+case 374:
+#line 1987 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 370:
-#line 1928 "parse.y"
+case 375:
+#line 1989 "parse.y"
 { yyval.ftype.t = TREE_TYPE (yyvsp[-1].ttype);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 371:
-#line 1931 "parse.y"
+case 376:
+#line 1992 "parse.y"
 { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 372:
-#line 1934 "parse.y"
+case 377:
+#line 1995 "parse.y"
 { tree type = TREE_TYPE (yyvsp[-1].ttype);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5814,8 +5866,8 @@ case 372:
                    }
                ;
     break;}
-case 373:
-#line 1949 "parse.y"
+case 378:
+#line 2010 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5831,24 +5883,24 @@ case 373:
                    }
                ;
     break;}
-case 374:
-#line 1969 "parse.y"
+case 379:
+#line 2030 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 375:
-#line 1971 "parse.y"
+case 380:
+#line 2032 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 383:
-#line 1992 "parse.y"
+case 388:
+#line 2053 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 384:
-#line 1994 "parse.y"
+case 389:
+#line 2055 "parse.y"
 { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 385:
-#line 1999 "parse.y"
+case 390:
+#line 2060 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  if (current_declspecs
@@ -5865,13 +5917,13 @@ case 385:
                  yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 386:
-#line 2016 "parse.y"
+case 391:
+#line 2077 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
-case 387:
-#line 2019 "parse.y"
+case 392:
+#line 2080 "parse.y"
 { tree d;
                  split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
@@ -5890,36 +5942,36 @@ case 387:
                  cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 388:
-#line 2040 "parse.y"
+case 393:
+#line 2101 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 389:
-#line 2044 "parse.y"
+case 394:
+#line 2105 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); ;
     break;}
-case 390:
-#line 2046 "parse.y"
+case 395:
+#line 2107 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 391:
-#line 2053 "parse.y"
+case 396:
+#line 2114 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 392:
-#line 2060 "parse.y"
+case 397:
+#line 2121 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
-case 393:
-#line 2063 "parse.y"
+case 398:
+#line 2124 "parse.y"
 { tree d;
                  split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
@@ -5928,21 +5980,21 @@ case 393:
                  cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 394:
-#line 2074 "parse.y"
+case 399:
+#line 2135 "parse.y"
 { current_declspecs = NULL_TREE;
                  prefix_attributes = NULL_TREE;
                  yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 395:
-#line 2081 "parse.y"
+case 400:
+#line 2142 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
-case 396:
-#line 2084 "parse.y"
+case 401:
+#line 2145 "parse.y"
 { tree d;
                  current_declspecs = NULL_TREE;
                  prefix_attributes = NULL_TREE;
@@ -5951,121 +6003,121 @@ case 396:
                  cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 397:
-#line 2097 "parse.y"
+case 402:
+#line 2158 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 398:
-#line 2099 "parse.y"
+case 403:
+#line 2160 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 399:
-#line 2104 "parse.y"
+case 404:
+#line 2165 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 400:
-#line 2106 "parse.y"
+case 405:
+#line 2167 "parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 401:
-#line 2111 "parse.y"
+case 406:
+#line 2172 "parse.y"
 { yyval.ttype = yyvsp[-2].ttype; ;
     break;}
-case 402:
-#line 2116 "parse.y"
+case 407:
+#line 2177 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 403:
-#line 2118 "parse.y"
+case 408:
+#line 2179 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 404:
-#line 2123 "parse.y"
+case 409:
+#line 2184 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 405:
-#line 2125 "parse.y"
+case 410:
+#line 2186 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 406:
-#line 2127 "parse.y"
+case 411:
+#line 2188 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
     break;}
-case 407:
-#line 2129 "parse.y"
+case 412:
+#line 2190 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
     break;}
-case 408:
-#line 2131 "parse.y"
+case 413:
+#line 2192 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 413:
-#line 2147 "parse.y"
+case 418:
+#line 2208 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 414:
-#line 2149 "parse.y"
+case 419:
+#line 2210 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 415:
-#line 2154 "parse.y"
+case 420:
+#line 2215 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 416:
-#line 2156 "parse.y"
+case 421:
+#line 2217 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 418:
-#line 2164 "parse.y"
+case 423:
+#line 2225 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
-case 419:
-#line 2167 "parse.y"
+case 424:
+#line 2228 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
-case 420:
-#line 2170 "parse.y"
+case 425:
+#line 2231 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
-case 421:
-#line 2173 "parse.y"
+case 426:
+#line 2234 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 422:
-#line 2180 "parse.y"
+case 427:
+#line 2241 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
-case 423:
-#line 2182 "parse.y"
+case 428:
+#line 2243 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 424:
-#line 2185 "parse.y"
+case 429:
+#line 2246 "parse.y"
 { yyval.ttype = build_expr_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 425:
-#line 2187 "parse.y"
+case 430:
+#line 2248 "parse.y"
 { yyval.ttype = expr_tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 426:
-#line 2189 "parse.y"
+case 431:
+#line 2250 "parse.y"
 { yyval.ttype = build_expr_list (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 427:
-#line 2191 "parse.y"
+case 432:
+#line 2252 "parse.y"
 { yyval.ttype = expr_tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 428:
-#line 2196 "parse.y"
+case 433:
+#line 2257 "parse.y"
 { start_function (NULL_TREE, TREE_VALUE (yyvsp[0].ttype),
                                  NULL_TREE, 1);
                  reinit_parse_for_function (); ;
     break;}
-case 429:
-#line 2202 "parse.y"
+case 434:
+#line 2263 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -6073,83 +6125,83 @@ case 429:
                  process_next_inline (yyvsp[-3].ttype);
                ;
     break;}
-case 430:
-#line 2209 "parse.y"
+case 435:
+#line 2270 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
-case 431:
-#line 2211 "parse.y"
+case 436:
+#line 2272 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
-case 434:
-#line 2223 "parse.y"
+case 439:
+#line 2284 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
-case 435:
-#line 2225 "parse.y"
+case 440:
+#line 2286 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, error_mark_node); ;
     break;}
-case 437:
-#line 2230 "parse.y"
+case 442:
+#line 2291 "parse.y"
 { do_pending_defargs (); ;
     break;}
-case 438:
-#line 2232 "parse.y"
+case 443:
+#line 2293 "parse.y"
 { do_pending_defargs (); ;
     break;}
-case 439:
-#line 2237 "parse.y"
+case 444:
+#line 2298 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (yyvsp[-1].ttype); ;
     break;}
-case 440:
-#line 2240 "parse.y"
+case 445:
+#line 2301 "parse.y"
 { yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype);
                  yyval.ftype.new_type_flag = 1;
                  resume_momentary ((int) yyvsp[-4].itype);
                  check_for_missing_semicolon (yyvsp[-3].ttype); ;
     break;}
-case 441:
-#line 2245 "parse.y"
+case 446:
+#line 2306 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (yyvsp[-2].ttype), NULL_TREE);
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
-case 442:
-#line 2249 "parse.y"
+case 447:
+#line 2310 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (make_anon_name ()); ;
     break;}
-case 443:
-#line 2252 "parse.y"
+case 448:
+#line 2313 "parse.y"
 { yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype);
                  resume_momentary ((int) yyvsp[-5].itype);
                  check_for_missing_semicolon (yyvsp[-3].ttype);
                  yyval.ftype.new_type_flag = 1; ;
     break;}
-case 444:
-#line 2257 "parse.y"
+case 449:
+#line 2318 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (make_anon_name()), NULL_TREE);
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
-case 445:
-#line 2261 "parse.y"
+case 450:
+#line 2322 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 446:
-#line 2264 "parse.y"
+case 451:
+#line 2325 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 447:
-#line 2267 "parse.y"
+case 452:
+#line 2328 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype;
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 448:
-#line 2272 "parse.y"
+case 453:
+#line 2333 "parse.y"
 {
                  int semi;
                  tree id;
@@ -6184,16 +6236,16 @@ case 448:
                    do_pending_defargs ();
                ;
     break;}
-case 449:
-#line 2306 "parse.y"
+case 454:
+#line 2367 "parse.y"
 {
                  if (pending_inlines 
                      && current_scope () == current_function_decl)
                    do_pending_inlines ();
                ;
     break;}
-case 450:
-#line 2312 "parse.y"
+case 455:
+#line 2373 "parse.y"
 { 
                  yyval.ftype.t = yyvsp[-3].ttype;
                  yyval.ftype.new_type_flag = 1; 
@@ -6204,8 +6256,8 @@ case 450:
                  end_tree ();
                ;
     break;}
-case 451:
-#line 2322 "parse.y"
+case 456:
+#line 2383 "parse.y"
 {
                  yyval.ftype.t = yyvsp[0].ttype;
                  yyval.ftype.new_type_flag = 0;
@@ -6216,82 +6268,82 @@ case 451:
                              yyval.ftype.t);
                ;
     break;}
-case 455:
-#line 2341 "parse.y"
+case 460:
+#line 2402 "parse.y"
 { if (pedantic && !in_system_header)
                    pedwarn ("comma at end of enumerator list"); ;
     break;}
-case 457:
-#line 2348 "parse.y"
+case 462:
+#line 2409 "parse.y"
 { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 458:
-#line 2350 "parse.y"
+case 463:
+#line 2411 "parse.y"
 { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 459:
-#line 2352 "parse.y"
+case 464:
+#line 2413 "parse.y"
 { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 460:
-#line 2354 "parse.y"
+case 465:
+#line 2415 "parse.y"
 { error ("no body nor ';' separates two class, struct or union declarations"); ;
     break;}
-case 461:
-#line 2359 "parse.y"
+case 466:
+#line 2420 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 462:
-#line 2364 "parse.y"
+case 467:
+#line 2425 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 463:
-#line 2369 "parse.y"
+case 468:
+#line 2430 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 464:
-#line 2374 "parse.y"
+case 469:
+#line 2435 "parse.y"
 {
                  current_aggr = yyvsp[-3].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 465:
-#line 2379 "parse.y"
+case 470:
+#line 2440 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
-case 466:
-#line 2384 "parse.y"
+case 471:
+#line 2445 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 467:
-#line 2386 "parse.y"
+case 472:
+#line 2447 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 468:
-#line 2391 "parse.y"
+case 473:
+#line 2452 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 0); ;
     break;}
-case 469:
-#line 2396 "parse.y"
+case 474:
+#line 2457 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 1); ;
     break;}
-case 470:
-#line 2399 "parse.y"
+case 475:
+#line 2460 "parse.y"
 { 
                  yyval.ttype = yyvsp[-1].ttype;
                  if (yyvsp[0].ttype)
                     xref_basetypes (current_aggr, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); 
                ;
     break;}
-case 471:
-#line 2405 "parse.y"
+case 476:
+#line 2466 "parse.y"
 { 
                  yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
                  if (TREE_INT_CST_LOW (current_aggr) == union_type 
@@ -6318,29 +6370,29 @@ case 471:
                    }
                ;
     break;}
-case 472:
-#line 2434 "parse.y"
+case 477:
+#line 2495 "parse.y"
 { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), NULL_TREE, 0);
                  yyungetc ('{', 1); ;
     break;}
-case 475:
-#line 2445 "parse.y"
+case 480:
+#line 2506 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 476:
-#line 2447 "parse.y"
+case 481:
+#line 2508 "parse.y"
 { yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
     break;}
-case 477:
-#line 2449 "parse.y"
+case 482:
+#line 2510 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 479:
-#line 2455 "parse.y"
+case 484:
+#line 2516 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 480:
-#line 2460 "parse.y"
+case 485:
+#line 2521 "parse.y"
 {
                  tree type = TREE_TYPE (yyvsp[0].ttype);
                  if (! is_aggr_type (type, 1))
@@ -6366,8 +6418,8 @@ case 480:
                    yyval.ttype = build_tree_list (access_default_node, type);
                ;
     break;}
-case 481:
-#line 2485 "parse.y"
+case 486:
+#line 2546 "parse.y"
 {
                  tree type = TREE_TYPE (yyvsp[0].ttype);
                  if (current_aggr == signature_type_node)
@@ -6395,12 +6447,12 @@ case 481:
                    yyval.ttype = build_tree_list (yyval.ttype, type);
                ;
     break;}
-case 482:
-#line 2515 "parse.y"
+case 487:
+#line 2576 "parse.y"
 { yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ;
     break;}
-case 484:
-#line 2518 "parse.y"
+case 489:
+#line 2579 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6422,8 +6474,8 @@ case 484:
                    }
                ;
     break;}
-case 485:
-#line 2539 "parse.y"
+case 490:
+#line 2600 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6445,14 +6497,14 @@ case 485:
                    }
                ;
     break;}
-case 487:
-#line 2564 "parse.y"
+case 492:
+#line 2625 "parse.y"
 { if (yyval.ttype != ridpointers[(int)RID_VIRTUAL])
                    sorry ("non-virtual access");
                  yyval.ttype = access_default_virtual_node; ;
     break;}
-case 488:
-#line 2568 "parse.y"
+case 493:
+#line 2629 "parse.y"
 { int err = 0;
                  if (yyvsp[-1].ttype == access_protected_node)
                    {
@@ -6479,8 +6531,8 @@ case 488:
                    }
                ;
     break;}
-case 489:
-#line 2594 "parse.y"
+case 494:
+#line 2655 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    sorry ("non-virtual access");
                  if (yyval.ttype == access_public_node)
@@ -6488,8 +6540,8 @@ case 489:
                  else if (yyval.ttype == access_private_node)
                    yyval.ttype = access_private_virtual_node; ;
     break;}
-case 490:
-#line 2604 "parse.y"
+case 495:
+#line 2665 "parse.y"
 { tree t = yyvsp[-1].ttype;
                  push_obstacks_nochange ();
                  end_temporary_allocation ();
@@ -6576,18 +6628,18 @@ case 490:
                  begin_tree ();
                ;
     break;}
-case 491:
-#line 2693 "parse.y"
+case 496:
+#line 2754 "parse.y"
 {
                    yyval.ttype = build_self_reference ();
                ;
     break;}
-case 492:
-#line 2700 "parse.y"
+case 497:
+#line 2761 "parse.y"
 { if (yyval.ttype) yyval.ttype = build_tree_list (access_public_node, yyval.ttype); ;
     break;}
-case 493:
-#line 2702 "parse.y"
+case 498:
+#line 2763 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    yyval.ttype = build_tree_list (access_public_node, yyvsp[0].ttype);
@@ -6596,8 +6648,8 @@ case 493:
                  if (yyvsp[-1].ttype) yyval.ttype = tree_cons (access_public_node, yyvsp[-1].ttype, yyval.ttype);
                ;
     break;}
-case 494:
-#line 2710 "parse.y"
+case 499:
+#line 2771 "parse.y"
 {
                  tree visspec = yyvsp[-2].ttype;
 
@@ -6609,20 +6661,20 @@ case 494:
                  yyval.ttype = chainon (yyval.ttype, build_tree_list (visspec, yyvsp[0].ttype));
                ;
     break;}
-case 495:
-#line 2721 "parse.y"
+case 500:
+#line 2782 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    error ("access specifier not allowed in signature");
                ;
     break;}
-case 496:
-#line 2731 "parse.y"
+case 501:
+#line 2792 "parse.y"
 { if (yyval.ttype == void_type_node) yyval.ttype = NULL_TREE; 
                ;
     break;}
-case 497:
-#line 2734 "parse.y"
+case 502:
+#line 2795 "parse.y"
 { /* In pushdecl, we created a reverse list of names
                     in this binding level.  Make sure that the chain
                     of what we're trying to add isn't the item itself
@@ -6636,92 +6688,92 @@ case 497:
                    }
                ;
     break;}
-case 498:
-#line 2750 "parse.y"
+case 503:
+#line 2811 "parse.y"
 { ;
     break;}
-case 499:
-#line 2752 "parse.y"
+case 504:
+#line 2813 "parse.y"
 { error ("missing ';' before right brace");
                  yyungetc ('}', 0); ;
     break;}
-case 500:
-#line 2757 "parse.y"
+case 505:
+#line 2818 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 501:
-#line 2759 "parse.y"
+case 506:
+#line 2820 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 502:
-#line 2761 "parse.y"
+case 507:
+#line 2822 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 503:
-#line 2763 "parse.y"
+case 508:
+#line 2824 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 504:
-#line 2765 "parse.y"
+case 509:
+#line 2826 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 505:
-#line 2767 "parse.y"
+case 510:
+#line 2828 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
-case 506:
-#line 2776 "parse.y"
+case 511:
+#line 2837 "parse.y"
 { yyval.ttype = grok_x_components (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 507:
-#line 2778 "parse.y"
+case 512:
+#line 2839 "parse.y"
 { yyval.ttype = grok_x_components (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 508:
-#line 2780 "parse.y"
+case 513:
+#line 2841 "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 509:
-#line 2783 "parse.y"
+case 514:
+#line 2844 "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 510:
-#line 2786 "parse.y"
+case 515:
+#line 2847 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 511:
-#line 2788 "parse.y"
+case 516:
+#line 2849 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 512:
-#line 2799 "parse.y"
+case 517:
+#line 2860 "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 513:
-#line 2804 "parse.y"
+case 518:
+#line 2865 "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 514:
-#line 2807 "parse.y"
+case 519:
+#line 2868 "parse.y"
 { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
     break;}
-case 515:
-#line 2809 "parse.y"
+case 520:
+#line 2870 "parse.y"
 { yyval.ttype = finish_member_template_decl (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 516:
-#line 2815 "parse.y"
+case 521:
+#line 2876 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 518:
-#line 2818 "parse.y"
+case 523:
+#line 2879 "parse.y"
 {
                  /* In this context, void_type_node encodes
                     friends.  They have been recorded elsewhere.  */
@@ -6731,12 +6783,12 @@ case 518:
                    yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
                ;
     break;}
-case 519:
-#line 2830 "parse.y"
+case 524:
+#line 2891 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 521:
-#line 2833 "parse.y"
+case 526:
+#line 2894 "parse.y"
 {
                  /* In this context, void_type_node encodes
                     friends.  They have been recorded elsewhere.  */
@@ -6746,103 +6798,103 @@ case 521:
                    yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
                ;
     break;}
-case 526:
-#line 2855 "parse.y"
+case 531:
+#line 2916 "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 527:
-#line 2861 "parse.y"
+case 532:
+#line 2922 "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 528:
-#line 2870 "parse.y"
+case 533:
+#line 2931 "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 529:
-#line 2876 "parse.y"
+case 534:
+#line 2937 "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 530:
-#line 2882 "parse.y"
+case 535:
+#line 2943 "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 531:
-#line 2888 "parse.y"
+case 536:
+#line 2949 "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 532:
-#line 2897 "parse.y"
+case 537:
+#line 2958 "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 533:
-#line 2900 "parse.y"
+case 538:
+#line 2961 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 534:
-#line 2906 "parse.y"
+case 539:
+#line 2967 "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 535:
-#line 2909 "parse.y"
+case 540:
+#line 2970 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 536:
-#line 2912 "parse.y"
+case 541:
+#line 2973 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 538:
-#line 2923 "parse.y"
+case 543:
+#line 2984 "parse.y"
 { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 539:
-#line 2928 "parse.y"
+case 544:
+#line 2989 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE); ;
     break;}
-case 540:
-#line 2930 "parse.y"
+case 545:
+#line 2991 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 541:
-#line 2936 "parse.y"
+case 546:
+#line 2997 "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 542:
-#line 2939 "parse.y"
+case 547:
+#line 3000 "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 543:
-#line 2944 "parse.y"
+case 548:
+#line 3005 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
@@ -6851,76 +6903,79 @@ case 543:
                  yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag;
                ;
     break;}
-case 544:
-#line 2955 "parse.y"
+case 549:
+#line 3016 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 545:
-#line 2957 "parse.y"
+case 550:
+#line 3018 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 546:
-#line 2962 "parse.y"
+case 551:
+#line 3023 "parse.y"
 { yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 547:
-#line 2965 "parse.y"
+case 552:
+#line 3026 "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 548:
-#line 2974 "parse.y"
+case 553:
+#line 3035 "parse.y"
 { yyval.itype = suspend_momentary (); ;
     break;}
-case 549:
-#line 2979 "parse.y"
+case 554:
+#line 3040 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 550:
-#line 2985 "parse.y"
+case 555:
+#line 3046 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 551:
-#line 2987 "parse.y"
+case 556:
+#line 3048 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 552:
-#line 2989 "parse.y"
+case 557:
+#line 3050 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
     break;}
-case 553:
-#line 2991 "parse.y"
+case 558:
+#line 3052 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
     break;}
-case 554:
-#line 2998 "parse.y"
+case 559:
+#line 3059 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 555:
-#line 3000 "parse.y"
+case 560:
+#line 3061 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 556:
-#line 3002 "parse.y"
+case 561:
+#line 3063 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 557:
-#line 3004 "parse.y"
+case 562:
+#line 3065 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 558:
-#line 3006 "parse.y"
+case 563:
+#line 3067 "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 560:
-#line 3014 "parse.y"
+case 565:
+#line 3075 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    {
+                     arg_looking_for_template = processing_template_arg;
                      yyval.ttype = lookup_name (yyvsp[0].ttype, 1);
+                     arg_looking_for_template = 0;
+
                      if (current_class_type
                          && TYPE_BEING_DEFINED (current_class_type)
                          && ! IDENTIFIER_CLASS_VALUE (yyvsp[0].ttype))
@@ -6934,8 +6989,8 @@ case 560:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 561:
-#line 3031 "parse.y"
+case 566:
+#line 3095 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -6944,98 +6999,98 @@ case 561:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 564:
-#line 3044 "parse.y"
+case 569:
+#line 3108 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 565:
-#line 3049 "parse.y"
+case 570:
+#line 3113 "parse.y"
 { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
     break;}
-case 566:
-#line 3054 "parse.y"
+case 571:
+#line 3118 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 567:
-#line 3056 "parse.y"
+case 572:
+#line 3120 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 568:
-#line 3058 "parse.y"
+case 573:
+#line 3122 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 569:
-#line 3060 "parse.y"
+case 574:
+#line 3124 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 570:
-#line 3062 "parse.y"
+case 575:
+#line 3126 "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 572:
-#line 3073 "parse.y"
+case 577:
+#line 3137 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 573:
-#line 3075 "parse.y"
+case 578:
+#line 3139 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 574:
-#line 3077 "parse.y"
+case 579:
+#line 3141 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 575:
-#line 3079 "parse.y"
+case 580:
+#line 3143 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 576:
-#line 3081 "parse.y"
+case 581:
+#line 3145 "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 578:
-#line 3089 "parse.y"
+case 583:
+#line 3153 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 579:
-#line 3091 "parse.y"
+case 584:
+#line 3155 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 580:
-#line 3093 "parse.y"
+case 585:
+#line 3157 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 581:
-#line 3095 "parse.y"
+case 586:
+#line 3159 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 582:
-#line 3097 "parse.y"
+case 587:
+#line 3161 "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 584:
-#line 3105 "parse.y"
+case 589:
+#line 3169 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 585:
-#line 3107 "parse.y"
+case 590:
+#line 3171 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 586:
-#line 3109 "parse.y"
+case 591:
+#line 3173 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 587:
-#line 3111 "parse.y"
+case 592:
+#line 3175 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 588:
-#line 3113 "parse.y"
+case 593:
+#line 3177 "parse.y"
 { if (OP0 (yyval.ttype) != current_class_type)
                    {
                      push_nested_class (OP0 (yyval.ttype), 3);
@@ -7043,8 +7098,8 @@ case 588:
                    }
                ;
     break;}
-case 589:
-#line 3120 "parse.y"
+case 594:
+#line 3184 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype);
                  if (yyvsp[-1].ttype != current_class_type)
@@ -7054,48 +7109,48 @@ case 589:
                    }
                ;
     break;}
-case 590:
-#line 3132 "parse.y"
+case 595:
+#line 3196 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 591:
-#line 3135 "parse.y"
+case 596:
+#line 3199 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 592:
-#line 3141 "parse.y"
+case 597:
+#line 3205 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 593:
-#line 3144 "parse.y"
+case 598:
+#line 3208 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 595:
-#line 3151 "parse.y"
+case 600:
+#line 3215 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 596:
-#line 3156 "parse.y"
+case 601:
+#line 3220 "parse.y"
 { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 597:
-#line 3158 "parse.y"
+case 602:
+#line 3222 "parse.y"
 { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 598:
-#line 3160 "parse.y"
+case 603:
+#line 3224 "parse.y"
 { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 603:
-#line 3172 "parse.y"
+case 608:
+#line 3236 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 604:
-#line 3179 "parse.y"
+case 609:
+#line 3243 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    {
@@ -7110,32 +7165,32 @@ case 604:
                  got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 605:
-#line 3193 "parse.y"
+case 610:
+#line 3257 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 606:
-#line 3199 "parse.y"
+case 611:
+#line 3263 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 607:
-#line 3205 "parse.y"
+case 612:
+#line 3269 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
     break;}
-case 609:
-#line 3221 "parse.y"
+case 614:
+#line 3285 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 610:
-#line 3226 "parse.y"
+case 615:
+#line 3290 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -7145,15 +7200,15 @@ case 610:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 611:
-#line 3238 "parse.y"
+case 616:
+#line 3302 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
                ;
     break;}
-case 612:
-#line 3243 "parse.y"
+case 617:
+#line 3307 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -7163,36 +7218,36 @@ case 612:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 613:
-#line 3255 "parse.y"
+case 618:
+#line 3319 "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 614:
-#line 3261 "parse.y"
+case 619:
+#line 3325 "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 615:
-#line 3267 "parse.y"
+case 620:
+#line 3331 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
     break;}
-case 618:
-#line 3271 "parse.y"
+case 623:
+#line 3335 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 619:
-#line 3280 "parse.y"
+case 624:
+#line 3344 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -7201,157 +7256,157 @@ case 619:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 621:
-#line 3289 "parse.y"
+case 626:
+#line 3353 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 622:
-#line 3294 "parse.y"
+case 627:
+#line 3358 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 623:
-#line 3296 "parse.y"
+case 628:
+#line 3360 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
     break;}
-case 624:
-#line 3303 "parse.y"
+case 629:
+#line 3367 "parse.y"
 { got_scope = void_type_node; ;
     break;}
-case 625:
-#line 3309 "parse.y"
+case 630:
+#line 3373 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 626:
-#line 3311 "parse.y"
+case 631:
+#line 3375 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 627:
-#line 3313 "parse.y"
+case 632:
+#line 3377 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 628:
-#line 3315 "parse.y"
+case 633:
+#line 3379 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 629:
-#line 3317 "parse.y"
+case 634:
+#line 3381 "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 630:
-#line 3321 "parse.y"
+case 635:
+#line 3385 "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 632:
-#line 3330 "parse.y"
+case 637:
+#line 3394 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 633:
-#line 3332 "parse.y"
+case 638:
+#line 3396 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 634:
-#line 3338 "parse.y"
+case 639:
+#line 3402 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 635:
-#line 3340 "parse.y"
+case 640:
+#line 3404 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 636:
-#line 3342 "parse.y"
+case 641:
+#line 3406 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 637:
-#line 3344 "parse.y"
+case 642:
+#line 3408 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 638:
-#line 3346 "parse.y"
+case 643:
+#line 3410 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 639:
-#line 3348 "parse.y"
+case 644:
+#line 3412 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 640:
-#line 3350 "parse.y"
+case 645:
+#line 3414 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 641:
-#line 3352 "parse.y"
+case 646:
+#line 3416 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 642:
-#line 3354 "parse.y"
+case 647:
+#line 3418 "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 643:
-#line 3358 "parse.y"
+case 648:
+#line 3422 "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 645:
-#line 3367 "parse.y"
+case 650:
+#line 3431 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 647:
-#line 3371 "parse.y"
+case 652:
+#line 3435 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 648:
-#line 3373 "parse.y"
+case 653:
+#line 3437 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 649:
-#line 3375 "parse.y"
+case 654:
+#line 3439 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 650:
-#line 3377 "parse.y"
+case 655:
+#line 3441 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 651:
-#line 3379 "parse.y"
+case 656:
+#line 3443 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 652:
-#line 3381 "parse.y"
+case 657:
+#line 3445 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 653:
-#line 3383 "parse.y"
+case 658:
+#line 3447 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 654:
-#line 3385 "parse.y"
+case 659:
+#line 3449 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 655:
-#line 3387 "parse.y"
+case 660:
+#line 3451 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
-case 661:
-#line 3411 "parse.y"
+case 666:
+#line 3475 "parse.y"
 { do_pushlevel (); ;
     break;}
-case 662:
-#line 3416 "parse.y"
+case 667:
+#line 3480 "parse.y"
 { yyval.ttype = do_poplevel (); ;
     break;}
-case 664:
-#line 3424 "parse.y"
+case 669:
+#line 3488 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids label declarations"); ;
     break;}
-case 667:
-#line 3435 "parse.y"
+case 672:
+#line 3499 "parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -7361,12 +7416,12 @@ case 667:
                    }
                ;
     break;}
-case 668:
-#line 3449 "parse.y"
+case 673:
+#line 3513 "parse.y"
 {;
     break;}
-case 670:
-#line 3455 "parse.y"
+case 675:
+#line 3519 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7375,8 +7430,8 @@ case 670:
                    }
                ;
     break;}
-case 671:
-#line 3463 "parse.y"
+case 676:
+#line 3527 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7387,8 +7442,8 @@ case 671:
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 672:
-#line 3476 "parse.y"
+case 677:
+#line 3540 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7399,8 +7454,8 @@ case 672:
                   cond_stmt_keyword = "if";
                ;
     break;}
-case 673:
-#line 3486 "parse.y"
+case 678:
+#line 3550 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7420,8 +7475,8 @@ case 673:
                    }
                ;
     break;}
-case 674:
-#line 3505 "parse.y"
+case 679:
+#line 3569 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7431,12 +7486,12 @@ case 674:
                    }
                ;
     break;}
-case 675:
-#line 3517 "parse.y"
+case 680:
+#line 3581 "parse.y"
 { finish_stmt (); ;
     break;}
-case 676:
-#line 3519 "parse.y"
+case 681:
+#line 3583 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7445,8 +7500,8 @@ case 676:
                    }
                ;
     break;}
-case 677:
-#line 3527 "parse.y"
+case 682:
+#line 3591 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7457,16 +7512,16 @@ case 677:
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 678:
-#line 3540 "parse.y"
+case 683:
+#line 3604 "parse.y"
 { finish_stmt (); ;
     break;}
-case 680:
-#line 3546 "parse.y"
+case 685:
+#line 3610 "parse.y"
 { finish_stmt (); ;
     break;}
-case 681:
-#line 3548 "parse.y"
+case 686:
+#line 3612 "parse.y"
 {
                  tree expr = yyvsp[-1].ttype;
                  if (! processing_template_decl)
@@ -7483,12 +7538,12 @@ case 681:
                  clear_momentary ();
                  finish_stmt (); ;
     break;}
-case 682:
-#line 3564 "parse.y"
+case 687:
+#line 3628 "parse.y"
 { if (! processing_template_decl) expand_start_else (); ;
     break;}
-case 683:
-#line 3566 "parse.y"
+case 688:
+#line 3630 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7500,18 +7555,18 @@ case 683:
                    expand_end_cond ();
                ;
     break;}
-case 684:
-#line 3577 "parse.y"
+case 689:
+#line 3641 "parse.y"
 { finish_stmt (); ;
     break;}
-case 685:
-#line 3579 "parse.y"
+case 690:
+#line 3643 "parse.y"
 { if (! processing_template_decl) expand_end_cond ();
                  do_poplevel ();
                  finish_stmt (); ;
     break;}
-case 686:
-#line 3583 "parse.y"
+case 691:
+#line 3647 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7527,8 +7582,8 @@ case 686:
                  cond_stmt_keyword = "while";
                ;
     break;}
-case 687:
-#line 3598 "parse.y"
+case 692:
+#line 3662 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7548,8 +7603,8 @@ case 687:
                    }
                ;
     break;}
-case 688:
-#line 3617 "parse.y"
+case 693:
+#line 3681 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7562,8 +7617,8 @@ case 688:
                  finish_stmt ();
                ;
     break;}
-case 689:
-#line 3629 "parse.y"
+case 694:
+#line 3693 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7578,8 +7633,8 @@ case 689:
                    }
                ;
     break;}
-case 690:
-#line 3643 "parse.y"
+case 695:
+#line 3707 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7594,8 +7649,8 @@ case 690:
                    }
                ;
     break;}
-case 691:
-#line 3657 "parse.y"
+case 696:
+#line 3721 "parse.y"
 {
                  if (processing_template_decl)
                    TREE_OPERAND (yyvsp[-5].ttype, 1) = yyvsp[-1].ttype;
@@ -7609,8 +7664,8 @@ case 691:
                  finish_stmt ();
                ;
     break;}
-case 692:
-#line 3670 "parse.y"
+case 697:
+#line 3734 "parse.y"
 { if (processing_template_decl)
                    {
                      yyval.ttype = build_min_nt (FOR_STMT, NULL_TREE, NULL_TREE, 
@@ -7630,8 +7685,8 @@ case 692:
                    }
                ;
     break;}
-case 693:
-#line 3689 "parse.y"
+case 698:
+#line 3753 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7650,8 +7705,8 @@ case 693:
                    }
                ;
     break;}
-case 694:
-#line 3707 "parse.y"
+case 699:
+#line 3771 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7671,16 +7726,16 @@ case 694:
                    }
                ;
     break;}
-case 695:
-#line 3728 "parse.y"
+case 700:
+#line 3792 "parse.y"
 {
                  if (processing_template_decl)
                    TREE_OPERAND (yyvsp[-9].ttype, 2) = yyvsp[-1].ttype;
                  push_momentary ();
                ;
     break;}
-case 696:
-#line 3734 "parse.y"
+case 701:
+#line 3798 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7702,8 +7757,8 @@ case 696:
                    }
                  finish_stmt (); ;
     break;}
-case 697:
-#line 3755 "parse.y"
+case 702:
+#line 3819 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7721,8 +7776,8 @@ case 697:
                  push_momentary ();
                ;
     break;}
-case 698:
-#line 3772 "parse.y"
+case 703:
+#line 3836 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7736,60 +7791,60 @@ case 698:
                  pop_switch (); 
                ;
     break;}
-case 699:
-#line 3785 "parse.y"
+case 704:
+#line 3849 "parse.y"
 { finish_stmt (); ;
     break;}
-case 700:
-#line 3787 "parse.y"
+case 705:
+#line 3851 "parse.y"
 { do_case (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
-case 702:
-#line 3790 "parse.y"
+case 707:
+#line 3854 "parse.y"
 { do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 704:
-#line 3793 "parse.y"
+case 709:
+#line 3857 "parse.y"
 { do_case (NULL_TREE, NULL_TREE); ;
     break;}
-case 706:
-#line 3796 "parse.y"
+case 711:
+#line 3860 "parse.y"
 { emit_line_note (input_filename, lineno);
                  if (processing_template_decl)
                    add_tree (build_min_nt (BREAK_STMT));
                  else if ( ! expand_exit_something ())
                    error ("break statement not within loop or switch"); ;
     break;}
-case 707:
-#line 3802 "parse.y"
+case 712:
+#line 3866 "parse.y"
 { emit_line_note (input_filename, lineno);
                  if (processing_template_decl)
                    add_tree (build_min_nt (CONTINUE_STMT));
                  else if (! expand_continue_loop (0))
                    error ("continue statement not within a loop"); ;
     break;}
-case 708:
-#line 3808 "parse.y"
+case 713:
+#line 3872 "parse.y"
 { emit_line_note (input_filename, lineno);
                  c_expand_return (NULL_TREE); ;
     break;}
-case 709:
-#line 3811 "parse.y"
+case 714:
+#line 3875 "parse.y"
 { emit_line_note (input_filename, lineno);
                  c_expand_return (yyvsp[-1].ttype);
                  finish_stmt ();
                ;
     break;}
-case 710:
-#line 3816 "parse.y"
+case 715:
+#line 3880 "parse.y"
 { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
                  emit_line_note (input_filename, lineno);
                  expand_asm (yyvsp[-2].ttype);
                  finish_stmt ();
                ;
     break;}
-case 711:
-#line 3823 "parse.y"
+case 716:
+#line 3887 "parse.y"
 { if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype);
                  emit_line_note (input_filename, lineno);
                  c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
@@ -7798,8 +7853,8 @@ case 711:
                  finish_stmt ();
                ;
     break;}
-case 712:
-#line 3832 "parse.y"
+case 717:
+#line 3896 "parse.y"
 { if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype);
                  emit_line_note (input_filename, lineno);
                  c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
@@ -7808,8 +7863,8 @@ case 712:
                  finish_stmt ();
                ;
     break;}
-case 713:
-#line 3842 "parse.y"
+case 718:
+#line 3906 "parse.y"
 { if (TREE_CHAIN (yyvsp[-8].ttype)) yyvsp[-8].ttype = combine_strings (yyvsp[-8].ttype);
                  emit_line_note (input_filename, lineno);
                  c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
@@ -7818,8 +7873,8 @@ case 713:
                  finish_stmt ();
                ;
     break;}
-case 714:
-#line 3850 "parse.y"
+case 719:
+#line 3914 "parse.y"
 {
                  if (processing_template_decl)
                    add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
@@ -7828,8 +7883,8 @@ case 714:
                      expand_computed_goto (yyvsp[-1].ttype); }
                ;
     break;}
-case 715:
-#line 3858 "parse.y"
+case 720:
+#line 3922 "parse.y"
 {
                  if (processing_template_decl)
                    add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
@@ -7843,34 +7898,34 @@ case 715:
                    }
                ;
     break;}
-case 716:
-#line 3871 "parse.y"
+case 721:
+#line 3935 "parse.y"
 { finish_stmt (); ;
     break;}
-case 717:
-#line 3873 "parse.y"
+case 722:
+#line 3937 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
-case 718:
-#line 3877 "parse.y"
+case 723:
+#line 3941 "parse.y"
 { finish_stmt (); ;
     break;}
-case 720:
-#line 3883 "parse.y"
+case 725:
+#line 3947 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
                  expand_start_early_try_stmts ();
                ;
     break;}
-case 721:
-#line 3889 "parse.y"
+case 726:
+#line 3953 "parse.y"
 { expand_start_all_catch (); ;
     break;}
-case 722:
-#line 3891 "parse.y"
+case 727:
+#line 3955 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -7878,8 +7933,8 @@ case 722:
                  finish_function (lineno, (int)yyvsp[-3].itype, nested);
                ;
     break;}
-case 723:
-#line 3901 "parse.y"
+case 728:
+#line 3965 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7894,8 +7949,8 @@ case 723:
                    }
                ;
     break;}
-case 724:
-#line 3915 "parse.y"
+case 729:
+#line 3979 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7907,8 +7962,8 @@ case 724:
                    expand_start_all_catch ();
                ;
     break;}
-case 725:
-#line 3926 "parse.y"
+case 730:
+#line 3990 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7920,8 +7975,8 @@ case 725:
                    expand_end_all_catch ();
                ;
     break;}
-case 728:
-#line 3945 "parse.y"
+case 733:
+#line 4009 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7931,8 +7986,8 @@ case 728:
                    }
                ;
     break;}
-case 729:
-#line 3954 "parse.y"
+case 734:
+#line 4018 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7942,8 +7997,8 @@ case 729:
                    }
                ;
     break;}
-case 730:
-#line 3963 "parse.y"
+case 735:
+#line 4027 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7955,18 +8010,18 @@ case 730:
                    expand_end_catch_block ();
                ;
     break;}
-case 734:
-#line 3983 "parse.y"
+case 739:
+#line 4047 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
-case 735:
-#line 3999 "parse.y"
+case 740:
+#line 4063 "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 736:
-#line 4006 "parse.y"
+case 741:
+#line 4070 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7974,130 +8029,130 @@ case 736:
                    expand_label (label);
                ;
     break;}
-case 737:
-#line 4013 "parse.y"
+case 742:
+#line 4077 "parse.y"
 { goto do_label; ;
     break;}
-case 738:
-#line 4015 "parse.y"
+case 743:
+#line 4079 "parse.y"
 { goto do_label; ;
     break;}
-case 739:
-#line 4017 "parse.y"
+case 744:
+#line 4081 "parse.y"
 { goto do_label; ;
     break;}
-case 740:
-#line 4022 "parse.y"
+case 745:
+#line 4086 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 742:
-#line 4025 "parse.y"
+case 747:
+#line 4089 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
-case 743:
-#line 4034 "parse.y"
+case 748:
+#line 4098 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 744:
-#line 4037 "parse.y"
+case 749:
+#line 4101 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
-case 745:
-#line 4042 "parse.y"
+case 750:
+#line 4106 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 747:
-#line 4045 "parse.y"
+case 752:
+#line 4109 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 748:
-#line 4052 "parse.y"
+case 753:
+#line 4116 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 751:
-#line 4059 "parse.y"
+case 756:
+#line 4123 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 752:
-#line 4064 "parse.y"
+case 757:
+#line 4128 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 753:
-#line 4069 "parse.y"
+case 758:
+#line 4133 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
-case 754:
-#line 4071 "parse.y"
+case 759:
+#line 4135 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 755:
-#line 4082 "parse.y"
+case 760:
+#line 4146 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
-case 757:
-#line 4087 "parse.y"
+case 762:
+#line 4151 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, void_list_node);
                  TREE_PARMLIST (yyval.ttype) = 1; 
                  check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
     break;}
-case 758:
-#line 4096 "parse.y"
+case 763:
+#line 4160 "parse.y"
 {
                  yyval.ttype = chainon (yyval.ttype, void_list_node);
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 759:
-#line 4101 "parse.y"
+case 764:
+#line 4165 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 760:
-#line 4106 "parse.y"
+case 765:
+#line 4170 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 761:
-#line 4110 "parse.y"
+case 766:
+#line 4174 "parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); 
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 762:
-#line 4115 "parse.y"
+case 767:
+#line 4179 "parse.y"
 {
                  yyval.ttype = NULL_TREE;
                ;
     break;}
-case 763:
-#line 4119 "parse.y"
+case 768:
+#line 4183 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 764:
-#line 4123 "parse.y"
+case 769:
+#line 4187 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 765:
-#line 4127 "parse.y"
+case 770:
+#line 4191 "parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t);
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 766:
-#line 4132 "parse.y"
+case 771:
+#line 4196 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -8109,8 +8164,8 @@ case 766:
                  yychar = ')';
                ;
     break;}
-case 767:
-#line 4143 "parse.y"
+case 772:
+#line 4207 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -8122,290 +8177,291 @@ case 767:
                  yychar = ')';
                ;
     break;}
-case 768:
-#line 4158 "parse.y"
+case 773:
+#line 4222 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
-case 769:
-#line 4160 "parse.y"
+case 774:
+#line 4224 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 772:
-#line 4171 "parse.y"
+case 777:
+#line 4235 "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 773:
-#line 4174 "parse.y"
+case 778:
+#line 4238 "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 774:
-#line 4177 "parse.y"
+case 779:
+#line 4241 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
-case 775:
-#line 4180 "parse.y"
+case 780:
+#line 4244 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 776:
-#line 4182 "parse.y"
+case 781:
+#line 4246 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
-case 778:
-#line 4188 "parse.y"
+case 783:
+#line 4252 "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 779:
-#line 4198 "parse.y"
+case 784:
+#line 4262 "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 780:
-#line 4202 "parse.y"
+case 785:
+#line 4266 "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 781:
-#line 4205 "parse.y"
+case 786:
+#line 4269 "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 782:
-#line 4208 "parse.y"
+case 787:
+#line 4272 "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 783:
-#line 4212 "parse.y"
+case 788:
+#line 4276 "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 784:
-#line 4216 "parse.y"
+case 789:
+#line 4280 "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 785:
-#line 4223 "parse.y"
+case 790:
+#line 4287 "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 786:
-#line 4226 "parse.y"
+case 791:
+#line 4290 "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 789:
-#line 4237 "parse.y"
+case 794:
+#line 4301 "parse.y"
 { see_typename (); ;
     break;}
-case 790:
-#line 4242 "parse.y"
+case 795:
+#line 4306 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
-case 791:
-#line 4247 "parse.y"
+case 796:
+#line 4311 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
-                     && TREE_CODE (TREE_OPERAND (yyval.ttype, 0)) == TEMPLATE_TYPE_PARM)
+                     && (TREE_CODE (TREE_OPERAND (yyval.ttype, 0)) == TEMPLATE_TYPE_PARM
+                         || TREE_CODE (TREE_OPERAND (yyval.ttype, 0)) == TEMPLATE_TEMPLATE_PARM))
                    cp_error ("  perhaps you want `typename %E' to make it a type", yyval.ttype);
                  yyval.ttype = build_tree_list (integer_type_node, yyval.ttype);
                ;
     break;}
-case 792:
-#line 4258 "parse.y"
+case 797:
+#line 4323 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 793:
-#line 4260 "parse.y"
+case 798:
+#line 4325 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 794:
-#line 4262 "parse.y"
+case 799:
+#line 4327 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
-case 795:
-#line 4267 "parse.y"
+case 800:
+#line 4332 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
-case 797:
-#line 4273 "parse.y"
+case 802:
+#line 4338 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 798:
-#line 4281 "parse.y"
+case 803:
+#line 4346 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 799:
-#line 4283 "parse.y"
+case 804:
+#line 4348 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 800:
-#line 4285 "parse.y"
+case 805:
+#line 4350 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 801:
-#line 4287 "parse.y"
+case 806:
+#line 4352 "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 802:
-#line 4294 "parse.y"
+case 807:
+#line 4359 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 803:
-#line 4299 "parse.y"
+case 808:
+#line 4364 "parse.y"
 { yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
-case 804:
-#line 4301 "parse.y"
+case 809:
+#line 4366 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
-case 805:
-#line 4303 "parse.y"
+case 810:
+#line 4368 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
-case 806:
-#line 4305 "parse.y"
+case 811:
+#line 4370 "parse.y"
 { yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
-case 807:
-#line 4307 "parse.y"
+case 812:
+#line 4372 "parse.y"
 { yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
-case 808:
-#line 4309 "parse.y"
+case 813:
+#line 4374 "parse.y"
 { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
-case 809:
-#line 4311 "parse.y"
+case 814:
+#line 4376 "parse.y"
 { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
-case 810:
-#line 4313 "parse.y"
+case 815:
+#line 4378 "parse.y"
 { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
-case 811:
-#line 4315 "parse.y"
+case 816:
+#line 4380 "parse.y"
 { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
-case 812:
-#line 4317 "parse.y"
+case 817:
+#line 4382 "parse.y"
 { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
-case 813:
-#line 4319 "parse.y"
+case 818:
+#line 4384 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 814:
-#line 4321 "parse.y"
+case 819:
+#line 4386 "parse.y"
 { yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
-case 815:
-#line 4323 "parse.y"
+case 820:
+#line 4388 "parse.y"
 { yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
-case 816:
-#line 4325 "parse.y"
+case 821:
+#line 4390 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 817:
-#line 4327 "parse.y"
+case 822:
+#line 4392 "parse.y"
 { yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
-case 818:
-#line 4329 "parse.y"
+case 823:
+#line 4394 "parse.y"
 { yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
-case 819:
-#line 4331 "parse.y"
+case 824:
+#line 4396 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 820:
-#line 4333 "parse.y"
+case 825:
+#line 4398 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 821:
-#line 4335 "parse.y"
+case 826:
+#line 4400 "parse.y"
 { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
-case 822:
-#line 4337 "parse.y"
+case 827:
+#line 4402 "parse.y"
 { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
-case 823:
-#line 4339 "parse.y"
+case 828:
+#line 4404 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
-case 824:
-#line 4341 "parse.y"
+case 829:
+#line 4406 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
-case 825:
-#line 4343 "parse.y"
+case 830:
+#line 4408 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
-case 826:
-#line 4345 "parse.y"
+case 831:
+#line 4410 "parse.y"
 { yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
-case 827:
-#line 4347 "parse.y"
+case 832:
+#line 4412 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 828:
-#line 4349 "parse.y"
+case 833:
+#line 4414 "parse.y"
 { yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
-case 829:
-#line 4351 "parse.y"
+case 834:
+#line 4416 "parse.y"
 { yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
-case 830:
-#line 4353 "parse.y"
+case 835:
+#line 4418 "parse.y"
 { yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
-case 831:
-#line 4355 "parse.y"
+case 836:
+#line 4420 "parse.y"
 { yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
-case 832:
-#line 4357 "parse.y"
+case 837:
+#line 4422 "parse.y"
 { yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
-case 833:
-#line 4359 "parse.y"
+case 838:
+#line 4424 "parse.y"
 { yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
-case 834:
-#line 4361 "parse.y"
+case 839:
+#line 4426 "parse.y"
 { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
-case 835:
-#line 4363 "parse.y"
+case 840:
+#line 4428 "parse.y"
 { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
-case 836:
-#line 4366 "parse.y"
+case 841:
+#line 4431 "parse.y"
 { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 837:
-#line 4368 "parse.y"
+case 842:
+#line 4433 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
@@ -8606,7 +8662,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 4371 "parse.y"
+#line 4436 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index 054479edc705d86a62bd3c74241e6ef9c2385ca5..754dbefc6aaf38bb5c67c89c4e6a7681e668a6fd 100644 (file)
@@ -71,6 +71,12 @@ extern tree strip_attrs              PROTO((tree));
    error message if the user supplies an empty conditional expression.  */
 static char *cond_stmt_keyword;
 
+/* If nonzero, we try to treat TEMPLATE_DECL as argument in template
+   template parameter. */
+static int processing_template_arg;
+
+extern int arg_looking_for_template;
+
 static tree empty_parms PROTO((void));
 static tree finish_member_template_decl PROTO((tree, tree));
 
@@ -222,7 +228,7 @@ finish_member_template_decl (template_arguments, decl)
 %type <code> unop
 
 %type <ttype> identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist
-%type <ttype> PFUNCNAME
+%type <ttype> PFUNCNAME maybe_identifier
 %type <ttype> paren_expr_or_null nontrivial_exprlist SELFNAME
 %type <ttype> expr_no_commas cast_expr unary_expr primary string STRING
 %type <ttype> reserved_declspecs boolean.literal
@@ -284,9 +290,10 @@ finish_member_template_decl (template_arguments, decl)
 %type <ttype> nonmomentary_expr maybe_parmlist
 %type <itype> initdcl0 notype_initdcl0 member_init_list
 %type <ttype> template_header template_parm_list template_parm
-%type <ttype> template_type_parm
+%type <ttype> template_type_parm template_template_parm
 %type <code>  template_close_bracket
-%type <ttype> template_type template_arg_list template_arg_list_opt template_arg
+%type <ttype> template_type template_arg_list template_arg_list_opt
+%type <ttype> template_arg template_arg1
 %type <ttype> condition xcond paren_cond_or_null
 %type <ttype> type_name nested_name_specifier nested_type ptr_to_mem
 %type <ttype> complete_type_name notype_identifier nonnested_type
@@ -473,11 +480,16 @@ template_parm_list:
                { $$ = process_template_parm ($1, $3); }
        ;
 
+maybe_identifier:
+         identifier
+               { $$ = $1; }
+       |       /* empty */
+               { $$ = NULL_TREE; }
+
 template_type_parm:
-         aggr
+         aggr maybe_identifier
                { 
-                 $$ = build_tree_list ($1, NULL_TREE);
-                ttpa:
+                 $$ = build_tree_list ($1, $2);
                  if (TREE_PURPOSE ($$) == signature_type_node)
                    sorry ("signature as template type parameter");
                  else if (TREE_PURPOSE ($$) != class_type_node)
@@ -486,14 +498,28 @@ template_type_parm:
                      TREE_PURPOSE ($$) = class_type_node;
                    }
                }
-       | aggr identifier
-               { $$ = build_tree_list ($1, $2); goto ttpa; }
-       | TYPENAME_KEYWORD
-               { $$ = build_tree_list (class_type_node, NULL_TREE); }
-       | TYPENAME_KEYWORD identifier
+       | TYPENAME_KEYWORD maybe_identifier
                { $$ = build_tree_list (class_type_node, $2); }
        ;
 
+template_template_parm:
+         template_header aggr maybe_identifier
+               {
+                 tree decl = build_decl (TYPE_DECL, $3, NULL_TREE);
+                 tree tmpl = build_lang_decl (TEMPLATE_DECL, $3, NULL_TREE);
+                 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
+                 DECL_TEMPLATE_RESULT (tmpl) = decl;
+                 SET_DECL_ARTIFICIAL (decl);
+                 end_template_decl ();
+
+                 if ($2 == signature_type_node)
+                   sorry ("signature as template template parameter");
+                 else if ($2 != class_type_node)
+                   pedwarn ("template template parameters must use the keyword `class'");
+                 $$ = build_tree_list (class_type_node, tmpl);
+               }
+       ;
+
 template_parm:
        /* The following rules introduce a new reduce/reduce
           conflict on the ',' and '>' input tokens: they are valid
@@ -510,6 +536,21 @@ template_parm:
                { $$ = build_tree_list (NULL_TREE, $1.t); }
        | parm '=' expr_no_commas  %prec ARITHCOMPARE
                { $$ = build_tree_list ($3, $1.t); }
+       | template_template_parm
+               { $$ = build_tree_list (NULL_TREE, $1); }
+       | template_template_parm '=' PTYPENAME
+               {
+                 tree defarg;
+                 arg_looking_for_template = 1;
+                 defarg = lookup_name ($3, 0);
+                 arg_looking_for_template = 0;
+                       
+                 if (!defarg || defarg == error_mark_node
+                     || (TREE_CODE (defarg) != TEMPLATE_DECL
+                         && TREE_CODE (defarg) != TEMPLATE_TEMPLATE_PARM))
+                   defarg = do_identifier ($3, 1);
+                 $$ = build_tree_list (defarg, $1);
+               }
        ;
 
 template_def:
@@ -945,6 +986,12 @@ template_arg_list:
        ;
 
 template_arg:
+               { processing_template_arg = 1; }
+         template_arg1
+               { $$ = $2;
+                 processing_template_arg = 0; }
+
+template_arg1:
          type_id
                { $$ = groktypename ($1.t); }
        | expr_no_commas  %prec ARITHCOMPARE
@@ -1360,7 +1407,21 @@ primary:
                  if (TREE_CODE ($$) == BIT_NOT_EXPR)
                    $$ = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND ($$, 0));
                  else if (TREE_CODE ($$) != TEMPLATE_ID_EXPR)
-                   $$ = do_identifier ($$, 1);
+                   if (processing_template_arg)
+                     {
+                       tree id;
+                       arg_looking_for_template = processing_template_arg;
+                       id = lookup_name ($$, 0);
+                       arg_looking_for_template = 0;
+                       
+                       if (!id || id == error_mark_node
+                           || (TREE_CODE (id) != TEMPLATE_DECL
+                               && TREE_CODE (id) != TEMPLATE_TEMPLATE_PARM))
+                         id = do_identifier ($$, 1);
+                       $$ = id;
+                     } 
+                   else
+                     $$ = do_identifier ($$, 1);
                }               
        | CONSTANT
        | boolean.literal
@@ -3014,7 +3075,10 @@ nonnested_type:
                {
                  if (TREE_CODE ($1) == IDENTIFIER_NODE)
                    {
+                     arg_looking_for_template = processing_template_arg;
                      $$ = lookup_name ($1, 1);
+                     arg_looking_for_template = 0;
+
                      if (current_class_type
                          && TYPE_BEING_DEFINED (current_class_type)
                          && ! IDENTIFIER_CLASS_VALUE ($1))
@@ -4247,7 +4311,8 @@ bad_parm:
                {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE ($$) == SCOPE_REF
-                     && TREE_CODE (TREE_OPERAND ($$, 0)) == TEMPLATE_TYPE_PARM)
+                     && (TREE_CODE (TREE_OPERAND ($$, 0)) == TEMPLATE_TYPE_PARM
+                         || TREE_CODE (TREE_OPERAND ($$, 0)) == TEMPLATE_TEMPLATE_PARM))
                    cp_error ("  perhaps you want `typename %E' to make it a type", $$);
                  $$ = build_tree_list (integer_type_node, $$);
                }
index b76a763dc33666b8bcff36652807a84fdf361c5b..4e631ca22566d1a261cb2a0e5bf9f7c0b1f537e6 100644 (file)
@@ -111,6 +111,7 @@ begin_member_template_processing (decl)
       switch (TREE_CODE (parm))
        {
        case TYPE_DECL:
+       case TEMPLATE_DECL:
          pushdecl (parm);
          break;
 
@@ -951,6 +952,8 @@ process_template_parm (list, next)
 
       if (TREE_CODE (p) == TYPE_DECL)
        idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
+      else if (TREE_CODE (p) == TEMPLATE_DECL)
+       idx = TEMPLATE_TYPE_IDX (TREE_TYPE (DECL_TEMPLATE_RESULT (p)));
       else
        idx = TEMPLATE_CONST_IDX (DECL_INITIAL (p));
       ++idx;
@@ -996,9 +999,26 @@ process_template_parm (list, next)
     }
   else
     {
-      tree t = make_lang_type (TEMPLATE_TYPE_PARM);
+      tree t;
+      parm = TREE_VALUE (parm);
+      
+      if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
+       {
+         t = make_lang_type (TEMPLATE_TEMPLATE_PARM);
+         /* This is for distinguishing between real templates and template 
+            template parameters */
+         TREE_TYPE (parm) = t;
+         TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
+         decl = parm;
+       }
+      else
+       {
+         t = make_lang_type (TEMPLATE_TYPE_PARM);
+         /* parm is either IDENTIFIER_NODE or NULL_TREE */
+         decl = build_decl (TYPE_DECL, parm, t);
+       }
+        
       CLASSTYPE_GOT_SEMICOLON (t) = 1;
-      decl = build_decl (TYPE_DECL, TREE_VALUE (parm), t);
       TYPE_NAME (t) = decl;
       TYPE_STUB_DECL (t) = decl;
       parm = decl;
@@ -1077,7 +1097,8 @@ current_template_args ()
            {
              t = TREE_VALUE (t);
              
-             if (TREE_CODE (t) == TYPE_DECL)
+             if (TREE_CODE (t) == TYPE_DECL 
+                 || TREE_CODE (t) == TEMPLATE_DECL)
                t = TREE_TYPE (t);
              else
                t = DECL_INITIAL (t);
@@ -1637,6 +1658,7 @@ coerce_template_parms (parms, arglist, in_decl,
      int require_all_arguments;
 {
   int nparms, nargs, i, lost = 0;
+  int is_tmpl_parm = 0;
   tree vec = NULL_TREE;
 
   if (arglist == NULL_TREE)
@@ -1667,7 +1689,31 @@ coerce_template_parms (parms, arglist, in_decl,
     }
 
   if (arglist && TREE_CODE (arglist) == TREE_VEC)
-    vec = copy_node (arglist);
+    if (nargs == nparms)
+      vec = copy_node (arglist);
+    else
+      {
+       /* We arrive here when a template with some default arguments
+          is used as template template argument.  */
+       is_tmpl_parm = 1;
+       vec = make_tree_vec (nparms);
+       for (i = 0; i < nparms; i++)
+         {
+           tree arg;
+
+           if (i < nargs)
+             arg = TREE_VEC_ELT (arglist, i);
+           else if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (parms, i)))
+                    == TYPE_DECL)
+             arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (parms, i)),
+                           vec, i, in_decl);
+           else
+             arg = tsubst_expr (TREE_PURPOSE (TREE_VEC_ELT (parms, i)),
+                                vec, i, in_decl);
+
+           TREE_VEC_ELT (vec, i) = arg;
+         }
+      }
   else
     {
       vec = make_tree_vec (nparms);
@@ -1705,7 +1751,7 @@ coerce_template_parms (parms, arglist, in_decl,
       tree arg = TREE_VEC_ELT (vec, i);
       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
       tree val = 0;
-      int is_type, requires_type;
+      int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
 
       if (arg == NULL_TREE)
        /* We're out of arguments.  */
@@ -1721,8 +1767,29 @@ coerce_template_parms (parms, arglist, in_decl,
          continue;
        }
 
-      is_type = TREE_CODE_CLASS (TREE_CODE (arg)) == 't';
-      requires_type = TREE_CODE (parm) == TYPE_DECL;
+      /* In case we are checking arguments inside a template template
+        parameter, ARG that does not come from default argument is 
+        also a TREE_LIST node */
+      if (TREE_CODE (arg) == TREE_LIST)
+       {
+          is_tmpl_parm = 1;
+         arg = TREE_VALUE (arg);
+       }
+
+      /* Check if it is a class template.  */
+      is_tmpl_type = (TREE_CODE (arg) == TEMPLATE_DECL
+                     && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
+                    || (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
+                        && !CLASSTYPE_TEMPLATE_INFO (arg));
+      if (is_tmpl_type && TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
+       arg = TYPE_STUB_DECL (arg);
+      
+      requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
+      is_type = TREE_CODE_CLASS (TREE_CODE (arg)) == 't'
+               || is_tmpl_type
+               || (is_tmpl_parm && TREE_CODE (arg) == TYPE_DECL);
+      requires_type = TREE_CODE (parm) == TYPE_DECL
+                     || requires_tmpl_type;
 
       if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
          && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
@@ -1744,7 +1811,8 @@ coerce_template_parms (parms, arglist, in_decl,
                            i + 1, in_decl);
                  if (is_type)
                    cp_error ("  expected a constant of type `%T', got `%T'",
-                             TREE_TYPE (parm), arg);
+                             TREE_TYPE (parm),
+                             (is_tmpl_type ? DECL_NAME (arg) : arg));
                  else
                    cp_error ("  expected a type, got `%E'", arg);
                }
@@ -1753,18 +1821,71 @@ coerce_template_parms (parms, arglist, in_decl,
          TREE_VEC_ELT (vec, i) = error_mark_node;
          continue;
        }
+      if (is_tmpl_type ^ requires_tmpl_type)
+       {
+         if (in_decl)
+           {
+             cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
+                       i, in_decl);
+             if (is_tmpl_type)
+               cp_error ("  expected a type, got `%T'", DECL_NAME (arg));
+             else
+               cp_error ("  expected a class template, got `%T'", arg);
+           }
+         lost++;
+         TREE_VEC_ELT (vec, i) = error_mark_node;
+         continue;
+       }
+      if (is_tmpl_parm)
+       {
+         if (requires_tmpl_type)
+           {
+             cp_error ("nested template template parameter not implemented");
+             lost++;
+             TREE_VEC_ELT (vec, i) = error_mark_node;
+           }
+         continue;
+       }
+        
       if (is_type)
        {
-         val = groktypename (arg);
-         if (! processing_template_decl)
+         if (requires_tmpl_type)
+           {
+             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
+             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
+
+             /* The parameter and argument roles have to be switched 
+                here in order to handle default arguments properly.  
+                For example, 
+                  template<template <class> class TT> void f(TT<int>) 
+                should be able to accept vector<int> which comes from 
+                  template <class T, class Allcator = allocator> 
+                  class vector.  */
+
+             val = coerce_template_parms (argparm, parmparm, in_decl, 1, 1);
+             if (val != error_mark_node)
+               val = arg;
+                   
+             /* TEMPLATE_TEMPLATE_PARM node is preferred over 
+                TEMPLATE_DECL.  */
+             if (val != error_mark_node 
+                 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
+               val = TREE_TYPE (val);
+           }
+         else
            {
-             tree t = target_type (val);
-             if (TREE_CODE (t) != TYPENAME_TYPE 
-                 && IS_AGGR_TYPE (t)
-                 && decl_function_context (TYPE_MAIN_DECL (t)))
+             val = groktypename (arg);
+             if (! processing_template_decl)
                {
-                 cp_error ("type `%T' composed from a local class is not a valid template-argument", val);
-                 return error_mark_node;
+                 tree t = target_type (val);
+                 if (TREE_CODE (t) != TYPENAME_TYPE 
+                     && IS_AGGR_TYPE (t)
+                     && decl_function_context (TYPE_MAIN_DECL (t)))
+                   {
+                     cp_error ("type `%T' composed from a local class is not a valid template-argument",
+                               val);
+                     return error_mark_node;
+                   }
                }
            }
        }
@@ -1899,6 +2020,17 @@ mangle_class_name_for_template (name, parms, arglist, ctx)
          cat (type_as_string (arg, 0));
          continue;
        }
+      else if (TREE_CODE (parm) == TEMPLATE_DECL)
+       {
+         if (TREE_CODE (arg) == TEMPLATE_DECL)
+           /* Already substituted with real template.  Just output 
+              the template name here */
+           cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
+         else
+           /* Output the parameter declaration */
+           cat (type_as_string (arg, 0));
+         continue;
+       }
       else
        my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
 
@@ -2029,9 +2161,15 @@ lookup_template_class (d1, arglist, in_decl, function_context)
 
   if (TREE_CODE (d1) == IDENTIFIER_NODE)
     {
-      template = IDENTIFIER_GLOBAL_VALUE (d1); /* XXX */
-      if (! template)
-       template = IDENTIFIER_CLASS_VALUE (d1);
+      if (IDENTIFIER_LOCAL_VALUE (d1) 
+         && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_LOCAL_VALUE (d1)))
+       template = IDENTIFIER_LOCAL_VALUE (d1);
+      else
+       {
+         template = IDENTIFIER_GLOBAL_VALUE (d1); /* XXX */
+         if (! template)
+           template = IDENTIFIER_CLASS_VALUE (d1);
+       }
     }
   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
     {
@@ -2060,7 +2198,29 @@ lookup_template_class (d1, arglist, in_decl, function_context)
       return error_mark_node;
     }
 
-  if (PRIMARY_TEMPLATE_P (template))
+  if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
+    {
+      /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
+         template arguments */
+
+      tree parm = copy_template_template_parm (TREE_TYPE (template));
+      tree template2 = TYPE_STUB_DECL (parm);
+      tree arglist2;
+
+      CLASSTYPE_GOT_SEMICOLON (parm) = 1;
+      parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
+
+      arglist2 = coerce_template_parms (parmlist, arglist, template, 1, 1);
+      if (arglist2 == error_mark_node)
+       return error_mark_node;
+
+      arglist2 = copy_to_permanent (arglist2);
+      CLASSTYPE_TEMPLATE_INFO (parm)
+       = perm_tree_cons (template2, arglist2, NULL_TREE);
+      TYPE_SIZE (parm) = 0;
+      return parm;
+    }
+  else if (PRIMARY_TEMPLATE_P (template))
     {
       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
 
@@ -2244,6 +2404,15 @@ uses_template_parms (t)
     case TYPE_DECL:
       return uses_template_parms (TREE_TYPE (t));
 
+    case TEMPLATE_DECL:
+      /* A template template parameter is encountered */
+      if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
+        /* We are parsing a template declaration */
+        return 1;
+      /* We are instantiating templates with template template
+         parameter */
+      return 0;
+      
     case FUNCTION_DECL:
     case VAR_DECL:
       /* ??? What about FIELD_DECLs?  */
@@ -2266,6 +2435,7 @@ uses_template_parms (t)
 
       /* template parm nodes */
     case TEMPLATE_TYPE_PARM:
+    case TEMPLATE_TEMPLATE_PARM:
     case TEMPLATE_CONST_PARM:
       return 1;
 
@@ -2864,12 +3034,14 @@ tsubst (t, args, nargs, in_decl)
       }
 
     case TEMPLATE_TYPE_PARM:
+    case TEMPLATE_TEMPLATE_PARM:
     case TEMPLATE_CONST_PARM:
       {
        int idx;
        int level;
 
-       if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
+       if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
+           || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
          {
            idx = TEMPLATE_TYPE_IDX (t);
            level = TEMPLATE_TYPE_LEVEL (t);
@@ -2899,6 +3071,34 @@ tsubst (t, args, nargs, in_decl)
                  return cp_build_type_variant
                    (arg, TYPE_READONLY (arg) || TYPE_READONLY (t),
                     TYPE_VOLATILE (arg) || TYPE_VOLATILE (t));
+               else if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
+                 {
+                   if (CLASSTYPE_TEMPLATE_INFO (t))
+                     {
+                       /* We are processing a type constructed from
+                          a template template parameter */
+                       tree argvec = tsubst (
+                                       TREE_VALUE (CLASSTYPE_TEMPLATE_INFO (t)), 
+                                       args, nargs, in_decl);
+                       tree r;
+
+                       /* We can get a TEMPLATE_TEMPLATE_PARM here when 
+                          we are resolving nested-types in the signature of 
+                          a member function templates.
+                          Otherwise ARG is a TEMPLATE_DECL and is the real 
+                          template to be instantiated.  */
+                       if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
+                         arg = TYPE_NAME (arg);
+
+                       r = lookup_template_class (DECL_NAME (arg), 
+                                                  argvec, in_decl, NULL_TREE);
+                       return cp_build_type_variant (r, TYPE_READONLY (t),
+                                                     TYPE_VOLATILE (t));
+                     }
+                   else
+                     /* We are processing a template argument list.  */ 
+                     return arg;
+                 }
                else
                  return arg;
              }
@@ -2909,6 +3109,8 @@ tsubst (t, args, nargs, in_decl)
        my_friendly_assert((TREE_CODE (t) == TEMPLATE_CONST_PARM 
                            && TEMPLATE_CONST_LEVEL (t) > 1) 
                           || (TREE_CODE (t) == TEMPLATE_TYPE_PARM
+                              && TEMPLATE_TYPE_LEVEL (t) > 1)
+                          || (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
                               && TEMPLATE_TYPE_LEVEL (t) > 1),
                           0);
        return t;
@@ -3903,6 +4105,7 @@ tsubst_copy (t, args, nargs, in_decl)
     case ENUMERAL_TYPE:
     case INTEGER_TYPE:
     case TEMPLATE_TYPE_PARM:
+    case TEMPLATE_TEMPLATE_PARM:
     case TEMPLATE_CONST_PARM:
     case POINTER_TYPE:
     case REFERENCE_TYPE:
@@ -4641,6 +4844,79 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
        return 1;
       targs[idx] = arg;
       return 0;
+
+    case TEMPLATE_TEMPLATE_PARM:
+      (*nsubsts)++;
+      idx = TEMPLATE_TYPE_IDX (parm);
+      /* Check for mixed types and values.  */
+      if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (tparms, idx))) != TEMPLATE_DECL)
+       return 1;
+
+      if (!strict && targs[idx] != NULL_TREE && 
+         TREE_CODE (targs[idx]) == NOP_EXPR)
+       /* An explicit template argument.  Don't even try to match
+          here; the overload resolution code will manage check to
+          see whether the call is legal.  */ 
+       return 0;
+
+      if (CLASSTYPE_TEMPLATE_INFO (parm))
+       {
+         /* We arrive here when PARM does not involve template 
+            specialization.  */
+
+         /* ARG must be constructed from a template class.  */
+         if (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg))
+           return 1;
+
+         {
+           tree parmtmpl = CLASSTYPE_TI_TEMPLATE (parm);
+           tree parmvec = CLASSTYPE_TI_ARGS (parm);
+           tree argvec = CLASSTYPE_TI_ARGS (arg);
+           tree argtmplvec
+             = DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (arg));
+           int i, j;
+
+           /* The parameter and argument roles have to be switched here 
+              in order to handle default arguments properly.  For example, 
+                template<template <class> class TT> void f(TT<int>) 
+              should be able to accept vector<int> which comes from 
+                template <class T, class Allcator = allocator> 
+                  class vector.  */
+
+           if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 1, 1)
+               == error_mark_node)
+             return 1;
+         
+           /* Deduce arguments T, i from TT<T> or TT<i>.  */
+           for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
+             {
+               tree t = TREE_VEC_ELT (parmvec, i);
+               if (TREE_CODE (t) != TEMPLATE_TYPE_PARM
+                   && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM
+                   && TREE_CODE (t) != TEMPLATE_CONST_PARM)
+                 continue;
+
+               /* This argument can be deduced.  */
+
+               if (unify (tparms, targs, ntparms, t, 
+                          TREE_VEC_ELT (argvec, i), nsubsts, strict))
+                 return 1;
+             }
+         }
+         arg = CLASSTYPE_TI_TEMPLATE (arg);
+       }
+
+      /* Simple cases: Value already set, does match or doesn't.  */
+      if (targs[idx] == arg 
+         || (targs[idx] 
+             && TREE_CODE (targs[idx]) == NOP_EXPR 
+             && TREE_OPERAND (targs[idx], 0) == arg))
+       return 0;
+      else if (targs[idx])
+       return 1;
+      targs[idx] = arg;
+      return 0;
+
     case TEMPLATE_CONST_PARM:
       (*nsubsts)++;
       idx = TEMPLATE_CONST_IDX (parm);
index 4624ca99518abed92d01e7e9caae4cc96710edac..7e1fb49618d74d8628ceabdb707f453c7be43b67 100644 (file)
@@ -2471,7 +2471,8 @@ dfs_walk (binfo, fn, qfn)
 
       if (qfn == 0 || (*qfn)(base_binfo))
        {
-         if (TREE_CODE (BINFO_TYPE (base_binfo)) == TEMPLATE_TYPE_PARM)
+         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)
            {
@@ -3134,7 +3135,8 @@ dfs_record_inheritance (binfo)
       tree baseclass = BINFO_TYPE (base_binfo);
       mi_boolean *base_row = BINFO_DERIVES_FROM_STAR (base_binfo);
 
-      if (TREE_CODE (baseclass) == TEMPLATE_TYPE_PARM)
+      if (TREE_CODE (baseclass) == TEMPLATE_TYPE_PARM
+          || TREE_CODE (baseclass) == TEMPLATE_TEMPLATE_PARM)
        continue;
       my_friendly_assert (CLASSTYPE_CID (baseclass) != 0, 2365);
 
index 365ee4d8d2dabfa9b2f2fdc43fa09954d4dde598..04c71f659bc2ad3838de7ec54f98fa66da05d63c 100644 (file)
@@ -1438,6 +1438,27 @@ build_exception_variant (type, raises)
   return v;
 }
 
+/* Given a TEMPLATE_TEMPLATE_PARM node T, create a new one together with its 
+   lang_specific field and its corresponding TEMPLATE_DECL node */
+
+tree
+copy_template_template_parm (t)
+     tree t;
+{
+  tree template = TYPE_NAME (t);
+  tree t2 = make_lang_type (TEMPLATE_TEMPLATE_PARM);
+  template = copy_node (template);
+  copy_lang_decl (template);
+  TREE_TYPE (template) = t2;
+  TYPE_NAME (t2) = template;
+  TYPE_STUB_DECL (t2) = template;
+
+  /* No need to copy these */
+  TYPE_FIELDS (t2) = TYPE_FIELDS (t);
+  CLASSTYPE_TEMPLATE_INFO (t2) = CLASSTYPE_TEMPLATE_INFO (t);
+  return t2;
+}
+
 /* Subroutine of copy_to_permanent
 
    Assuming T is a node build bottom-up, make it all exist on
@@ -1629,6 +1650,9 @@ mapcar (t, func)
       CONSTRUCTOR_ELTS (t) = mapcar (CONSTRUCTOR_ELTS (t), func);
       return t;
 
+    case TEMPLATE_TEMPLATE_PARM:
+      return copy_template_template_parm (t);
+
     case RECORD_TYPE:
       if (TYPE_PTRMEMFUNC_P (t))
        return build_ptrmemfunc_type
index e3c426d9a325bbdc11380aa9565372db7c0f13a4..8be397f33cfe44f83e600c7649543e2ebafa656d 100644 (file)
@@ -836,6 +836,37 @@ comptypes (type1, type2, strict)
       val = comp_array_types (comptypes, t1, t2, strict);
       break;
 
+    case TEMPLATE_TEMPLATE_PARM:
+      if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
+         || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
+       return 0;
+
+      if (CLASSTYPE_TEMPLATE_INFO (t1) && CLASSTYPE_TEMPLATE_INFO (t2))
+       {
+         int i = TREE_VEC_LENGTH (CLASSTYPE_TI_ARGS (t1));
+         tree *p1 = &TREE_VEC_ELT (CLASSTYPE_TI_ARGS (t1), 0);
+         tree *p2 = &TREE_VEC_ELT (CLASSTYPE_TI_ARGS (t2), 0);
+       
+         while (i--)
+           {
+             if (TREE_CODE_CLASS (TREE_CODE (p1[i])) == 't')
+               {
+                 if (! comptypes (p1[i], p2[i], 1))
+                   return 0;
+               }
+             else
+               {
+                 if (simple_cst_equal (p1[i], p2[i]) <= 0)
+                   return 0;
+               }
+           }
+         return 1;
+       }
+      else if (CLASSTYPE_TEMPLATE_INFO (t1) || CLASSTYPE_TEMPLATE_INFO (t2))
+       return 0;
+      else
+       return 1;
+
     case TEMPLATE_TYPE_PARM:
       return TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2)
        && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2);