Release coccinelle-0.1.9-rc1
authorCoccinelle <cocci@diku.dk>
Sun, 3 Oct 2010 12:00:48 +0000 (14:00 +0200)
committerRene Rydhof Hansen <rrh@cs.aau.dk>
Sun, 3 Oct 2010 12:00:48 +0000 (14:00 +0200)
Release Candidate 1 for coccinelle-0.1.9

134 files changed:
changes.txt
cocci.ml
cocci.mli
commitmsg
commons/Makefile
commons/common.ml
commons/common.mli
commons/credits.txt
commons/ograph_extended.ml
commons/ograph_simple.ml [new file with mode: 0644]
commons/ograph_simple.mli [new file with mode: 0644]
configure
ctl/ctl_engine.ml
demos/change_all_param.c [new file with mode: 0644]
demos/change_all_param.cocci [new file with mode: 0644]
docs/manual/Makefile
docs/manual/cocci_syntax.tex
docs/manual/hevea.sty [new file with mode: 0644]
docs/manual/main.tex
docs/manual/main_grammar.pdf [moved from docs/manual/cocci_syntax.pdf with 85% similarity]
docs/manual/manual.pdf
docs/manual/options.pdf
docs/manual/spatch_options.tex
engine/asttoctl2.ml
engine/asttoctl2.mli
engine/cocci_vs_c.ml
engine/cocci_vs_c.mli
engine/ctlcocci_integration.ml
engine/flag_matcher.ml
engine/pattern_c.ml
engine/postprocess_transinfo.ml
engine/pretty_print_engine.ml
engine/transformation_c.ml
globals/config.ml.in
main.ml
parsing_c/Makefile
parsing_c/ast_c.ml
parsing_c/compare_c.ml
parsing_c/compare_c.mli
parsing_c/control_flow_c_build.ml
parsing_c/cpp_analysis_c.ml [new file with mode: 0644]
parsing_c/cpp_analysis_c.mli [new file with mode: 0644]
parsing_c/cpp_ast_c.ml
parsing_c/cpp_ast_c.mli
parsing_c/cpp_token_c.ml
parsing_c/cpp_token_c.mli
parsing_c/flag_parsing_c.ml
parsing_c/lexer_c.mll
parsing_c/lexer_parser.mli
parsing_c/lib_parsing_c.ml
parsing_c/parse_c.ml
parsing_c/parse_c.mli
parsing_c/parser_c.mly
parsing_c/parsing_consistency_c.ml [new file with mode: 0644]
parsing_c/parsing_consistency_c.mli [new file with mode: 0644]
parsing_c/parsing_hacks.ml
parsing_c/parsing_hacks.mli
parsing_c/parsing_recovery_c.ml [new file with mode: 0644]
parsing_c/parsing_recovery_c.mli [new file with mode: 0644]
parsing_c/pretty_print_c.ml
parsing_c/pretty_print_c.mli
parsing_c/sexp_ast_c.ml [new file with mode: 0644]
parsing_c/sexp_ast_c.mli [new file with mode: 0644]
parsing_c/test_parsing_c.ml
parsing_c/token_c.ml
parsing_c/token_helpers.ml
parsing_c/token_helpers.mli
parsing_c/type_annoter_c.ml
parsing_c/unparse_c.ml
parsing_c/unparse_c.mli
parsing_c/unparse_cocci.ml
parsing_c/unparse_cocci.mli
parsing_c/unparse_hrule.ml
parsing_c/unparse_hrule.mli
parsing_c/visitor_c.ml
parsing_cocci/.depend
parsing_cocci/Makefile
parsing_cocci/ast0_cocci.ml
parsing_cocci/ast0toast.ml
parsing_cocci/ast_cocci.ml
parsing_cocci/ast_cocci.mli
parsing_cocci/check_meta.ml
parsing_cocci/compute_lines.ml
parsing_cocci/compute_lines.mli
parsing_cocci/context_neg.ml
parsing_cocci/data.ml
parsing_cocci/data.mli
parsing_cocci/free_vars.ml
parsing_cocci/free_vars.mli
parsing_cocci/function_prototypes.ml
parsing_cocci/iso_pattern.ml
parsing_cocci/lexer_cocci.mll
parsing_cocci/parse_aux.ml
parsing_cocci/parse_cocci.ml
parsing_cocci/parse_cocci.mli
parsing_cocci/parser_cocci_menhir.ml
parsing_cocci/parser_cocci_menhir.mli
parsing_cocci/parser_cocci_menhir.mly
parsing_cocci/single_statement.ml
parsing_cocci/unparse_ast0.ml
python/no_pycocci_aux.ml
python/yes_pycocci_aux.ml
readme.txt
standard.h
testing.ml
testing.mli
tests/SCORE_expected.sexp
tests/SCORE_expected.sexp.save
tests/a.c [new file with mode: 0644]
tests/a.cocci [new file with mode: 0644]
tests/a.res [new file with mode: 0644]
tests/fsh.c [new file with mode: 0644]
tests/fsh.cocci [new file with mode: 0644]
tests/fsh.res [new file with mode: 0644]
tests/macro_int16.res
tests/memory.c [new file with mode: 0644]
tests/memory.cocci [new file with mode: 0644]
tests/memory.res [new file with mode: 0644]
tests/notest.c [new file with mode: 0644]
tests/notest.cocci [new file with mode: 0644]
tests/notest.res [new file with mode: 0644]
tests/overshoot.c [new file with mode: 0644]
tests/overshoot.cocci [new file with mode: 0644]
tests/overshoot.res [new file with mode: 0644]
tests/retval.c [new file with mode: 0644]
tests/retval.cocci [new file with mode: 0644]
tests/retval.res [new file with mode: 0644]
tests/struct.cocci
tests/tydisj.c [new file with mode: 0644]
tests/tydisj.cocci [new file with mode: 0644]
tests/tydisj.res [new file with mode: 0644]
tools/Makefile
tools/bridge.ml
tools/spp.ml [new file with mode: 0644]

index 6082e83..b836271 100644 (file)
@@ -1,5 +1,55 @@
 -*- org -*-
 
+* 0.1.9
+
+** Language:
+- allow fresh identifiers to be declared using ## such that the value mixes
+  both strings and previously declared metavariables
+
+** Features:
+- better handling of expanded code containing ##. Now compute the 
+  result.
+- more precise warning message for the "'\' outside define".
+  Thanks to Nicholas Mc Guire for pointing out the problem.
+- more precise warning message related to ifdefization.
+  Thanks to Derek Jones for pointing out the problem.
+- we don't create any more certain files in /tmp (they may be a cause
+  of security problems).
+  Thanks to Eugeniy Meshcheryakov for pointing out the problem.
+- More optimization for the case of just deleting a complete function.
+  Allows this to happen without tracing through all the control-flow
+  paths.  Thanks to Francois Bissyande for pointing out the problem.
+- prevent code from being added to the beginning or end of a disjunction
+- more information about why a script is not applied when using -debug option
+- added -no_safe_expressions option
+- added -no_loops option.  Ignores back edges derived from looping
+  constructs.  This is unsafe, but perhaps useful for bug finding, as it can
+  be more efficient.
+- for semantic matches, allow "minus" on same code with multiple
+  environments
+- better error message for mismatch of parenthesis in column 0 with normal
+  parenthesis.  Thanks to Derek Jones for pointing out the problem.
+- allow disjunctions on function return types.  Thanks to Pierre Habouzit
+  for pointing this out.
+
+** Bugfix:
+- keep disjunction in the proper order for structure initialization fields
+- variables declared in different places should not seem to match each
+  other
+- drop complaints about label metavariables not being used
+- drop test information from the type of an expression when the expression
+  is bound to a metavariable
+- nests should not extend beyond the before and after code, even if the
+  before and after code matches the nest code
+- nests should extend into conditionals that end in error exit
+- take into account metavariables on "else".  Thanks to Derek Jones for
+  pointing out the problem.
+- print single quotes on generated character constants
+- better typedef handling in the initialisation/affectation builtin
+  isomorphism, cf -test init_affect_typedef
+- support disjunction of types on variable declaration
+
+
 * 0.1.8
 
 ** Language:
index 7a446c4..8c451b5 100644 (file)
--- a/cocci.ml
+++ b/cocci.ml
@@ -43,7 +43,7 @@ module Ast_to_flow = Control_flow_c_build
 (* C related *)
 (* --------------------------------------------------------------------- *)
 let cprogram_of_file file = 
-  let (program2, _stat) = Parse_c.parse_print_error_heuristic file in
+  let (program2, _stat) = Parse_c.parse_c_and_cpp file in
   program2 
 
 let cprogram_of_file_cached file = 
@@ -104,15 +104,15 @@ let ast_to_flow_with_error_messages a =
 (* Ctl related *)
 (* --------------------------------------------------------------------- *)
 
-let ctls_of_ast2 ast ua pos =
+let ctls_of_ast2 ast (ua,fua,fuas) pos =
   List.map2
-    (function ast -> function (ua,pos) ->
+    (function ast -> function (ua,(fua,(fuas,pos))) ->
       List.combine
        (if !Flag_cocci.popl
        then failwith "no popl here" (* Popl.popl ast *)
-       else Asttoctl2.asttoctl ast ua pos)
+       else Asttoctl2.asttoctl ast (ua,fua,fuas) pos)
        (Asttomember.asttomember ast ua))
-    ast (List.combine ua pos)
+    ast (List.combine ua (List.combine fua (List.combine fuas pos)))
 
 let ctls_of_ast ast ua =
   Common.profile_code "asttoctl2" (fun () -> ctls_of_ast2 ast ua)
@@ -752,15 +752,16 @@ let gen_pdf_graph () =
 
 (* --------------------------------------------------------------------- *)
 let prepare_cocci ctls free_var_lists negated_pos_lists
-    used_after_lists positions_list metavars astcocci = 
+    (ua,fua,fuas) positions_list metavars astcocci = 
 
   let gathered = Common.index_list_1
-      (zip (zip (zip (zip (zip (zip ctls metavars) astcocci) free_var_lists)
-                  negated_pos_lists) used_after_lists) positions_list)
+      (zip (zip (zip (zip (zip (zip (zip (zip ctls metavars) astcocci)
+                                 free_var_lists)
+                  negated_pos_lists) ua) fua) fuas) positions_list)
   in
   gathered +> List.map 
-    (fun (((((((ctl_toplevel_list,metavars),ast),free_var_list),
-            negated_pos_list),used_after_list),positions_list),rulenb) -> 
+    (fun (((((((((ctl_toplevel_list,metavars),ast),free_var_list),
+            negated_pos_list),ua),fua),fuas),positions_list),rulenb) -> 
       
       let is_script_rule r =
         match r with
@@ -819,7 +820,7 @@ let prepare_cocci ctls free_var_lists negated_pos_lists
             dropped_isos = dropped_isos;
             free_vars = List.hd free_var_list;
             negated_pos_vars = List.hd negated_pos_list;
-            used_after = List.hd used_after_list;
+            used_after = (List.hd ua) @ (List.hd fua);
             positions = List.hd positions_list;
             ruleid = rulenb;
            ruletype = ruletype;
@@ -1063,9 +1064,9 @@ let apply_python_rule r cache newes e rules_that_have_matched
   else
     begin
       let (_, mv, _) = r.scr_ast_rule in
-      if List.for_all (Pycocci.contains_binding e) mv
-      then
-       begin
+      let not_bound x = not (Pycocci.contains_binding e x) in
+      (match List.filter not_bound mv with
+       [] ->
          let relevant_bindings =
            List.filter
              (function ((re,rm),_) ->
@@ -1091,8 +1092,13 @@ let apply_python_rule r cache newes e rules_that_have_matched
          if !Pycocci.inc_match
          then (new_cache, merge_env [(e, rules_that_have_matched)] newes)
          else (new_cache, newes)
-       end
-      else (cache, merge_env [(e, rules_that_have_matched)] newes)
+      |        unbound ->
+         (if !Flag_cocci.show_dependencies
+         then
+           let m2c (_,(r,x)) = r^"."^x in
+           pr2 (Printf.sprintf "script not applied: %s not bound"
+                  (String.concat ", " (List.map m2c unbound))));
+         (cache, merge_env [(e, rules_that_have_matched)] newes))
     end
 
 let rec apply_cocci_rule r rules_that_have_ever_matched es
index c596fa7..9056f62 100644 (file)
--- a/cocci.mli
+++ b/cocci.mli
@@ -32,7 +32,12 @@ val sp_of_file :
   Ast_cocci.metavar list list * Ast_cocci.rule list *
       Ast_cocci.meta_name list list list *
       Ast_cocci.meta_name list list list *
-      Ast_cocci.meta_name list list list * Ast_cocci.meta_name list list list *
+      (Ast_cocci.meta_name list list list (*used after list*) *
+        (*fresh used after list*)
+        Ast_cocci.meta_name list list list *
+        (*fresh used after list seeds*)
+        Ast_cocci.meta_name list list list) *
+      Ast_cocci.meta_name list list list *
       string list list *
       string option
 
dissimilarity index 99%
index f05683a..982a878 100644 (file)
--- a/commitmsg
+++ b/commitmsg
@@ -1,72 +1,3 @@
-Release coccinelle-0.1.8
-
-** Features:
-   - Metavariables now capture the cpp code contained within their definitions
-   - When - fragments are separated by ... or nest boundaries in the semantic
-     patch, but end up matching adjacent source code, the comments, cpp code
-     and whitespace that are between them are not deleted.
-   - better parsing of C: do expansion of macros only when needed when
-     have actually a parse error and also leverage the definition of macros
-     in the parsed file (or in a optional_standard.h file passed as a parameter).
-     This should reduce the need for many hardcoded definitions in standard.h
-   - new semantics for the -macro_file option, by default now expand macros
-     only when necessary. To force use the -macro_file_builtins option instead.
-   - a new -extract_macros command line action to help the parser. Works with
-     the -macro_file option. e.g.
-       $ ./spatch -extract_macros ~/linux > /tmp/alldefs.h
-       $ ./spatch -macro_file /tmp/alldefs.h -sp_file foo.cocci -dir ~/linux
-   - removed -D macro_file option, not consistent with what -D usually means
-   - reattempt to be more efficient for statement metavariables that are just
-     placeholders (ie, no modification, no reuse)
-   - triples now returned from ctl in sorted order.  The main key is the
-     state.  On the other hand, the state order does not always agree with the
-     order of appearance in the code.
-   - spatch is now less verbose on the things it does yet handle. Less confusing
-     for new users.
-   - slightly better error report. Thanks to Derek Jones for the suggestion.
-   - added the options -linux_spacing and -smpl_spacing.  -linux_spacing
-     causes spatch to follow the spacing conventions of Linux, while
-     -smpl_spacing causes spatch to follow the spacing in the semantic patch.
-     -linux_spacing is the default.
-   - more informative error reporting for the already tagged token case.
-     Thanks to Erik Hovland for the suggestion.
-    
-** Bugfix:
-   - better parsing of declare macro at toplevel and in structure.
-     cf -text xfield
-   - allowing back typedef names for fieldname
-   - better printing of else in generated code
-   - slightly better type inference for binary operators.
-   - clear out declarer names and iterator names between SmPL files (for
-     -testall)
-   - better parsing and type checking of macro type aliases. Cf -test macro_int16.
-     Thanks to Li Yingtong for pointing out the problem.
-   - make insert_virtual_positions tail rec, avoid stack overflow pb.
-     Thanks to Diego Liziero <diegoliz@gmail.com> for pointing out the
-     problem.
-   - Better type inference for arithmetic binary operators
-     Thanks to Li Yingtong for pointing out the problem.
-   - Better type inference for constants
-     Thanks to Li Yingtong for pointing out the problem.
-   - move computing of adjacency information for semantic patches to after
-     application of isomorphisms, because isomorphisms can introduce "..."
-   - compute adjacency information for negated ...
-   - record with each transformation site the set of indices of the witness
-     trees that caused the transformation site to come about.  Whitespace and
-     comments between remove tokens associated with disjoint witness trees is
-     not removed.
-   - correct treatment of function pointer typed parameters in the SmPL ast0
-     visitor.
-   - better parsing error message and error recovery when comments are not ended,
-     when some macros have a weird body, and when some switch have a weird
-     Body.
-     Thanks to Derek Jones for pointing out the problem.
-   - better detection and passing of "dangerous" ifdefs, cf -test
-     double_switch.
-   - dropped the separation of decls and body in Seq.  This gives better
-     positioning of the bindings of metavariables shared between them.
-     Thanks to Erik Hovland for an example that shows the problem.
-
-** Internals:
-   - supress warning in compiling ocamlsexp (warning caused by a new behavior
-     of cpp used internally in processing files in ocamlsexp/)
+Release coccinelle-0.1.9-rc1
+
+Release Candidate 1 for coccinelle-0.1.9
index ce53152..081bb1a 100644 (file)
@@ -16,7 +16,7 @@ MYSRC=common.ml common_extra.ml \
       ocollection/oseti.ml ocollection/oseth.ml ocollection/osetb.ml ocollection/osetpt.ml \
       ocollection/oassocb.ml ocollection/oassoch.ml ocollection/oassoc_buffer.ml ocollection/oassoc_cache.ml ocollection/oassocid.ml \
       oarray.ml \
-      ocollection/ograph2way.ml ograph_extended.ml \
+      ocollection/ograph2way.ml ograph_simple.ml ograph_extended.ml \
       ofullcommon.ml \
       glimpse.ml parser_combinators.ml
 
index c037e1b..8a4de1e 100644 (file)
@@ -417,27 +417,46 @@ let xxx_once f s =
 let pr2_once s = xxx_once pr2 s
 
 (* ---------------------------------------------------------------------- *)
-let mk_pr2_wrappers aref = 
-  let fpr2 s = 
+let mk_pr2_wrappers aref =
+  let fpr2 s =
     if !aref
     then pr2 s
-    else 
+    else
       (* just to the log file *)
       out_chan_pr2 s
   in
-  let fpr2_once s = 
+  let fpr2_once s =
     if !aref
     then pr2_once s
-    else 
+    else
       xxx_once out_chan_pr2 s
   in
-  fpr2, fpr2_once
-
+    fpr2, fpr2_once
 
 (* ---------------------------------------------------------------------- *)
 (* could also be in File section *)
 
-let redirect_stdout_stderr file f = 
+let redirect_stdout file f =
+  begin
+    let chan = open_out file in
+    let descr = Unix.descr_of_out_channel chan in
+
+    let saveout = Unix.dup Unix.stdout in
+      Unix.dup2 descr Unix.stdout;
+      flush stdout;
+      let res = f() in
+       flush stdout;
+       Unix.dup2 saveout Unix.stdout;
+       close_out chan;
+       res
+  end
+
+let redirect_stdout_opt optfile f =
+  match optfile with
+    | None -> f()
+    | Some outfile -> redirect_stdout outfile f
+
+let redirect_stdout_stderr file f =
   begin
     let chan = open_out file in
     let descr = Unix.descr_of_out_channel chan in
@@ -454,7 +473,7 @@ let redirect_stdout_stderr file f =
     close_out chan;
   end
 
-let redirect_stdin file f = 
+let redirect_stdin file f =
   begin
     let chan = open_in file in
     let descr = Unix.descr_of_in_channel chan in
@@ -466,7 +485,7 @@ let redirect_stdin file f =
     close_in chan;
   end
 
-let redirect_stdin_opt optfile f = 
+let redirect_stdin_opt optfile f =
   match optfile with
   | None -> f()
   | Some infile -> redirect_stdin infile f
@@ -701,7 +720,7 @@ let report_if_take_time timethreshold s f =
   let res = f () in
   let t' = Unix.gettimeofday () in
   if (t' -. t  > float_of_int timethreshold) 
-  then pr2 (sprintf "NOTE: this code takes more than: %ds %s" timethreshold s);
+  then pr2 (sprintf "Note: processing took %7.1fs: %s" (t' -. t) s);
   res
 
 let profile_code2 category f = 
@@ -2053,6 +2072,16 @@ let partition_either f l =
       | Right e -> part_either left (e :: right) l) in
   part_either [] [] l
 
+let partition_either3 f l =
+  let rec part_either left middle right = function
+  | [] -> (List.rev left, List.rev middle, List.rev right)
+  | x :: l -> 
+      (match f x with
+      | Left3  e -> part_either (e :: left) middle right l
+      | Middle3  e -> part_either left (e :: middle) right l
+      | Right3 e -> part_either left middle (e :: right) l) in
+  part_either [] [] [] l
+
 
 (* pixel *)
 let rec filter_some = function
@@ -3479,7 +3508,7 @@ let timeout_function_opt timeoutvalopt f =
 
 (* creation of tmp files, a la gcc *)
 
-let _temp_files_created = ref [] 
+let _temp_files_created = ref ([] : filename list)
 
 (* ex: new_temp_file "cocci" ".c" will give "/tmp/cocci-3252-434465.c" *)
 let new_temp_file prefix suffix = 
@@ -3499,6 +3528,14 @@ let erase_temp_files () =
     _temp_files_created := []
   end
 
+let erase_this_temp_file f =
+  if not !save_tmp_files then begin
+    _temp_files_created :=
+      List.filter (function x -> not (x =$= f)) !_temp_files_created;
+    command2 ("rm -f " ^ f)
+  end
+
+
 (* now in prelude: exception UnixExit of int *)
 let exn_to_real_unixexit f = 
   try f() 
index 723748b..d2920fc 100644 (file)
@@ -145,6 +145,7 @@ val pr2_once : string -> unit
 val mk_pr2_wrappers: bool ref -> (string -> unit) * (string -> unit)
 
 
+val redirect_stdout_opt : filename option -> (unit -> 'a) -> 'a
 val redirect_stdout_stderr : filename -> (unit -> unit) -> unit
 val redirect_stdin : filename -> (unit -> unit) -> unit
 val redirect_stdin_opt : filename option -> (unit -> unit) -> unit
@@ -785,6 +786,8 @@ val some_or : 'a option -> 'a -> 'a
 
 val partition_either :
   ('a -> ('b, 'c) either) -> 'a list -> 'b list * 'c list
+val partition_either3 :
+    ('a -> ('b, 'c, 'd) either3) -> 'a list -> 'b list * 'c list * 'd list
 
 val filter_some : 'a option list -> 'a list
 val map_filter : ('a -> 'b option) -> 'a list -> 'b list
@@ -1139,6 +1142,7 @@ val _temp_files_created : string list ref
 (* see flag: val save_tmp_files : bool ref *)
 val new_temp_file : string (* prefix *) -> string (* suffix *) -> filename
 val erase_temp_files : unit -> unit
+val erase_this_temp_file : filename -> unit
 
 (* If the user use some exit 0 in his code, then no one can intercept this
  * exit and do something before exiting. There is exn handler for exit 0
index bf674e2..04a41b0 100644 (file)
@@ -2,7 +2,7 @@
 Thanks to 
  - Richard Jones for his dumper module, 
  - Brian Hurt and Nicolas Cannasse for their dynArray module,
- - Troestler Christophe for his ANSITerminal module,
+ - Christophe Troestler for his ANSITerminal module,
  - Sebastien ferre for his suffix tree module
 
- - Jane street for the backtrace module
+ - Jane Street for the backtrace module
index a481249..0c9f3a2 100644 (file)
@@ -228,7 +228,7 @@ let dfs_iter_with_path xi f g =
     
 
 let generate_ograph_generic g label fnode filename =
-  with_open_outfile filename (fun (pr,_) ->
+  Common.with_open_outfile filename (fun (pr,_) ->
     pr "digraph misc {\n" ;
     pr "size = \"10,10\";\n" ;
     (match label with
diff --git a/commons/ograph_simple.ml b/commons/ograph_simple.ml
new file mode 100644 (file)
index 0000000..45a9028
--- /dev/null
@@ -0,0 +1,130 @@
+open Common
+
+open Ocollection
+open Oset
+open Oassoc
+(* open Ograph *)
+
+open Oassocb
+open Osetb
+
+
+(* Difference with ograph_extended ? why not share code ? could, but
+ * in ograph_extended we dont force the user to have a key and we
+ * generate those keys as he add nodes. Here we assume the user already
+ * have an idea of what kind of key he wants to use (a string, a
+ * filename, a, int, whatever) 
+*)
+
+class ['key, 'a,'b] ograph_mutable =
+  let build_assoc () = new oassocb [] in
+  let build_set ()   = new osetb Setb.empty in
+
+object(o)
+  
+
+  val mutable succ = build_assoc()
+  val mutable pred = build_assoc()
+  val mutable nods = (build_assoc() : ('key, 'a) Oassocb.oassocb)
+
+  method add_node i (e: 'a) = 
+    nods <- nods#add (i, e); 
+    pred <- pred#add (i, build_set() );
+    succ <- succ#add (i, build_set() );
+
+  method del_node (i) = 
+    (* check: e is effectively the index associated with e, 
+       and check that already in *)
+
+    (* todo: assert that have no pred and succ, otherwise
+     * will have some dangling pointers 
+     *)
+    nods <- nods#delkey i; 
+    pred <- pred#delkey i;
+    succ <- succ#delkey i;
+
+  method del_leaf_node_and_its_edges (i) = 
+    let succ = o#successors i in
+    if not (succ#null)
+    then failwith "del_leaf_node_and_its_edges: have some successors"
+    else begin
+      let pred = o#predecessors i in
+      pred#tolist +> List.iter (fun (k, edge) -> 
+        o#del_arc (k,i) edge;
+      );
+      o#del_node i
+    end
+      
+  method leaf_nodes () = 
+    let (set : 'key Oset.oset)  = build_set () in
+    o#nodes#tolist +> List.fold_left (fun acc (k,v) -> 
+      if (o#successors k)#null
+      then acc#add k
+      else acc
+    ) set
+    
+
+  method replace_node i (e: 'a) = 
+    assert (nods#haskey i);
+    nods <- nods#replkey (i, e);
+    
+  method add_arc (a,b) (v: 'b) = 
+    succ <- succ#replkey (a, (succ#find a)#add (b, v));
+    pred <- pred#replkey (b, (pred#find b)#add (a, v));
+  method del_arc (a,b) v =
+    succ <- succ#replkey (a, (succ#find a)#del (b,v));
+    pred <- pred#replkey (b, (pred#find b)#del (a,v));
+
+  method successors   e = succ#find e
+  method predecessors e = pred#find e
+
+  method nodes = nods
+  method allsuccessors = succ
+
+  (* detect if no loop ? *)
+  method ancestors k = 
+    let empty_set = build_set() in
+
+    
+    let rec aux acc x = 
+      if acc#mem x
+      then 
+        (* bugfix: have_loop := true; ? not, not necessarally. 
+         * if you got a diamon, seeing a second time the same
+         * x does not mean we are in a loop
+         *)
+        acc
+      else
+        let acc = acc#add x in
+        let prefs = o#predecessors x in
+        let prefs = prefs#tolist +> List.map fst in
+        prefs +> List.fold_left (fun acc x -> aux acc x) acc
+    in
+    let set = aux empty_set k in
+    let set = set#del k in
+    set
+
+
+
+
+end   
+
+
+let print_ograph_generic ~str_of_key ~str_of_node filename g =
+  Common.with_open_outfile filename (fun (pr,_) ->
+    pr "digraph misc {\n" ;
+    pr "size = \"10,10\";\n" ;
+
+    let nodes = g#nodes in
+    nodes#iter (fun (k,node) -> 
+      pr (spf "%s [label=\"%s\"];\n" (str_of_key k) (str_of_node k node))
+    );
+    nodes#iter (fun (k,node) -> 
+      let succ = g#successors k in
+      succ#iter (fun (j,edge) ->
+        pr (spf "%s -> %s;\n" (str_of_key k) (str_of_key j));
+      );
+    );
+    pr "}\n" ;
+    );
+  ()
diff --git a/commons/ograph_simple.mli b/commons/ograph_simple.mli
new file mode 100644 (file)
index 0000000..1070fea
--- /dev/null
@@ -0,0 +1,34 @@
+open Common
+
+
+(* essentially a convenient way to access a hash and its reverse hash *)
+
+class ['key, 'node, 'edge] ograph_mutable :
+object ('o)
+  method add_node : 'key -> 'node -> unit
+  method del_node : 'key -> unit
+  method replace_node: 'key -> 'node -> unit
+
+
+  method add_arc : ('key * 'key) -> 'edge -> unit
+  method del_arc : ('key * 'key) -> 'edge -> unit
+
+  method nodes : ('key, 'node) Oassoc.oassoc
+
+  method successors : 'key -> ('key * 'edge) Oset.oset
+  method predecessors : 'key -> ('key * 'edge) Oset.oset
+  method allsuccessors : ('key, ('key * 'edge) Oset.oset) Oassoc.oassoc
+
+
+  method del_leaf_node_and_its_edges: 'key -> unit
+  method ancestors : 'key -> 'key Oset.oset
+  method leaf_nodes : unit -> 'key Oset.oset
+
+end
+
+val print_ograph_generic: 
+  str_of_key:('key -> string) -> 
+  str_of_node:('key -> 'node -> string) -> 
+  Common.filename -> 
+  ('key, 'node,'edge) ograph_mutable -> 
+  unit
index 83cb129..79872ca 100755 (executable)
--- a/configure
+++ b/configure
 
 #TODO check python 2.5 ?
 
+# need latex and hevea if want to compile the documentation
+
 #old: --with-menhir=/path/to/menhirLib or `ocamlfind query menhirLib`
 
 my $project =
     "coccinelle";
 my $projectcmdline =
-    "spatch -sp_file demos/simple.cocci demos/simple.c";
+    "spatch -sp_file demos/simple.cocci demos/simple.c -o /tmp/new_simple.c";
 
 ######################################################################
 # Options
@@ -28,6 +30,7 @@ my $prefix="/usr/local";
 my $python=1;
 my $trac=0;
 my $opt=".opt";
+my $tarzan=1;
 
 local $_ = join ' ', @ARGV;
 
@@ -40,6 +43,9 @@ local $_ = join ' ', @ARGV;
 /--no-opt/ and $opt = "";
 /--opt/ and $opt = ".opt";
 
+#tarzan by default (used by score file parsing and now also for sexp_ast_c.ml)
+
+
 #if($ARGV[0] =~ "--prefix=(.*)") {
 #    $prefix = $1;
 #}
@@ -275,6 +281,7 @@ SHAREDIR=$src
 
 # Features
 FEATURE_PYTHON=$python
+FEATURE_TARZAN=$tarzan
 
 # The OPTBIN variable is here to allow to use ocamlc.opt instead of
 # ocaml, when it is available, which speeds up compilation. So
index 65c3338..e0f9a88 100644 (file)
@@ -1097,7 +1097,8 @@ let satAX dir m s reqst = pre_forall dir m s s reqst
 
 (* E[phi1 U phi2] == phi2 \/ (phi1 /\ EXE[phi1 U phi2]) *)
 let satEU dir ((_,_,states) as m) s1 s2 reqst print_graph = 
-  let ctr = ref 0 in
+  (*Printf.printf "EU\n";
+  let ctr = ref 0 in*)
   inc satEU_calls;
   if s1 = []
   then s2
@@ -1110,21 +1111,23 @@ let satEU dir ((_,_,states) as m) s1 s2 reqst print_graph =
        match new_info with
          [] -> y
        | new_info ->
-           ctr := !ctr + 1;
-           print_graph y ctr;
+           (*ctr := !ctr + 1;
+           print_graph y ctr;*)
            let first = triples_conj s1 (pre_exist dir m new_info reqst) in
            let res = triples_union first y in
            let new_info = setdiff res y in
            (*Printf.printf "iter %d res %d new_info %d\n"
            !ctr (List.length res) (List.length new_info);
+           print_state "res" res;
+           print_state "new_info" new_info;
            flush stdout;*)
            f res new_info in
       f s2 s2
     else
       let f y =
        inc_step();
-       ctr := !ctr + 1;
-       print_graph y ctr;
+       (*ctr := !ctr + 1;
+       print_graph y ctr;*)
        let pre = pre_exist dir m y reqst in
        triples_union s2 (triples_conj s1 pre) in
       setfix f s2
@@ -1278,9 +1281,16 @@ let satAW dir ((grp,_,states) as m) s1 s2 reqst =
        print_state "y" y;
        flush stdout;*)
        let pre = pre_forall dir m y y reqst in
+       (*print_state "pre" pre;*)
        let conj = triples_conj s1 pre in (* or triples_conj_AW *)
        triples_union s2 conj in
-      setgfix f (triples_union s1 s2)
+      let drop_wits = List.map (function (s,e,_) -> (s,e,[])) in
+      (* drop wits on s1 represents that we don't want any witnesses from
+        the case that infinitely loops, only from the case that gets
+        out of the loop. s1 is like a guard. To see the problem, consider
+        an example where both s1 and s2 match some code after the loop.
+        we only want the witness from s2. *)
+      setgfix f (triples_union (drop_wits s1) s2)
 ;;
 
 let satAF dir m s reqst = 
@@ -1801,7 +1811,8 @@ let rec satloop unchecked required required_states
                       (* no graph, for the moment *)
                       (fun y str -> ()))
                    s1 in
-               strict_A2 strict satAW satEF dir m s1 s2 new_required_states)
+               strict_A2 strict satAW satEF dir m s1 s2 new_required_states
+               )
     | A.Implies(phi1,phi2) ->
        loop unchecked required required_states (A.Or(A.Not phi1,phi2))
     | A.Exists (keep,v,phi)     ->
diff --git a/demos/change_all_param.c b/demos/change_all_param.c
new file mode 100644 (file)
index 0000000..3617d16
--- /dev/null
@@ -0,0 +1,19 @@
+int foo(int a, int b)
+{
+       return a + b;
+}
+
+int bar(int a, int b, int c)
+{
+       return a + b + c;
+}
+
+void main(void)
+{
+       int res;
+       int x,y,y;
+
+       res = foo(x,y);
+
+       res = bar(x,y,z);
+}
diff --git a/demos/change_all_param.cocci b/demos/change_all_param.cocci
new file mode 100644 (file)
index 0000000..1f1da3f
--- /dev/null
@@ -0,0 +1,69 @@
+// author: Pad. Example based on discussions with Nicholas Mc Guire.
+
+// call site
+@ r1 @
+identifier fn;
+expression ret;
+@@
+
+- ret =
+  fn(
++   ret,
+    ...)
+
+
+@ r2 @
+identifier r1.fn;
+expression e;
+@@
+
+
+fn (...,
+-   e
++   &e
+    ,...)
+
+
+// definition site
+@@
+type T;
+identifier r1.fn;
+@@
+
+- T 
++ void
+  fn(
++    T ret,
+     ...)
+{ 
+...
+}
+
+
+@ rparam @
+identifier r1.fn;
+type T;
+identifier x;
+@@
+
+fn(...,
+- T x
++ T *x
+  ,...)
+{
+...
+}
+
+// weird, if I inline this rule in previous rule it does
+// not work
+@@
+identifier r1.fn;
+identifier rparam.x;
+@@ 
+fn(...)
+{
+<...
+- x
++ *x
+...> 
+}
\ No newline at end of file
index 865619f..f367e06 100644 (file)
@@ -10,7 +10,7 @@ SRC=$(wildcard *.tex)
 # xfig
 # emacs, auctex, ediff
 # darcs
-# latexdiff 
+# latexdiff
 
 ##############################################################################
 # Top rules
@@ -18,28 +18,23 @@ SRC=$(wildcard *.tex)
 .PHONY: all clean distclean
 .SUFFIXES: .pdf .tex
 
-all: manual.pdf cocci_syntax.pdf options.pdf
+all: manual.pdf main_grammar.pdf options.pdf
 
 manual.pdf: $(SRC)
        pdflatex main.tex
        pdflatex main.tex
        mv main.pdf manual.pdf
 
-
-
-
-cocci_syntax.pdf: main_grammar.tex cocci_syntax.tex  macros_listing_cocci.tex macros_grammar.tex macros_common.tex examples.tex tips.tex
+main_grammar.pdf: main_grammar.tex cocci_syntax.tex  macros_listing_cocci.tex macros_grammar.tex macros_common.tex examples.tex tips.tex
        pdflatex main_grammar.tex
        pdflatex main_grammar.tex
-       mv main_grammar.pdf cocci_syntax.pdf
 
-options.pdf: main_options.tex spatch_options.tex   macros_options.tex 
+main_options.pdf: main_options.tex spatch_options.tex   macros_options.tex
        pdflatex main_options.tex
        pdflatex main_options.tex
-       mv main_options.pdf options.pdf
-
-
 
+options.pdf: main_options.pdf
+       mv main_options.pdf options.pdf
 
 distclean:: clean
        rm -f manual.pdf cocci_syntax.pdf options.pdf
@@ -50,7 +45,7 @@ distclean:: clean
 #
 #pdf:      $(PDF)
 #
-#%.pdf:        %.tex 
+#%.pdf:        %.tex
 #          $(PDFLATEX) $<
 #          if egrep -s '$(RERUN)' $*.log ;then $(PDFLATEX) $<; fi
 #          if egrep -s '$(RERUN)' $*.log ;then $(PDFLATEX) $<; fi
@@ -58,13 +53,13 @@ distclean:: clean
 ##############################################################################
 # Html version
 ##############################################################################
-.PHONY: html check 
+.PHONY: html check
 
 .SUFFIXES: .html .tex
 
-TEX=cocci_syntax.tex
+TEX=main_grammar.tex
 WEB=/var/www/localhost/htdocs/coccinelle/
-EMNWEB=~/website/docs/
+EMNWEB=~/website
 
 PDF=$(TEX:.tex=.pdf)
 HTML=$(TEX:.tex=.html)
@@ -91,11 +86,9 @@ install:
        chmod a-w -R $(WEB)
 
 emn_install: world
-       cp *.css *.gif *.html $(EMNWEB)
-       cp $(PDF) $(EMNWEB)
-
-
-
+       cp *.css *.gif *.html $(EMNWEB)/docs
+       cp $(PDF) $(EMNWEB)/docs
+       cp options.pdf $(EMNWEB)/
 
 .tex.html:
 # For Gentoo: /usr/lib64/hevea
@@ -113,7 +106,8 @@ emn_install: world
        else \
        echo -e "\n\n *** Hevea: Unable to find xxdate.exe ***\n\n"; \
        fi
-       hacha -o index.html cocci_syntax.html
+       hacha -o index.html main_grammar.html
+#      hacha -o index.html cocci_syntax.html
 
 
 ##############################################################################
index b1c1cd9..441c21f 100644 (file)
@@ -13,22 +13,16 @@ arguments.  The grammar also uses some unspecified nonterminals, such
 as \T{id}, \T{const}, etc.  These refer to the sets suggested by
 the name, {\em i.e.}, \T{id} refers to the set of possible
 C-language identifiers, while \T{const} refers to the set of
-possible C-language constants.  
+possible C-language constants.
 %
-\ifhevea 
+\ifhevea
 A PDF version of this documentation is available at
-\url{http://www.emn.fr/x-info/coccinelle/docs/cocci_syntax.pdf}.
+\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.pdf}.
 \else
 A HTML version of this documentation is available online at
-\url{http://www.emn.fr/x-info/coccinelle/docs/cocci_syntax.html}. 
+\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.html}.
 \fi
 
-%% \ifhevea A PDF
-%% version of this documentation is available at
-%% \url{http://localhost:8080/coccinelle/cocci_syntax.pdf}.\else A HTML
-%% version of this documentation is available online at
-%% \url{http://localhost:8080/coccinelle/cocci_syntax.html}. \fi
-
 \section{Program}
 
 \begin{grammar}
@@ -48,7 +42,10 @@ A HTML version of this documentation is available online at
 \noindent
 \T{script\_code} is any code in the chosen scripting language.  Parsing of
 the semantic patch does not check the validity of this code; any errors are
-first detected when the code is executed.
+first detected when the code is executed.  Furthermore, \texttt{@} should
+not be use in this code.  Spatch scans the script code for the next
+\texttt{@} and considers that to be the beginning of the next rule, even if
+\texttt{@} occurs within e.g., a string or a comment.
 
 % Between the metavariables and the transformation rule, there can be a
 % specification of constraints on the names of the old and new files,
diff --git a/docs/manual/hevea.sty b/docs/manual/hevea.sty
new file mode 100644 (file)
index 0000000..17b4e54
--- /dev/null
@@ -0,0 +1,90 @@
+% hevea  : hevea.sty
+% This is a very basic style file for latex document to be processed
+% with hevea. It contains definitions of LaTeX environment which are
+% processed in a special way by the translator. 
+%  Mostly :
+%     - latexonly, not processed by hevea, processed by latex.
+%     - htmlonly , the reverse.
+%     - rawhtml,  to include raw HTML in hevea output.
+%     - toimage, to send text to the image file.
+% The package also provides hevea logos, html related commands (ahref
+% etc.), void cutting and image commands.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hevea}[2002/01/11]
+\RequirePackage{comment}
+\newif\ifhevea\heveafalse
+\@ifundefined{ifimagen}{\newif\ifimagen\imagenfalse}
+\makeatletter%
+\newcommand{\heveasmup}[2]{%
+\raise #1\hbox{$\m@th$%
+  \csname S@\f@size\endcsname
+  \fontsize\sf@size 0%
+  \math@fontsfalse\selectfont
+#2%
+}}%
+\DeclareRobustCommand{\hevea}{H\kern-.15em\heveasmup{.2ex}{E}\kern-.15emV\kern-.15em\heveasmup{.2ex}{E}\kern-.15emA}%
+\DeclareRobustCommand{\hacha}{H\kern-.15em\heveasmup{.2ex}{A}\kern-.15emC\kern-.1em\heveasmup{.2ex}{H}\kern-.15emA}%
+\DeclareRobustCommand{\html}{\protect\heveasmup{0.ex}{HTML}}
+%%%%%%%%% Hyperlinks hevea style
+\newcommand{\ahref}[2]{{#2}}
+\newcommand{\ahrefloc}[2]{{#2}}
+\newcommand{\aname}[2]{{#2}}
+\newcommand{\ahrefurl}[1]{\texttt{#1}}
+\newcommand{\footahref}[2]{#2\footnote{\texttt{#1}}}
+\newcommand{\mailto}[1]{\texttt{#1}}
+\newcommand{\imgsrc}[2][]{}
+\newcommand{\home}[1]{\protect\raisebox{-.75ex}{\char126}#1}
+\AtBeginDocument
+{\@ifundefined{url}
+{%url package is not loaded
+\let\url\ahref\let\oneurl\ahrefurl\let\footurl\footahref}
+{}}
+%% Void cutting instructions
+\newcounter{cuttingdepth}
+\newcommand{\tocnumber}{}
+\newcommand{\notocnumber}{}
+\newcommand{\cuttingunit}{}
+\newcommand{\cutdef}[2][]{}
+\newcommand{\cuthere}[2]{}
+\newcommand{\cutend}{}
+\newcommand{\htmlhead}[1]{}
+\newcommand{\htmlfoot}[1]{}
+\newcommand{\htmlprefix}[1]{}
+\newenvironment{cutflow}[1]{}{}
+\newcommand{\cutname}[1]{}
+\newcommand{\toplinks}[3]{}
+\newcommand{\setlinkstext}[3]{}
+\newcommand{\flushdef}[1]{}
+\newcommand{\footnoteflush}[1]{}
+%%%% Html only
+\excludecomment{rawhtml}
+\newcommand{\rawhtmlinput}[1]{}
+\excludecomment{htmlonly}
+%%%% Latex only
+\newenvironment{latexonly}{}{}
+\newenvironment{verblatex}{}{}
+%%%% Image file stuff
+\def\toimage{\endgroup}
+\def\endtoimage{\begingroup\def\@currenvir{toimage}}
+\def\verbimage{\endgroup}
+\def\endverbimage{\begingroup\def\@currenvir{verbimage}}
+\newcommand{\imageflush}[1][]{}
+%%% Bgcolor definition
+\newsavebox{\@bgcolorbin}
+\newenvironment{bgcolor}[2][]
+  {\newcommand{\@mycolor}{#2}\begin{lrbox}{\@bgcolorbin}\vbox\bgroup}
+  {\egroup\end{lrbox}%
+   \begin{flushleft}%
+   \colorbox{\@mycolor}{\usebox{\@bgcolorbin}}%
+   \end{flushleft}}
+%%% Style sheets macros, defined as no-ops
+\newcommand{\newstyle}[2]{}
+\newcommand{\addstyle}[1]{}
+\newcommand{\setenvclass}[2]{}
+\newcommand{\getenvclass}[1]{}
+\newcommand{\loadcssfile}[1]{}
+\newenvironment{divstyle}[1]{}{}
+\newenvironment{cellstyle}[2]{}{}
+\newif\ifexternalcss
+%%% Postlude
+\makeatother
index 52cb41c..5f5f6d1 100644 (file)
@@ -24,7 +24,7 @@
 
 
 \usepackage{graphics}
-\usepackage[pdftex]{graphicx} 
+\usepackage[pdftex]{graphicx}
 
 
 \usepackage{epsfig}
 %------------------------------------------------------------------------------
 
 \input{macros_common}
-%e.g: 
+%e.g:
 %  \newcommand{\mita}[1]{\mbox{\it{{#1}}}}
 
 \input{macros_options}
 
-\input{macros_listing_cocci} % order is important 
+\input{macros_listing_cocci} % order is important
 \input{macros_grammar}
 
 
 
 \author{
 Julia Lawall and Yoann Padioleau \\
-{(with contributions from 
-Rene Rydhof Hansen, 
-Nicolas Palix, 
+{(with contributions from
+Rene Rydhof Hansen,
+Nicolas Palix,
 Henrik Stuart)
 }
-}  
+}
 %src: Xavier Leroy manual
 
 \date{\today}
@@ -112,7 +112,7 @@ Henrik Stuart)
 % Body
 %******************************************************************************
 
-\chapter*{Foreword} 
+\chapter*{Foreword}
 
 This manual documents the release \cocciversion of Coccinelle.
 It is organized as follows:
@@ -127,7 +127,7 @@ It is organized as follows:
 \section*{Copyright}
 
 %coupling: copyright.txt
-Coccinelle is copyright \copyright 2005, 2006, 2007, 2008, 2009 
+Coccinelle is copyright \copyright 2005, 2006, 2007, 2008, 2009
 University of Copenhagen DIKU and Ecole des Mines de Nantes.
 
 Coccinelle is open source and can be freely redistributed under the
@@ -135,12 +135,12 @@ terms of the GNU General Public License version 2. See the file
 \verb+license.txt+ in the distribution for licensing information.
 
 The present documentation is copyright 2008, 2009 Yoann Padioleau
-and Julia Lawall and distributed under the terms of the 
+and Julia Lawall and distributed under the terms of the
 GNU Free Documentation License version 1.3.
 
 \section*{Availability}
 
-Coccinelle can be freely downloaded 
+Coccinelle can be freely downloaded
 from \verb+http://www.emn.fr/x-info/coccinelle+.
 This website contains also additional information.
 
@@ -150,7 +150,7 @@ This website contains also additional information.
 
 \input{introduction}
 
-\input{installing} 
+\input{installing}
 
 \input{tutorial}
 
@@ -180,7 +180,7 @@ This website contains also additional information.
 
 \chapter{\spatch command line options}
 
-%coupling: ../spatch.1 
+%coupling: ../spatch.1
 \input{spatch_options}
 
 %******************************************************************************
@@ -189,7 +189,7 @@ This website contains also additional information.
 
 %index
 
-{\small 
+{\small
 \bibliographystyle{acm}
 \bibliography{main}
 }
similarity index 85%
rename from docs/manual/cocci_syntax.pdf
rename to docs/manual/main_grammar.pdf
index d49195f..95249a4 100644 (file)
Binary files a/docs/manual/cocci_syntax.pdf and b/docs/manual/main_grammar.pdf differ
index b805854..10f02a7 100644 (file)
Binary files a/docs/manual/manual.pdf and b/docs/manual/manual.pdf differ
index be99d47..0714a0e 100644 (file)
Binary files a/docs/manual/options.pdf and b/docs/manual/options.pdf differ
index e112a86..a9b6729 100644 (file)
@@ -376,6 +376,12 @@ version of {\bf -partial\_match}.}
   that the pattern {\tt f(E)}, with metavariable {\tt E}, matches with {\tt
     E} as {\tt x} will not be considered.}
 
+\rare{-no\_safe\_expressions}{normally, we check that an expression does
+       not match something earlier in the disjunction.  But for large
+       disjunctions, this can result in a very big CTL formula.  So this
+       option give the user the option to say he doesn't want this feature,
+       if that is the case.}
+
 \rare{-pyoutput coccilib.output.Gtk, -pyoutput coccilib.output.Console}{
 This controls whether Python output is sent to Gtk or to the console.  {\bf
   -pyoutput coccilib.output.Console} is the default.  The Gtk option is
index 1c4d196..6ae471a 100644 (file)
@@ -25,7 +25,7 @@
 (* true = don't see all matched nodes, only modified ones *)
 let onlyModif = ref true(*false*)
 
-type ex = Exists | Forall | ReverseForall
+type ex = Exists | Forall
 let exists = ref Forall
 
 module Ast = Ast_cocci
@@ -92,7 +92,6 @@ let ctl_ax s = function
       match !exists with
        Exists -> CTL.EX(CTL.FORWARD,x)
       |        Forall -> CTL.AX(CTL.FORWARD,s,x)
-      |        ReverseForall -> failwith "not supported"
 
 let ctl_ax_absolute s = function
     CTL.True -> CTL.True
@@ -130,20 +129,16 @@ let ctl_au s x y =
   match (x,!exists) with
     (CTL.True,Exists) -> CTL.EF(CTL.FORWARD,y)
   | (CTL.True,Forall) -> CTL.AF(CTL.FORWARD,s,y)
-  | (CTL.True,ReverseForall) -> failwith "not supported"
   | (_,Exists) -> CTL.EU(CTL.FORWARD,x,y)
   | (_,Forall) -> CTL.AU(CTL.FORWARD,s,x,y)
-  | (_,ReverseForall) -> failwith "not supported"
 
 let ctl_anti_au s x y = (* only for ..., where the quantifier is changed *)
   CTL.XX
     (match (x,!exists) with
       (CTL.True,Exists) -> CTL.AF(CTL.FORWARD,s,y)
     | (CTL.True,Forall) -> CTL.EF(CTL.FORWARD,y)
-    | (CTL.True,ReverseForall) -> failwith "not supported"
     | (_,Exists) -> CTL.AU(CTL.FORWARD,s,x,y)
-    | (_,Forall) -> CTL.EU(CTL.FORWARD,x,y)
-    | (_,ReverseForall) -> failwith "not supported")
+    | (_,Forall) -> CTL.EU(CTL.FORWARD,x,y))
 
 let ctl_uncheck = function
     CTL.True -> CTL.True
@@ -609,7 +604,8 @@ and get_before_e s a =
   | Ast.Nest(stmt_dots,w,multi,_,aft) ->
       let w = get_before_whencode w in
       let (sd,_) = get_before stmt_dots a in
-      let a =
+      (*let a =
+       got rid of this, don't want to let nests overshoot
        List.filter
          (function
              Ast.Other a ->
@@ -625,7 +621,7 @@ and get_before_e s a =
                  Unify_ast.MAYBE -> false
                | _ -> true)
            | _ -> true)
-         a in
+         a in*)
       (Ast.rewrap s (Ast.Nest(sd,w,multi,a,aft)),[Ast.Other_dots stmt_dots])
   | Ast.Disj(stmt_dots_list) ->
       let (dsl,dsla) =
@@ -711,7 +707,8 @@ and get_after_e s a =
   | Ast.Nest(stmt_dots,w,multi,bef,_) ->
       let w = get_after_whencode a w in
       let (sd,_) = get_after stmt_dots a in
-      let a =
+      (*let a =
+        got rid of this. don't want to let nests overshoot
        List.filter
          (function
              Ast.Other a ->
@@ -727,7 +724,7 @@ and get_after_e s a =
                  Unify_ast.MAYBE -> false
                | _ -> true)
            | _ -> true)
-         a in
+         a in*)
       (Ast.rewrap s (Ast.Nest(sd,w,multi,bef,a)),[Ast.Other_dots stmt_dots])
   | Ast.Disj(stmt_dots_list) ->
       let (dsl,dsla) =
@@ -856,7 +853,15 @@ let exptymatch l make_match make_guard_match =
   let rec suffixes = function
       [] -> []
     | x::xs -> xs::(suffixes xs) in
-  let prefixes = List.rev (suffixes (List.rev guard_matches)) in
+  let prefixes =
+    (* normally, we check that an expression does not match something
+       earlier in the disjunction (calculated as prefixes).  But for large
+       disjunctions, this can result in a very big CTL formula.  So we
+       give the user the option to say he doesn't want this feature, if that is
+       the case. *)
+    if !Flag_matcher.no_safe_expressions
+    then List.map (function _ -> []) matches
+    else List.rev (suffixes (List.rev guard_matches)) in
   let info = (* not null *)
     List.map2
       (function matcher ->
@@ -890,8 +895,7 @@ let do_re_matches label guard res quantified minus_quantified =
        if List.exists (function Ast.Exp(_) | Ast.Ty(_) -> true | _ -> false)
            all
        then failwith "unexpected exp or ty";
-       List.fold_left ctl_seqor CTL.False
-         (List.rev (List.map make_match res)))
+       List.fold_left ctl_seqor CTL.False (List.map make_match res))
 
 (* code might be a DisjRuleElem, in which case we break it apart
    code doesn't contain an Exp or Ty
@@ -1004,10 +1008,12 @@ let ifthenelse ifheader branch1 els branch2 ((afvs,_,_,_) as aft) after
     | _ -> failwith "not possible" in
   let (e2fvs,b2fvs,s2fvs) =
     (* fvs on else? *)
-    match seq_fvs quantified
-       [Ast.get_fvs ifheader;Ast.get_fvs branch2;afvs] with
+    (* just combine with the else branch.  no point to have separate
+       quantifier, since there is only one possible control-flow path *)
+    let else_fvs = Common.union_set (Ast.get_fvs els) (Ast.get_fvs branch2) in
+    match seq_fvs quantified [Ast.get_fvs ifheader;else_fvs;afvs] with
       [(e2fvs,b2fvs);(s2fvs,b2afvs);_] ->
-       (e2fvs,Common.union_set b2fvs b2afvs,s2fvs)
+        (e2fvs,Common.union_set b2fvs b2afvs,s2fvs)
     | _ -> failwith "not possible" in
   let bothfvs        = union (union b1fvs b2fvs) (intersect s1fvs s2fvs) in
   let exponlyfvs     = intersect e1fvs e2fvs in
@@ -1021,8 +1027,11 @@ let ifthenelse ifheader branch1 els branch2 ((afvs,_,_,_) as aft) after
     | _ -> failwith "not possible" in
   let (me2fvs,mb2fvs,ms2fvs) =
     (* fvs on else? *)
-    match seq_fvs minus_quantified
-       [Ast.get_mfvs ifheader;Ast.get_mfvs branch2;[]] with
+    (* just combine with the else branch.  no point to have separate
+       quantifier, since there is only one possible control-flow path *)
+    let else_mfvs =
+      Common.union_set (Ast.get_mfvs els) (Ast.get_mfvs branch2) in
+    match seq_fvs minus_quantified [Ast.get_mfvs ifheader;else_mfvs;[]] with
       [(e2fvs,b2fvs);(s2fvs,b2afvs);_] ->
        (e2fvs,Common.union_set b2fvs b2afvs,s2fvs)
     | _ -> failwith "not possible" in
@@ -1039,7 +1048,10 @@ let ifthenelse ifheader branch1 els branch2 ((afvs,_,_,_) as aft) after
          (Some (lv,used)) llabel slabel guard] in
   let false_branch =
     make_seq guard
-      [falsepred label; make_match els;
+      [falsepred label;
+       quantify guard
+         (Common.minus_set (Ast.get_fvs els) new_quantified)
+         (make_match els);
        recurse branch2 Tail new_quantified new_mquantified
          (Some (lv,used)) llabel slabel guard] in
   let after_pred = aftpred label in
@@ -1234,7 +1246,7 @@ let svar_minus_or_no_add_after stmt s label quantified d ast
 (* --------------------------------------------------------------------- *)
 (* dots and nests *)
 
-let dots_au is_strict toend label s wrapcode x seq_after y quantifier =
+let dots_au is_strict toend label s wrapcode x seq_after y quantifier =
   let matchgoto = gotopred None in
   let matchbreak =
     make_match None false
@@ -1253,7 +1265,10 @@ let dots_au is_strict toend label s wrapcode x seq_after y quantifier =
     then Common.Left(aftpred label)
     else
       Common.Right
-       (function v ->
+       (function vx -> function v ->
+         (* vx is the contents of the nest, if any.  we can only stop early
+            if we find neither the ending code nor the nest contents in
+            the if branch.  not sure if this is a good idea. *)
          let lv = get_label_ctr() in
          let labelpred = CTL.Pred(Lib_engine.Label lv,CTL.Control) in
          let preflabelpred = label_pred_maker (Some (lv,ref true)) in
@@ -1262,7 +1277,8 @@ let dots_au is_strict toend label s wrapcode x seq_after y quantifier =
               (ctl_and CTL.NONSTRICT
                  (ctl_and CTL.NONSTRICT (truepred label) labelpred)
                  (ctl_au CTL.NONSTRICT
-                    (ctl_and CTL.NONSTRICT (ctl_not v) preflabelpred)
+                    (ctl_and CTL.NONSTRICT (ctl_not v)
+                       (ctl_and CTL.NONSTRICT vx preflabelpred))
                     (ctl_and CTL.NONSTRICT preflabelpred
                        (if !Flag_matcher.only_return_is_error_exit
                        then
@@ -1280,9 +1296,11 @@ let dots_au is_strict toend label s wrapcode x seq_after y quantifier =
   let v = get_let_ctr() in
   op s x
     (match stop_early with
-      Common.Left x -> ctl_or y x
+      Common.Left x1 -> ctl_or y x1
     | Common.Right stop_early ->
-       CTL.Let(v,y,ctl_or (CTL.Ref v) (stop_early (CTL.Ref v))))
+       CTL.Let(v,y,
+               ctl_or (CTL.Ref v)
+                 (stop_early n (CTL.Ref v))))
 
 let rec dots_and_nests plus nest whencodes bef aft dotcode after label
     process_bef_aft statement_list statement guard quantified wrapcode =
@@ -1341,7 +1359,11 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label
            | Ast.WhenNotFalse(e) ->
                (poswhen,
                  ctl_or (whencond_false e label guard quantified) negwhen))
-       (CTL.True,bef_aft) (List.rev whencodes) in
+       (CTL.True,CTL.False(*bef_aft*)) (List.rev whencodes) in
+    (*bef_aft modifies arg so that inside of a nest can't cause the next
+       to overshoot its boundaries, eg a() <...f()...> b() where f is
+       a metavariable and the whole thing matches code in a loop;
+       don't want f to match eg b(), allowing to go around the loop again*)
     let poswhen = ctl_and_ns arg poswhen in
     let negwhen =
 (*    if !exists
@@ -1360,9 +1382,11 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label
       on the "true" in between code *)
   let plus_var = if plus then get_label_ctr() else string2var "" in
   let plus_var2 = if plus then get_label_ctr() else string2var "" in
-  let ornest =
+  let (ornest,just_nest) =
+    (* just_nest is used when considering whether to stop early, to continue
+       to collect nest information in the if branch *)
     match (nest,guard && not plus) with
-      (None,_) | (_,true) -> whencodes CTL.True
+      (None,_) | (_,true) -> (whencodes CTL.True,CTL.True)
     | (Some nest,false) ->
        let v = get_let_ctr() in
        let is_plus x =
@@ -1379,9 +1403,11 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label
                               CTL.Pred(Lib_engine.BindGood(plus_var),
                                        CTL.Modif plus_var2)))
          else x in
-        CTL.Let(v,nest,
-               CTL.Or(is_plus (CTL.Ref v),
-                      whencodes (CTL.Not(ctl_uncheck (CTL.Ref v))))) in
+       let body = 
+         CTL.Let(v,nest,
+                 CTL.Or(is_plus (CTL.Ref v),
+                        whencodes (CTL.Not(ctl_uncheck (CTL.Ref v))))) in
+        (body,body) in
   let plus_modifier x =
     if plus
     then
@@ -1417,8 +1443,9 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label
        else exit (* end at the real end of the function *) *) in
   plus_modifier
     (dots_au is_strict ((after = Tail) or (after = VeryEnd))
-       label (guard_to_strict guard) wrapcode
-      (ctl_and_ns dotcode (ctl_and_ns ornest labelled))
+       label (guard_to_strict guard) wrapcode just_nest
+      (ctl_and_ns dotcode
+        (ctl_and_ns (ctl_and_ns (ctl_not bef_aft) ornest) labelled))
       aft ender quantifier)
 
 and get_whencond_exps e =
@@ -1748,7 +1775,7 @@ and statement stmt after quantified minus_quantified
                      (quantify guard b2fvs
                         (statement_list body Tail
                            new_quantified2 new_mquantified2
-                           (Some (lv,ref true))
+                           None(*no label because past the goto*)
                            llabel slabel false guard))])) in
        ctl_or pattern_as_given (ctl_or pattern2 pattern3)
       else pattern_as_given
@@ -2022,81 +2049,113 @@ and statement stmt after quantified minus_quantified
        Common.union_set mb1fvs
          (Common.union_set mb2fvs
             (Common.union_set mb3fvs minus_quantified)) in
-      let fn_nest =
+      let optim1 =
        match (Ast.undots body,
               contains_modif rbrace or contains_pos rbrace) with
          ([body],false) ->
            (match Ast.unwrap body with
-             Ast.Nest(stmt_dots,[],multi,_,_) ->
-               if multi
-               then None (* not sure how to optimize this case *)
-               else Some (Common.Left stmt_dots)
-           | Ast.Dots(_,whencode,_,_) when
+             Ast.Nest(stmt_dots,[],false,_,_) ->
+            (* special case for function header + body - header is unambiguous
+              and unique, so we can just look for the nested body anywhere
+              else in the CFG *)
+               Some
+                 (CTL.AndAny
+                    (CTL.FORWARD,guard_to_strict guard,start_brace,
+                     statement_list stmt_dots
+                (* discards match on right brace, but don't need it *)
+                       (Guard (make_seq_after end_brace after))
+                       new_quantified3 new_mquantified3
+                       None llabel slabel true guard))
+           | Ast.Dots((_,i,d,_),whencode,_,_) when
                (List.for_all
                   (* flow sensitive, so not optimizable *)
                   (function Ast.WhenNotTrue(_) | Ast.WhenNotFalse(_) ->
                      false
                 | _ -> true) whencode) ->
-               Some (Common.Right whencode)
+           (* try to be more efficient for the case where the body is just
+              ...  Perhaps this is too much of a special case, but useful
+              for dropping a parameter and checking that it is never used. *)
+                    (match d with
+                      Ast.MINUS(_,_,_,_) -> None
+                    | _ ->
+                        Some (
+                        make_seq
+                          [start_brace;
+                            match whencode with
+                              [] -> CTL.True
+                            | _ ->
+                                let leftarg =
+                                  ctl_and
+                                    (ctl_not
+                                       (List.fold_left
+                                          (function prev ->
+                                            function
+                                                Ast.WhenAlways(s) -> prev
+                                              | Ast.WhenNot(sl) ->
+                                                  let x =
+                                                    statement_list sl Tail
+                                                      new_quantified3
+                                                      new_mquantified3
+                                                      label llabel slabel
+                                                      true true in
+                                                  ctl_or prev x
+                                              | Ast.WhenNotTrue(_)
+                                              | Ast.WhenNotFalse(_) ->
+                                                  failwith "unexpected"
+                                              | Ast.WhenModifier
+                                                  (Ast.WhenAny) -> CTL.False
+                                              | Ast.WhenModifier(_) -> prev)
+                                          CTL.False whencode))
+                                    (List.fold_left
+                                       (function prev ->
+                                         function
+                                             Ast.WhenAlways(s) ->
+                                               let x =
+                                                 statement s Tail
+                                                   new_quantified3
+                                                   new_mquantified3
+                                                   label llabel slabel true in
+                                               ctl_and prev x
+                                           | Ast.WhenNot(sl) -> prev
+                                           | Ast.WhenNotTrue(_)
+                                           | Ast.WhenNotFalse(_) ->
+                                               failwith "unexpected"
+                                           | Ast.WhenModifier(Ast.WhenAny) ->
+                                               CTL.True
+                                           | Ast.WhenModifier(_) -> prev)
+                                       CTL.True whencode) in
+                                ctl_au leftarg (make_match stripped_rbrace)]))
+           | _ -> None)
+       | _ -> None in
+      let optim2 =
+       (* function body is all minus, no whencode *)
+       match Ast.undots body with
+         [body] ->
+           (match Ast.unwrap body with 
+             Ast.Dots
+               ((_,i,(Ast.MINUS(_,_,_,[]) as d),_),[],_,_) ->
+                 (match (Ast.unwrap lbrace,Ast.unwrap rbrace) with
+                   (Ast.SeqStart((_,_,Ast.MINUS(_,_,_,[]),_)),
+                    Ast.SeqEnd((_,_,Ast.MINUS(_,_,_,[]),_)))
+                   when not (contains_pos rbrace) ->
+                     Some
+                       (* andany drops everything to the end, including close
+                          braces - not just function body, could check
+                          label to keep braces *)
+                       (ctl_and start_brace
+                          (ctl_ax
+                             (CTL.AndAny
+                                (CTL.FORWARD,guard_to_strict guard,CTL.True,
+                                 make_match
+                                   (make_meta_rule_elem d ([],[],[]))))))
+                 | _ -> None)
            | _ -> None)
        | _ -> None in
       let body_code =
-       match fn_nest with
-         Some (Common.Left stmt_dots) ->
-           (* special case for function header + body - header is unambiguous
-              and unique, so we can just look for the nested body anywhere
-              else in the CFG *)
-           CTL.AndAny
-             (CTL.FORWARD,guard_to_strict guard,start_brace,
-              statement_list stmt_dots
-                (* discards match on right brace, but don't need it *)
-                (Guard (make_seq_after end_brace after))
-                new_quantified3 new_mquantified3
-                None llabel slabel true guard)
-       | Some (Common.Right whencode) ->
-           (* try to be more efficient for the case where the body is just
-              ...  Perhaps this is too much of a special case, but useful
-              for dropping a parameter and checking that it is never used. *)
-           make_seq
-             [start_brace;
-               match whencode with
-                 [] -> CTL.True
-               | _ ->
-                   let leftarg =
-                     ctl_and
-                       (ctl_not
-                          (List.fold_left
-                             (function prev ->
-                               function
-                                   Ast.WhenAlways(s) -> prev
-                                 | Ast.WhenNot(sl) ->
-                                     let x =
-                                       statement_list sl Tail
-                                         new_quantified3 new_mquantified3
-                                         label llabel slabel true true in
-                                     ctl_or prev x
-                                 | Ast.WhenNotTrue(_) | Ast.WhenNotFalse(_) ->
-                                     failwith "unexpected"
-                                 | Ast.WhenModifier(Ast.WhenAny) -> CTL.False
-                                 | Ast.WhenModifier(_) -> prev)
-                             CTL.False whencode))
-                        (List.fold_left
-                          (function prev ->
-                            function
-                                Ast.WhenAlways(s) ->
-                                  let x =
-                                    statement s Tail
-                                      new_quantified3 new_mquantified3
-                                      label llabel slabel true in
-                                  ctl_and prev x
-                              | Ast.WhenNot(sl) -> prev
-                              | Ast.WhenNotTrue(_) | Ast.WhenNotFalse(_) ->
-                                  failwith "unexpected"
-                              | Ast.WhenModifier(Ast.WhenAny) -> CTL.True
-                              | Ast.WhenModifier(_) -> prev)
-                          CTL.True whencode) in
-                   ctl_au leftarg (make_match stripped_rbrace)]
-       | None ->
+       match (optim1,optim2) with
+         (Some o1,_) -> o1
+       | (_,Some o2) -> o2
+       | _ ->
            make_seq
              [start_brace;
                quantify guard b3fvs
@@ -2224,11 +2283,13 @@ let rec cleanup c =
 (* --------------------------------------------------------------------- *)
 (* Function declaration *)
 
-let top_level name (ua,pos) t =
+(* ua = used_after, fua = fresh_used_after, fuas = fresh_used_after_seeds *)
+
+let top_level name ((ua,pos),fua) (fuas,t) =
   let ua = List.filter (function (nm,_) -> nm = name) ua in
   used_after := ua;
   saved := Ast.get_saved t;
-  let quantified = Common.minus_set ua pos in
+  let quantified = Common.minus_set (Common.union_set ua fuas) pos in
   quantify false quantified
     (match Ast.unwrap t with
       Ast.FILEINFO(old_file,new_file) -> failwith "not supported fileinfo"
@@ -2272,13 +2333,13 @@ let top_level name (ua,pos) t =
 (* --------------------------------------------------------------------- *)
 (* Entry points *)
 
-let asttoctlz (name,(_,_,exists_flag),l) used_after positions =
+let asttoctlz (name,(_,_,exists_flag),l)
+    (used_after,fresh_used_after,fresh_used_after_seeds) positions =
   letctr := 0;
   labelctr := 0;
   (match exists_flag with
     Ast.Exists -> exists := Exists
   | Ast.Forall -> exists := Forall
-  | Ast.ReverseForall -> exists := ReverseForall
   | Ast.Undetermined ->
       exists := if !Flag.sgrep_mode2 then Exists else Forall);
 
@@ -2288,7 +2349,10 @@ let asttoctlz (name,(_,_,exists_flag),l) used_after positions =
         (function (t,_) ->
           match Ast.unwrap t with Ast.ERRORWORDS(exps) -> false | _ -> true)
         (List.combine l (List.combine used_after positions))) in
-  let res = List.map2 (top_level name) used_after l in
+  let res =
+    List.map2 (top_level name)
+      (List.combine used_after fresh_used_after)
+      (List.combine fresh_used_after_seeds l) in
   exists := Forall;
   res
 
index a872298..7e9c2e7 100644 (file)
@@ -3,7 +3,10 @@ type formula =
     (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl
 
 val asttoctl :
-    Ast_cocci.rule -> Ast_cocci.meta_name list list (* used after *) ->
+    Ast_cocci.rule ->
+      (Ast_cocci.meta_name list list (* used after *) *
+        Ast_cocci.meta_name list list (* fresh used after *) *
+        Ast_cocci.meta_name list list (* fresh used after seeds *)) ->
       Ast_cocci.meta_name list list (* positions *) ->
       formula list
 
index e50003c..f081cea 100644 (file)
@@ -292,6 +292,60 @@ let equal_metavarval valu valu' =
     ), _
       -> raise Impossible
 
+let equal_inh_metavarval valu valu' =
+  match valu, valu' with
+  | Ast_c.MetaIdVal a, Ast_c.MetaIdVal b -> a =$= b
+  | Ast_c.MetaFuncVal a, Ast_c.MetaFuncVal b -> a =$= b
+  | Ast_c.MetaLocalFuncVal a, Ast_c.MetaLocalFuncVal b -> 
+      (* do something more ? *)
+      a =$= b
+
+  (* al_expr before comparing !!! and accept when they match.
+   * Note that here we have Astc._expression, so it is a match
+   * modulo isomorphism (there is no metavariable involved here,
+   * just isomorphisms). => TODO call isomorphism_c_c instead of
+   * =*=. Maybe would be easier to transform ast_c in ast_cocci
+   * and call the iso engine of julia. *)
+  | Ast_c.MetaExprVal a, Ast_c.MetaExprVal b -> 
+      Lib_parsing_c.al_inh_expr a =*= Lib_parsing_c.al_inh_expr b
+  | Ast_c.MetaExprListVal a, Ast_c.MetaExprListVal b -> 
+      Lib_parsing_c.al_inh_arguments a =*= Lib_parsing_c.al_inh_arguments b
+
+  | Ast_c.MetaStmtVal a, Ast_c.MetaStmtVal b -> 
+      Lib_parsing_c.al_inh_statement a =*= Lib_parsing_c.al_inh_statement b
+  | Ast_c.MetaInitVal a, Ast_c.MetaInitVal b -> 
+      Lib_parsing_c.al_inh_init a =*= Lib_parsing_c.al_inh_init b
+  | Ast_c.MetaTypeVal a, Ast_c.MetaTypeVal b -> 
+      (* old: Lib_parsing_c.al_inh_type a =*= Lib_parsing_c.al_inh_type b *)
+      C_vs_c.eq_type a b
+        
+  | Ast_c.MetaListlenVal a, Ast_c.MetaListlenVal b -> a =|= b
+
+  | Ast_c.MetaParamVal a, Ast_c.MetaParamVal b -> 
+      Lib_parsing_c.al_param a =*= Lib_parsing_c.al_param b
+  | Ast_c.MetaParamListVal a, Ast_c.MetaParamListVal b -> 
+      Lib_parsing_c.al_params a =*= Lib_parsing_c.al_params b
+
+  | Ast_c.MetaPosVal (posa1,posa2), Ast_c.MetaPosVal (posb1,posb2) -> 
+      Ast_cocci.equal_pos posa1 posb1 && Ast_cocci.equal_pos posa2 posb2
+        
+  | Ast_c.MetaPosValList l1, Ast_c.MetaPosValList l2 ->
+      List.exists
+       (function (fla,cea,posa1,posa2) ->
+         List.exists
+           (function (flb,ceb,posb1,posb2) ->
+             fla =$= flb && cea =$= ceb &&
+             Ast_c.equal_posl posa1 posb1 && Ast_c.equal_posl posa2 posb2)
+            l2)
+       l1
+
+  | (B.MetaPosValList _|B.MetaListlenVal _|B.MetaPosVal _|B.MetaStmtVal _
+      |B.MetaTypeVal _ |B.MetaInitVal _
+      |B.MetaParamListVal _|B.MetaParamVal _|B.MetaExprListVal _
+      |B.MetaExprVal _|B.MetaLocalFuncVal _|B.MetaFuncVal _|B.MetaIdVal _
+    ), _
+      -> raise Impossible
+
 
 (*---------------------------------------------------------------------------*)
 (* could put in ast_c.ml, next to the split/unsplit_comma *)
@@ -431,22 +485,37 @@ let initialisation_to_affectation decl =
       | [x] -> 
           let ({B.v_namei = var;
                 B.v_type = returnType;
+                B.v_type_bis = tybis;
                 B.v_storage = storage;
                 B.v_local = local},
               iisep) = x in
 
+
+
           (match var with
           | Some (name, iniopt) -> 
               (match iniopt with
               | Some (iini, (B.InitExpr e, ii_empty2)) -> 
-                  let iis = Ast_c.info_of_name name in
+
                  let local =
                    match local with
                      Ast_c.NotLocalDecl -> Ast_c.NotLocalVar
-                   | Ast_c.LocalDecl -> Ast_c.LocalVar (iis.Ast_c.pinfo) in
-          
+                   | Ast_c.LocalDecl ->
+                       Ast_c.LocalVar (Ast_c.info_of_type returnType) in
+
+                  let typexp = 
+                    (* old: Lib_parsing_c.al_type returnType
+                     * but this type has not the typename completed so
+                     * instead try to use tybis
+                     *)
+                    match !tybis with
+                    | Some ty_with_typename_completed -> 
+                        ty_with_typename_completed
+                    | None -> raise Impossible
+                  in
+                        
                   let typ =
-                   ref (Some ((Lib_parsing_c.al_type returnType),local),
+                   ref (Some (typexp,local),
                               Ast_c.NotTest) in
                   let ident = name in
                   let idexpr = 
@@ -1688,6 +1757,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
      B.v_storage = (B.StoTypedef, inl);
      B.v_local = local; 
      B.v_attr = attrs;
+     B.v_type_bis = typb0bis;
    }, iivirg) ->
 
    (match A.unwrap tya0, typb0 with
@@ -1751,6 +1821,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
                         B.v_storage = (B.StoTypedef, inl);
                         B.v_local = local;
                         B.v_attr = attrs;
+                        B.v_type_bis = typb0bis;
                      },
                        iivirg),iiptvirgb,iistob)
                      )
@@ -1779,6 +1850,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
                         B.v_storage = (B.StoTypedef, inl);
                         B.v_local = local;
                         B.v_attr = attrs;
+                        B.v_type_bis = typb0bis;
                      },
                       iivirg),iiptvirgb,iistob)
                    )
@@ -1810,6 +1882,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
        B.v_storage = stob;
        B.v_local = local;
        B.v_attr = attrs;
+       B.v_type_bis = typbbis;
      }, iivirg) -> 
 
        tokenf ptvirga iiptvirgb >>= (fun ptvirga iiptvirgb -> 
@@ -1824,6 +1897,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
               B.v_storage = stob;
               B.v_local = local;
               B.v_attr = attrs;
+              B.v_type_bis = typbbis;
            },iivirg),
            iiptvirgb,iistob)
          )))))
@@ -1834,6 +1908,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
        B.v_storage = stob;
        B.v_local = local;
        B.v_attr = attrs;
+       B.v_type_bis = typbbis;
      },iivirg)
        ->
        tokenf ptvirga iiptvirgb >>= (fun ptvirga iiptvirgb -> 
@@ -1850,6 +1925,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
               B.v_storage = stob;
               B.v_local = local;
               B.v_attr = attrs;
+              B.v_type_bis = typbbis;
            },iivirg),
            iiptvirgb,iistob)
          )))))))
@@ -1860,6 +1936,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
        B.v_storage = stob; 
        B.v_local = local;
        B.v_attr = attrs;
+       B.v_type_bis = typbbis;
      }, iivirg)  ->
 
        if stob =*= (B.NoSto, false)
@@ -1873,6 +1950,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
                 B.v_storage = stob;
                 B.v_local = local;
                 B.v_attr = attrs;
+                B.v_type_bis = typbbis;
              }, iivirg), iiptvirgb, iistob)
            )))
        else fail
@@ -1884,6 +1962,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
        B.v_storage = (B.StoTypedef,inline);
        B.v_local = local;
        B.v_attr = attrs;
+       B.v_type_bis = typbbis;
      },iivirg) ->
 
        tokenf ptvirga iiptvirgb >>= (fun ptvirga iiptvirgb -> 
@@ -1936,6 +2015,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
               B.v_storage = (B.StoTypedef,inline);
               B.v_local = local;
               B.v_attr = attrs;
+              B.v_type_bis = typbbis;
            },
             iivirg),
             iiptvirgb, iistob)
@@ -2266,6 +2346,9 @@ and (struct_field: (A.declaration, B.field) matcher) = fun fa fb ->
               B.v_storage = stob;
               B.v_local = Ast_c.NotLocalDecl;
               B.v_attr = Ast_c.noattr;
+              B.v_type_bis = ref None; 
+              (* the struct field should also get expanded ? no it's not
+               * important here, we will rematch very soon *)
             },
             iivirg)            
           in
@@ -3758,16 +3841,12 @@ let rec (rule_elem_node: (A.rule_elem, Control_flow_c.node) matcher) =
 
   | A.Label(id,dd), F.Label (st, nameb, ((),ii)) ->
       let (ib2) = tuple_of_list1 ii in
-      (match A.unwrap id with
-      | A.Id(_s) ->
-       ident_cpp DontKnow id nameb >>= (fun ida nameb ->
-       tokenf dd ib2 >>= (fun dd ib2 ->
-         return (
-           A.Label (ida,dd),
-           F.Label (st,nameb, ((),[ib2]))
-         )))
-      | _ -> failwith "labels with metavariables not supported"
-      )
+      ident_cpp DontKnow id nameb >>= (fun ida nameb ->
+      tokenf dd ib2 >>= (fun dd ib2 ->
+       return (
+       A.Label (ida,dd),
+       F.Label (st,nameb, ((),[ib2]))
+      )))
 
   | A.Goto(goto,id,sem),          F.Goto (st,nameb, ((),ii))       ->
       let (ib1,ib3) = tuple_of_list2 ii in
index dfe7db7..0b6798d 100644 (file)
@@ -32,6 +32,10 @@ type mode = PatternMode | TransformMode
 val equal_metavarval : 
   Ast_c.metavar_binding_kind -> Ast_c.metavar_binding_kind -> bool
 
+(* for inherited metavariables.  no declaration link on expressions *)
+val equal_inh_metavarval : 
+  Ast_c.metavar_binding_kind -> Ast_c.metavar_binding_kind -> bool
+
 (*****************************************************************************)
 (* The parameter of the functor (the specific actions) *)
 (*****************************************************************************)
index e4c83b0..928bd1c 100644 (file)
@@ -426,7 +426,8 @@ let (mysat2:
   fun (flow, label, states) ctl (used_after, binding) -> 
     let binding2 = metavars_binding_to_binding2 binding in
     let (triples,(trans_info2, returned_any_states, used_after_envs)) = 
-      WRAPPED_ENGINE.satbis (flow, label, states) ctl (used_after, binding2)
+      WRAPPED_ENGINE.satbis (flow, label, states) ctl
+       (used_after, binding2)
     in
     if not (!Flag_parsing_cocci.sgrep_mode || !Flag.sgrep_mode2 ||
             !Flag_matcher.allow_inconsistent_paths)
index 9bcb3f4..9545d76 100644 (file)
@@ -35,6 +35,9 @@ let only_return_is_error_exit = ref false
 (* a hack to allow adding code in some more sgrep-like uses *)
 let allow_inconsistent_paths = ref false
 
+(* see the use of this variable in asttoctl2.ml *)
+let no_safe_expressions = ref false
+
 let show_misc = ref true
 
 
index 78dfb46..9b964e7 100644 (file)
@@ -300,7 +300,7 @@ module XMATCH = struct
           inherited variables *)
        (match Common.optionise (fun () -> tin.binding0 +> List.assoc c) with
          Some valu' ->
-           if Cocci_vs_c.equal_metavarval exp valu'
+           if Cocci_vs_c.equal_inh_metavarval exp valu'
            then success else failure
        | None ->
            (* if the variable is not there, it puts no constraints *)
@@ -323,7 +323,7 @@ module XMATCH = struct
     then
       match Common.optionise (fun () -> tin.binding0 +> List.assoc k) with
       | Some (valu') ->
-          if Cocci_vs_c.equal_metavarval valu valu'
+          if Cocci_vs_c.equal_inh_metavarval valu valu'
           then Some tin.binding
           else None
       |        None -> None
index 1a66f31..a3e6134 100644 (file)
@@ -76,23 +76,40 @@ let process_tree inherited_env l =
   let fresh_env =
     List.map
       (function
-         ((r,n) as fresh,None) ->
+         ((r,n) as fresh,Ast.NoVal) ->
            Printf.printf "%s: name for %s: " r n; (* not debugging code!!! *)
            flush stdout;
-           (fresh,string2val(read_fresh_id()))
-       | ((r,n) as fresh,Some seed) ->
-           (fresh,string2val(get_seeded seed)))
+           (fresh,let v = string2val(read_fresh_id()) in function _ -> v)
+       | ((r,n) as fresh,Ast.StringSeed seed) ->
+           (fresh,let v = string2val(get_seeded seed) in function _ -> v)
+       | ((r,n) as fresh,Ast.ListSeed seed) ->
+           (fresh,
+            function env ->
+              let strings =
+                List.map
+                  (function
+                      Ast.SeedString s -> s
+                    | Ast.SeedId id ->
+                        try
+                          (match List.assoc id env with
+                            Lib_engine.NormalMetaVal(Ast_c.MetaIdVal(str)) ->
+                              str
+                          | _ -> failwith "bad id value")
+                        with
+                          Not_found -> failwith "fresh: no binding for meta")
+                  seed in
+           string2val(String.concat "" strings)))
       all_fresh in
   let (_,res) =
     List.split
       (List.fold_left
         (function freshs_node_env_preds ->
-          function (fresh,_) as elem ->
+          function (fresh,fn) ->
             List.map
               (function (freshs,((node,env,pred) as cur)) ->
                 try
                   let _ = List.assoc fresh freshs in
-                  (freshs,(node,elem::env,pred))
+                  (freshs,(node,(fresh,fn env)::env,pred))
                 with Not_found -> (freshs,cur))
               freshs_node_env_preds)
         (List.combine local_freshs new_triples)
@@ -101,9 +118,25 @@ let process_tree inherited_env l =
 
 (* ----------------------------------------------------------------------- *)
 (* Create the environment to be used afterwards *)
-
-let collect_used_after used_after envs =
-  List.map (List.filter (function (v,vl) -> List.mem v used_after)) envs
+(* anything that a used after fresh variable refers to has to have a unique
+value, by virtue of the placement of the quantifier.  thus we augment
+inherited env with the first element of l, if any *)
+
+let collect_used_after used_after envs l inherited_env =
+  List.map2
+    (function env -> function l ->
+      let inherited_env =
+       match l with
+         [] -> inherited_env
+       | (_,fse,_)::_ ->
+           (* l represents the result from a single tree. fse is a complete
+              environment in that tree.  for a fresh seed, the environments
+              for all leaves contain the same information *)
+           fse@inherited_env  in
+      List.map
+       (function (v,vl) -> (v,vl inherited_env))
+       (List.filter (function (v,vl) -> List.mem v used_after) env))
+    envs l
 
 (* ----------------------------------------------------------------------- *)
 (* distinguish between distinct witness trees, each gets an index n *)
@@ -130,4 +163,4 @@ let process used_after inherited_env l =
   let (trees, fresh_envs) =
     List.split (List.map (process_tree inherited_env) l) in
   let trees = numberify trees in
-  (trees, collect_used_after used_after fresh_envs)
+  (trees, collect_used_after used_after fresh_envs l inherited_env)
index d405cb3..1842f8d 100644 (file)
@@ -33,8 +33,7 @@ let rec pp_binding_kind = function
   | Ast_c.MetaIdVal        s -> pp ("id " ^ s)
   | Ast_c.MetaFuncVal      s -> pp ("func " ^ s)
   | Ast_c.MetaLocalFuncVal s -> pp ("localfunc " ^ s)
-  | Ast_c.MetaExprVal      expr -> 
-      Pretty_print_c.pp_expression_simple expr
+  | Ast_c.MetaExprVal      expr -> Pretty_print_c.pp_expression_simple expr
   | Ast_c.MetaExprListVal  expr_list -> pp "<<exprlist>>"
   | Ast_c.MetaInitVal      ini -> 
       Pretty_print_c.pp_init_simple ini
index 6bcdb17..2c8a206 100644 (file)
@@ -215,7 +215,7 @@ module XTRANS = struct
 
     | (Ast_cocci.MINUS(old_pos,old_inst,old_adj,[]),
        Ast_cocci.MINUS(new_pos,new_inst,new_adj,[]))
-       when old_pos = new_pos && oldenv =*= tin.binding
+       when old_pos = new_pos && (oldenv =*= tin.binding or !Flag.sgrep_mode2)
            (* no way to combine adjacency information, just drop one *)
       ->
         cocciinforef := Some
@@ -473,7 +473,7 @@ module XTRANS = struct
   let meta_name_to_str (s1, s2) = 
     s1 ^ "." ^ s2
 
-  let envf keep _inherited = fun (s, value, _) f tin -> 
+  let envf keep inherited = fun (s, value, _) f tin -> 
     let s = Ast_cocci.unwrap_mcode s in
     let v = 
       if keep =*= Type_cocci.Saved
@@ -504,7 +504,11 @@ module XTRANS = struct
          *)
 
         (*f () tin*)
-        if Cocci_vs_c.equal_metavarval value value' 
+       let equal =
+         if inherited
+         then Cocci_vs_c.equal_inh_metavarval
+         else Cocci_vs_c.equal_metavarval in
+        if equal value value' 
         then f () tin
         else fail tin
 
index 3670c92..08fecb3 100644 (file)
@@ -1,4 +1,4 @@
-let version = "0.1.8"
+let version = "0.1.9-rc1"
 
 let path = 
   try (Sys.getenv "COCCINELLE_HOME") 
diff --git a/main.ml b/main.ml
index 7aa9ab5..94ee0bf 100644 (file)
--- a/main.ml
+++ b/main.ml
@@ -37,14 +37,16 @@ let cocci_file = ref ""
 let output_file = ref ""
 let inplace_modif = ref false  (* but keeps a .cocci_orig *)
 let outplace_modif = ref false (* generates a .cocci_res  *)
+let preprocess = ref false     (* run the C preprocessor before cocci *)
+let compat_mode = ref false
 
 (* somehow obsolete now *)
-let dir = ref false 
+let dir = ref false
 
 let include_headers = ref false
 let kbuild_info = ref ""
 
-let macro_file = ref "" 
+let macro_file = ref ""
 
 (* test mode *)
 let test_mode = ref false
@@ -98,6 +100,7 @@ let quiet_profile = (
     Flag_parsing_c.verbose_cfg;
     Flag_parsing_c.verbose_unparsing;
     Flag_parsing_c.verbose_visit;
+    Flag_parsing_c.verbose_cpp_ast;
 
     Flag_matcher.verbose_matcher;
     Flag_matcher.debug_engine;
@@ -192,9 +195,9 @@ let run_profile p =
 (* The spatch options *)
 (*****************************************************************************)
 
-let usage_msg = 
-  "Usage: " ^ basename Sys.argv.(0) ^ 
-    " -sp_file <SP> <infile> [-o <outfile>] [-iso_file <iso>] [options]" ^ 
+let usage_msg =
+  "Usage: " ^ basename Sys.argv.(0) ^
+    " -sp_file <SP> <infile> [-o <outfile>] [-iso_file <iso>] [options]" ^
     "\n" ^ "Options are:"
 
 (* forward reference trick *)
@@ -206,13 +209,13 @@ let long_usage_func  = ref (fun () -> ())
  * the developers of coccinelle or advanced-users that know
  * quite well the underlying semantics of coccinelle.
  *)
-  
+
 
 (* will be printed when use only ./spatch. For the rest you have to
- * use -longhelp to see them. 
+ * use -longhelp to see them.
  *)
-let short_options = [ 
-  "-sp_file",  Arg.Set_string cocci_file, 
+let short_options = [
+  "-sp_file",  Arg.Set_string cocci_file,
   " <file> the semantic patch file";
 
   "-o", Arg.Set_string output_file,
@@ -222,12 +225,12 @@ let short_options = [
   "-outplace", Arg.Set outplace_modif,
   "   store modifications in a .cocci_res file";
 
-  "-U", Arg.Int (fun n -> Flag_parsing_c.diff_lines := Some (i_to_s n)), 
+  "-U", Arg.Int (fun n -> Flag_parsing_c.diff_lines := Some (i_to_s n)),
   "  set number of diff context lines";
-  "-partial_match",        Arg.Set Flag_ctl.partial_match, 
+  "-partial_match",        Arg.Set Flag_ctl.partial_match,
   "    report partial matches of the SP on the C file";
 
-  "-iso_file", Arg.Set_string Config.std_iso,   
+  "-iso_file", Arg.Set_string Config.std_iso,
   " <file> (default=" ^ !Config.std_iso ^")";
   "-macro_file", Arg.Set_string macro_file,
   " <file>";
@@ -248,6 +251,10 @@ let short_options = [
   "-I",   Arg.String (function x -> FC.include_path := Some x),
   "  <dir> containing the header files (optional)";
 
+  "-preprocess", Arg.Set preprocess,
+  " run the C preprocessor before applying the semantic match";
+
+  "-c", Arg.Set compat_mode, " gcc/cpp compatibility mode";
 
   "-dir", Arg.Set dir,
   "    <dir> process all files in directory recursively";
@@ -257,70 +264,69 @@ let short_options = [
   "-patch", Arg.String (function s -> Flag.patch := Some s),
   ("    <dir> path name with respect to which a patch should be created\n"^
    "    \"\" for a file in the current directory");
-  "-kbuild_info", Arg.Set_string kbuild_info, 
+  "-kbuild_info", Arg.Set_string kbuild_info,
   "    <file> improve -dir by grouping related c files";
   "-pyoutput", Arg.Set_string Flag.pyoutput,
   "    Sets output routine: Standard values: <coccilib.output.Gtk|coccilib.output.Console>";
 
 
-  "-version",   Arg.Unit (fun () -> 
+  "-version",   Arg.Unit (fun () ->
     pr2 (spf "spatch version: %s" Config.version);
     exit 0;
-  ), 
+  ),
     "  guess what";
 
-  "-date",   Arg.Unit (fun () -> 
-    pr2 "version: $Date: 2009/05/08 16:15:31 $";
+  "-date",   Arg.Unit (fun () ->
+    pr2 "version: $Date: 2009/07/21 08:21:29 $";
     raise (Common.UnixExit 0)
-    ), 
+    ),
   "   guess what";
 
-  "-shorthelp", Arg.Unit (fun () -> 
+  "-shorthelp", Arg.Unit (fun () ->
     !short_usage_func();
     raise (Common.UnixExit 0)
-  ), 
+  ),
   "    see short list of options";
-  "-longhelp", Arg.Unit (fun () -> 
+  "-longhelp", Arg.Unit (fun () ->
     !long_usage_func();
     raise (Common.UnixExit 0)
-    ), 
+    ),
   "    see all the available options in different categories";
-  "-help", Arg.Unit (fun () -> 
+  "-help", Arg.Unit (fun () ->
     !long_usage_func();
     raise (Common.UnixExit 0)
   ),
   " ";
-  "--help", Arg.Unit (fun () -> 
+  "--help", Arg.Unit (fun () ->
     !long_usage_func();
     raise (Common.UnixExit 0)
   ),
   " ";
-    
 ]
 
 (* the format is a list of triples:
  *  (title of section * (optional) explanation of sections * option list)
  *)
 let other_options = [
-  "aliases and obsolete options", 
+  "aliases and obsolete options",
   "",
-  [ 
+  [
     "-sp", Arg.Set_string cocci_file,     " short option of -sp_file";
     "-iso", Arg.Set_string Config.std_iso,   " short option of -iso_file";
 
-    "-cocci_file", Arg.Set_string cocci_file, 
+    "-cocci_file", Arg.Set_string cocci_file,
     "   <file> the semantic patch file";
-    "-c", Arg.Set_string cocci_file,     " short option of -sp_file";
+(*     "-c", Arg.Set_string cocci_file,     " short option of -sp_file"; *)
   ];
 
-  "most useful show options", 
+  "most useful show options",
   "",
   [
     "-show_diff"           , Arg.Set FC.show_diff, " ";
     "-no_show_diff"           , Arg.Clear FC.show_diff, " ";
     "-show_flow"              , Arg.Set FC.show_flow,        " ";
     (* works in conjunction with -show_ctl_text *)
-    "-ctl_inline_let",   
+    "-ctl_inline_let",
     Arg.Unit
     (function _ -> FC.show_ctl_text := true; FC.inline_let_ctl := true), " ";
     "-ctl_show_mcodekind",
@@ -338,7 +344,7 @@ let other_options = [
     " show the dependencies related to each rule";
   ];
 
-  "verbose subsystems options",  
+  "verbose subsystems options",
   "",
   [
     "-verbose_ctl_engine",
@@ -377,15 +383,15 @@ let other_options = [
     "-debug_etdt",         Arg.Set  Flag_parsing_c.debug_etdt , "  ";
     "-debug_typedef",      Arg.Set  Flag_parsing_c.debug_typedef, "  ";
 
-    "-filter_msg",      Arg.Set  Flag_parsing_c.filter_msg , 
+    "-filter_msg",         Arg.Set  Flag_parsing_c.filter_msg ,
     "  filter some cpp message when the macro is a \"known\" cpp construct";
-    "-filter_define_error",Arg.Set Flag_parsing_c.filter_define_error,"  ";
-    "-filter_msg_define_error",Arg.Set Flag_parsing_c.filter_msg_define_error,
+    "-filter_define_error",     Arg.Set Flag_parsing_c.filter_define_error,"  ";
+    "-filter_msg_define_error", Arg.Set Flag_parsing_c.filter_msg_define_error,
     "  filter the error msg";
-    "-filter_passed_level", Arg.Set_int Flag_parsing_c.filter_passed_level,"  ";
+    "-filter_passed_level",     Arg.Set_int Flag_parsing_c.filter_passed_level,"  ";
 (*  debug cfg doesn't seem to have any effect, so drop it as an option *)
 (*  "-debug_cfg",          Arg.Set Flag_parsing_c.debug_cfg , "  "; *)
-    "-debug_unparsing",      Arg.Set  Flag_parsing_c.debug_unparsing, "  ";
+    "-debug_unparsing",         Arg.Set  Flag_parsing_c.debug_unparsing, "  ";
 
   ];
   (* could use Flag_parsing_c.options_debug_with_title instead *)
@@ -404,13 +410,13 @@ let other_options = [
   "bench options",
   "",
   [
-    "-profile", Arg.Unit (function () -> Common.profile := Common.PALL) , 
+    "-profile", Arg.Unit (function () -> Common.profile := Common.PALL) ,
     "   gather timing information about the main coccinelle functions";
-    "-bench", Arg.Int (function x -> Flag_ctl.bench := x), 
+    "-bench", Arg.Int (function x -> Flag_ctl.bench := x),
     "   <level> for profiling the CTL engine";
-    "-timeout", Arg.Int (fun x -> FC.timeout := Some x), 
+    "-timeout", Arg.Int (fun x -> FC.timeout := Some x),
     "   <sec> timeout in seconds";
-    "-steps", Arg.Int (fun x -> Flag_ctl.steps := Some x), 
+    "-steps", Arg.Int (fun x -> Flag_ctl.steps := Some x),
     "   max number of model checking steps per code unit";
     "-iso_limit", Arg.Int (fun x -> Flag_parsing_cocci.iso_limit := Some x),
     "   max depth of iso application";
@@ -433,17 +439,17 @@ let other_options = [
   "", 
   [  
 (* no popl in official version
-    "-popl", Arg.Set FC.popl, 
+    "-popl", Arg.Set FC.popl,
     "    simplified SmPL, for the popl paper";
 
     "-popl_mark_all",
     Arg.Unit
-    (function _ -> FC.popl := true; Flag_popl.mark_all := true), 
+    (function _ -> FC.popl := true; Flag_popl.mark_all := true),
     "    simplified SmPL, for the popl paper";
 
     "-popl_keep_all_wits",
     Arg.Unit
-    (function _ -> FC.popl := true; Flag_popl.keep_all_wits := true), 
+    (function _ -> FC.popl := true; Flag_popl.keep_all_wits := true),
     "    simplified SmPL, for the popl paper";
 *)
 
@@ -453,18 +459,20 @@ let other_options = [
     "    semantic patch generation";
 
     "-loop",              Arg.Set Flag_ctl.loop_in_src_code,    " ";
+    "-no_loops",          Arg.Set Flag_parsing_c.no_loops,
+    "   drop all back edges derived from looping constructs - unsafe";
 
     "-l1",                Arg.Clear Flag_parsing_c.label_strategy_2, " ";
-    "-ifdef_to_if",              Arg.Set FC.ifdef_to_if, 
+    "-ifdef_to_if",       Arg.Set FC.ifdef_to_if,
     "   convert ifdef to if (experimental)";
-    "-no_ifdef_to_if",              Arg.Clear FC.ifdef_to_if, 
+    "-no_ifdef_to_if",              Arg.Clear FC.ifdef_to_if,
     "   convert ifdef to if (experimental)";
 
     "-disable_multi_pass", Arg.Set Flag_parsing_c.disable_multi_pass, " ";
 
-    "-noif0_passing",   Arg.Clear Flag_parsing_c.if0_passing, 
+    "-noif0_passing",      Arg.Clear Flag_parsing_c.if0_passing,
     " ";
-    "-noadd_typedef_root",   Arg.Clear Flag_parsing_c.add_typedef_root, " ";
+    "-noadd_typedef_root", Arg.Clear Flag_parsing_c.add_typedef_root, " ";
     (* could use Flag_parsing_c.options_algo instead *)
 
 
@@ -481,6 +489,9 @@ let other_options = [
     "-allow_inconsistent_paths",
     Arg.Set Flag_matcher.allow_inconsistent_paths,
     "   if this flag is set don't check for inconsistent paths; dangerous";
+    "-no_safe_expressions",
+    Arg.Set Flag_matcher.no_safe_expressions,
+    "  make an expression disjunction not prioritise the topmost disjunct";
     "-int_bits", Arg.Int Flag_parsing_c.set_int_bits,
     "  the number of bits in an unsigned int";
     "-long_bits", Arg.Int Flag_parsing_c.set_long_bits,
@@ -494,21 +505,21 @@ let other_options = [
   "misc options",
   "",
   [
-    "-debugger",         Arg.Set Common.debugger , 
+    "-debugger",           Arg.Set Common.debugger,
     "   option to set if launch spatch in ocamldebug";
-    "-disable_once",     Arg.Set Common.disable_pr2_once, 
+    "-disable_once",       Arg.Set Common.disable_pr2_once,
     "   to print more messages";
-    "-show_trace_profile",          Arg.Set Common.show_trace_profile, 
+    "-show_trace_profile", Arg.Set Common.show_trace_profile,
     "   show trace";
-    "-save_tmp_files",   Arg.Set Common.save_tmp_files,   " ";
+    "-save_tmp_files",     Arg.Set Common.save_tmp_files,   " ";
   ];
 
   "concurrency",
   "",
   [
-    "-index",       Arg.Int (function x -> distrib_index := Some x) , 
+    "-index",       Arg.Int (function x -> distrib_index := Some x) ,
     "   the processor to use for this run of spatch";
-    "-max",         Arg.Int (function x -> distrib_max := Some x) , 
+    "-max",         Arg.Int (function x -> distrib_max := Some x) ,
     "   the number of processors available";
     "-mod_distrib", Arg.Set mod_distrib,
     "   use mod to distribute files among the processors";
@@ -517,7 +528,7 @@ let other_options = [
   "pad options",
   "",
   [
-    "-use_cache", Arg.Set Flag_parsing_c.use_cache, 
+    "-use_cache", Arg.Set Flag_parsing_c.use_cache,
     "   use .ast_raw pre-parsed cached C file";
     (* could use Flag_parsing_c.options_pad instead *)
   ];
@@ -527,22 +538,21 @@ let other_options = [
   "test mode and test options (works with tests/ or .ok files)",
   "The test options don't work with the -sp_file and so on.",
   [
-    "-test",    Arg.Set test_mode, 
+    "-test",    Arg.Set test_mode,
     "   <file> launch spatch on tests/file.[c,cocci]";
-    "-testall", Arg.Set test_all, 
+    "-testall", Arg.Set test_all,
     "   launch spatch on all files in tests/ having a .res";
     "-test_okfailed", Arg.Set test_okfailed,
     "    generates .{ok,failed,spatch_ok} files using .res files";
     "-test_regression_okfailed", Arg.Set test_regression_okfailed,
     "    process the .{ok,failed,spatch_ok} files in current dir";
 
-    "-compare_with_expected", Arg.Set compare_with_expected, 
-    "   use also file.res"; 
-    "-expected_score_file", Arg.Set_string expected_score_file, 
-    "   which score file to compare with in -testall"; 
+    "-compare_with_expected", Arg.Set compare_with_expected,
+    "   use also file.res";
+    "-expected_score_file", Arg.Set_string expected_score_file,
+    "   which score file to compare with in -testall";
     "-relax_include_path", Arg.Set FC.relax_include_path,
     " ";
-    
   ];
 
   "action mode",
@@ -561,10 +571,9 @@ let other_options = [
 ]
 
 
-let all_options = 
+let all_options =
   short_options ++ List.concat (List.map Common.thd3 other_options)
-  
+
 (* I don't want the -help and --help that are appended by Arg.align *)
 let arg_align2 xs =
   Arg.align xs +> List.rev +> Common.drop 2 +> List.rev
@@ -587,7 +596,7 @@ let arg_parse2 l f msg =
 
 let short_usage () =
  begin
-  Common.short_usage usage_msg short_options; 
+  Common.short_usage usage_msg short_options;
   pr2 "";
   pr2 "Example of use:";
   pr2 "  ./spatch -sp_file foo.cocci foo.c -o /tmp/newfoo.c";
@@ -595,7 +604,7 @@ let short_usage () =
  end
 
 
-let long_usage () = 
+let long_usage () =
   Common.long_usage usage_msg short_options other_options
 
 let _ = short_usage_func := short_usage
@@ -609,18 +618,18 @@ let adjust_stdin cfile k =
   if !dir
   then k()
   else
-    let newin = 
+    let newin =
       try
         let (dir, base, ext) = Common.dbe_of_filename cfile in
         let varfile = Common.filename_of_dbe (dir, base, "var") in
         if ext =$= "c" && Common.lfile_exists varfile
         then Some varfile
-        else None 
+        else None
       with Invalid_argument("Filename.chop_extension") -> None
     in
     Common.redirect_stdin_opt newin k
 
-let glimpse_filter (coccifile, isofile) dir = 
+let glimpse_filter (coccifile, isofile) dir =
   let (_metavars,astcocci,_free_var_lists,_negated_positions,
        _used_after_lists,_positions_lists,_,query) =
     Cocci.sp_of_file coccifile (Some isofile) in
@@ -638,19 +647,18 @@ let glimpse_filter (coccifile, isofile) dir =
             List.filter
               (fun file -> List.mem (Common.filesuffix file) suffixes))
       |        _ -> None (* error, eg due to pattern too big *)
-       
-       
+
 
 (*****************************************************************************)
 (* Main action *)
 (*****************************************************************************)
 
-let main_action xs = 
+let main_action xs =
   match xs with
   | x::xs ->
 
-      (* a more general solution would be to use 
-       * Common.files_of_dir_or_files (x::xs) 
+      (* a more general solution would be to use
+       * Common.files_of_dir_or_files (x::xs)
        * as some elements in xs may also be directories, or individual
        * files.
        *)
@@ -671,15 +679,15 @@ let main_action xs =
                    "directory is specified or when the -patch flag is used")
           );
 
-        let infiles = 
-          Common.profile_code "Main.infiles computation" (fun () -> 
+        let infiles =
+          Common.profile_code "Main.infiles computation" (fun () ->
            match !dir, !kbuild_info, !Flag.use_glimpse with
             (* glimpse *)
-            | false, _, true -> 
+            | false, _, true ->
                 failwith "-use_glimpse works only with -dir"
-            | true, s, true when s <> "" -> 
+            | true, s, true when s <> "" ->
                 failwith "-use_glimpse does not work with -kbuild"
-            | true, "", true -> 
+            | true, "", true ->
                 if not (null xs)
                 then failwith "-use_glimpse can accept only one dir";
 
@@ -701,7 +709,7 @@ let main_action xs =
                 files +> List.map (fun x -> [x])
                   (* normal *)
            | false, _, _ -> [x::xs]
-           | true, "", _ -> 
+           | true, "", _ ->
                Common.cmd_to_list
                  (if !include_headers
                  then ("find "^(join " " (x::xs))^" -name \"*.[ch]\"")
@@ -709,13 +717,13 @@ let main_action xs =
                +> List.map (fun x -> [x])
 
             (* kbuild *)
-           | true, kbuild_info_file,_ -> 
-               let dirs = 
-                  Common.cmd_to_list ("find "^(join " " (x::xs))^" -type d") 
+           | true, kbuild_info_file,_ ->
+               let dirs =
+                  Common.cmd_to_list ("find "^(join " " (x::xs))^" -type d")
                 in
                let info = Kbuild.parse_kbuild_info kbuild_info_file in
                let groups = Kbuild.files_in_dirs dirs info in
-               
+
                groups +> List.map (function Kbuild.Group xs -> xs)
          )
         in
@@ -751,42 +759,47 @@ let main_action xs =
                  loop 0 infiles
                end
          | _ -> failwith "inconsistent distribution information" in
-       
-        let outfiles = 
+
+        let outfiles =
           Common.profile_code "Main.outfiles computation" (fun () ->
            let cocci_infos =
              Cocci.pre_engine (!cocci_file, !Config.std_iso) in
            let res =
-             infiles +> List.map (fun cfiles -> 
+             infiles +> List.map (fun cfiles ->
                pr2 ("HANDLING: " ^ (join " " cfiles));
-               Common.timeout_function_opt !FC.timeout (fun () -> 
-                 Common.report_if_take_time 10 (join " " cfiles) (fun () -> 
+               Common.timeout_function_opt !FC.timeout (fun () ->
+                 Common.report_if_take_time 10 (join " " cfiles) (fun () ->
                     (* Unix.sleep 1; *)
-                    try 
-                      (* this is the main call *)
-                     Cocci.full_engine cocci_infos cfiles
-                   with 
-                   | Common.UnixExit x -> raise (Common.UnixExit x)
-                   | e ->
-                       if !dir
-                       then begin
-                         pr2 ("EXN:" ^ Printexc.to_string e); 
-                         [] (* *)
-                       end
-                       else raise e))) in
-           Cocci.post_engine cocci_infos;
-           res
-          ) +> List.concat 
+                    try
+                     let optfile =
+                       if !output_file <> "" && !compat_mode then
+                         Some !output_file
+                       else
+                         None
+                     in
+                       Common.redirect_stdout_opt optfile (fun () ->
+                         (* this is the main call *)
+                         Cocci.full_engine cocci_infos cfiles
+                                                          )
+                   with
+                     | Common.UnixExit x -> raise (Common.UnixExit x)
+                     | e ->
+                         if !dir
+                         then begin
+                           pr2 ("EXN:" ^ Printexc.to_string e);
+                           [] (* *)
+                         end
+                         else raise e))) in
+             Cocci.post_engine cocci_infos;
+             res
+          ) +> List.concat
         in
 
-        Common.profile_code "Main.result analysis" (fun () -> 
-         
+        Common.profile_code "Main.result analysis" (fun () ->
          Ctlcocci_integration.print_bench();
-         
           let outfiles = Cocci.check_duplicate_modif outfiles in
-          
-          outfiles +> List.iter (fun (infile, outopt) -> 
-           outopt +> Common.do_option (fun outfile -> 
+          outfiles +> List.iter (fun (infile, outopt) ->
+           outopt +> Common.do_option (fun outfile ->
              if !inplace_modif
              then begin
                 Common.command2 ("cp "^infile^" "^infile^".cocci_orig");
@@ -795,26 +808,32 @@ let main_action xs =
 
              if !outplace_modif
              then Common.command2 ("cp "^outfile^" "^infile^".cocci_res");
-             
-             if !output_file =$= "" 
-             then begin
-                let tmpfile = "/tmp/"^Common.basename infile in
-                pr2 (spf "One file modified. Result is here: %s" tmpfile);
-                Common.command2 ("cp "^outfile^" "^tmpfile);
-             end
+
+             (* potential source of security pb if the /tmp/ file is
+               * a symlink, so simpler to not produce any regular file
+               * (files created by Common.new_temp_file are still ok)
+               * anymore in /tmp.
+               *)
+              (*
+               if !output_file =$= ""
+               then begin
+                  let tmpfile = "/tmp/"^Common.basename infile in
+                  pr2 (spf "One file modified. Result is here: %s" tmpfile);
+                  Common.command2 ("cp "^outfile^" "^tmpfile);
+                end
+              *)
            ));
-          if !output_file <> "" then
-           (match outfiles with 
-           | [infile, Some outfile] when infile =$= x && null xs -> 
+          if !output_file <> "" && not !compat_mode then
+           (match outfiles with
+           | [infile, Some outfile] when infile =$= x && null xs ->
                 Common.command2 ("cp " ^outfile^ " " ^ !output_file);
-           | [infile, None] when infile =$= x && null xs -> 
+           | [infile, None] when infile =$= x && null xs ->
                 Common.command2 ("cp " ^infile^ " " ^ !output_file);
-           | _ -> 
-                failwith 
+           | _ ->
+                failwith
                   ("-o can not be applied because there is multiple " ^
                       "modified files");
            );
-          
           if !compare_with_expected
           then Testing.compare_with_expected outfiles))
 
@@ -824,7 +843,7 @@ let main_action xs =
 (*****************************************************************************)
 (* The coccinelle main entry point *)
 (*****************************************************************************)
-let main () = 
+let main () =
   begin
     let arglist = Array.to_list Sys.argv in
 
@@ -862,20 +881,20 @@ let main () =
     if !cocci_file <> "" && (not (!cocci_file =~ ".*\\.\\(sgrep\\|spatch\\)$"))
     then cocci_file := Common.adjust_ext_if_needed !cocci_file ".cocci";
 
-    if !Config.std_iso <> "" 
+    if !Config.std_iso <> ""
     then Config.std_iso := Common.adjust_ext_if_needed !Config.std_iso ".iso";
-    if !Config.std_h <> "" 
+    if !Config.std_h <> ""
     then Config.std_h := Common.adjust_ext_if_needed !Config.std_h ".h";
 
-    if !Config.std_h <> "" 
+    if !Config.std_h <> ""
     then Parse_c.init_defs_builtins !Config.std_h;
 
-    if !macro_file <> "" 
+    if !macro_file <> ""
     then Parse_c.init_defs_macros !macro_file;
 
 
     (* must be done after Arg.parse, because Common.profile is set by it *)
-    Common.profile_code "Main total" (fun () -> 
+    Common.profile_code "Main total" (fun () ->
 
 
     let all_actions = Test_parsing_c.actions() in
@@ -885,23 +904,23 @@ let main () =
     (* --------------------------------------------------------- *)
     (* The test framework. Works with tests/ or .ok and .failed  *)
     (* --------------------------------------------------------- *)
-    | [x] when !test_mode    -> 
+    | [x] when !test_mode    ->
         FC.include_path := Some "tests/include";
         Testing.testone x !compare_with_expected
 
-    | []  when !test_all -> 
+    | []  when !test_all ->
         FC.include_path := Some "tests/include";
         if !expected_score_file <> ""
         then Testing.testall ~expected_score_file:!expected_score_file ()
         else Testing.testall ()
 
-    | [] when !test_regression_okfailed -> 
+    | [] when !test_regression_okfailed ->
         Testing.test_regression_okfailed ()
 
-    | x::xs when !test_okfailed -> 
+    | x::xs when !test_okfailed ->
         (* do its own timeout on FC.timeout internally *)
         FC.relax_include_path := true;
-       adjust_stdin x (fun () -> 
+       adjust_stdin x (fun () ->
           Testing.test_okfailed !cocci_file (x::xs)
         )
 
@@ -912,13 +931,13 @@ let main () =
     | xs when List.mem !action (Common.action_list all_actions) ->
         Common.do_action !action xs all_actions
 
-    | [file] when !action =$= "-parse_cocci" -> 
+    | [file] when !action =$= "-parse_cocci" ->
         Testing.test_parse_cocci file
 
      (* I think this is used by some scripts in some Makefile for our
       * big-tests. So dont remove.
       *)
-    | [file1;file2] when !action =$= "-compare_c" -> 
+    | [file1;file2] when !action =$= "-compare_c" ->
        Test_parsing_c.test_compare_c file1 file2 (* result = unix code *)
 
     (* could add the Test_parsing_c.test_actions such as -parse_c & co *)
@@ -927,38 +946,36 @@ let main () =
     (* --------------------------------------------------------- *)
     (* This is the main entry *)
     (* --------------------------------------------------------- *)
-    | x::xs -> 
+    | x::xs ->
         main_action (x::xs)
 
     (* --------------------------------------------------------- *)
     (* empty entry *)
     (* --------------------------------------------------------- *)
     | [] -> short_usage()
-        
   ));
     if !Pycocci.initialised && (Pycocci.py_isinitialized ()) != 0 then begin
       ignore(Pycocci.pyrun_simplestring "cocci.finalise()");
-      if !Flag.show_misc 
+      if !Flag.show_misc
       then Common.pr2 "Finalizing python\n";
       Pycocci.py_finalize ();
     end
   end
 
 
-let main_with_better_error_report () = 
-  if !Common.debugger then main () 
-  else 
-    try 
-      main () 
+let main_with_better_error_report () =
+  if !Common.debugger then main ()
+  else
+    try
+      main ()
     with
-    | Unix.Unix_error (_, "stat", filename) -> 
+    | Unix.Unix_error (_, "stat", filename) ->
         pr2 (spf "ERROR: File %s does not exist" filename);
         raise (UnixExit (-1))
-    
 
 (*****************************************************************************)
 let start =
-  Common.main_boilerplate (fun () -> 
+  Common.main_boilerplate (fun () ->
     main_with_better_error_report ();
     Ctlcocci_integration.print_bench();
   )
index 3be6d2e..04a03c3 100644 (file)
@@ -6,17 +6,29 @@
 ##############################################################################
 TARGET=parsing_c
 
+-include ../Makefile.config
+
+ifeq ($(FEATURE_TARZAN), 1)
+TARZANSRC=sexp_ast_c.ml
+TARZANINCLUDE=-I ../ocamlsexp
+endif
+
+
 
 # - type_cocci.ml ast_cocci.ml  # + unparse_hrule
 SRC= flag_parsing_c.ml parsing_stat.ml \
  token_c.ml ast_c.ml control_flow_c.ml \
+ $(TARZANSRC) \
  visitor_c.ml lib_parsing_c.ml \
  control_flow_c_build.ml \
  pretty_print_c.ml \
  semantic_c.ml lexer_parser.ml parser_c.ml lexer_c.ml \
  token_helpers.ml token_views_c.ml \
- cpp_token_c.ml parsing_hacks.ml \
+ cpp_token_c.ml  \
+ parsing_hacks.ml \
+ cpp_analysis_c.ml \
  unparse_cocci.ml unparse_c.ml unparse_hrule.ml  \
+ parsing_recovery_c.ml parsing_consistency_c.ml \
  parse_c.ml type_c.ml \
  cpp_ast_c.ml \
  type_annoter_c.ml comment_annotater_c.ml \
@@ -35,6 +47,7 @@ LIBS=../commons/commons.cma ../globals/globals.cma \
      ../parsing_cocci/cocci_parser.cma
 
 INCLUDES= -I ../commons -I ../commons/ocamlextra -I ../commons/ocollection \
+ $(TARZANINCLUDE) \
   -I ../globals -I  ../parsing_cocci
 
 #LIBS=../commons/commons.cma
@@ -119,6 +132,10 @@ locindiv:
        wc -l ast_c.ml
        wc -l parse_c.ml
 
+##############################################################################
+# Literate Programming rules
+##############################################################################
+
 
 ##############################################################################
 # Generic rules
index 747fac8..3c4177d 100644 (file)
@@ -511,6 +511,10 @@ and declaration =
      and onedecl = 
        { v_namei: (name * (info (* = *) * initialiser) option) option;
          v_type: fullType;
+         (* semantic: set in type annotated and used in cocci_vs_c 
+          * when we transform some initialisation into affectation
+          *)
+         v_type_bis: fullType (* Type_c.completed_and_simplified *) option ref;
          v_storage: storage;
          v_local: local_decl; (* cocci: *)
          v_attr: attribute list; (* gccext: *)
@@ -521,6 +525,9 @@ and declaration =
 
      and local_decl = LocalDecl | NotLocalDecl
 
+     (* fullType is the type used if the type should be converted to
+       an assignment.  It can be adjusted in the type annotation
+       phase when typedef information is availalble *)
      and initialiser = initialiserbis wrap
        and initialiserbis = 
           | InitExpr of expression 
@@ -916,6 +923,9 @@ let mcode_of_info ii = fst (mcode_and_env_of_cocciref ii.cocci_tag)
 let pinfo_of_info ii = ii.pinfo
 let parse_info_of_info ii = get_pi ii.pinfo
 
+let strloc_of_info ii = 
+  spf "%s:%d" (file_of_info ii) (line_of_info ii)
+
 let is_fake ii =
   match ii.pinfo with
     FakeTok (_,_) -> true
@@ -1162,8 +1172,6 @@ let ii_of_name name =
   let (s,ii) = get_s_and_ii_of_name name in
   ii
 
-
-
 let get_local_ii_of_expr_inlining_ii_of_name e = 
   let (ebis,_),ii = e in
   match ebis, ii with
@@ -1182,6 +1190,15 @@ let get_local_ii_of_tybis_inlining_ii_of_name ty =
   | TypeName (name, _typ), [] -> ii_of_name name
   | _, ii -> ii
 
+(* the following is used to obtain the argument to LocalVar *)
+let info_of_type ft = 
+  let (qu, ty) = ft in
+  (* bugfix: because of string->name, the ii can be deeper *)
+  let ii = get_local_ii_of_tybis_inlining_ii_of_name ty in
+  match ii with
+  | ii::_ -> ii.pinfo
+  | [] -> failwith "type has no text; need to think again"
+
 (* only Label and Goto have name *)
 let get_local_ii_of_st_inlining_ii_of_name st =
   match st with
index 0b9062f..c398cb0 100644 (file)
@@ -50,7 +50,7 @@ let cvs_compute_newstr s =
     let tag = matched1 substr in
 
     if not (List.mem tag cvs_keyword_list)
-    then failwith ("unknown CVS keyword: " ^ tag);
+    then pr2_once ("unknown CVS keyword: " ^ tag);
     
     "CVS_MAGIC_STRING" 
   ) s 
@@ -166,7 +166,7 @@ let compare_ast filename1 filename2  =
 
 
   let process_filename filename = 
-    let (c, _stat) = Parse_c.parse_print_error_heuristic filename in
+    let (c, _stat) = Parse_c.parse_c_and_cpp filename in
     let c = List.map fst c in
     c +> Lib_parsing_c.al_program +> normal_form_program
   in
@@ -306,8 +306,8 @@ let compare_token filename1 filename2 =
     loop toks1 toks2 in
   *)
 
-  let (c1, _stat) = Parse_c.parse_print_error_heuristic filename1 in
-  let (c2, _stat) = Parse_c.parse_print_error_heuristic filename2 in
+  let (c1, _stat) = Parse_c.parse_c_and_cpp filename1 in
+  let (c2, _stat) = Parse_c.parse_c_and_cpp filename2 in
 
   let res = 
     if List.length c1 <> List.length c2 
index fdf388d..1d7d504 100644 (file)
@@ -1,5 +1,3 @@
-open Common
-
 type compare_result = 
   | Correct 
   | Pb of string
@@ -9,12 +7,12 @@ type compare_result =
 (* the string list is the output of diff *)
 
 val compare_ast : 
- filename -> filename -> compare_result * string list 
-
+ Common.filename -> Common.filename -> compare_result * string list 
 val compare_token :
-  filename -> filename -> compare_result * string list
+  Common.filename -> Common.filename -> compare_result * string list
 
-val compare_default : filename -> filename -> compare_result * string list
+val compare_default : 
+  Common.filename -> Common.filename -> compare_result * string list
 
 
 val compare_result_to_string : compare_result * string list -> string
index 588efbf..220f8e7 100644 (file)
@@ -714,7 +714,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
       !g#add_arc ((newafter, newfakeelse), Direct);
       !g#add_arc ((newi, newafter), Direct);
       let finalthen = aux_statement (Some newfakethen, newxi) st in
-      !g +> add_arc_opt (finalthen, newi);
+      !g +> add_arc_opt
+       (finalthen, if !Flag_parsing_c.no_loops then newafter else newi);
       Some newfakeelse
 
       
@@ -754,7 +755,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
         }
       in
 
-      if not is_zero
+      if not is_zero && not !Flag_parsing_c.no_loops
       then begin
         let newfakethen = !g +> add_node InLoopNode lbl "[dowhiletrue]" in
         !g#add_arc ((taili, newfakethen), Direct); 
@@ -801,7 +802,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
       !g#add_arc ((newafter, newfakeelse), Direct);
       !g#add_arc ((newi, newafter), Direct);
       let finalthen = aux_statement (Some newfakethen, newxi) st in
-      !g +> add_arc_opt (finalthen, newi);
+      !g +> add_arc_opt
+       (finalthen, if !Flag_parsing_c.no_loops then newafter else newi);
       Some newfakeelse
 
 
@@ -836,7 +838,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
       !g#add_arc ((newafter, newfakeelse), Direct);
       !g#add_arc ((newi, newafter), Direct);
       let finalthen = aux_statement (Some newfakethen, newxi) st in
-      !g +> add_arc_opt (finalthen, newi);
+      !g +> add_arc_opt
+       (finalthen, if !Flag_parsing_c.no_loops then newafter else newi);
       Some newfakeelse
 
 
diff --git a/parsing_c/cpp_analysis_c.ml b/parsing_c/cpp_analysis_c.ml
new file mode 100644 (file)
index 0000000..04d0522
--- /dev/null
@@ -0,0 +1,487 @@
+(* Yoann Padioleau
+ * 
+ * Copyright (C) 2009 University of Urbana Champaign
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License (GPL)
+ * version 2 as published by the Free Software Foundation.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * file license.txt for more details.
+ *)
+
+open Common 
+
+open Oset 
+
+open Parser_c 
+
+(*****************************************************************************)
+(* Prelude  *)
+(*****************************************************************************)
+(*
+ * Is this module make all the tricks used in parsing_hacks and 
+ * most definitions in standard.h obsolete ? It depends. In a 
+ * static analysis context we want to be accurate, and so expand
+ * all the code that will make our type/callgraph analysis simpler.
+ * So we want to expand many macros, based on heuristics in this file.
+ * In a transformation context, we want to let the programmer
+ * match over certain constructs such as declarator, iterator, 
+ * macro_field, etc, and in this case we want to parse as-is.
+ * 
+ * What could be done is that some of the analysis performed in this
+ * file could then be injected in parsing_hacks, for instance via
+ * hints, to make the parse as-is job easier too.
+ * 
+ * 
+ *
+ * todo: right now I find dangerous macro based on ## and go upward
+ * to also include calling macros. But this dangerous macro itself
+ * may use other macros that looks ok but that should also be expanded
+ * because it defines some entities. So also recurse downward ?
+ * 
+ * todo? do analysis a la Astec ? try infer the meaning of the macro
+ * from its body but also from its context of use ? Can then
+ * do a taxonomy of macro ? not just foreach or declarator but
+ * polymorphic function (e.g. MAX), type generator, etc. Cf astec paper 
+ * or Ernst cpp study paper ?
+ * 
+ *)
+
+(*****************************************************************************)
+(* Types  *)
+(*****************************************************************************)
+
+(* callgraph of macros *)
+type key = string
+type node = (Common.filename * Cpp_token_c.define_def) list ref
+type edge = Direct
+
+type callgraph_macros = (key, node, edge) Ograph_simple.ograph_mutable
+
+let rootname = "__ROOT__"
+  
+(*****************************************************************************)
+(* Helpers  *)
+(*****************************************************************************)
+let bodytoks_of_body body =
+  match body with
+  | Cpp_token_c.DefineHint _ -> 
+      pr2 "weird, hint in cpp_analysis_c";
+      []
+  | Cpp_token_c.DefineBody xs -> 
+      xs
+
+
+let build_empty_set () = new Osetb.osetb Setb.empty
+
+
+(*****************************************************************************)
+(* Builder  *)
+(*****************************************************************************)
+
+let build_callgraph_macros xs = 
+  let (g: callgraph_macros) = new Ograph_simple.ograph_mutable in
+
+  g#add_node rootname (ref []);
+
+  (* build nodes *)
+  xs +> List.iter (fun (file, (x, def)) -> 
+    (* todo? if exist already ? *)
+    g#add_node x (ref []);
+    g#add_arc (rootname, x) Direct;
+  );
+  xs +> List.iter (fun (file, (x, def)) -> 
+    let node = g#nodes#find x in
+    Common.push2 (file, def) node;
+  );
+
+  (* build edges *)
+  xs +> List.iter (fun (file, (x, def)) -> 
+    let (s, params, body) = def in 
+    let toks = bodytoks_of_body body in
+    toks +> List.iter (fun tok -> 
+      match tok with
+      | TIdent (x2,ii) -> 
+          (try 
+            let _ = g#nodes#find x2 in
+            g#add_arc (x, x2) Direct;
+          with 
+           Not_found -> ()
+          )
+      | _ -> 
+          ()
+    );
+    
+  );
+  g
+
+
+(* ---------------------------------------------------------------------- *)
+let check_no_loop_graph g = 
+
+  let self_referential         = ref [] in 
+  let macros_in_loop_with_path = ref [] in
+
+  let already = Hashtbl.create 101 in
+
+  let already_error_msg = Hashtbl.create 101 in
+
+  let rec aux_dfs path xi = 
+    if Hashtbl.mem already xi && List.mem xi path
+    then begin
+      let node = g#nodes#find xi in
+      let file = 
+        match !node with
+        | (file, _)::xs -> file
+        | [] -> raise Impossible
+      in
+      (* in apache/srclib/apr/include/arch/win32/apr_dbg_win32_handles.h
+       * we get some __ROOT__ -> CreateMutexA -> CreateMutexA because
+       * the macro is self referential. Probably cpp has
+       * some special handling of such case and does not expand
+       * recursively. 
+       * 
+       *)
+      let is_self_reference = 
+        match xi::path with
+        | x::y::z -> x = y
+        | _ -> false
+      in
+      if not is_self_reference && not (Hashtbl.mem already_error_msg xi)
+      then begin
+        Hashtbl.add already_error_msg xi true;
+        pr2 (spf "PB: loop in macro %s of file %s" xi file);
+        pr2 (spf "path is: %s" (Common.join " -> " (List.rev (xi::path))));
+        Common.push2 (xi, path) macros_in_loop_with_path;
+      end
+      else begin 
+        Common.push2 xi self_referential;
+      end
+    end else begin
+      Hashtbl.add already xi true;
+      (* f xi path; *)
+      let succ = g#successors xi in
+      let succ' = succ#tolist +> List.map fst in
+      succ' +> List.iter (fun yi -> 
+          aux_dfs (xi::path) yi
+      );
+    end
+  in
+  aux_dfs [] rootname;
+  !self_referential, !macros_in_loop_with_path
+  
+(* ---------------------------------------------------------------------- *)
+let slice_of_callgraph_macros (g: callgraph_macros) goodnodes =
+
+  let (g': callgraph_macros) = new Ograph_simple.ograph_mutable in
+
+  goodnodes#tolist +> List.iter (fun k -> 
+    let v = g#nodes#find k in
+    g'#add_node k v;
+  );
+  goodnodes#tolist +> List.iter (fun k -> 
+    let succ = g#successors k in
+    let succ = Oset.mapo (fun (k', edge) -> k') (build_empty_set()) succ in
+    let inter = succ $**$ goodnodes in
+    inter#tolist +> List.iter (fun k' -> 
+      g'#add_arc (k, k') Direct;
+    )
+  );
+  g'
+
+(*****************************************************************************)
+(* Macros expansion  *)
+(*****************************************************************************)
+
+(* get the longuest one ? or the one that contains the dangerous macro ? *) 
+let get_single_file_and_def_of_node k v =
+  match !v with
+  | [] -> raise Impossible
+  | [file, def] -> file, def
+  | (file, def)::y::ys -> 
+      pr2 (spf "multiple def for %s but I kept only one" k);
+      file, def
+
+module TV = Token_views_c
+
+let (macro_expand: 
+     (string, Cpp_token_c.define_def) Hashtbl.t -> 
+      Cpp_token_c.define_def -> Cpp_token_c.define_def) =
+ fun current_def def -> 
+  let (s, params, body) = def in 
+  let body' = 
+    match body with
+    | Cpp_token_c.DefineHint _ -> 
+        body
+    | Cpp_token_c.DefineBody xs -> 
+        (* bugfix: we dont want to evalute the x ## b at this moment.
+         * so can not use fix_tokens_cpp in the same we use it
+         * to parse C code.
+        let xs' = 
+          Parsing_hacks.fix_tokens_cpp ~macro_defs:current_def xs
+        in
+         *)
+        let tokens = xs in
+        let tokens2 = ref (tokens +> Common.acc_map TV.mk_token_extended) in
+        let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in
+        let paren_grouped = TV.mk_parenthised  cleaner in
+        Cpp_token_c.apply_macro_defs
+          ~msg_apply_known_macro:(fun s2 -> 
+            pr2 (spf "APPLYING: %s in definition of %s" s2 s))
+          ~msg_apply_known_macro_hint:(fun s -> 
+            pr2 "hint")
+          ~evaluate_concatop:false 
+          ~inplace_when_single:false
+          current_def paren_grouped;
+        (* because the before field is used by apply_macro_defs *)
+        tokens2 := TV.rebuild_tokens_extented !tokens2; 
+
+        (* bugfix *)
+        let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in
+
+        let xs' = 
+          Parsing_hacks.insert_virtual_positions 
+            (cleaner +> Common.acc_map (fun x -> x.TV.tok))
+        in
+
+        Cpp_token_c.DefineBody xs'
+  in
+  (s, params, body')
+
+
+(* work by side effect as both the binding and callgraph are mutable 
+ * data structure
+ *)
+let no_inlining = ref false
+
+let rec (recurse_expand_macro_topological_order: 
+         int -> (string, Cpp_token_c.define_def) Hashtbl.t -> 
+         callgraph_macros -> unit) =
+ fun depth current_def g ->
+
+  (* naive: *)
+  if !no_inlining then 
+    g#nodes#tolist +> List.iter (fun (k, v) -> 
+      if k =$= rootname then () 
+      else
+        let def = get_single_file_and_def_of_node k v +> snd in
+        Hashtbl.add current_def k def
+    )
+  else 
+    let remaining = g#nodes#tolist in
+    (match remaining with
+    | [] -> raise Impossible
+    | [(k,n)] -> 
+        assert (k = rootname);
+        (* end recursion *)
+        ()
+    | x::y::xs -> 
+        let leafs = (g#leaf_nodes ())#tolist in
+        pr2 (spf "step: %d, %s" depth (leafs +> Common.join " "));
+
+        Ograph_simple.print_ograph_generic
+          ~str_of_key:(fun k -> k)
+          ~str_of_node:(fun k node -> k)
+          (spf "/tmp/graph-%d.dot" depth)
+          g;
+
+        assert(not (null leafs));
+
+
+        (* little specialisation to avoid useless work *)
+        if depth = 0 
+        then begin
+          leafs +> List.iter (fun k -> 
+            let node = g#nodes#find k in
+            let def = get_single_file_and_def_of_node k node +> snd in
+            Hashtbl.add current_def k def
+          )
+        end else begin
+          let new_defs = 
+            leafs +> List.map (fun k -> 
+              let node = g#nodes#find k in
+              let def = get_single_file_and_def_of_node k node +> snd in
+              let def' = macro_expand current_def def in
+              k, def'
+            )
+          in
+          new_defs +> List.iter (fun (k,def) -> Hashtbl.add current_def k def);
+        end;
+        leafs +> List.iter (fun k -> g#del_leaf_node_and_its_edges k);
+        recurse_expand_macro_topological_order (depth+1) current_def g;
+    )
+
+
+
+(*****************************************************************************)
+(* Macros def analysis  *)
+(*****************************************************************************)
+
+let is_dangerous_macro def = 
+  let (s, params, body) = def in 
+  let toks = bodytoks_of_body body in
+
+  (match params, body with
+
+  (* ex: APU_DECLARE_DATA *)
+  | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [] -> 
+      if s =~ ".*_H_*"
+      then false
+      else true
+
+  (* ex: AP_DECLARE(x) x  *)
+  | Cpp_token_c.Params([s1]), Cpp_token_c.DefineBody [TIdent (s2,i1)] ->
+      s1 =$= s2
+
+  (* keyword aliases. eg: APR_inline __inline__ *)
+  | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [x] ->
+      (match x with
+      | Tinline _ -> true
+      | Tconst _ -> true
+      | Tstatic _ -> true
+      | Textern _ -> true
+      | _ -> false
+      )
+
+  | _ , Cpp_token_c.DefineBody xs ->
+      (match List.rev xs with
+      (* make extract_macros looping on apache, get some infinite "step x" *)
+      | TPtVirg _::_ -> true
+      | _ -> false
+      )
+
+  | _ -> false
+  ) ||
+  
+
+  (toks +> List.exists (fun tok -> 
+    match tok with
+    | TCppConcatOp _ -> true
+
+    | Tattribute (ii) -> true
+    | TattributeNoarg (ii) -> true 
+
+(* FP with local variable.
+    | TIdent (s,ii) -> 
+        s ==~ Parsing_hacks.regexp_annot && not (List.mem s 
+          ["__FILE__";"__LINE__";"__FUNCTION__"])
+*)
+    | _ -> false
+  ))
+
+
+let is_trivial_macro def = 
+  let (s, params, body) = def in 
+  match params, body with
+  | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [Parser_c.TInt _]
+(* no!!! those are not trivial macro, they are dangerous too.
+  | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [] -> 
+      true
+*)
+  | _ -> 
+      false
+
+(*
+            | () when s ==~ Parsing_hacks.regexp_annot -> true
+            | () when List.exists (function
+                 (*| Parser_c.Tattribute _ -> true*)
+                 | Parser_c.TCppConcatOp _ -> true
+                 | _ -> false) bodytoks 
+               -> true
+            | () -> false
+          in
+*)
+
+  
+(*****************************************************************************)
+(* Main entry point *)
+(*****************************************************************************)
+
+let extract_dangerous_macros xs = 
+
+  (* prepare initial set of macro definitions to work on *)
+  let all_macros = 
+    xs +> List.map (fun (file, defs) -> 
+      defs +> List.map (fun def -> file, def)
+    ) +> List.flatten
+  in
+  let macros = 
+    all_macros +> Common.exclude(fun (file,(x,def)) -> is_trivial_macro def) in
+
+  (* initial set of problematic macros *)
+  let problematic_macros = 
+    macros +> Common.filter (fun (file, (x, def)) -> is_dangerous_macro def) in
+
+
+  (* include the ancestors of problematic macros *)
+  let g = 
+    build_callgraph_macros macros in
+  let self_referiential, macros_in_loop_with_path = 
+    check_no_loop_graph g in
+
+  Ograph_simple.print_ograph_generic
+    ~str_of_key:(fun k -> k)
+    ~str_of_node:(fun k node -> k)
+    "/tmp/graph.dot"
+    g;
+  let start = 
+    problematic_macros +> List.map (fun (file, (x, def)) -> x) +> Common.nub in
+  
+  let finalset = 
+    start +> List.fold_left (fun acc x -> 
+      if List.exists (fun y -> fst y = x) macros_in_loop_with_path
+        || List.mem x self_referiential
+      then begin
+        pr2 (spf "PB: ignoring %s macro as it is in a loop" x);
+        acc
+        end 
+      else 
+        let acc = acc#add x in
+        let ancestors = g#ancestors x in
+        acc $++$ ancestors
+    ) (build_empty_set ())
+  in
+
+
+  (* Now prepare for fixpoint expansion of macros to avoid doing
+   * the work in cpp_engine.
+   *)
+  let sliced_g = 
+    slice_of_callgraph_macros g finalset
+  in
+  Ograph_simple.print_ograph_generic
+    ~str_of_key:(fun k -> k)
+    ~str_of_node:(fun k node -> k)
+    "/tmp/graph2.dot"
+    sliced_g;
+
+
+  (* do fixpoint expansion *)
+  let (binding: (string, Cpp_token_c.define_def) Hashtbl.t) = 
+    Hashtbl.create 101 in
+  (* work by side effects on the hashtbl and graph *)
+  recurse_expand_macro_topological_order 0 binding sliced_g;
+
+
+  (* prepare final result *)
+  let final_macros = 
+    binding +> Common.hash_to_list +> List.map (fun (x, def) -> 
+      let node = g#nodes#find x in
+      let file = get_single_file_and_def_of_node x node +> fst in
+      (file, (x, def))
+    )
+  in
+
+  pr2 (spf "total macros numbers: %d"
+          (List.length all_macros));
+  pr2 (spf "problematic macros numbers: %d"
+          (List.length problematic_macros));
+  pr2 (spf "final (after closure) problematic macros numbers: %d"
+          (List.length final_macros));
+
+  let grouped = Common.group_assoc_bykey_eff final_macros in
+  grouped
diff --git a/parsing_c/cpp_analysis_c.mli b/parsing_c/cpp_analysis_c.mli
new file mode 100644 (file)
index 0000000..2a8e317
--- /dev/null
@@ -0,0 +1,4 @@
+
+val extract_dangerous_macros: 
+  (Common.filename * (string * Cpp_token_c.define_def) list) list -> 
+  (Common.filename * (string * Cpp_token_c.define_def) list) list
index ae2ce2c..331d9d6 100644 (file)
@@ -18,7 +18,8 @@ open Ast_c
 (*****************************************************************************)
 (* Wrappers *)
 (*****************************************************************************)
-let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_cpp_ast
+let pr2, pr2_once = 
+  Common.mk_pr2_wrappers Flag_parsing_c.verbose_cpp_ast
 let pr2_debug,pr2_debug_once = 
   Common.mk_pr2_wrappers Flag_parsing_c.debug_cpp_ast
 
@@ -98,10 +99,37 @@ let cpp_option_of_cmdline (xs, ys) =
       D (s, None)
   ))
 
+(*****************************************************************************)
+(* Debug *)
+(*****************************************************************************)
+let (show_cpp_i_opts: string list -> unit) = fun xs -> 
+  if not (null xs) then begin 
+    pr2 "-I";
+    xs +> List.iter pr2
+  end
+
+  
+let (show_cpp_d_opts: string list -> unit) = fun xs ->
+  if not (null xs) then begin
+    pr2 "-D";
+    xs +> List.iter pr2
+  end
+
+(* ---------------------------------------------------------------------- *)
+let trace_cpp_process depth mark inc_file =
+  pr2_debug (spf "%s>%s %s" 
+          (Common.repeat "-" depth +> Common.join "")
+          mark
+          (s_of_inc_file_bis inc_file));
+  ()
+
+
+
 (*****************************************************************************)
 (* Helpers *)
 (*****************************************************************************)
 
+
 let _hcandidates = Hashtbl.create 101
 
 let init_adjust_candidate_header_files dir = 
@@ -171,15 +199,6 @@ let find_header_file cppopts dirname inc_file =
 
 
 
-(* ---------------------------------------------------------------------- *)
-let trace_cpp_process depth mark inc_file =
-  pr2_debug (spf "%s>%s %s" 
-          (Common.repeat "-" depth +> Common.join "")
-          mark
-          (s_of_inc_file_bis inc_file));
-  ()
-
-
 (* ---------------------------------------------------------------------- *)
 let _headers_hash = Hashtbl.create 101 
 
@@ -193,10 +212,12 @@ let _headers_hash = Hashtbl.create 101
  * even if the cache is small. That's because huge single 
  * ast element and probably the ast marshalling fail.
  *)
-let threshold_cache_nb_files = ref 200
+let default_threshold_cache_nb_files = 200
+
+let parse_c_and_cpp_cache 
+  ?(threshold_cache_nb_files= default_threshold_cache_nb_files) file =
 
-let parse_c_and_cpp_cache file =
-  if Hashtbl.length _headers_hash > !threshold_cache_nb_files
+  if Hashtbl.length _headers_hash > threshold_cache_nb_files
   then Hashtbl.clear _headers_hash;
 
   Common.memoized _headers_hash file (fun () -> 
@@ -204,19 +225,6 @@ let parse_c_and_cpp_cache file =
   )
 
 
-(* ---------------------------------------------------------------------- *)
-let (show_cpp_i_opts: string list -> unit) = fun xs -> 
-  if not (null xs) then begin 
-    pr2 "-I";
-    xs +> List.iter pr2
-  end
-
-  
-let (show_cpp_d_opts: string list -> unit) = fun xs ->
-  if not (null xs) then begin
-    pr2 "-D";
-    xs +> List.iter pr2
-  end
 
 (*****************************************************************************)
 (* Main entry *)
@@ -225,8 +233,9 @@ let (show_cpp_d_opts: string list -> unit) = fun xs ->
 
 let (cpp_expand_include2: 
  ?depth_limit:int option ->
+ ?threshold_cache_nb_files:int ->
  cpp_option list -> Common.dirname -> Ast_c.program -> Ast_c.program) =
- fun ?(depth_limit=None) iops dirname ast -> 
+ fun ?(depth_limit=None) ?threshold_cache_nb_files iops dirname ast -> 
 
   if !Flag_parsing_c.debug_cpp_ast
   then pr2_xxxxxxxxxxxxxxxxx();
@@ -262,7 +271,9 @@ let (cpp_expand_include2:
                   (* CONFIG *)
                   Flag_parsing_c.verbose_parsing := false; 
                   Flag_parsing_c.verbose_lexing := false; 
-                  let (ast2, _stat) = parse_c_and_cpp_cache file in
+                  let (ast2, _stat) = 
+                    parse_c_and_cpp_cache ?threshold_cache_nb_files file 
+                  in
 
                   let ast = Parse_c.program_of_program2 ast2 in
                   let dirname' = Filename.dirname file in 
@@ -293,9 +304,9 @@ let (cpp_expand_include2:
   aux [] dirname ast
     
 
-let cpp_expand_include ?depth_limit a b c = 
+let cpp_expand_include ?depth_limit ?threshold_cache_nb_files a b c = 
   Common.profile_code "cpp_expand_include"
-   (fun () -> cpp_expand_include2 ?depth_limit a b c)
+   (fun () -> cpp_expand_include2 ?depth_limit ?threshold_cache_nb_files a b c)
 
 (* 
 let unparse_showing_include_content ?
@@ -325,12 +336,14 @@ let is_ifdef_and_same_tag tag x =
  * indice. Or simply count  the number of directives with the same tag and
  * put this information in the tag. Hence the total_with_this_tag below.
  *)
-let should_ifdefize tag ifdefs_directives xxs = 
+let should_ifdefize (tag,ii) ifdefs_directives xxs = 
   let IfdefTag (_tag, total_with_this_tag) = tag in
   
   if total_with_this_tag <> List.length ifdefs_directives
   then begin
-    pr2 "CPPASTC: can not ifdefize, some of its directives were passed";
+    let strloc = Ast_c.strloc_of_info (List.hd ii) in
+    pr2 (spf "CPPASTC: can not ifdefize ifdef at %s" strloc);
+    pr2 "CPPASTC: some of its directives were passed";
     false 
   end else 
     (* todo? put more condition ? dont ifdefize declaration ? *)
@@ -373,7 +386,7 @@ let rec cpp_ifdef_statementize ast =
                 | IfdefDirective ((Ifdef,tag),ii) -> 
 
                     let (restifdefs, xxs, xs') = group_ifdef tag xs in
-                    if should_ifdefize tag (ifdef::restifdefs) xxs 
+                    if should_ifdefize (tag,ii) (ifdef::restifdefs) xxs 
                     then
                       let res = IfdefStmt2 (ifdef::restifdefs, xxs) in
                       Visitor_c.vk_statement_sequencable_s bigf res::aux xs'
index 838e191..a32d510 100644 (file)
@@ -12,30 +12,35 @@ val show_cpp_d_opts: string list -> unit
 (* cpp_expand_include below must internally use a cache of header files to
  * speedup as programs very often reinclude the same basic set of 
  * header files.  
- * note: that also means that the asts of those headers are then shared so take
- * care. 
+ * 
+ * note: that also means that the asts of those headers are then shared 
+ * so take care!!
  *)
 val _headers_hash: 
   (Common.filename, Parse_c.program2 * Parsing_stat.parsing_stat) Hashtbl.t
-val threshold_cache_nb_files: int ref
 
 (* It can also try to find header files in nested directories if the 
  * caller use the function below first.
  *)
+val _hcandidates: 
+  (string, Common.filename) Hashtbl.t
+
 val init_adjust_candidate_header_files: Common.dirname -> unit
 
 (* ---------------------------------------------------------------------- *)
 
-(* include *)
+(* #include *)
 val cpp_expand_include: 
-  ?depth_limit:int option -> cpp_option list -> 
-  Common.dirname (* start point for relative paths *) -> 
+  ?depth_limit:int option ->
+  ?threshold_cache_nb_files:int ->
+  cpp_option list -> Common.dirname (* start point for relative paths *) -> 
   Ast_c.program -> Ast_c.program
 
-(* ifdef *)
-val cpp_ifdef_statementize: Ast_c.program -> Ast_c.program
+(* #ifdef *)
+val cpp_ifdef_statementize: 
+  Ast_c.program -> Ast_c.program
 
-(* define *)
+(* #define *)
 val cpp_expand_macro_expr: 
   Ast_c.define_kind -> Ast_c.argument Ast_c.wrap2 list -> 
   Ast_c.expression option
index 5ad5de6..8f7f134 100644 (file)
@@ -58,7 +58,6 @@ let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing
 (* Types *)
 (*****************************************************************************)
 
-
 (* ------------------------------------------------------------------------- *)
 (* mimic standard.h *)
 (* ------------------------------------------------------------------------- *)
@@ -80,6 +79,9 @@ type define_def = string * define_param * define_body
      | HintMacroIdentBuilder
 
 
+(*****************************************************************************)
+(* Parsing and helpers of hints  *)
+(*****************************************************************************)
 
 (* cf also data/test.h *)
 let assoc_hint_string = [
@@ -96,6 +98,11 @@ let assoc_hint_string = [
 
 let (parsinghack_hint_of_string: string -> parsinghack_hint option) = fun s -> 
   Common.assoc_option s assoc_hint_string
+let (string_of_parsinghack_hint: parsinghack_hint -> string) = fun hint -> 
+  let assoc' = assoc_hint_string +> List.map (fun (a,b) -> (b,a) ) in
+  Common.assoc hint assoc'
+
+
 
 let (is_parsinghack_hint: string -> bool) = fun s -> 
   parsinghack_hint_of_string s <> None
@@ -118,8 +125,24 @@ let (token_from_parsinghack_hint:
        Parser_c.TMacroIdentBuilder (s, ii)
   
 
+(* used in extract_macros for example *)
+let string_of_define_def (s, params, body) =
 
-
+  let s1 = 
+    match params with
+    | NoParam -> 
+        spf "#define %s " s
+    | Params xs -> 
+        spf "#define %s(%s) " s (Common.join "," xs)
+  in
+  let s2 = 
+    match body with
+    | DefineHint hint -> 
+        string_of_parsinghack_hint hint
+    | DefineBody xs -> 
+        Common.join " " (xs +> List.map Token_helpers.str_of_tok)
+  in
+  s1 ^ s2
 
 
 (*****************************************************************************)
@@ -153,7 +176,7 @@ let rec remap_keyword_tokens xs =
           let ii = TH.info_of_tok y in
           if s ==~ Common.regexp_alpha
           then begin
-            pr2 (spf "remaping: %s to an ident in expanded code" s);
+            pr2 (spf "remapping: %s to an ident in expanded code" s);
             x::(Parser_c.TIdent (s, ii))::remap_keyword_tokens xs
           end
           else 
@@ -164,7 +187,7 @@ let rec remap_keyword_tokens xs =
           let ii = TH.info_of_tok x in
           if s ==~ Common.regexp_alpha
           then begin
-            pr2 (spf "remaping: %s to an ident in expanded code" s);
+            pr2 (spf "remapping: %s to an ident in expanded code" s);
             (Parser_c.TIdent (s, ii))::remap_keyword_tokens (y::xs)
           end
           else 
@@ -173,6 +196,60 @@ let rec remap_keyword_tokens xs =
       | _, _ -> 
           x::remap_keyword_tokens (y::xs)
       )
+
+
+(* works with agglomerate_concat_op_ident below *)
+let rec get_ident_in_concat_op xs = 
+  match xs with
+  | [] -> 
+      pr2 "weird: ident after ## operator not found";
+      "", []
+  | [x] -> 
+      (match x with
+      | Parser_c.TIdent (s, i1) -> s, []
+      | _ -> 
+          pr2 "weird: ident after ## operator not found";
+          "", [x]
+      )
+  | x::y::xs -> 
+      (match x, y with
+      | Parser_c.TIdent (s,i1), Parser_c.TCppConcatOp (i2) -> 
+          let (s2, rest) = get_ident_in_concat_op xs in
+          s ^ s2, rest
+      | Parser_c.TIdent (s, i1), _ -> 
+          s, (y::xs)
+      | _ -> 
+          pr2 "weird: ident after ## operator not found";
+          "", x::y::xs
+      )
+
+(* must be run after the expansion has been done for the parameter so
+ * that all idents are actually ident, not macro parameter names.
+ *)
+let rec agglomerate_concat_op_ident xs = 
+  match xs with
+  | [] -> []
+  | [x] -> [x]
+  | x::y::xs -> 
+      (* can we have ## id, and so ## as first token ? yes 
+       * but the semantic is different as it represents variadic
+       * names so this must be handled elsewhere.
+       *)
+      (match x, y with
+      | Parser_c.TIdent (s,i1), Parser_c.TCppConcatOp (i2) -> 
+          let (all_str_ident, rest_toks) = 
+            get_ident_in_concat_op xs
+          in
+          let new_s = s ^ all_str_ident in
+          let i1' = Ast_c.rewrap_str new_s i1 in
+          Parser_c.TIdent (new_s, i1')::agglomerate_concat_op_ident rest_toks
+      | Parser_c.TCppConcatOp _, _ -> 
+          pr2 "weird, ## alone";
+          x::agglomerate_concat_op_ident (y::xs)
+      | _ -> 
+          x::agglomerate_concat_op_ident (y::xs)
+          
+      )
               
           
 
@@ -194,14 +271,17 @@ let rec remap_keyword_tokens xs =
  * for instance transform some of the back into some TypedefIdent
  * so cpp_engine may be fooled?
  *)
-let rec (cpp_engine: (string , Parser_c.token list) assoc -> 
+let rec (cpp_engine: 
+          ?evaluate_concatop:bool ->
+          (string , Parser_c.token list) assoc -> 
           Parser_c.token list -> Parser_c.token list) = 
- fun env xs ->
+ fun ?(evaluate_concatop=true) env xs ->
   xs +> List.map (fun tok -> 
     (* expand only TIdent ? no cos the parameter of the macro
      * can actually be some 'register' so may have to look for 
      * any tokens candidates for the expansion.
      * Only subtelity is maybe dont expand the TDefineIdent.
+     * 
      * update: in fact now the caller (define_parse) will have done 
      * the job right and already replaced the macro parameter with a TIdent.
      *)
@@ -211,6 +291,11 @@ let rec (cpp_engine: (string , Parser_c.token list) assoc ->
   )
   +> List.flatten
   +> remap_keyword_tokens
+  +> (fun xs -> 
+       if evaluate_concatop
+       then agglomerate_concat_op_ident xs
+       else xs
+  ) 
 
 
 
@@ -231,6 +316,8 @@ let rec (cpp_engine: (string , Parser_c.token list) assoc ->
 let rec apply_macro_defs 
  ~msg_apply_known_macro 
  ~msg_apply_known_macro_hint 
+ ?evaluate_concatop
+ ?(inplace_when_single=true)
  defs xs = 
  let rec apply_macro_defs xs = 
   match xs with
@@ -301,7 +388,8 @@ let rec apply_macro_defs
                 ) in
                 id.new_tokens_before <-
                   (* !!! cpp expansion job here  !!! *)
-                  cpp_engine (Common.zip params xxs') bodymacro;
+                  cpp_engine ?evaluate_concatop 
+                    (Common.zip params xxs') bodymacro;
 
                 (* important to do that after have apply the macro, otherwise
                  * will pass as argument to the macro some tokens that
@@ -364,7 +452,10 @@ let rec apply_macro_defs
           ()
       | NoParam -> 
           (match body with
-          | DefineBody [newtok] -> 
+          (* bugfix: we prefer not using this special case when we come
+           * from extract_macros context
+           *)
+          | DefineBody [newtok] when inplace_when_single -> 
              (* special case when 1-1 substitution, we reuse the token *)
               id.tok <- (newtok +> TH.visitor_info_of_tok (fun _ -> 
                 TH.info_of_tok id.tok))
@@ -391,162 +482,10 @@ let rec apply_macro_defs
 
 
 
-
 (*****************************************************************************)
-(* The parsing hack for #define *)
-(*****************************************************************************)
-
-(* To parse macro definitions I need to do some tricks 
- * as some information can be get only at the lexing level. For instance
- * the space after the name of the macro in '#define foo (x)' is meaningful
- * but the grammar can not get this information. So define_ident below
- * look at such space and generate a special TOpardefine. In a similar
- * way macro definitions can contain some antislash and newlines
- * and the grammar need to know where the macro ends (which is 
- * a line-level and so low token-level information). Hence the 
- * function 'define_line' below and the TDefEol.
- * 
- * update: TDefEol is handled in a special way at different places, 
- * a little bit like EOF, especially for error recovery, so this
- * is an important token that should not be retagged!
- * 
- * 
- * ugly hack, a better solution perhaps would be to erase TDefEOL 
- * from the Ast and list of tokens in parse_c. 
- * 
- * note: I do a +1 somewhere, it's for the unparsing to correctly sync.
- * 
- * note: can't replace mark_end_define by simply a fakeInfo(). The reason
- * is where is the \n TCommentSpace. Normally there is always a last token
- * to synchronize on, either EOF or the token of the next toplevel.
- * In the case of the #define we got in list of token 
- * [TCommentSpace "\n"; TDefEOL] but if TDefEOL is a fakeinfo then we will
- * not synchronize on it and so we will not print the "\n".
- * A solution would be to put the TDefEOL before the "\n".
- * 
- * todo?: could put a ExpandedTok for that ? 
- *)
-let mark_end_define ii = 
-  let ii' = 
-    { Ast_c.pinfo = Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with 
-        Common.str = ""; 
-        Common.charpos = Ast_c.pos_of_info ii + 1
-      };
-      cocci_tag = ref Ast_c.emptyAnnot;
-      comments_tag = ref Ast_c.emptyComments;
-    } 
-  in
-  TDefEOL (ii')
-
-(* put the TDefEOL at the good place *)
-let rec define_line_1 acc xs = 
-  match xs with
-  | [] -> List.rev acc
-  | TDefine ii::xs ->
-      let line = Ast_c.line_of_info ii in
-      let acc = (TDefine ii) :: acc in
-      define_line_2 acc line ii xs
-  | TCppEscapedNewline ii::xs ->
-      pr2 "WEIRD: a \\ outside a #define";
-      let acc = (TCommentSpace ii) :: acc in
-      define_line_1 acc xs
-  | x::xs -> define_line_1 (x::acc) xs
-
-and define_line_2 acc line lastinfo xs = 
-  match xs with 
-  | [] -> 
-      (* should not happened, should meet EOF before *)
-      pr2 "PB: WEIRD";   
-      List.rev (mark_end_define lastinfo::acc)
-  | x::xs -> 
-      let line' = TH.line_of_tok x in
-      let info = TH.info_of_tok x in
-
-      (match x with
-      | EOF ii -> 
-         let acc = (mark_end_define lastinfo) :: acc in
-         let acc = (EOF ii) :: acc in
-          define_line_1 acc xs
-      | TCppEscapedNewline ii -> 
-          if (line' <> line) then pr2 "PB: WEIRD: not same line number";
-         let acc = (TCommentSpace ii) :: acc in
-          define_line_2 acc (line+1) info xs
-      | x -> 
-          if line' =|= line
-          then define_line_2 (x::acc) line info xs 
-          else define_line_1 (mark_end_define lastinfo::acc) (x::xs)
-      )
-
-let rec define_ident acc xs = 
-  match xs with
-  | [] -> List.rev acc
-  | TDefine ii::xs -> 
-      let acc = TDefine ii :: acc in
-      (match xs with
-      | TCommentSpace i1::TIdent (s,i2)::TOPar (i3)::xs -> 
-          (* Change also the kind of TIdent to avoid bad interaction
-           * with other parsing_hack tricks. For instant if keep TIdent then
-           * the stringication algo can believe the TIdent is a string-macro.
-           * So simpler to change the kind of the ident too.
-           *)
-          (* if TOParDefine sticked to the ident, then 
-           * it's a macro-function. Change token to avoid ambiguity
-           * between #define foo(x)  and   #define foo   (x)
-           *)
-         let acc = (TCommentSpace i1) :: acc in
-         let acc = (TIdentDefine (s,i2)) :: acc in
-         let acc = (TOParDefine i3) :: acc in
-          define_ident acc xs
-
-      | TCommentSpace i1::TIdent (s,i2)::xs -> 
-         let acc = (TCommentSpace i1) :: acc in
-         let acc = (TIdentDefine (s,i2)) :: acc in
-          define_ident acc xs
-
-      (* bugfix: ident of macro (as well as params, cf below) can be tricky
-       * note, do we need to subst in the body of the define ? no cos
-       * here the issue is the name of the macro, as in #define inline,
-       * so obviously the name of this macro will not be used in its 
-       * body (it would be a recursive macro, which is forbidden).
-       *)
-       
-      | TCommentSpace i1::t::xs -> 
-
-          let s = TH.str_of_tok t in
-          let ii = TH.info_of_tok t in
-          if s ==~ Common.regexp_alpha
-          then begin
-            pr2 (spf "remaping: %s to an ident in macro name" s);
-           let acc = (TCommentSpace i1) :: acc in
-           let acc = (TIdentDefine (s,ii)) :: acc in
-            define_ident acc xs
-          end
-          else begin
-            pr2 "WEIRD: weird #define body"; 
-            define_ident acc xs
-          end
-
-      | _ -> 
-          pr2 "WEIRD: weird #define body"; 
-          define_ident acc xs
-      )
-  | x::xs ->
-      let acc = x :: acc in
-      define_ident acc xs
-  
-
-
-let fix_tokens_define2 xs = 
-  define_ident [] (define_line_1 [] xs)
-
-let fix_tokens_define a = 
-  Common.profile_code "C parsing.fix_define" (fun () -> fix_tokens_define2 a)
-      
-
-
-(*****************************************************************************)
-(* for the cpp-builtin, standard.h, part 0 *)
+(* extracting define_def from a standard.h  *)
 (*****************************************************************************)
+(* was the cpp-builtin, standard.h, part 0 *)
 
 let macro_body_to_maybe_hint body = 
   match body with
@@ -559,7 +498,8 @@ let macro_body_to_maybe_hint body =
   | xs -> DefineBody body
 
 
-let rec define_parse xs = 
+let rec (define_parse: Parser_c.token list -> (string * define_def) list) = 
+ fun xs ->
   match xs with
   | [] -> []
   | TDefine i1::TIdentDefine (s,i2)::TOParDefine i3::xs -> 
@@ -585,7 +525,7 @@ let rec define_parse xs =
             let s = TH.str_of_tok x in
             if s ==~ Common.regexp_alpha
             then begin
-              pr2 (spf "remaping: %s to a macro parameter" s);
+              pr2 (spf "remapping: %s to a macro parameter" s);
               Some s
             end
             else 
@@ -602,7 +542,7 @@ let rec define_parse xs =
             let ii = TH.info_of_tok tok in 
             if s ==~ Common.regexp_alpha && List.mem s params
             then begin
-              pr2 (spf "remaping: %s to an ident in macro body" s);
+              pr2 (spf "remapping: %s to an ident in macro body" s);
               TIdent (s, ii)
             end
             else tok
@@ -628,12 +568,10 @@ let rec define_parse xs =
       
 
 
-let extract_cpp_define xs = 
+let extract_macros xs = 
   let cleaner = xs +> List.filter (fun x -> 
     not (TH.is_comment x)
   ) in
   define_parse cleaner
-  
-
 
 
index 6d5cb99..08c1396 100644 (file)
@@ -1,8 +1,4 @@
-(*
- * Do stuff involving cpp macros, like expanding some macros, 
- * or try to parse well the body of the define by finding the end of
- * define virtual end-of-line token.
- *)
+(* Expanding or extracting macros, at the token level *)
 
 (* corresponds to what is in the yacfe configuration file (e.g. standard.h) *)
 type define_def = string * define_param * define_body 
@@ -24,23 +20,27 @@ type define_def = string * define_param * define_body
      | HintAttribute
      | HintMacroIdentBuilder
 
+val string_of_define_def: define_def -> string
+
 (* This function work by side effect and may generate new tokens
  * in the new_tokens_before field of the token_extended in the
  * paren_grouped list. So don't forget to recall 
  * Token_views_c.rebuild_tokens_extented after this call, as well
- * as probably parsing_hacks.insert_virtual_positions as new tokens
+ * as probably insert_virtual_positions as new tokens
  * are generated.
+ * 
+ * note: it does not do some fixpoint, so the generated code may also
+ * contain some macros names.
  *)
 val apply_macro_defs: 
   msg_apply_known_macro:(string -> unit) ->
   msg_apply_known_macro_hint:(string -> unit) ->
+  ?evaluate_concatop:bool ->
+  ?inplace_when_single:bool ->
   (string, define_def) Hashtbl.t ->
   Token_views_c.paren_grouped list -> unit
 
-(* generate virtual end-of-line token *)
-val fix_tokens_define : 
-  Parser_c.token list -> Parser_c.token list
-
-val extract_cpp_define : 
+(* extracting define_def, e.g. from a standard.h; assume have called 
+ * fix_tokens_define before to have the TDefEol *)
+val extract_macros : 
   Parser_c.token list -> (string, define_def) Common.assoc
-
index cfdeceb..9c49c79 100644 (file)
@@ -250,3 +250,7 @@ let set_linux_spacing _ = spacing := LINUX (*follow the conventions of Linux*)
 let set_smpl_spacing _ = spacing := SMPL   (*use spacing from the SP*)
 
 (*****************************************************************************)
+
+(* drop back edges made by proper loop constructs -
+   unsafe but more efficient *)
+let no_loops = ref false
index 9dacf58..8c7ca1e 100644 (file)
@@ -135,6 +135,9 @@ let keyword_table = Common.hash_of_list [
   "__typeof__", (fun ii -> Ttypeof ii);
   "__typeof", (fun ii -> Ttypeof ii);
 
+        (* found a lot in expanded code *)
+  "__extension__", (fun ii -> TattributeNoarg ii); 
+
 
   (* gccext: alias *)
   "__signed__",     (fun ii -> Tsigned ii);
@@ -145,6 +148,14 @@ let keyword_table = Common.hash_of_list [
   "__volatile__",  (fun ii -> Tvolatile ii); 
   "__volatile",    (fun ii -> Tvolatile ii);  
 
+  (* windowsext: *)
+  "__declspec", (fun ii -> Tattribute ii);
+
+  "__stdcall", (fun ii -> TattributeNoarg ii);
+  "__cdecl", (fun ii -> TattributeNoarg ii);
+  "WINAPI", (fun ii -> TattributeNoarg ii);
+  "APIENTRY", (fun ii -> TattributeNoarg ii);
+  "CALLBACK", (fun ii -> TattributeNoarg ii);
 
   (* c99:  *)
   (* no just "restrict" ? maybe for backward compatibility they avoided 
@@ -158,7 +169,7 @@ let keyword_table = Common.hash_of_list [
 let error_radix s = 
   ("numeric " ^ s ^ " constant contains digits beyond the radix:")
 
-(* functions for figuring out the type of integers *)
+(* julia: functions for figuring out the type of integers *)
 
 let is_long_dec s int uint long ulong =
   match !Flag_parsing_c.int_thresholds with
@@ -256,8 +267,13 @@ rule token = parse
   (* ----------------------------------------------------------------------- *)
 
   (* note: this lexer generate tokens for comments!! so can not give 
-   * this lexer as-is to the parsing function. Must preprocess it, hence
-   * use techniques like cur_tok ref in parse_c.ml
+   * this lexer as-is to the parsing function. The caller must preprocess 
+   * it, e.g. by using techniques like cur_tok ref in parse_c.ml.
+   * 
+   * update: we now also generate a separate token for newlines, so now
+   * the caller may also have to reagglomerate all those commentspace
+   * tokens if he was assuming that spaces were agglomerate in a single
+   * token. 
    *)
 
   | ['\n'] [' ' '\t' '\r' '\011' '\012' ]*
index 30d161f..37befe7 100644 (file)
@@ -13,6 +13,7 @@ val _typedef : (string, identkind) Common.scoped_h_env ref
 
 val add_ident   : string -> unit
 val add_typedef : string -> unit
+
 val add_typedef_root : string -> unit
 
 val new_scope : unit -> unit
@@ -35,8 +36,6 @@ type context =
   | InInitializer
   | InEnum
 
-val is_top_or_struct : context -> bool
-
 type lexer_hint = { 
   mutable context_stack: context Common.stack;
  }
@@ -47,3 +46,6 @@ val push_context: context -> unit
 val pop_context: unit -> unit
 
 val default_hint : unit -> lexer_hint
+
+val is_top_or_struct : context -> bool
+
index 577ef14..7e70038 100644 (file)
@@ -24,11 +24,23 @@ let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing
 
 (* todo?: al_expr doit enlever les infos de type ? et doit remettre en
  *  emptyAnnot ? 
+
+No!  Keeping the type information is important to ensuring that variables
+of different type and declared in different places do not seem to match
+each other.  On the other hand, we don't want to keep around the
+information about whether the expression is a test expression, because a
+term that is a test expression should match one that is not.  The test
+information is only useful for matching to the CTL.
+
  *)
 
 (* drop all info information *)
 
 let strip_info_visitor _ = 
+  let drop_test ty =
+    let (ty,_) = !ty in
+    ref (ty,Ast_c.NotTest) in
+
   { Visitor_c.default_visitor_c_s with
     Visitor_c.kinfo_s =
     (* traversal should be deterministic... *)
@@ -38,7 +50,7 @@ let strip_info_visitor _ =
 
     Visitor_c.kexpr_s = (fun (k,_) e -> 
       let (e', ty), ii' = k e in
-      (e', Ast_c.noType()(*ref !ty*)), ii' (* keep type - jll *)
+      (e', drop_test ty), ii' (* keep type - jll *)
     );
 
 (*
@@ -71,15 +83,59 @@ let al_ii    x = Visitor_c.vk_ii_s (strip_info_visitor()) x
 
 
 
+let strip_inh_info_visitor _ =  (* for inherited metavariables *)
+  let drop_test_lv ty =
+    let (ty,_) = !ty in
+    let ty =
+      match ty with
+       None -> None
+      |        Some (ty,_) -> Some (ty,Ast_c.NotLocalVar) in
+    ref (ty,Ast_c.NotTest) in
+
+  { Visitor_c.default_visitor_c_s with
+    Visitor_c.kinfo_s =
+    (* traversal should be deterministic... *)
+    (let ctr = ref 0 in 
+    (function (k,_) ->
+    function i -> ctr := !ctr + 1; Ast_c.al_info_cpp !ctr i));
+
+    Visitor_c.kexpr_s = (fun (k,_) e -> 
+      let (e', ty), ii' = k e in
+      (e', drop_test_lv ty), ii' (* keep type - jll *)
+    );
+
+(*
+    Visitor_c.ktype_s = (fun (k,_) ft -> 
+      let ft' = k ft in
+      match Ast_c.unwrap_typeC ft' with
+      | Ast_c.TypeName (s,_typ) -> 
+          Ast_c.TypeName (s, Ast_c.noTypedefDef()) +> Ast_c.rewrap_typeC ft'
+      | _ -> ft'
+
+    );
+*)
+    
+  }
+
+let al_inh_expr      x = Visitor_c.vk_expr_s      (strip_inh_info_visitor()) x
+let al_inh_statement x = Visitor_c.vk_statement_s (strip_inh_info_visitor()) x
+let al_inh_type      x = Visitor_c.vk_type_s      (strip_inh_info_visitor()) x
+let al_inh_init      x = Visitor_c.vk_ini_s       (strip_inh_info_visitor()) x
+let al_inh_arguments x = Visitor_c.vk_arguments_s (strip_inh_info_visitor()) x
+
 
 
 let semi_strip_info_visitor = (* keep position information *)
+  let drop_test ty =
+    let (ty,_) = !ty in
+    ref (ty,Ast_c.NotTest) in
+
   { Visitor_c.default_visitor_c_s with
     Visitor_c.kinfo_s = (fun (k,_) i -> Ast_c.semi_al_info_cpp i);
 
     Visitor_c.kexpr_s = (fun (k,_) e -> 
       let (e', ty),ii' = k e in
-      (e', Ast_c.noType()(*ref !ty*)), ii' (* keep type - jll *)
+      (e', drop_test ty), ii' (* keep type - jll *)
     );
     
   }
@@ -100,6 +156,7 @@ let semi_al_program =
 
 (* really strip, do not keep position nor anything specificities, true
  * abstracted form. *)
+(* is this used for anything? jll *)
 let real_strip_info_visitor _ = 
   { Visitor_c.default_visitor_c_s with
     Visitor_c.kinfo_s = (fun (k,_) i ->
index 20910aa..97546c6 100644 (file)
@@ -35,28 +35,6 @@ let token_to_strpos tok =
   (TH.str_of_tok tok, TH.pos_of_tok tok)
 
 
-let error_msg_tok tok = 
-  let file = TH.file_of_tok tok in
-  if !Flag_parsing_c.verbose_parsing
-  then Common.error_message file (token_to_strpos tok) 
-  else ("error in " ^ file  ^ "; set verbose_parsing for more info")
-
-
-let print_bad line_error (start_line, end_line) filelines  = 
-  begin
-    pr2 ("badcount: " ^ i_to_s (end_line - start_line));
-
-    for i = start_line to end_line do 
-      let line = filelines.(i) in 
-
-      if i =|= line_error 
-      then  pr2 ("BAD:!!!!!" ^ " " ^ line) 
-      else  pr2 ("bad:" ^ " " ^      line) 
-    done
-  end
-
-
-
 let mk_info_item2 filename toks = 
   let buf = Buffer.create 100 in
   let s = 
@@ -84,6 +62,47 @@ let info_same_line line xs =
   xs +> List.filter (fun info -> Ast_c.line_of_info info =|= line)
 
 
+(* move in cpp_token_c ? *)
+let is_define_passed passed =
+  let xs = passed +> List.rev +> List.filter TH.is_not_comment in
+  if List.length xs >= 2 
+  then 
+    (match Common.head_middle_tail xs with
+    | Parser_c.TDefine _, _, Parser_c.TDefEOL _ -> 
+        true
+    | _ -> false
+    )
+  else begin
+    pr2_err "WEIRD: length list of error recovery tokens < 2 ";
+    false 
+  end
+
+
+(*****************************************************************************)
+(* Error diagnostic  *)
+(*****************************************************************************)
+
+let error_msg_tok tok = 
+  let file = TH.file_of_tok tok in
+  if !Flag_parsing_c.verbose_parsing
+  then Common.error_message file (token_to_strpos tok) 
+  else ("error in " ^ file  ^ "; set verbose_parsing for more info")
+
+
+let print_bad line_error (start_line, end_line) filelines  = 
+  begin
+    pr2 ("badcount: " ^ i_to_s (end_line - start_line));
+
+    for i = start_line to end_line do 
+      let line = filelines.(i) in 
+
+      if i =|= line_error 
+      then  pr2 ("BAD:!!!!!" ^ " " ^ line) 
+      else  pr2 ("bad:" ^ " " ^      line) 
+    done
+  end
+
+
 (*****************************************************************************)
 (* Stats on what was passed/commentized  *)
 (*****************************************************************************)
@@ -345,537 +364,26 @@ let expression_of_string = parse_gen Parser_c.expr
 
 
 
-(*****************************************************************************)
-(* Consistency checking *)
-(*****************************************************************************)
-
-(* todo:
- *  could check that an ident has always the same class, be it a typedef
- *  (but sometimes do 'acpi_val acpi_val;'), an ident, a TMacroStatement, 
- *  etc.
- *)
-
-type class_ident = 
-  | CIdent (* can be var, func, field, tag, enum constant *)
-  | CTypedef
-
-let str_of_class_ident = function
-  | CIdent -> "Ident"
-  | CTypedef -> "Typedef"
-
-(*
-  | CMacro
-  | CMacroString
-  | CMacroStmt
-  | CMacroDecl
-  | CMacroIterator
-  | CAttr
-
-(* but take care that must still be able to use '=' *)
-type context = InFunction | InEnum | InStruct | InInitializer | InParams
-type class_token = 
-  | CIdent of class_ident
-
-  | CComment 
-  | CSpace
-  | CCommentCpp of cppkind
-  | CCommentMisc
-  | CCppDirective
-
-  | COPar
-  | CCPar
-  | COBrace
-  | CCBrace
-
-  | CSymbol
-  | CReservedKwd (type | decl | qualif | flow | misc | attr)
-*)
-
-let ident_to_typename ident : Ast_c.fullType =
-  Ast_c.mk_ty (Ast_c.TypeName  (ident, Ast_c.noTypedefDef())) Ast_c.noii
-                  
-
-(* parse_typedef_fix4 *)
-let consistency_checking2 xs = 
-
-  (* first phase, gather data *)
-  let stat = Hashtbl.create 101 in 
-
-  (* default value for hash *)
-  let v1 () = Hashtbl.create 101 in
-  let v2 () = ref 0 in
-
-  let bigf = { Visitor_c.default_visitor_c with
-
-    Visitor_c.kexpr = (fun (k,bigf) x -> 
-      match Ast_c.unwrap_expr x with
-      | Ast_c.Ident (id) -> 
-          let s = Ast_c.str_of_name id in
-          stat +> 
-            Common.hfind_default s v1 +> Common.hfind_default CIdent v2 +> 
-            (fun aref -> incr aref)
-
-      | _ -> k x
-    );
-    Visitor_c.ktype = (fun (k,bigf) t -> 
-      match Ast_c.unwrap_typeC t with
-      | Ast_c.TypeName (name,_typ) -> 
-          let s = Ast_c.str_of_name name in
-          stat +> 
-            Common.hfind_default s v1 +> Common.hfind_default CTypedef v2 +> 
-            (fun aref -> incr aref)
-
-      | _ -> k t
-    );
-  } 
-  in
-  xs +> List.iter (fun (p, info_item) -> Visitor_c.vk_toplevel bigf p);
-
-
-  let ident_to_type = ref [] in
-  
-
-  (* second phase, analyze data *)
-  stat +> Hashtbl.iter (fun k v -> 
-    let xs = Common.hash_to_list v in
-    if List.length xs >= 2
-    then begin 
-      pr2_err ("CONFLICT:" ^ k);
-      let sorted = xs +> List.sort (fun (ka,va) (kb,vb) -> 
-        if !va =|= !vb then
-          (match ka, kb with
-          | CTypedef, _ -> 1 (* first is smaller *)
-          | _, CTypedef -> -1
-          | _ -> 0
-          )
-        else compare !va !vb
-      ) in
-      let sorted = List.rev sorted in
-      match sorted with
-      | [CTypedef, i1;CIdent, i2] -> 
-          pr2_err ("transforming some ident in typedef");
-          push2 k ident_to_type;
-      | _ -> 
-          pr2_err ("TODO:other transforming?");
-      
-    end
-  );
-
-  (* third phase, update ast. 
-   * todo? but normally should try to handle correctly scope ? maybe sometime
-   * sizeof(id) and even if id was for a long time an identifier, maybe 
-   * a few time, because of the scope it's actually really a type.
-   *)
-  if (null !ident_to_type)
-  then xs 
-  else 
-    let bigf = { Visitor_c.default_visitor_c_s with
-      Visitor_c.kdefineval_s = (fun (k,bigf) x -> 
-        match x with
-        | Ast_c.DefineExpr e -> 
-            (match Ast_c.unwrap_expr e with
-            | Ast_c.Ident (ident)  -> 
-                let s = Ast_c.str_of_name ident in 
-                if List.mem s !ident_to_type
-                then
-                  let t = ident_to_typename ident in
-                  Ast_c.DefineType t
-                else k x
-            | _ -> k x
-            )
-        | _ -> k x
-      );
-      Visitor_c.kexpr_s = (fun (k, bigf) x -> 
-        match Ast_c.get_e_and_ii x with
-        | (Ast_c.SizeOfExpr e, tref), isizeof -> 
-            let i1 = tuple_of_list1 isizeof in
-            (match Ast_c.get_e_and_ii e with
-            | (Ast_c.ParenExpr e, _), iiparen -> 
-                let (i2, i3) = tuple_of_list2 iiparen in
-                (match Ast_c.get_e_and_ii e with
-                | (Ast_c.Ident (ident), _), _ii  -> 
-
-                    let s = Ast_c.str_of_name ident in 
-                    if List.mem s !ident_to_type
-                    then
-                      let t = ident_to_typename ident in
-                      (Ast_c.SizeOfType t, tref),[i1;i2;i3]
-                    else  k x
-                | _ -> k x
-                )
-            | _ -> k x
-            )
-        | _ -> k x
-      );
-    } in
-    xs +> List.map (fun (p, info_item) -> 
-      Visitor_c.vk_toplevel_s bigf p, info_item
-    )
-
-
-let consistency_checking a  = 
-  Common.profile_code "C consistencycheck" (fun () -> consistency_checking2 a)
-
-
-
-(*****************************************************************************)
-(* Error recovery *)
-(*****************************************************************************)
-
-let is_define_passed passed =
-  let xs = passed +> List.rev +> List.filter TH.is_not_comment in
-  if List.length xs >= 2 
-  then 
-    (match Common.head_middle_tail xs with
-    | Parser_c.TDefine _, _, Parser_c.TDefEOL _ -> 
-        true
-    | _ -> false
-    )
-  else begin
-    pr2_err "WEIRD: length list of error recovery tokens < 2 ";
-    false 
-  end
-
-let is_defined_passed_bis last_round = 
-  let xs = last_round +> List.filter TH.is_not_comment in
-  match xs with
-  | Parser_c.TDefine _::_ -> true
-  | _ -> false
-
-(* ---------------------------------------------------------------------- *)
-
-
-(* todo: do something if find Parser_c.Eof ? *)
-let rec find_next_synchro next already_passed =
-
-  (* Maybe because not enough }, because for example an ifdef contains
-   * in both branch some opening {, we later eat too much, "on deborde
-   * sur la fonction d'apres". So already_passed may be too big and
-   * looking for next synchro point starting from next may not be the
-   * best. So maybe we can find synchro point inside already_passed
-   * instead of looking in next.
-   * 
-   * But take care! must progress. We must not stay in infinite loop!
-   * For instance now I have as a error recovery to look for 
-   * a "start of something", corresponding to start of function,
-   * but must go beyond this start otherwise will loop.
-   * So look at premier(external_declaration2) in parser.output and
-   * pass at least those first tokens.
-   * 
-   * I have chosen to start search for next synchro point after the
-   * first { I found, so quite sure we will not loop. *)
-
-  let last_round = List.rev already_passed in
-  if is_defined_passed_bis last_round 
-  then find_next_synchro_define (last_round ++ next) []
-  else 
-
-  let (before, after) = 
-    last_round +> Common.span (fun tok -> 
-      match tok with
-      (* by looking at TOBrace we are sure that the "start of something"
-       * will not arrive too early 
-       *)
-      | Parser_c.TOBrace _ -> false
-      | Parser_c.TDefine _ -> false
-      | _ -> true
-    ) 
-  in
-  find_next_synchro_orig (after ++ next)  (List.rev before)
-
-    
-
-and find_next_synchro_define next already_passed =
-  match next with
-  | [] ->  
-      pr2_err "ERROR-RECOV: end of file while in recovery mode"; 
-      already_passed, []
-  | (Parser_c.TDefEOL i as v)::xs  -> 
-      pr2_err ("ERROR-RECOV: found sync end of #define, line "^i_to_s(TH.line_of_tok v));
-      v::already_passed, xs
-  | v::xs -> 
-      find_next_synchro_define xs (v::already_passed)
-
-
-    
-
-and find_next_synchro_orig next already_passed =
-  match next with
-  | [] ->  
-      pr2_err "ERROR-RECOV: end of file while in recovery mode"; 
-      already_passed, []
-
-  | (Parser_c.TCBrace i as v)::xs when TH.col_of_tok v =|= 0 -> 
-      pr2_err ("ERROR-RECOV: found sync '}' at line "^i_to_s (TH.line_of_tok v));
-
-      (match xs with
-      | [] -> raise Impossible (* there is a EOF token normally *)
-
-      (* still useful: now parser.mly allow empty ';' so normally no pb *)
-      | Parser_c.TPtVirg iptvirg::xs -> 
-          pr2_err "ERROR-RECOV: found sync bis, eating } and ;";
-          (Parser_c.TPtVirg iptvirg)::v::already_passed, xs
-
-      | Parser_c.TIdent x::Parser_c.TPtVirg iptvirg::xs -> 
-          pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;";
-          (Parser_c.TPtVirg iptvirg)::(Parser_c.TIdent x)::v::already_passed, 
-          xs
-            
-      | Parser_c.TCommentSpace sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg
-        ::xs -> 
-          pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;";
-          (Parser_c.TCommentSpace sp)::
-            (Parser_c.TPtVirg iptvirg)::
-            (Parser_c.TIdent x)::
-            v::
-            already_passed, 
-          xs
-            
-      | Parser_c.TCommentNewline sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg
-        ::xs -> 
-          pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;";
-          (Parser_c.TCommentNewline sp)::
-            (Parser_c.TPtVirg iptvirg)::
-            (Parser_c.TIdent x)::
-            v::
-            already_passed, 
-          xs
-            
-      | _ -> 
-          v::already_passed, xs
-      )
-  | v::xs when TH.col_of_tok v =|= 0 && TH.is_start_of_something v  -> 
-      pr2_err ("ERROR-RECOV: found sync col 0 at line "^ i_to_s(TH.line_of_tok v));
-      already_passed, v::xs
-        
-  | v::xs -> 
-      find_next_synchro_orig xs (v::already_passed)
-
-
-(*****************************************************************************)
-(* Macro problem recovery *)
-(*****************************************************************************)
-module TV = Token_views_c
-
-let candidate_macros_in_passed2 passed defs_optional = 
-  let res = ref [] in
-  let res2 = ref [] in
-
-  passed +> List.iter (function
-  | Parser_c.TIdent (s,_)
-   (* bugfix: may have to undo some infered things *)
-  | Parser_c.TMacroIterator (s,_)
-  | Parser_c.TypedefIdent (s,_)
-    -> 
-      (match Common.hfind_option s defs_optional with
-      | Some def -> 
-          if s ==~ Parsing_hacks.regexp_macro 
-          then
-            (* pr2 (spf "candidate: %s" s); *)
-            Common.push2 (s, def) res 
-          else 
-            Common.push2 (s, def) res2
-        | None -> ()
-        )
-
-  | _ -> ()
-  );
-  if null !res 
-  then !res2 
-  else !res
-
-let candidate_macros_in_passed a b = 
-  Common.profile_code "MACRO managment" (fun () -> 
-    candidate_macros_in_passed2 a b)
-  
-
-
-let find_optional_macro_to_expand2 ~defs toks =
-
-  let defs = Common.hash_of_list defs in
-
-  let toks = toks +> Common.map (function
-
-    (* special cases to undo *)
-    | Parser_c.TMacroIterator (s, ii) -> 
-        if Hashtbl.mem defs s
-        then Parser_c.TIdent (s, ii)
-        else Parser_c.TMacroIterator (s, ii)
-
-    | Parser_c.TypedefIdent (s, ii) -> 
-        if Hashtbl.mem defs s
-        then Parser_c.TIdent (s, ii)
-        else Parser_c.TypedefIdent (s, ii)
-
-    | x -> x
-  ) in
-
-  let tokens = toks in
-  Parsing_hacks.fix_tokens_cpp ~macro_defs:defs tokens
-
-  (* just calling apply_macro_defs and having a specialized version
-   * of the code in fix_tokens_cpp is not enough as some work such 
-   * as the passing of the body of attribute in Parsing_hacks.find_macro_paren
-   * will not get the chance to be run on the new expanded tokens.
-   * Hence even if it's expensive, it's currently better to 
-   * just call directly fix_tokens_cpp again here.
-
-  let tokens2 = ref (tokens +> Common.acc_map TV.mk_token_extended) in
-  let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in
-  let paren_grouped = TV.mk_parenthised  cleaner in
-  Cpp_token_c.apply_macro_defs
-    ~msg_apply_known_macro:(fun s -> pr2 (spf "APPLYING: %s" s))
-    ~msg_apply_known_macro_hint:(fun s -> pr2 "hint")
-    defs paren_grouped;
-  (* because the before field is used by apply_macro_defs *)
-  tokens2 := TV.rebuild_tokens_extented !tokens2; 
-  Parsing_hacks.insert_virtual_positions 
-    (!tokens2 +> Common.acc_map (fun x -> x.TV.tok))
-  *)
-let find_optional_macro_to_expand ~defs a = 
-    Common.profile_code "MACRO managment" (fun () -> 
-      find_optional_macro_to_expand2 ~defs a)
-  
-
-
-(*****************************************************************************)
-(* Include/Define hacks *)
-(*****************************************************************************)
-
-(* Sometimes I prefer to generate a single token for a list of things in the
- * lexer so that if I have to passed them, like for passing TInclude then
- * it's easy. Also if I don't do a single token, then I need to 
- * parse the rest which may not need special stuff, like detecting 
- * end of line which the parser is not really ready for. So for instance
- * could I parse a #include <a/b/c/xxx.h> as 2 or more tokens ? just
- * lex #include ? so then need recognize <a/b/c/xxx.h> as one token ? 
- * but this kind of token is valid only after a #include and the
- * lexing and parsing rules are different for such tokens so not that
- * easy to parse such things in parser_c.mly. Hence the following hacks.
- * 
- * less?: maybe could get rid of this like I get rid of some of fix_define.
- *)
-
-(* ------------------------------------------------------------------------- *)
-(* helpers *)
-(* ------------------------------------------------------------------------- *)
-
-(* used to generate new token from existing one *)
-let new_info posadd str ii =
-  { Ast_c.pinfo = 
-      Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with 
-        charpos = Ast_c.pos_of_info ii + posadd;
-        str     = str;
-        column = Ast_c.col_of_info ii + posadd;
-      };
-    (* must generate a new ref each time, otherwise share *)
-    cocci_tag = ref Ast_c.emptyAnnot;
-    comments_tag = ref Ast_c.emptyComments;
-   }
-
-
-let rec comment_until_defeol xs = 
-  match xs with
-  | [] -> 
-      (* job not done in Cpp_token_c.define_parse ? *)
-      failwith "cant find end of define token TDefEOL"
-  | x::xs -> 
-      (match x with
-      | Parser_c.TDefEOL i -> 
-          Parser_c.TCommentCpp (Token_c.CppDirective, TH.info_of_tok x)
-          ::xs
-      | _ -> 
-          let x' = 
-            (* bugfix: otherwise may lose a TComment token *)
-            if TH.is_real_comment x
-            then x
-            else Parser_c.TCommentCpp (Token_c.CppPassingNormal (*good?*), TH.info_of_tok x)
-          in
-          x'::comment_until_defeol xs
-      )
-
-let drop_until_defeol xs = 
-  List.tl 
-    (Common.drop_until (function Parser_c.TDefEOL _ -> true | _ -> false) xs)
-
-
-
-(* ------------------------------------------------------------------------- *)
-(* returns a pair (replaced token, list of next tokens) *)
-(* ------------------------------------------------------------------------- *)
-
-let tokens_include (info, includes, filename, inifdef) = 
-  Parser_c.TIncludeStart (Ast_c.rewrap_str includes info, inifdef), 
-  [Parser_c.TIncludeFilename 
-      (filename, (new_info (String.length includes) filename info))
-  ]
-
 (*****************************************************************************)
 (* Parsing default define macros, usually in a standard.h file *)
 (*****************************************************************************)
 
-let parse_cpp_define_file2 file = 
+let extract_macros2 file = 
   Common.save_excursion Flag_parsing_c.verbose_lexing (fun () -> 
     Flag_parsing_c.verbose_lexing := false;
     let toks = tokens ~profile:false file in
-    let toks = Cpp_token_c.fix_tokens_define toks in
-    Cpp_token_c.extract_cpp_define toks
+    let toks = Parsing_hacks.fix_tokens_define toks in
+    Cpp_token_c.extract_macros toks
   )
 
-let parse_cpp_define_file a = 
-  Common.profile_code_exclusif "HACK" (fun () -> parse_cpp_define_file2 a)
-
-
-
-let (_defs : (string, Cpp_token_c.define_def) Hashtbl.t ref)  = 
-  ref (Hashtbl.create 101)
-
-let (_defs_builtins : (string, Cpp_token_c.define_def) Hashtbl.t ref)  = 
-  ref (Hashtbl.create 101)
-
-
-(* can not be put in parsing_hack, cos then mutually recursive problem as
- * we also want to parse the standard.h file.
- *)
-let init_defs_macros std_h =     
-  if not (Common.lfile_exists std_h)
-  then pr2 ("warning: Can't find default macro file: " ^ std_h)
-  else begin
-    pr2 ("init_defs: " ^ std_h);
-    _defs := Common.hash_of_list (parse_cpp_define_file std_h);
-  end
-
-let init_defs_builtins file_h =     
-  if not (Common.lfile_exists file_h)
-  then pr2 ("warning: Can't find macro file: " ^ file_h)
-  else begin
-    pr2 ("init_defs_builtins: " ^ file_h);
-    _defs_builtins := 
-      Common.hash_of_list (parse_cpp_define_file file_h);
-  end
+let extract_macros a = 
+  Common.profile_code_exclusif "HACK" (fun () -> extract_macros2 a)
 
 
 (*****************************************************************************)
-(* Main entry point *)
+(* Helper for main entry point *)
 (*****************************************************************************)
 
-type info_item =  string * Parser_c.token list
-
-type program2 = toplevel2 list
-     and toplevel2 = Ast_c.toplevel * info_item
-
-let program_of_program2 xs = 
-  xs +> List.map fst
-
-let with_program2 f program2 = 
-  program2 
-  +> Common.unzip 
-  +> (fun (program, infos) -> 
-    f program, infos
-  )
-  +> Common.uncurry Common.zip
-
-
 
 (* The use of local refs (remaining_tokens, passed_tokens, ...) makes
  * possible error recovery. Indeed, they allow to skip some tokens and
@@ -1013,8 +521,8 @@ let rec lexer_function ~pass tr = fun lexbuf ->
             let v' = Parser_c.TCommentCpp (Token_c.CppDirective,TH.info_of_tok v)
             in
             tr.passed <- v'::tr.passed;
-            tr.rest       <- comment_until_defeol tr.rest;
-            tr.rest_clean <- drop_until_defeol tr.rest_clean;
+            tr.rest       <- Parsing_hacks.comment_until_defeol tr.rest;
+            tr.rest_clean <- Parsing_hacks.drop_until_defeol tr.rest_clean;
             lexer_function ~pass tr lexbuf
           end
           else begin
@@ -1035,7 +543,7 @@ let rec lexer_function ~pass tr = fun lexbuf ->
           end
           else begin
             let (v,new_tokens) = 
-              tokens_include (info, includes, filename, inifdef) in
+              Parsing_hacks.tokens_include (info, includes, filename, inifdef) in
             let new_tokens_clean = 
               new_tokens +> List.filter TH.is_not_comment  in
 
@@ -1116,7 +624,8 @@ let get_one_elem ~pass tr (file, filelines) =
       let current = tr.current in
         
       (*  error recovery, go to next synchro point *)
-      let (passed', rest') = find_next_synchro tr.rest tr.passed in
+      let (passed', rest') = 
+        Parsing_recovery_c.find_next_synchro tr.rest tr.passed in
       tr.rest <- rest';
       tr.passed <- passed';
       
@@ -1134,6 +643,152 @@ let get_one_elem ~pass tr (file, filelines) =
 
 
 
+(* Macro problem recovery *)
+(* used by the multi-pass error recovery expand-on-demand *)
+(*
+val candidate_macros_in_passed: 
+  defs: (string, define_def) Hashtbl.t -> 
+  Parser_c.token list -> (string * define_def) list
+*)
+
+let candidate_macros_in_passed2 ~defs passed  = 
+  let res = ref [] in
+  let res2 = ref [] in
+
+  passed +> List.iter (function
+  | Parser_c.TIdent (s,_)
+   (* bugfix: may have to undo some infered things *)
+  | Parser_c.TMacroIterator (s,_)
+  | Parser_c.TypedefIdent (s,_)
+    -> 
+      (match Common.hfind_option s defs with
+      | Some def -> 
+          if s ==~ Parsing_hacks.regexp_macro 
+          then
+            (* pr2 (spf "candidate: %s" s); *)
+            Common.push2 (s, def) res 
+          else 
+            Common.push2 (s, def) res2
+        | None -> ()
+        )
+
+  | _ -> ()
+  );
+  if null !res 
+  then !res2 
+  else !res
+
+let candidate_macros_in_passed ~defs b = 
+  Common.profile_code "MACRO managment" (fun () -> 
+    candidate_macros_in_passed2 ~defs b)
+  
+
+
+
+
+let find_optional_macro_to_expand2 ~defs toks =
+
+  let defs = Common.hash_of_list defs in
+
+  let toks = toks +> Common.map (function
+
+    (* special cases to undo *)
+    | Parser_c.TMacroIterator (s, ii) -> 
+        if Hashtbl.mem defs s
+        then Parser_c.TIdent (s, ii)
+        else Parser_c.TMacroIterator (s, ii)
+
+    | Parser_c.TypedefIdent (s, ii) -> 
+        if Hashtbl.mem defs s
+        then Parser_c.TIdent (s, ii)
+        else Parser_c.TypedefIdent (s, ii)
+
+    | x -> x
+  ) in
+
+  let tokens = toks in
+  Parsing_hacks.fix_tokens_cpp ~macro_defs:defs tokens
+
+  (* just calling apply_macro_defs and having a specialized version
+   * of the code in fix_tokens_cpp is not enough as some work such 
+   * as the passing of the body of attribute in Parsing_hacks.find_macro_paren
+   * will not get the chance to be run on the new expanded tokens.
+   * Hence even if it's expensive, it's currently better to 
+   * just call directly fix_tokens_cpp again here.
+
+  let tokens2 = ref (tokens +> Common.acc_map TV.mk_token_extended) in
+  let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in
+  let paren_grouped = TV.mk_parenthised  cleaner in
+  Cpp_token_c.apply_macro_defs
+    ~msg_apply_known_macro:(fun s -> pr2 (spf "APPLYING: %s" s))
+    ~msg_apply_known_macro_hint:(fun s -> pr2 "hint")
+    defs paren_grouped;
+  (* because the before field is used by apply_macro_defs *)
+  tokens2 := TV.rebuild_tokens_extented !tokens2; 
+  Parsing_hacks.insert_virtual_positions 
+    (!tokens2 +> Common.acc_map (fun x -> x.TV.tok))
+  *)
+let find_optional_macro_to_expand ~defs a = 
+    Common.profile_code "MACRO managment" (fun () -> 
+      find_optional_macro_to_expand2 ~defs a)
+  
+
+
+
+
+(*****************************************************************************)
+(* Main entry points *)
+(*****************************************************************************)
+
+let (_defs : (string, Cpp_token_c.define_def) Hashtbl.t ref)  = 
+  ref (Hashtbl.create 101)
+
+let (_defs_builtins : (string, Cpp_token_c.define_def) Hashtbl.t ref)  = 
+  ref (Hashtbl.create 101)
+
+
+(* can not be put in parsing_hack, cos then mutually recursive problem as
+ * we also want to parse the standard.h file.
+ *)
+let init_defs_macros std_h =     
+  if not (Common.lfile_exists std_h)
+  then pr2 ("warning: Can't find default macro file: " ^ std_h)
+  else begin
+    pr2 ("init_defs: " ^ std_h);
+    _defs := Common.hash_of_list (extract_macros std_h);
+  end
+
+let init_defs_builtins file_h =     
+  if not (Common.lfile_exists file_h)
+  then pr2 ("warning: Can't find macro file: " ^ file_h)
+  else begin
+    pr2 ("init_defs_builtins: " ^ file_h);
+    _defs_builtins := 
+      Common.hash_of_list (extract_macros file_h);
+  end
+
+
+
+type info_item =  string * Parser_c.token list
+
+type program2 = toplevel2 list
+     and toplevel2 = Ast_c.toplevel * info_item
+
+let program_of_program2 xs = 
+  xs +> List.map fst
+
+let with_program2 f program2 = 
+  program2 
+  +> Common.unzip 
+  +> (fun (program, infos) -> 
+    f program, infos
+  )
+  +> Common.uncurry Common.zip
+
+
+
+
+
 
 (* note: as now we go in 2 passes, there is first all the error message of
  * the lexer, and then the error of the parser. It is not anymore
@@ -1159,9 +814,7 @@ let parse_print_error_heuristic2 file =
   Parsing_hacks.ifdef_paren_cnt := 0;
 
   let toks_orig = tokens file in
-
-  let toks = Cpp_token_c.fix_tokens_define toks_orig in
-
+  let toks = Parsing_hacks.fix_tokens_define toks_orig in
   let toks = Parsing_hacks.fix_tokens_cpp ~macro_defs:!_defs_builtins toks in
 
   (* expand macros on demand trick, preparation phase *)
@@ -1178,7 +831,7 @@ let parse_print_error_heuristic2 file =
     )
   in
   Common.profile_code "MACRO mgmt prep 2" (fun () -> 
-    let local_macros = parse_cpp_define_file file in
+    let local_macros = extract_macros file in
     local_macros +> List.iter (fun (s, def) -> 
       Hashtbl.replace macros   s def;
     );
@@ -1225,8 +878,10 @@ let parse_print_error_heuristic2 file =
             | Left e -> passx
             | Right (info,line_err,passed,passed_before_error,cur,exn) -> 
                 let candidates = 
-                  candidate_macros_in_passed passed macros 
+                  candidate_macros_in_passed ~defs:macros passed 
                 in
+               
+
                 if is_define_passed passed || null candidates
                 then passx
                 else begin
@@ -1246,7 +901,9 @@ let parse_print_error_heuristic2 file =
                       pr2_err "parsing pass4: try again";
 
                       let candidates = 
-                        candidate_macros_in_passed passed macros in
+                        candidate_macros_in_passed 
+                          ~defs:macros passed 
+                      in
 
                       let toks = List.rev passed ++ tr.rest in
                       let toks' = 
@@ -1351,7 +1008,7 @@ let parse_print_error_heuristic2 file =
     )
   in
   let v = loop tr in
-  let v = consistency_checking v in
+  let v = with_program2 Parsing_consistency_c.consistency_checking v in
   (v, stat)
 
 
index c877e7d..d5a6a96 100644 (file)
@@ -1,55 +1,51 @@
-open Common
-
 (* The main function is parse_c_and_cpp. It uses globals in Lexer_Parser and 
- * Parsing_hacks. Especially Parsing_hacks._defs which often comes
- * from a standard.h macro file. Cf also init_defs below.
+ * and also _defs below which often comes from a standard.h macro file. 
+ * cf also init_defs_xxx below.
  *)
 
-(* ---------------------------------------------------------------------- *)
 type program2 = toplevel2 list
    and toplevel2 = Ast_c.toplevel * info_item
-
-    (* the token list contains now also the comment-tokens *)
-    and info_item = (string * Parser_c.token list)
-
-(* ---------------------------------------------------------------------- *)
-(* a few globals *)
-val parse_cpp_define_file : 
-  filename -> (string, Cpp_token_c.define_def) assoc
+     (* the token list contains now also the comment-tokens *)
+       and info_item = (string * Parser_c.token list)
 
 (* usually correspond to what is inside your macros.h *)
 val _defs : (string, Cpp_token_c.define_def) Hashtbl.t ref
 (* usually correspond to what is inside your standard.h *)
 val _defs_builtins : (string, Cpp_token_c.define_def) Hashtbl.t ref
 
-val init_defs_macros : filename -> unit
-val init_defs_builtins : filename -> unit
+val init_defs_macros : Common.filename -> unit
+val init_defs_builtins : Common.filename -> unit
 
 
-(* ---------------------------------------------------------------------- *)
 (* This is the main function *)
-val parse_print_error_heuristic:  
-  filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat)
-(* alias of previous func *)
 val parse_c_and_cpp : 
-  filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat)
+  Common.filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat)
 
 (* use some .ast_raw memoized version, and take care if obsolete *)
 val parse_cache:
-  filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat)
+  Common.filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat)
+
+
+(* ---------------------------------------------------------------------- *)
+(* used to extract macros from standard.h, but also now from regular C files
+ * in -extract_macros to later feed an automatically build standard.h *)
+val extract_macros : 
+  Common.filename -> (string, Cpp_token_c.define_def) Common.assoc
+
+
+
+
 
 (* ---------------------------------------------------------------------- *)
 (* used also for the standard.h file *)
-val tokens:      ?profile:bool -> filename -> Parser_c.token list
+val tokens:      ?profile:bool -> Common.filename -> Parser_c.token list
 val tokens_of_string: string -> Parser_c.token list
 
-val parse:                        filename -> Ast_c.program
-val parse_print_error:            filename -> Ast_c.program
+val parse:                        Common.filename -> Ast_c.program
+val parse_print_error:            Common.filename -> Ast_c.program
 val parse_gen: 
     ((Lexing.lexbuf -> Parser_c.token) -> Lexing.lexbuf -> 'a) -> string -> 'a
 
-
-
 (* ---------------------------------------------------------------------- *)
 (* Easy way to build complex Ast elements from simple strings.
  * Can also be useful when called from the ocaml toplevel to test. 
@@ -62,14 +58,9 @@ val cstatement_of_string  : string -> Ast_c.statement
 val cexpression_of_string : string -> Ast_c.expression
 
 
-
-
 (* ---------------------------------------------------------------------- *)
 (* a few helpers *)
 val print_commentized       : Parser_c.token list -> unit
 
 val program_of_program2 : program2 -> Ast_c.program
 val with_program2: (Ast_c.program -> Ast_c.program) -> program2 -> program2
-
-
-
index 14d3f8c..9ad9c4c 100644 (file)
@@ -21,7 +21,6 @@ open Lexer_parser (* for the fields *)
 
 open Semantic_c (* Semantic exn *)
 
-module Stat = Parsing_stat
 
 (*****************************************************************************)
 (* Wrappers *)
@@ -446,6 +445,7 @@ let mk_string_wrap (s,info) = (s, [info])
 /*(*-----------------------------------------*)*/
 %token <Ast_c.info> Tasm
 %token <Ast_c.info> Tattribute
+%token <Ast_c.info> TattributeNoarg
 %token <Ast_c.info> Tinline
 %token <Ast_c.info> Ttypeof
 
@@ -1269,6 +1269,7 @@ decl2:
        DeclList ([{v_namei = None; v_type = returnType; 
                    v_storage = unwrap storage; v_local = local;
                    v_attr = Ast_c.noattr;
+                   v_type_bis = ref None;
                 },[]],  
                 ($2::iistart::snd storage))
      } 
@@ -1291,6 +1292,7 @@ decl2:
             v_storage = unwrap storage;
             v_local = local;
             v_attr = attrs;
+            v_type_bis = ref None;
            },
            iivirg 
          )
diff --git a/parsing_c/parsing_consistency_c.ml b/parsing_c/parsing_consistency_c.ml
new file mode 100644 (file)
index 0000000..8a5c432
--- /dev/null
@@ -0,0 +1,195 @@
+(* Yoann Padioleau
+ * 
+ * Copyright (C) 2006, 2007, 2008 Ecole des Mines de Nantes
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License (GPL)
+ * version 2 as published by the Free Software Foundation.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * file license.txt for more details.
+ *)
+
+open Common
+
+
+(*****************************************************************************)
+(* Wrappers *)
+(*****************************************************************************)
+let pr2_err, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing 
+
+(*****************************************************************************)
+(* Consistency checking *)
+(*****************************************************************************)
+
+(* todo:
+ *  could check that an ident has always the same class, be it a typedef
+ *  (but sometimes do 'acpi_val acpi_val;'), an ident, a TMacroStatement, 
+ *  etc.
+ *)
+
+type class_ident = 
+  | CIdent (* can be var, func, field, tag, enum constant *)
+  | CTypedef
+
+let str_of_class_ident = function
+  | CIdent -> "Ident"
+  | CTypedef -> "Typedef"
+
+(*
+  | CMacro
+  | CMacroString
+  | CMacroStmt
+  | CMacroDecl
+  | CMacroIterator
+  | CAttr
+
+(* but take care that must still be able to use '=' *)
+type context = InFunction | InEnum | InStruct | InInitializer | InParams
+type class_token = 
+  | CIdent of class_ident
+
+  | CComment 
+  | CSpace
+  | CCommentCpp of cppkind
+  | CCommentMisc
+  | CCppDirective
+
+  | COPar
+  | CCPar
+  | COBrace
+  | CCBrace
+
+  | CSymbol
+  | CReservedKwd (type | decl | qualif | flow | misc | attr)
+*)
+
+let ident_to_typename ident : Ast_c.fullType =
+  Ast_c.mk_ty (Ast_c.TypeName  (ident, Ast_c.noTypedefDef())) Ast_c.noii
+                  
+
+(* parse_typedef_fix4 *)
+let consistency_checking2 xs = 
+
+  (* first phase, gather data *)
+  let stat = Hashtbl.create 101 in 
+
+  (* default value for hash *)
+  let v1 () = Hashtbl.create 101 in
+  let v2 () = ref 0 in
+
+  let bigf = { Visitor_c.default_visitor_c with
+
+    Visitor_c.kexpr = (fun (k,bigf) x -> 
+      match Ast_c.unwrap_expr x with
+      | Ast_c.Ident (id) -> 
+          let s = Ast_c.str_of_name id in
+          stat +> 
+            Common.hfind_default s v1 +> Common.hfind_default CIdent v2 +> 
+            (fun aref -> incr aref)
+
+      | _ -> k x
+    );
+    Visitor_c.ktype = (fun (k,bigf) t -> 
+      match Ast_c.unwrap_typeC t with
+      | Ast_c.TypeName (name,_typ) -> 
+          let s = Ast_c.str_of_name name in
+          stat +> 
+            Common.hfind_default s v1 +> Common.hfind_default CTypedef v2 +> 
+            (fun aref -> incr aref)
+
+      | _ -> k t
+    );
+  } 
+  in
+  xs +> List.iter (fun (p) -> Visitor_c.vk_toplevel bigf p);
+
+
+  let ident_to_type = ref [] in
+  
+
+  (* second phase, analyze data *)
+  stat +> Hashtbl.iter (fun k v -> 
+    let xs = Common.hash_to_list v in
+    if List.length xs >= 2
+    then begin 
+      pr2_err ("CONFLICT:" ^ k);
+      let sorted = xs +> List.sort (fun (ka,va) (kb,vb) -> 
+        if !va =|= !vb then
+          (match ka, kb with
+          | CTypedef, _ -> 1 (* first is smaller *)
+          | _, CTypedef -> -1
+          | _ -> 0
+          )
+        else compare !va !vb
+      ) in
+      let sorted = List.rev sorted in
+      match sorted with
+      | [CTypedef, i1;CIdent, i2] -> 
+          pr2_err ("transforming some ident in typedef");
+          push2 k ident_to_type;
+      | _ -> 
+          pr2_err ("TODO:other transforming?");
+      
+    end
+  );
+
+  (* third phase, update ast. 
+   * todo? but normally should try to handle correctly scope ? maybe sometime
+   * sizeof(id) and even if id was for a long time an identifier, maybe 
+   * a few time, because of the scope it's actually really a type.
+   *)
+  if (null !ident_to_type)
+  then xs 
+  else 
+    let bigf = { Visitor_c.default_visitor_c_s with
+      Visitor_c.kdefineval_s = (fun (k,bigf) x -> 
+        match x with
+        | Ast_c.DefineExpr e -> 
+            (match Ast_c.unwrap_expr e with
+            | Ast_c.Ident (ident)  -> 
+                let s = Ast_c.str_of_name ident in 
+                if List.mem s !ident_to_type
+                then
+                  let t = ident_to_typename ident in
+                  Ast_c.DefineType t
+                else k x
+            | _ -> k x
+            )
+        | _ -> k x
+      );
+      Visitor_c.kexpr_s = (fun (k, bigf) x -> 
+        match Ast_c.get_e_and_ii x with
+        | (Ast_c.SizeOfExpr e, tref), isizeof -> 
+            let i1 = tuple_of_list1 isizeof in
+            (match Ast_c.get_e_and_ii e with
+            | (Ast_c.ParenExpr e, _), iiparen -> 
+                let (i2, i3) = tuple_of_list2 iiparen in
+                (match Ast_c.get_e_and_ii e with
+                | (Ast_c.Ident (ident), _), _ii  -> 
+
+                    let s = Ast_c.str_of_name ident in 
+                    if List.mem s !ident_to_type
+                    then
+                      let t = ident_to_typename ident in
+                      (Ast_c.SizeOfType t, tref),[i1;i2;i3]
+                    else  k x
+                | _ -> k x
+                )
+            | _ -> k x
+            )
+        | _ -> k x
+      );
+    } in
+    xs +> List.map (fun (p) -> 
+      Visitor_c.vk_toplevel_s bigf p
+    )
+
+
+let consistency_checking a  = 
+  Common.profile_code "C consistencycheck" (fun () -> consistency_checking2 a)
+
+
+
diff --git a/parsing_c/parsing_consistency_c.mli b/parsing_c/parsing_consistency_c.mli
new file mode 100644 (file)
index 0000000..ad24556
--- /dev/null
@@ -0,0 +1,4 @@
+(* check consistency and possibly change some Ident expression into
+ * TypeName, especially in argument to functions. *)
+val consistency_checking: 
+  Ast_c.program -> Ast_c.program
index 50d769a..fdc5a97 100644 (file)
@@ -363,6 +363,234 @@ let rec set_ifdef_parenthize_info xs =
   )
 
 
+(*****************************************************************************)
+(* The parsing hack for #define *)
+(*****************************************************************************)
+
+(* To parse macro definitions I need to do some tricks 
+ * as some information can be get only at the lexing level. For instance
+ * the space after the name of the macro in '#define foo (x)' is meaningful
+ * but the grammar can not get this information. So define_ident below
+ * look at such space and generate a special TOpardefine. In a similar
+ * way macro definitions can contain some antislash and newlines
+ * and the grammar need to know where the macro ends (which is 
+ * a line-level and so low token-level information). Hence the 
+ * function 'define_line' below and the TDefEol.
+ * 
+ * update: TDefEol is handled in a special way at different places, 
+ * a little bit like EOF, especially for error recovery, so this
+ * is an important token that should not be retagged!
+ * 
+ * 
+ * ugly hack, a better solution perhaps would be to erase TDefEOL 
+ * from the Ast and list of tokens in parse_c. 
+ * 
+ * note: I do a +1 somewhere, it's for the unparsing to correctly sync.
+ * 
+ * note: can't replace mark_end_define by simply a fakeInfo(). The reason
+ * is where is the \n TCommentSpace. Normally there is always a last token
+ * to synchronize on, either EOF or the token of the next toplevel.
+ * In the case of the #define we got in list of token 
+ * [TCommentSpace "\n"; TDefEOL] but if TDefEOL is a fakeinfo then we will
+ * not synchronize on it and so we will not print the "\n".
+ * A solution would be to put the TDefEOL before the "\n".
+ * 
+ * todo?: could put a ExpandedTok for that ? 
+ *)
+let mark_end_define ii = 
+  let ii' = 
+    { Ast_c.pinfo = Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with 
+        Common.str = ""; 
+        Common.charpos = Ast_c.pos_of_info ii + 1
+      };
+      cocci_tag = ref Ast_c.emptyAnnot;
+      comments_tag = ref Ast_c.emptyComments;
+    } 
+  in
+  TDefEOL (ii')
+
+(* put the TDefEOL at the good place *)
+let rec define_line_1 acc xs = 
+  match xs with
+  | [] -> List.rev acc
+  | TDefine ii::xs ->
+      let line = Ast_c.line_of_info ii in
+      let acc = (TDefine ii) :: acc in
+      define_line_2 acc line ii xs
+  | TCppEscapedNewline ii::xs ->
+      pr2 ("SUSPICIOUS: a \\ character appears outside of a #define at");
+      pr2 (Ast_c.strloc_of_info ii);
+      let acc = (TCommentSpace ii) :: acc in
+      define_line_1 acc xs
+  | x::xs -> define_line_1 (x::acc) xs
+
+and define_line_2 acc line lastinfo xs = 
+  match xs with 
+  | [] -> 
+      (* should not happened, should meet EOF before *)
+      pr2 "PB: WEIRD";   
+      List.rev (mark_end_define lastinfo::acc)
+  | x::xs -> 
+      let line' = TH.line_of_tok x in
+      let info = TH.info_of_tok x in
+
+      (match x with
+      | EOF ii -> 
+         let acc = (mark_end_define lastinfo) :: acc in
+         let acc = (EOF ii) :: acc in
+          define_line_1 acc xs
+      | TCppEscapedNewline ii -> 
+          if (line' <> line) then pr2 "PB: WEIRD: not same line number";
+         let acc = (TCommentSpace ii) :: acc in
+          define_line_2 acc (line+1) info xs
+      | x -> 
+          if line' =|= line
+          then define_line_2 (x::acc) line info xs 
+          else define_line_1 (mark_end_define lastinfo::acc) (x::xs)
+      )
+
+let rec define_ident acc xs = 
+  match xs with
+  | [] -> List.rev acc
+  | TDefine ii::xs -> 
+      let acc = TDefine ii :: acc in
+      (match xs with
+      | TCommentSpace i1::TIdent (s,i2)::TOPar (i3)::xs -> 
+          (* Change also the kind of TIdent to avoid bad interaction
+           * with other parsing_hack tricks. For instant if keep TIdent then
+           * the stringication algo can believe the TIdent is a string-macro.
+           * So simpler to change the kind of the ident too.
+           *)
+          (* if TOParDefine sticked to the ident, then 
+           * it's a macro-function. Change token to avoid ambiguity
+           * between #define foo(x)  and   #define foo   (x)
+           *)
+         let acc = (TCommentSpace i1) :: acc in
+         let acc = (TIdentDefine (s,i2)) :: acc in
+         let acc = (TOParDefine i3) :: acc in
+          define_ident acc xs
+
+      | TCommentSpace i1::TIdent (s,i2)::xs -> 
+         let acc = (TCommentSpace i1) :: acc in
+         let acc = (TIdentDefine (s,i2)) :: acc in
+          define_ident acc xs
+
+      (* bugfix: ident of macro (as well as params, cf below) can be tricky
+       * note, do we need to subst in the body of the define ? no cos
+       * here the issue is the name of the macro, as in #define inline,
+       * so obviously the name of this macro will not be used in its 
+       * body (it would be a recursive macro, which is forbidden).
+       *)
+       
+      | TCommentSpace i1::t::xs -> 
+
+          let s = TH.str_of_tok t in
+          let ii = TH.info_of_tok t in
+          if s ==~ Common.regexp_alpha
+          then begin
+            pr2 (spf "remapping: %s to an ident in macro name" s);
+           let acc = (TCommentSpace i1) :: acc in
+           let acc = (TIdentDefine (s,ii)) :: acc in
+            define_ident acc xs
+          end
+          else begin
+            pr2 "WEIRD: weird #define body"; 
+            define_ident acc xs
+          end
+
+      | _ -> 
+          pr2 "WEIRD: weird #define body"; 
+          define_ident acc xs
+      )
+  | x::xs ->
+      let acc = x :: acc in
+      define_ident acc xs
+  
+
+
+let fix_tokens_define2 xs = 
+  define_ident [] (define_line_1 [] xs)
+
+let fix_tokens_define a = 
+  Common.profile_code "C parsing.fix_define" (fun () -> fix_tokens_define2 a)
+      
+
+
+
+
+(* ------------------------------------------------------------------------- *)
+(* Other parsing hacks related to cpp, Include/Define hacks *)
+(* ------------------------------------------------------------------------- *)
+
+(* Sometimes I prefer to generate a single token for a list of things in the
+ * lexer so that if I have to passed them, like for passing TInclude then
+ * it's easy. Also if I don't do a single token, then I need to 
+ * parse the rest which may not need special stuff, like detecting 
+ * end of line which the parser is not really ready for. So for instance
+ * could I parse a #include <a/b/c/xxx.h> as 2 or more tokens ? just
+ * lex #include ? so then need recognize <a/b/c/xxx.h> as one token ? 
+ * but this kind of token is valid only after a #include and the
+ * lexing and parsing rules are different for such tokens so not that
+ * easy to parse such things in parser_c.mly. Hence the following hacks.
+ * 
+ * less?: maybe could get rid of this like I get rid of some of fix_define.
+ *)
+
+(* helpers *)
+
+(* used to generate new token from existing one *)
+let new_info posadd str ii =
+  { Ast_c.pinfo = 
+      Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with 
+        charpos = Ast_c.pos_of_info ii + posadd;
+        str     = str;
+        column = Ast_c.col_of_info ii + posadd;
+      };
+    (* must generate a new ref each time, otherwise share *)
+    cocci_tag = ref Ast_c.emptyAnnot;
+    comments_tag = ref Ast_c.emptyComments;
+   }
+
+
+let rec comment_until_defeol xs = 
+  match xs with
+  | [] -> 
+      (* job not done in Cpp_token_c.define_parse ? *)
+      failwith "cant find end of define token TDefEOL"
+  | x::xs -> 
+      (match x with
+      | Parser_c.TDefEOL i -> 
+          Parser_c.TCommentCpp (Token_c.CppDirective, TH.info_of_tok x)
+          ::xs
+      | _ -> 
+          let x' = 
+            (* bugfix: otherwise may lose a TComment token *)
+            if TH.is_real_comment x
+            then x
+            else Parser_c.TCommentCpp (Token_c.CppPassingNormal (*good?*), TH.info_of_tok x)
+          in
+          x'::comment_until_defeol xs
+      )
+
+let drop_until_defeol xs = 
+  List.tl 
+    (Common.drop_until (function Parser_c.TDefEOL _ -> true | _ -> false) xs)
+
+
+
+(* ------------------------------------------------------------------------- *)
+(* returns a pair (replaced token, list of next tokens) *)
+(* ------------------------------------------------------------------------- *)
+
+let tokens_include (info, includes, filename, inifdef) = 
+  Parser_c.TIncludeStart (Ast_c.rewrap_str includes info, inifdef), 
+  [Parser_c.TIncludeFilename 
+      (filename, (new_info (String.length includes) filename info))
+  ]
+
+
+
+
 (*****************************************************************************)
 (* CPP handling: macros, ifdefs, macros defs  *)
 (*****************************************************************************)
@@ -685,6 +913,13 @@ let rec find_macro_paren xs =
       set_as_comment Token_c.CppAttr id;
       find_macro_paren xs
 
+  | PToken ({tok = TattributeNoarg _} as id)
+    ::xs
+     -> 
+      pr2_cpp ("MACRO: __attributenoarg detected ");
+      set_as_comment Token_c.CppAttr id;
+      find_macro_paren xs
+
 (*
   (* attribute cpp, __xxx id *)
   | PToken ({tok = TIdent (s,i1)} as id)
@@ -1348,11 +1583,6 @@ let fix_tokens_cpp ~macro_defs a =
 
 
 
-(*****************************************************************************)
-(* for the cpp-builtin, standard.h, part 0 *)
-(*****************************************************************************)
-
-(* now in cpp_token_c.ml *)
 
 (*****************************************************************************)
 (* Lexing with lookahead *)
index 4689fd0..1236651 100644 (file)
@@ -1,5 +1,3 @@
-open Common 
-
 (* This module tries to detect some cpp idioms so that we can parse as-is
  * files by adjusting or commenting some tokens. Parsing hack style. 
  * Sometime we use some indentation information,
@@ -50,13 +48,35 @@ val filter_cpp_stuff :
 val insert_virtual_positions: 
   Parser_c.token list -> Parser_c.token list
 
+
+(* will among other things interally call cpp_token_c to macro
+ * expand some macros *)
 val fix_tokens_cpp : 
   macro_defs:(string, Cpp_token_c.define_def) Hashtbl.t ->
   Parser_c.token list -> Parser_c.token list
 
+
 (* next stream tokens -> passed stream tokens -> final next token *)
 val lookahead : 
   pass:int -> 
   Parser_c.token list -> Parser_c.token list -> Parser_c.token
 
 
+
+(* ------------------------------------------------------------------------ *)
+(* Parsing hack helpers related to #define or #include *)
+(* ------------------------------------------------------------------------ *)
+
+(* generate virtual end-of-line token, TDefEol, pass the antislash, etc *)
+val fix_tokens_define : 
+  Parser_c.token list -> Parser_c.token list
+
+(* called when need to pass some tokens during some error recovery *)
+val drop_until_defeol: Parser_c.token list -> Parser_c.token list
+val comment_until_defeol: Parser_c.token list -> Parser_c.token list
+
+(* generates TIncludeStart and TIncludeFilename tokens *)
+val tokens_include: 
+  Ast_c.info * string * string * bool ref ->
+  Parser_c.token * Parser_c.token list
+
diff --git a/parsing_c/parsing_recovery_c.ml b/parsing_c/parsing_recovery_c.ml
new file mode 100644 (file)
index 0000000..569c502
--- /dev/null
@@ -0,0 +1,143 @@
+(* Yoann Padioleau
+ * 
+ * Copyright (C) 2006, 2007, 2008 Ecole des Mines de Nantes
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License (GPL)
+ * version 2 as published by the Free Software Foundation.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * file license.txt for more details.
+ *)
+
+open Common
+
+module TH = Token_helpers 
+
+(*****************************************************************************)
+(* Wrappers *)
+(*****************************************************************************)
+let pr2_err, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing 
+
+(*****************************************************************************)
+(* Helpers *)
+(*****************************************************************************)
+
+let is_defined_passed_bis last_round = 
+  let xs = last_round +> List.filter TH.is_not_comment in
+  match xs with
+  | Parser_c.TDefine _::_ -> true
+  | _ -> false
+
+
+(*****************************************************************************)
+(* Skipping stuff, find next "synchronisation" point *)
+(*****************************************************************************)
+
+(* todo: do something if find Parser_c.Eof ? *)
+let rec find_next_synchro ~next ~already_passed =
+
+  (* Maybe because not enough }, because for example an ifdef contains
+   * in both branch some opening {, we later eat too much, "on deborde
+   * sur la fonction d'apres". So already_passed may be too big and
+   * looking for next synchro point starting from next may not be the
+   * best. So maybe we can find synchro point inside already_passed
+   * instead of looking in next.
+   * 
+   * But take care! must progress. We must not stay in infinite loop!
+   * For instance now I have as a error recovery to look for 
+   * a "start of something", corresponding to start of function,
+   * but must go beyond this start otherwise will loop.
+   * So look at premier(external_declaration2) in parser.output and
+   * pass at least those first tokens.
+   * 
+   * I have chosen to start search for next synchro point after the
+   * first { I found, so quite sure we will not loop. *)
+
+  let last_round = List.rev already_passed in
+  if is_defined_passed_bis last_round 
+  then find_next_synchro_define (last_round ++ next) []
+  else 
+
+  let (before, after) = 
+    last_round +> Common.span (fun tok -> 
+      match tok with
+      (* by looking at TOBrace we are sure that the "start of something"
+       * will not arrive too early 
+       *)
+      | Parser_c.TOBrace _ -> false
+      | Parser_c.TDefine _ -> false
+      | _ -> true
+    ) 
+  in
+  find_next_synchro_orig (after ++ next)  (List.rev before)
+
+    
+
+and find_next_synchro_define next already_passed =
+  match next with
+  | [] ->  
+      pr2_err "ERROR-RECOV: end of file while in recovery mode"; 
+      already_passed, []
+  | (Parser_c.TDefEOL i as v)::xs  -> 
+      pr2_err ("ERROR-RECOV: found sync end of #define, line "^i_to_s(TH.line_of_tok v));
+      v::already_passed, xs
+  | v::xs -> 
+      find_next_synchro_define xs (v::already_passed)
+
+
+    
+
+and find_next_synchro_orig next already_passed =
+  match next with
+  | [] ->  
+      pr2_err "ERROR-RECOV: end of file while in recovery mode"; 
+      already_passed, []
+
+  | (Parser_c.TCBrace i as v)::xs when TH.col_of_tok v =|= 0 -> 
+      pr2_err ("ERROR-RECOV: found sync '}' at line "^i_to_s (TH.line_of_tok v));
+
+      (match xs with
+      | [] -> raise Impossible (* there is a EOF token normally *)
+
+      (* still useful: now parser.mly allow empty ';' so normally no pb *)
+      | Parser_c.TPtVirg iptvirg::xs -> 
+          pr2_err "ERROR-RECOV: found sync bis, eating } and ;";
+          (Parser_c.TPtVirg iptvirg)::v::already_passed, xs
+
+      | Parser_c.TIdent x::Parser_c.TPtVirg iptvirg::xs -> 
+          pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;";
+          (Parser_c.TPtVirg iptvirg)::(Parser_c.TIdent x)::v::already_passed, 
+          xs
+            
+      | Parser_c.TCommentSpace sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg
+        ::xs -> 
+          pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;";
+          (Parser_c.TCommentSpace sp)::
+            (Parser_c.TPtVirg iptvirg)::
+            (Parser_c.TIdent x)::
+            v::
+            already_passed, 
+          xs
+            
+      | Parser_c.TCommentNewline sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg
+        ::xs -> 
+          pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;";
+          (Parser_c.TCommentNewline sp)::
+            (Parser_c.TPtVirg iptvirg)::
+            (Parser_c.TIdent x)::
+            v::
+            already_passed, 
+          xs
+            
+      | _ -> 
+          v::already_passed, xs
+      )
+  | v::xs when TH.col_of_tok v =|= 0 && TH.is_start_of_something v  -> 
+      pr2_err ("ERROR-RECOV: found sync col 0 at line "^ i_to_s(TH.line_of_tok v));
+      already_passed, v::xs
+        
+  | v::xs -> 
+      find_next_synchro_orig xs (v::already_passed)
diff --git a/parsing_c/parsing_recovery_c.mli b/parsing_c/parsing_recovery_c.mli
new file mode 100644 (file)
index 0000000..140410c
--- /dev/null
@@ -0,0 +1,4 @@
+val find_next_synchro: 
+  next:Parser_c.token list -> 
+  already_passed:Parser_c.token list -> 
+  Parser_c.token list * Parser_c.token list
index 560240d..b277f65 100644 (file)
  *)
 open Common
 
-
 open Ast_c
 
+module F = Control_flow_c
+
 (*****************************************************************************)
 (* Wrappers *)
 (*****************************************************************************)
 let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_unparsing
 
+(*****************************************************************************)
+(* Types *)
 (*****************************************************************************)
 
-type pr_elem_func = Ast_c.info -> unit
-type pr_space_func = unit -> unit
-type pr_nl_func = unit -> unit
-type pr_indent_func = unit -> unit
-type pr_outdent_func = unit -> unit
-type pr_unindent_func = unit -> unit
-
-type expression_printer = Ast_c.expression -> unit
-type arg_list_printer = Ast_c.argument Ast_c.wrap2 list -> unit
-type statement_printer = Ast_c.statement -> unit
-type declaration_printer = Ast_c.declaration -> unit
-type initialiser_printer = Ast_c.initialiser -> unit
-type param_printer = Ast_c.parameterType -> unit
-type type_printer = Ast_c.fullType -> unit
-type type_with_ident_printer =
+type type_with_ident =
     (string * Ast_c.info) option ->
-      (Ast_c.storage * Ast_c.il) option -> Ast_c.fullType ->
-       Ast_c.attribute list -> unit
-type toplevel_printer = Ast_c.toplevel -> unit
-type flow_printer = Control_flow_c.node -> unit
+    (Ast_c.storage * Ast_c.il) option -> 
+    Ast_c.fullType ->
+    Ast_c.attribute list -> unit
+
+type 'a printer = 'a -> unit 
+
+type pretty_printers = {
+  expression      : Ast_c.expression printer;
+  arg_list        : (Ast_c.argument Ast_c.wrap2 list) printer;
+  statement       : Ast_c.statement printer;
+  decl            : Ast_c.declaration printer;
+  init            : Ast_c.initialiser printer;
+  param           : Ast_c.parameterType printer;
+  ty              : Ast_c.fullType printer;
+  type_with_ident : type_with_ident;
+  toplevel        : Ast_c.toplevel printer;
+  flow            : Control_flow_c.node printer
+}
 
-(* result type *)
-type pretty_printers =
-    {expression : expression_printer;
-      arg_list : arg_list_printer;
-      statement : statement_printer;
-      decl : declaration_printer;
-      init : initialiser_printer;
-      param : param_printer;
-      ty : type_printer;
-      type_with_ident : type_with_ident_printer;
-      toplevel : toplevel_printer;
-      flow : flow_printer}
 
-module F = Control_flow_c
 
 (*****************************************************************************)
 
@@ -70,7 +60,10 @@ module F = Control_flow_c
  * to pretty print some piece of C that was generated, or some
  * abstract-lined piece of code, etc. *)
 
-let pretty_print_c pr_elem pr_space pr_nl pr_indent pr_outdent pr_unindent =
+let mk_pretty_printers
+    ~pr_elem ~pr_space 
+    ~pr_nl ~pr_indent ~pr_outdent ~pr_unindent 
+ =
   let start_block () = pr_nl(); pr_indent() in
   let end_block   () = pr_unindent(); pr_nl() in
   
@@ -81,6 +74,9 @@ let pretty_print_c pr_elem pr_space pr_nl pr_indent pr_outdent pr_unindent =
         (*no newline at the end - someone else will do that*)
        start_block(); f(); pr_unindent() in
   
+
+
+
   let rec pp_expression = fun ((exp, typ), ii) -> 
     (match exp, ii with
     | Ident (ident),         []     -> pp_name ident
@@ -1276,7 +1272,7 @@ and pp_init (init, iinit) =
         pr2 "YYY" in
 
 
-  {expression = pp_expression;
+  { expression = pp_expression;
     arg_list = pp_arg_list;
     statement = pp_statement;
     decl = pp_decl;
@@ -1285,7 +1281,8 @@ and pp_init (init, iinit) =
     ty = pp_type;
     type_with_ident = pp_type_with_ident;
     toplevel = pp_toplevel;
-    flow = pp_flow}
+    flow = pp_flow;
+  }
     
 (*****************************************************************************)
     
@@ -1312,9 +1309,11 @@ let pr_indent _ = ()
 let pr_outdent _ = ()
 let pr_unindent _ = ()
 
+
 let ppc =
-  pretty_print_c pr_elem pr_space pr_nl pr_outdent pr_indent pr_unindent
-    
+  mk_pretty_printers 
+    ~pr_elem ~pr_space ~pr_nl ~pr_outdent ~pr_indent ~pr_unindent
+
 let pp_expression_simple = ppc.expression
 let pp_statement_simple  = ppc.statement
 let pp_type_simple       = ppc.ty
@@ -1322,47 +1321,49 @@ let pp_init_simple       = ppc.init
 let pp_toplevel_simple   = ppc.toplevel
 let pp_flow_simple       = ppc.flow
 
-let pp_elem_sp pr_elem pr_space =
-  pretty_print_c pr_elem pr_space pr_nl pr_outdent pr_indent pr_unindent
 
-let pp_expression_gen pr_elem pr_space =
+let pp_elem_sp ~pr_elem ~pr_space =
+  mk_pretty_printers
+    ~pr_elem ~pr_space 
+    ~pr_nl ~pr_outdent ~pr_indent ~pr_unindent
+
+let pp_expression_gen ~pr_elem ~pr_space =
   (pp_elem_sp pr_elem pr_space).expression
 
 let pp_arg_list_gen pr_elem pr_space =
   (pp_elem_sp pr_elem pr_space).arg_list
 
-let pp_statement_gen pr_elem pr_space =
+let pp_statement_gen ~pr_elem ~pr_space =
   (pp_elem_sp pr_elem pr_space).statement
 
 let pp_decl_gen pr_elem pr_space =
   (pp_elem_sp pr_elem pr_space).decl
 
-let pp_init_gen pr_elem pr_space =
+let pp_init_gen ~pr_elem ~pr_space =
   (pp_elem_sp pr_elem pr_space).init
 
-let pp_param_gen pr_elem pr_space =
+let pp_param_gen ~pr_elem ~pr_space =
   (pp_elem_sp pr_elem pr_space).param
 
-let pp_type_gen pr_elem pr_space =
+let pp_type_gen ~pr_elem ~pr_space =
   (pp_elem_sp pr_elem pr_space).ty
 
 let pp_type_with_ident_gen pr_elem pr_space =
   (pp_elem_sp pr_elem pr_space).type_with_ident
 
-let pp_program_gen pr_elem pr_space =
+let pp_program_gen ~pr_elem ~pr_space =
   (pp_elem_sp pr_elem pr_space).toplevel
 
 
-
 let string_of_expression e = 
   Common.format_to_string (fun () ->
     pp_expression_simple e
-      )
+  )
 
 let string_of_toplevel top = 
   Common.format_to_string (fun () ->
     pp_toplevel_simple top
-      )
+  )
     
 let (debug_info_of_node:
        Ograph_extended.nodei -> Control_flow_c.cflow -> string) = 
dissimilarity index 94%
index d6273a8..b850dd1 100644 (file)
@@ -1,65 +1,57 @@
-
-type pr_elem_func = Ast_c.info -> unit
-type pr_space_func = unit -> unit
-type pr_nl_func = unit -> unit
-type pr_indent_func = unit -> unit
-type pr_outdent_func = unit -> unit
-type pr_unindent_func = unit -> unit
-
-type expression_printer = Ast_c.expression -> unit
-type arg_list_printer = Ast_c.argument Ast_c.wrap2 list -> unit
-type statement_printer = Ast_c.statement -> unit
-type declaration_printer = Ast_c.declaration -> unit
-type initialiser_printer = Ast_c.initialiser -> unit
-type param_printer = Ast_c.parameterType -> unit
-type type_printer = Ast_c.fullType -> unit
-type type_with_ident_printer =
-    (string * Ast_c.info) option ->
-      (Ast_c.storage * Ast_c.il) option -> Ast_c.fullType ->
-       Ast_c.attribute list -> unit
-type toplevel_printer = Ast_c.toplevel -> unit
-type flow_printer = Control_flow_c.node -> unit
-
-type pretty_printers =
-    {expression : expression_printer;
-      arg_list : arg_list_printer;
-      statement : statement_printer;
-      decl : declaration_printer;
-      init : initialiser_printer;
-      param : param_printer;
-      ty : type_printer;
-      type_with_ident : type_with_ident_printer;
-      toplevel : toplevel_printer;
-      flow : flow_printer}
-
-val pretty_print_c :
-    pr_elem_func -> pr_space_func -> pr_nl_func -> pr_indent_func ->
-      pr_outdent_func -> pr_unindent_func -> pretty_printers
-
-
-val pp_expression_gen : pr_elem_func -> pr_space_func -> expression_printer
-val pp_arg_list_gen : pr_elem_func -> pr_space_func -> arg_list_printer
-val pp_statement_gen : pr_elem_func -> pr_space_func -> statement_printer
-val pp_decl_gen : pr_elem_func -> pr_space_func -> declaration_printer
-val pp_init_gen : pr_elem_func -> pr_space_func -> initialiser_printer
-val pp_param_gen : pr_elem_func -> pr_space_func -> param_printer
-
-val pp_type_gen : pr_elem_func -> pr_space_func -> type_printer
-val pp_type_with_ident_gen :
-    pr_elem_func -> pr_space_func -> type_with_ident_printer
-
-val pp_program_gen : pr_elem_func -> pr_space_func -> toplevel_printer
-
-
-val pp_expression_simple : expression_printer
-val pp_statement_simple : statement_printer
-val pp_type_simple : type_printer
-val pp_init_simple : initialiser_printer
-val pp_toplevel_simple : toplevel_printer
-val pp_flow_simple: flow_printer
-
-
-val debug_info_of_node: Ograph_extended.nodei -> Control_flow_c.cflow -> string
-
-val string_of_expression: Ast_c.expression -> string
-val string_of_toplevel: Ast_c.toplevel -> string
+type type_with_ident =
+    (string * Ast_c.info) option ->
+    (Ast_c.storage * Ast_c.il) option -> 
+    Ast_c.fullType ->
+    Ast_c.attribute list -> unit
+
+type 'a printer = 'a -> unit 
+
+type pretty_printers = {
+  expression      : Ast_c.expression printer;
+  arg_list        : (Ast_c.argument Ast_c.wrap2 list) printer;
+  statement       : Ast_c.statement printer;
+  decl            : Ast_c.declaration printer;
+  init            : Ast_c.initialiser printer;
+  param           : Ast_c.parameterType printer;
+  ty              : Ast_c.fullType printer;
+  type_with_ident : type_with_ident;
+  toplevel        : Ast_c.toplevel printer;
+  flow            : Control_flow_c.node printer
+}
+
+val mk_pretty_printers :
+  pr_elem:Ast_c.info printer -> 
+  pr_space:unit printer ->
+  pr_nl: unit printer -> 
+  pr_indent: unit printer ->
+  pr_outdent: unit printer -> 
+  pr_unindent: unit printer -> 
+  pretty_printers
+
+(* used in pycocci mostly *)
+val pp_expression_gen: pr_elem:Ast_c.info printer -> pr_space: unit printer -> 
+  Ast_c.expression printer
+val pp_statement_gen: pr_elem:Ast_c.info printer -> pr_space: unit printer -> 
+  Ast_c.statement printer
+val pp_param_gen:  pr_elem:Ast_c.info printer -> pr_space: unit printer -> 
+  Ast_c.parameterType printer 
+val pp_type_gen:  pr_elem:Ast_c.info printer -> pr_space:unit printer -> 
+  Ast_c.fullType printer 
+val pp_init_gen:  pr_elem:Ast_c.info printer -> pr_space:unit printer -> 
+  Ast_c.initialiser printer 
+val pp_program_gen : pr_elem:Ast_c.info printer -> pr_space:unit printer -> 
+  Ast_c.toplevel printer
+
+
+(* used in pretty_print_engine.ml mostly *)
+val pp_expression_simple: Ast_c.expression printer
+val pp_init_simple:       Ast_c.initialiser printer
+val pp_type_simple:       Ast_c.fullType printer
+val pp_statement_simple:  Ast_c.statement printer
+val pp_toplevel_simple:   Ast_c.toplevel printer
+
+val debug_info_of_node: 
+  Ograph_extended.nodei -> Control_flow_c.cflow -> string
+
+val string_of_expression: Ast_c.expression -> string
+val string_of_toplevel: Ast_c.toplevel -> string
diff --git a/parsing_c/sexp_ast_c.ml b/parsing_c/sexp_ast_c.ml
new file mode 100644 (file)
index 0000000..4c6f2aa
--- /dev/null
@@ -0,0 +1,4023 @@
+(* generated by ocamltarzan with: camlp4o -o /tmp/yyy.ml -I pa/ pa_type_conv.cmo pa_sexp_conv.cmo  pr_o.cmo /tmp/xxx.ml  *)
+open Ast_c
+
+(*
+let sexp_of_program x = 
+  raise (Common.Todo)
+*)
+
+(* pad addons: *)
+module Common = Sexp_common 
+module Ast_cocci = struct
+let mcodekind_of_sexp x = failwith "todo"
+let sexp_of_mcodekind x = failwith "todo"
+let fixpos_of_sexp x = failwith "todo"
+let sexp_of_fixpos x = failwith "todo"
+end
+module Token_c = struct
+let comment_like_token_of_sexp x = failwith "todo"
+let sexp_of_comment_like_token x = failwith "todo"
+end
+(* cf also the failwith and comment I have added in this file
+   (C-s failwith   et C-s ( *        )
+   mainly to break the mutually recursive, for the cocci_tag and 
+   metavars_binding stuff. I also moved some function up
+   outside the big 'rec .. and .. and .. and', especially the wrap_of_sexp
+   by transforming some 'and xxx' in 'let xxx'.
+*)
+
+let show_info = ref false
+let show_qualifier = ref false
+let show_expr_info = ref true
+
+
+
+let posl_of_sexp__ =
+  let _loc = "Xxx.posl"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = Conv.int_of_sexp v1 and v2 = Conv.int_of_sexp v2 in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+  
+let posl_of_sexp sexp =
+  try posl_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+  
+let sexp_of_posl (v1, v2) =
+  let v1 = Conv.sexp_of_int v1
+  and v2 = Conv.sexp_of_int v2
+  in Sexp.List [ v1; v2 ]
+  
+let virtual_position_of_sexp__ =
+  let _loc = "Xxx.virtual_position"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = Common.parse_info_of_sexp v1
+        and v2 = Conv.int_of_sexp v2
+        in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+  
+let virtual_position_of_sexp sexp =
+  try virtual_position_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+  
+let sexp_of_virtual_position (v1, v2) =
+  let v1 = Common.sexp_of_parse_info v1
+  and v2 = Conv.sexp_of_int v2
+  in Sexp.List [ v1; v2 ]
+  
+let parse_info_of_sexp__ =
+  let _loc = "Xxx.parse_info"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("originTok" | "OriginTok" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Common.parse_info_of_sexp v1 in OriginTok v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("fakeTok" | "FakeTok" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Conv.string_of_sexp v1
+             and v2 = virtual_position_of_sexp v2
+             in FakeTok ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("expandedTok" | "ExpandedTok" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Common.parse_info_of_sexp v1
+             and v2 = virtual_position_of_sexp v2
+             in ExpandedTok ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("abstractLineTok" | "AbstractLineTok" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = Common.parse_info_of_sexp v1 in AbstractLineTok v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("originTok" | "OriginTok") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("fakeTok" | "FakeTok") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("expandedTok" | "ExpandedTok") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("abstractLineTok" | "AbstractLineTok") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+  
+let parse_info_of_sexp sexp = parse_info_of_sexp__ sexp
+  
+let sexp_of_parse_info =
+  function
+  | OriginTok v1 ->
+      let v1 = Common.sexp_of_parse_info v1
+      in Sexp.List [ Sexp.Atom "OriginTok"; v1 ]
+  | FakeTok ((v1, v2)) ->
+      let v1 = Conv.sexp_of_string v1
+      and v2 = sexp_of_virtual_position v2
+      in Sexp.List [ Sexp.Atom "FakeTok"; v1; v2 ]
+  | ExpandedTok ((v1, v2)) ->
+      let v1 = Common.sexp_of_parse_info v1
+      and v2 = sexp_of_virtual_position v2
+      in Sexp.List [ Sexp.Atom "ExpandedTok"; v1; v2 ]
+  | AbstractLineTok v1 ->
+      let v1 = Common.sexp_of_parse_info v1
+      in Sexp.List [ Sexp.Atom "AbstractLineTok"; v1 ]
+  
+let rec info_of_sexp__ =
+  let _loc = "Xxx.info"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let pinfo_field = ref None and cocci_tag_field = ref None
+        and comments_tag_field = ref None and duplicates = ref []
+        and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "pinfo" ->
+                     (match !pinfo_field with
+                      | None ->
+                          let fvalue = parse_info_of_sexp field_sexp
+                          in pinfo_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "cocci_tag" ->
+                     (match !cocci_tag_field with
+                      | None ->
+                          let fvalue =
+                            Conv.ref_of_sexp
+                              (Conv.option_of_sexp
+                                 (function
+                                  | Sexp.List ([ v1; v2 ]) ->
+                                      let v1 = Ast_cocci.mcodekind_of_sexp v1
+                                      and v2 = 
+                                        (*metavars_binding_of_sexp v2*)
+                                        failwith "todo"
+                                      in (v1, v2)
+                                  | sexp ->
+                                      Conv_error.tuple_of_size_n_expected
+                                        _loc 2 sexp))
+                              field_sexp
+                          in cocci_tag_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "comments_tag" ->
+                     (match !comments_tag_field with
+                      | None ->
+                          let fvalue =
+                            Conv.ref_of_sexp comments_around_of_sexp
+                              field_sexp
+                          in comments_tag_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!pinfo_field), (!cocci_tag_field),
+                       (!comments_tag_field))
+                with
+                | (Some pinfo_value, Some cocci_tag_value,
+                   Some comments_tag_value) ->
+                    {
+                      pinfo = pinfo_value;
+                      cocci_tag = cocci_tag_value;
+                      comments_tag = comments_tag_value;
+                    }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!pinfo_field = None), "pinfo");
+                        ((!cocci_tag_field = None), "cocci_tag");
+                        ((!comments_tag_field = None), "comments_tag") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and info_of_sexp sexp = info_of_sexp__ sexp
+and il_of_sexp__ =
+  let _loc = "Xxx.il" in fun sexp -> Conv.list_of_sexp info_of_sexp sexp
+and il_of_sexp sexp =
+  try il_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and wrap_of_sexp__ =
+  let _loc = "Xxx.wrap"
+  in
+    fun _of_a ->
+      function
+      | Sexp.List ([ v1; v2 ]) ->
+          let v1 = _of_a v1 and v2 = il_of_sexp v2 in (v1, v2)
+      | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and wrap_of_sexp _of_a sexp =
+  try wrap_of_sexp__ _of_a sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and wrap2_of_sexp__ =
+  let _loc = "Xxx.wrap2"
+  in
+    fun _of_a ->
+      function
+      | Sexp.List ([ v1; v2 ]) ->
+          let v1 = _of_a v1 and v2 = il_of_sexp v2 in (v1, v2)
+      | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and wrap2_of_sexp _of_a sexp =
+  try wrap2_of_sexp__ _of_a sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+
+(* moved up *)
+and comments_around_of_sexp__ =
+  let _loc = "Xxx.comments_around"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let mbefore_field = ref None and mafter_field = ref None
+        and mbefore2_field = ref None and mafter2_field = ref None
+        and duplicates = ref [] and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "mbefore" ->
+                     (match !mbefore_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp Token_c.
+                              comment_like_token_of_sexp field_sexp
+                          in mbefore_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "mafter" ->
+                     (match !mafter_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp Token_c.
+                              comment_like_token_of_sexp field_sexp
+                          in mafter_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "mbefore2" ->
+                     (match !mbefore2_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp
+                              comment_and_relative_pos_of_sexp field_sexp
+                          in mbefore2_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "mafter2" ->
+                     (match !mafter2_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp
+                              comment_and_relative_pos_of_sexp field_sexp
+                          in mafter2_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!mbefore_field), (!mafter_field), (!mbefore2_field),
+                       (!mafter2_field))
+                with
+                | (Some mbefore_value, Some mafter_value,
+                   Some mbefore2_value, Some mafter2_value) ->
+                    {
+                      mbefore = mbefore_value;
+                      mafter = mafter_value;
+                      mbefore2 = mbefore2_value;
+                      mafter2 = mafter2_value;
+                    }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!mbefore_field = None), "mbefore");
+                        ((!mafter_field = None), "mafter");
+                        ((!mbefore2_field = None), "mbefore2");
+                        ((!mafter2_field = None), "mafter2") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and comments_around_of_sexp sexp = comments_around_of_sexp__ sexp
+and comment_and_relative_pos_of_sexp__ =
+  let _loc = "Xxx.comment_and_relative_pos"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let minfo_field = ref None and mpos_field = ref None
+        and duplicates = ref [] and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "minfo" ->
+                     (match !minfo_field with
+                      | None ->
+                          let fvalue = Common.parse_info_of_sexp field_sexp
+                          in minfo_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "mpos" ->
+                     (match !mpos_field with
+                      | None ->
+                          let fvalue = Conv.int_of_sexp field_sexp
+                          in mpos_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!minfo_field), (!mpos_field)) with
+                | (Some minfo_value, Some mpos_value) ->
+                    { minfo = minfo_value; mpos = mpos_value; }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!minfo_field = None), "minfo");
+                        ((!mpos_field = None), "mpos") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and comment_and_relative_pos_of_sexp sexp =
+  comment_and_relative_pos_of_sexp__ sexp
+and comment_of_sexp__ =
+  let _loc = "Xxx.comment" in fun sexp -> Common.parse_info_of_sexp sexp
+and comment_of_sexp sexp =
+  try comment_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and com_of_sexp__ =
+  let _loc = "Xxx.com"
+  in fun sexp -> Conv.ref_of_sexp (Conv.list_of_sexp comment_of_sexp) sexp
+and com_of_sexp sexp =
+  try com_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+
+
+
+
+
+
+(* break let rec  ... and with the previous info *)
+let rec name_of_sexp__ =
+  let _loc = "Xxx.name"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("regularName" | "RegularName" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = wrap_of_sexp Conv.string_of_sexp v1 in RegularName v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("cppConcatenatedName" | "CppConcatenatedName" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               Conv.list_of_sexp
+                 (wrap2_of_sexp (wrap_of_sexp Conv.string_of_sexp)) v1
+             in CppConcatenatedName v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("cppVariadicName" | "CppVariadicName" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = wrap_of_sexp Conv.string_of_sexp v1
+             in CppVariadicName v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("cppIdentBuilder" | "CppIdentBuilder" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = wrap_of_sexp Conv.string_of_sexp v1
+             and v2 =
+               Conv.list_of_sexp
+                 (wrap2_of_sexp (wrap_of_sexp Conv.string_of_sexp)) v2
+             in CppIdentBuilder ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("regularName" | "RegularName") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("cppConcatenatedName" | "CppConcatenatedName") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("cppVariadicName" | "CppVariadicName") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("cppIdentBuilder" | "CppIdentBuilder") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and name_of_sexp sexp = name_of_sexp__ sexp
+and fullType_of_sexp__ =
+  let _loc = "Xxx.fullType"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = typeQualifier_of_sexp v1
+        and v2 = typeC_of_sexp v2
+        in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and fullType_of_sexp sexp =
+  try fullType_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and typeC_of_sexp__ =
+  let _loc = "Xxx.typeC" in fun sexp -> wrap_of_sexp typeCbis_of_sexp sexp
+and typeC_of_sexp sexp =
+  try typeC_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and typeCbis_of_sexp__ =
+  let _loc = "Xxx.typeCbis"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("baseType" | "BaseType" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = baseType_of_sexp v1 in BaseType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("pointer" | "Pointer" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = fullType_of_sexp v1 in Pointer v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("array" | "Array" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Conv.option_of_sexp constExpression_of_sexp v1
+             and v2 = fullType_of_sexp v2
+             in Array ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("functionType" | "FunctionType" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = functionType_of_sexp v1 in FunctionType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("enum" | "Enum" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Conv.option_of_sexp Conv.string_of_sexp v1
+             and v2 = enumType_of_sexp v2
+             in Enum ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("structUnion" | "StructUnion" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = structUnion_of_sexp v1
+             and v2 = Conv.option_of_sexp Conv.string_of_sexp v2
+             and v3 = structType_of_sexp v3
+             in StructUnion ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("enumName" | "EnumName" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in EnumName v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("structUnionName" | "StructUnionName" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = structUnion_of_sexp v1
+             and v2 = Conv.string_of_sexp v2
+             in StructUnionName ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("typeName" | "TypeName" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = name_of_sexp v1
+             and v2 = Conv.option_of_sexp fullType_of_sexp v2
+             in TypeName ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("parenType" | "ParenType" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = fullType_of_sexp v1 in ParenType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("typeOfExpr" | "TypeOfExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in TypeOfExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("typeOfType" | "TypeOfType" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = fullType_of_sexp v1 in TypeOfType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("baseType" | "BaseType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("pointer" | "Pointer") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("array" | "Array") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("functionType" | "FunctionType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("enum" | "Enum") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("structUnion" | "StructUnion") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("enumName" | "EnumName") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("structUnionName" | "StructUnionName") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("typeName" | "TypeName") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("parenType" | "ParenType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("typeOfExpr" | "TypeOfExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("typeOfType" | "TypeOfType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and typeCbis_of_sexp sexp = typeCbis_of_sexp__ sexp
+and baseType_of_sexp__ =
+  let _loc = "Xxx.baseType"
+  in
+    function
+    | Sexp.Atom ("void" | "Void") -> Void
+    | (Sexp.List (Sexp.Atom (("intType" | "IntType" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = intType_of_sexp v1 in IntType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("floatType" | "FloatType" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = floatType_of_sexp v1 in FloatType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom ("void" | "Void") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.Atom ("intType" | "IntType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("floatType" | "FloatType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and baseType_of_sexp sexp = baseType_of_sexp__ sexp
+and intType_of_sexp__ =
+  let _loc = "Xxx.intType"
+  in
+    function
+    | Sexp.Atom ("cChar" | "CChar") -> CChar
+    | (Sexp.List (Sexp.Atom (("si" | "Si" as tag)) :: sexp_args) as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = signed_of_sexp v1 in Si v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom ("cChar" | "CChar") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.Atom ("si" | "Si") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and intType_of_sexp sexp = intType_of_sexp__ sexp
+and signed_of_sexp__ =
+  let _loc = "Xxx.signed"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = sign_of_sexp v1 and v2 = base_of_sexp v2 in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and signed_of_sexp sexp =
+  try signed_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and base_of_sexp__ =
+  let _loc = "Xxx.base"
+  in
+    function
+    | Sexp.Atom ("cChar2" | "CChar2") -> CChar2
+    | Sexp.Atom ("cShort" | "CShort") -> CShort
+    | Sexp.Atom ("cInt" | "CInt") -> CInt
+    | Sexp.Atom ("cLong" | "CLong") -> CLong
+    | Sexp.Atom ("cLongLong" | "CLongLong") -> CLongLong
+    | (Sexp.List (Sexp.Atom ("cChar2" | "CChar2") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("cShort" | "CShort") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("cInt" | "CInt") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("cLong" | "CLong") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("cLongLong" | "CLongLong") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and base_of_sexp sexp = base_of_sexp__ sexp
+and sign_of_sexp__ =
+  let _loc = "Xxx.sign"
+  in
+    function
+    | Sexp.Atom ("signed" | "Signed") -> Signed
+    | Sexp.Atom ("unSigned" | "UnSigned") -> UnSigned
+    | (Sexp.List (Sexp.Atom ("signed" | "Signed") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("unSigned" | "UnSigned") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and sign_of_sexp sexp = sign_of_sexp__ sexp
+and floatType_of_sexp__ =
+  let _loc = "Xxx.floatType"
+  in
+    function
+    | Sexp.Atom ("cFloat" | "CFloat") -> CFloat
+    | Sexp.Atom ("cDouble" | "CDouble") -> CDouble
+    | Sexp.Atom ("cLongDouble" | "CLongDouble") -> CLongDouble
+    | (Sexp.List (Sexp.Atom ("cFloat" | "CFloat") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("cDouble" | "CDouble") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("cLongDouble" | "CLongDouble") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and floatType_of_sexp sexp = floatType_of_sexp__ sexp
+and structUnion_of_sexp__ =
+  let _loc = "Xxx.structUnion"
+  in
+    function
+    | Sexp.Atom ("struct" | "Struct") -> Struct
+    | Sexp.Atom ("union" | "Union") -> Union
+    | (Sexp.List (Sexp.Atom ("struct" | "Struct") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("union" | "Union") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and structUnion_of_sexp sexp = structUnion_of_sexp__ sexp
+and structType_of_sexp__ =
+  let _loc = "Xxx.structType"
+  in fun sexp -> Conv.list_of_sexp field_of_sexp sexp
+and structType_of_sexp sexp =
+  try structType_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and field_of_sexp__ =
+  let _loc = "Xxx.field"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("declarationField" | "DeclarationField" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = field_declaration_of_sexp v1 in DeclarationField v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("emptyField" | "EmptyField" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = info_of_sexp v1 in EmptyField v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("macroDeclField" | "MacroDeclField" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               wrap_of_sexp
+                 (function
+                  | Sexp.List ([ v1; v2 ]) ->
+                      let v1 = Conv.string_of_sexp v1
+                      and v2 =
+                        Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2
+                      in (v1, v2)
+                  | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+                 v1
+             in MacroDeclField v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("cppDirectiveStruct" | "CppDirectiveStruct" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = cpp_directive_of_sexp v1 in CppDirectiveStruct v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("ifdefStruct" | "IfdefStruct" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = ifdef_directive_of_sexp v1 in IfdefStruct v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("declarationField" | "DeclarationField") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("emptyField" | "EmptyField") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("macroDeclField" | "MacroDeclField") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("cppDirectiveStruct" | "CppDirectiveStruct") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("ifdefStruct" | "IfdefStruct") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and field_of_sexp sexp = field_of_sexp__ sexp
+and field_declaration_of_sexp__ =
+  let _loc = "Xxx.field_declaration"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("fieldDeclList" | "FieldDeclList" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               wrap_of_sexp
+                 (Conv.list_of_sexp (wrap2_of_sexp fieldkind_of_sexp)) v1
+             in FieldDeclList v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("fieldDeclList" | "FieldDeclList") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and field_declaration_of_sexp sexp = field_declaration_of_sexp__ sexp
+and fieldkind_of_sexp__ =
+  let _loc = "Xxx.fieldkind"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("simple" | "Simple" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Conv.option_of_sexp name_of_sexp v1
+             and v2 = fullType_of_sexp v2
+             in Simple ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("bitField" | "BitField" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3; v4 ] ->
+             let v1 = Conv.option_of_sexp name_of_sexp v1
+             and v2 = fullType_of_sexp v2
+             and v3 = info_of_sexp v3
+             and v4 = constExpression_of_sexp v4
+             in BitField ((v1, v2, v3, v4))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("simple" | "Simple") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("bitField" | "BitField") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and fieldkind_of_sexp sexp = fieldkind_of_sexp__ sexp
+
+and enumType_of_sexp__ =
+  let _loc = "Xxx.enumType"
+  in
+    fun sexp ->
+      Conv.list_of_sexp
+        (wrap2_of_sexp
+           (function
+            | Sexp.List ([ v1; v2 ]) ->
+                let v1 = name_of_sexp v1
+                and v2 =
+                  Conv.option_of_sexp
+                    (function
+                     | Sexp.List ([ v1; v2 ]) ->
+                         let v1 = info_of_sexp v1
+                         and v2 = constExpression_of_sexp v2
+                         in (v1, v2)
+                     | sexp ->
+                         Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+                    v2
+                in (v1, v2)
+            | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp))
+        sexp
+and enumType_of_sexp sexp =
+  try enumType_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and functionType_of_sexp__ =
+  let _loc = "Xxx.functionType"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = fullType_of_sexp v1
+        and v2 =
+          (match v2 with
+           | Sexp.List ([ v1; v2 ]) ->
+               let v1 =
+                 Conv.list_of_sexp (wrap2_of_sexp parameterType_of_sexp) v1
+               and v2 = wrap_of_sexp Conv.bool_of_sexp v2
+               in (v1, v2)
+           | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+        in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and functionType_of_sexp sexp =
+  try functionType_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and parameterType_of_sexp__ =
+  let _loc = "Xxx.parameterType"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let p_namei_field = ref None and p_register_field = ref None
+        and p_type_field = ref None and duplicates = ref []
+        and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "p_namei" ->
+                     (match !p_namei_field with
+                      | None ->
+                          let fvalue =
+                            Conv.option_of_sexp name_of_sexp field_sexp
+                          in p_namei_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "p_register" ->
+                     (match !p_register_field with
+                      | None ->
+                          let fvalue =
+                            wrap_of_sexp Conv.bool_of_sexp field_sexp
+                          in p_register_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "p_type" ->
+                     (match !p_type_field with
+                      | None ->
+                          let fvalue = fullType_of_sexp field_sexp
+                          in p_type_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!p_namei_field), (!p_register_field),
+                       (!p_type_field))
+                with
+                | (Some p_namei_value, Some p_register_value,
+                   Some p_type_value) ->
+                    {
+                      p_namei = p_namei_value;
+                      p_register = p_register_value;
+                      p_type = p_type_value;
+                    }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!p_namei_field = None), "p_namei");
+                        ((!p_register_field = None), "p_register");
+                        ((!p_type_field = None), "p_type") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and parameterType_of_sexp sexp = parameterType_of_sexp__ sexp
+and typeQualifier_of_sexp__ =
+  let _loc = "Xxx.typeQualifier"
+  in fun sexp -> wrap_of_sexp typeQualifierbis_of_sexp sexp
+and typeQualifier_of_sexp sexp =
+  try typeQualifier_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and typeQualifierbis_of_sexp__ =
+  let _loc = "Xxx.typeQualifierbis"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let const_field = ref None and volatile_field = ref None
+        and duplicates = ref [] and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "const" ->
+                     (match !const_field with
+                      | None ->
+                          let fvalue = Conv.bool_of_sexp field_sexp
+                          in const_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "volatile" ->
+                     (match !volatile_field with
+                      | None ->
+                          let fvalue = Conv.bool_of_sexp field_sexp
+                          in volatile_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!const_field), (!volatile_field)) with
+                | (Some const_value, Some volatile_value) ->
+                    { const = const_value; volatile = volatile_value; }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!const_field = None), "const");
+                        ((!volatile_field = None), "volatile") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and typeQualifierbis_of_sexp sexp = typeQualifierbis_of_sexp__ sexp
+and attribute_of_sexp__ =
+  let _loc = "Xxx.attribute"
+  in fun sexp -> wrap_of_sexp attributebis_of_sexp sexp
+and attribute_of_sexp sexp =
+  try attribute_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and attributebis_of_sexp__ =
+  let _loc = "Xxx.attributebis"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("attribute" | "Attribute" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in Attribute v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("attribute" | "Attribute") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and attributebis_of_sexp sexp = attributebis_of_sexp__ sexp
+and expression_of_sexp__ =
+  let _loc = "Xxx.expression"
+  in
+    fun sexp ->
+      wrap_of_sexp
+        (function
+         | Sexp.List ([ v1; v2 ]) ->
+             let v1 = expressionbis_of_sexp v1
+             and v2 = Conv.ref_of_sexp exp_info_of_sexp v2
+             in (v1, v2)
+         | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+        sexp
+and expression_of_sexp sexp =
+  try expression_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and exp_info_of_sexp__ =
+  let _loc = "Xxx.exp_info"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = Conv.option_of_sexp exp_type_of_sexp v1
+        and v2 = test_of_sexp v2
+        in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and exp_info_of_sexp sexp =
+  try exp_info_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and exp_type_of_sexp__ =
+  let _loc = "Xxx.exp_type"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = fullType_of_sexp v1 and v2 = local_of_sexp v2 in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and exp_type_of_sexp sexp =
+  try exp_type_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and local_of_sexp__ =
+  let _loc = "Xxx.local"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("localVar" | "LocalVar" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = parse_info_of_sexp v1 in LocalVar v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | Sexp.Atom ("notLocalVar" | "NotLocalVar") -> NotLocalVar
+    | (Sexp.Atom ("localVar" | "LocalVar") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("notLocalVar" | "NotLocalVar") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and local_of_sexp sexp = local_of_sexp__ sexp
+and test_of_sexp__ =
+  let _loc = "Xxx.test"
+  in
+    function
+    | Sexp.Atom ("test" | "Test") -> Test
+    | Sexp.Atom ("notTest" | "NotTest") -> NotTest
+    | (Sexp.List (Sexp.Atom ("test" | "Test") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("notTest" | "NotTest") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and test_of_sexp sexp = test_of_sexp__ sexp
+and expressionbis_of_sexp__ =
+  let _loc = "Xxx.expressionbis"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("ident" | "Ident" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = name_of_sexp v1 in Ident v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("constant" | "Constant" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = constant_of_sexp v1 in Constant v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("funCall" | "FunCall" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2
+             in FunCall ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("condExpr" | "CondExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = Conv.option_of_sexp expression_of_sexp v2
+             and v3 = expression_of_sexp v3
+             in CondExpr ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("sequence" | "Sequence" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = expression_of_sexp v2
+             in Sequence ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("assignment" | "Assignment" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = assignOp_of_sexp v2
+             and v3 = expression_of_sexp v3
+             in Assignment ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("postfix" | "Postfix" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = fixOp_of_sexp v2
+             in Postfix ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("infix" | "Infix" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = fixOp_of_sexp v2
+             in Infix ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("unary" | "Unary" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = unaryOp_of_sexp v2
+             in Unary ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("binary" | "Binary" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = binaryOp_of_sexp v2
+             and v3 = expression_of_sexp v3
+             in Binary ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("arrayAccess" | "ArrayAccess" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = expression_of_sexp v2
+             in ArrayAccess ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("recordAccess" | "RecordAccess" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = name_of_sexp v2
+             in RecordAccess ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("recordPtAccess" | "RecordPtAccess" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = name_of_sexp v2
+             in RecordPtAccess ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("sizeOfExpr" | "SizeOfExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in SizeOfExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("sizeOfType" | "SizeOfType" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = fullType_of_sexp v1 in SizeOfType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("cast" | "Cast" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = fullType_of_sexp v1
+             and v2 = expression_of_sexp v2
+             in Cast ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("statementExpr" | "StatementExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = wrap_of_sexp compound_of_sexp v1 in StatementExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("constructor" | "Constructor" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = fullType_of_sexp v1
+             and v2 =
+               Conv.list_of_sexp (wrap2_of_sexp initialiser_of_sexp) v2
+             in Constructor ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("parenExpr" | "ParenExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in ParenExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("ident" | "Ident") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("constant" | "Constant") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("funCall" | "FunCall") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("condExpr" | "CondExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("sequence" | "Sequence") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("assignment" | "Assignment") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("postfix" | "Postfix") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("infix" | "Infix") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("unary" | "Unary") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("binary" | "Binary") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("arrayAccess" | "ArrayAccess") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("recordAccess" | "RecordAccess") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("recordPtAccess" | "RecordPtAccess") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("sizeOfExpr" | "SizeOfExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("sizeOfType" | "SizeOfType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("cast" | "Cast") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("statementExpr" | "StatementExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("constructor" | "Constructor") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("parenExpr" | "ParenExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and expressionbis_of_sexp sexp = expressionbis_of_sexp__ sexp
+and argument_of_sexp__ =
+  let _loc = "Xxx.argument"
+  in
+    fun sexp -> Common.either_of_sexp expression_of_sexp weird_argument_of_sexp sexp
+and argument_of_sexp sexp =
+  try argument_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and weird_argument_of_sexp__ =
+  let _loc = "Xxx.weird_argument"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("argType" | "ArgType" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = parameterType_of_sexp v1 in ArgType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("argAction" | "ArgAction" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = action_macro_of_sexp v1 in ArgAction v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("argType" | "ArgType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("argAction" | "ArgAction") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and weird_argument_of_sexp sexp = weird_argument_of_sexp__ sexp
+and action_macro_of_sexp__ =
+  let _loc = "Xxx.action_macro"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("actMisc" | "ActMisc" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = il_of_sexp v1 in ActMisc v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("actMisc" | "ActMisc") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and action_macro_of_sexp sexp = action_macro_of_sexp__ sexp
+and constant_of_sexp__ =
+  let _loc = "Xxx.constant"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("string" | "String" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               (match v1 with
+                | Sexp.List ([ v1; v2 ]) ->
+                    let v1 = Conv.string_of_sexp v1
+                    and v2 = isWchar_of_sexp v2
+                    in (v1, v2)
+                | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+             in String v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("multiString" | "MultiString" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = Conv.list_of_sexp Conv.string_of_sexp v1
+             in MultiString v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("char" | "Char" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               (match v1 with
+                | Sexp.List ([ v1; v2 ]) ->
+                    let v1 = Conv.string_of_sexp v1
+                    and v2 = isWchar_of_sexp v2
+                    in (v1, v2)
+                | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+             in Char v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("int" | "Int" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in Int (v1, failwith "Todo")
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("float" | "Float" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               (match v1 with
+                | Sexp.List ([ v1; v2 ]) ->
+                    let v1 = Conv.string_of_sexp v1
+                    and v2 = floatType_of_sexp v2
+                    in (v1, v2)
+                | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+             in Float v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("string" | "String") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("multiString" | "MultiString") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("char" | "Char") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("int" | "Int") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("float" | "Float") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and constant_of_sexp sexp = constant_of_sexp__ sexp
+and isWchar_of_sexp__ =
+  let _loc = "Xxx.isWchar"
+  in
+    function
+    | Sexp.Atom ("isWchar" | "IsWchar") -> IsWchar
+    | Sexp.Atom ("isChar" | "IsChar") -> IsChar
+    | (Sexp.List (Sexp.Atom ("isWchar" | "IsWchar") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("isChar" | "IsChar") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and isWchar_of_sexp sexp = isWchar_of_sexp__ sexp
+and unaryOp_of_sexp__ =
+  let _loc = "Xxx.unaryOp"
+  in
+    function
+    | Sexp.Atom ("getRef" | "GetRef") -> GetRef
+    | Sexp.Atom ("deRef" | "DeRef") -> DeRef
+    | Sexp.Atom ("unPlus" | "UnPlus") -> UnPlus
+    | Sexp.Atom ("unMinus" | "UnMinus") -> UnMinus
+    | Sexp.Atom ("tilde" | "Tilde") -> Tilde
+    | Sexp.Atom ("not" | "Not") -> Not
+    | Sexp.Atom ("getRefLabel" | "GetRefLabel") -> GetRefLabel
+    | (Sexp.List (Sexp.Atom ("getRef" | "GetRef") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("deRef" | "DeRef") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("unPlus" | "UnPlus") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("unMinus" | "UnMinus") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("tilde" | "Tilde") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("not" | "Not") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("getRefLabel" | "GetRefLabel") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and unaryOp_of_sexp sexp = unaryOp_of_sexp__ sexp
+and assignOp_of_sexp__ =
+  let _loc = "Xxx.assignOp"
+  in
+    function
+    | Sexp.Atom ("simpleAssign" | "SimpleAssign") -> SimpleAssign
+    | (Sexp.List (Sexp.Atom (("opAssign" | "OpAssign" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = arithOp_of_sexp v1 in OpAssign v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom ("simpleAssign" | "SimpleAssign") :: _) as sexp)
+        -> Conv_error.stag_no_args _loc sexp
+    | (Sexp.Atom ("opAssign" | "OpAssign") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and assignOp_of_sexp sexp = assignOp_of_sexp__ sexp
+and fixOp_of_sexp__ =
+  let _loc = "Xxx.fixOp"
+  in
+    function
+    | Sexp.Atom ("dec" | "Dec") -> Dec
+    | Sexp.Atom ("inc" | "Inc") -> Inc
+    | (Sexp.List (Sexp.Atom ("dec" | "Dec") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("inc" | "Inc") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and fixOp_of_sexp sexp = fixOp_of_sexp__ sexp
+and binaryOp_of_sexp__ =
+  let _loc = "Xxx.binaryOp"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("arith" | "Arith" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = arithOp_of_sexp v1 in Arith v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("logical" | "Logical" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = logicalOp_of_sexp v1 in Logical v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("arith" | "Arith") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("logical" | "Logical") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and binaryOp_of_sexp sexp = binaryOp_of_sexp__ sexp
+and arithOp_of_sexp__ =
+  let _loc = "Xxx.arithOp"
+  in
+    function
+    | Sexp.Atom ("plus" | "Plus") -> Plus
+    | Sexp.Atom ("minus" | "Minus") -> Minus
+    | Sexp.Atom ("mul" | "Mul") -> Mul
+    | Sexp.Atom ("div" | "Div") -> Div
+    | Sexp.Atom ("mod" | "Mod") -> Mod
+    | Sexp.Atom ("decLeft" | "DecLeft") -> DecLeft
+    | Sexp.Atom ("decRight" | "DecRight") -> DecRight
+    | Sexp.Atom ("and" | "And") -> And
+    | Sexp.Atom ("or" | "Or") -> Or
+    | Sexp.Atom ("xor" | "Xor") -> Xor
+    | (Sexp.List (Sexp.Atom ("plus" | "Plus") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("minus" | "Minus") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("mul" | "Mul") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("div" | "Div") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("mod" | "Mod") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("decLeft" | "DecLeft") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("decRight" | "DecRight") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("and" | "And") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("or" | "Or") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("xor" | "Xor") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and arithOp_of_sexp sexp = arithOp_of_sexp__ sexp
+and logicalOp_of_sexp__ =
+  let _loc = "Xxx.logicalOp"
+  in
+    function
+    | Sexp.Atom ("inf" | "Inf") -> Inf
+    | Sexp.Atom ("sup" | "Sup") -> Sup
+    | Sexp.Atom ("infEq" | "InfEq") -> InfEq
+    | Sexp.Atom ("supEq" | "SupEq") -> SupEq
+    | Sexp.Atom ("eq" | "Eq") -> Eq
+    | Sexp.Atom ("notEq" | "NotEq") -> NotEq
+    | Sexp.Atom ("andLog" | "AndLog") -> AndLog
+    | Sexp.Atom ("orLog" | "OrLog") -> OrLog
+    | (Sexp.List (Sexp.Atom ("inf" | "Inf") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("sup" | "Sup") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("infEq" | "InfEq") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("supEq" | "SupEq") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("eq" | "Eq") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("notEq" | "NotEq") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("andLog" | "AndLog") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("orLog" | "OrLog") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and logicalOp_of_sexp sexp = logicalOp_of_sexp__ sexp
+and constExpression_of_sexp__ =
+  let _loc = "Xxx.constExpression" in fun sexp -> expression_of_sexp sexp
+and constExpression_of_sexp sexp =
+  try constExpression_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and statement_of_sexp__ =
+  let _loc = "Xxx.statement"
+  in fun sexp -> wrap_of_sexp statementbis_of_sexp sexp
+and statement_of_sexp sexp =
+  try statement_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and statementbis_of_sexp__ =
+  let _loc = "Xxx.statementbis"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("labeled" | "Labeled" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = labeled_of_sexp v1 in Labeled v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("compound" | "Compound" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = compound_of_sexp v1 in Compound v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("exprStatement" | "ExprStatement" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = exprStatement_of_sexp v1 in ExprStatement v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("selection" | "Selection" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = selection_of_sexp v1 in Selection v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("iteration" | "Iteration" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = iteration_of_sexp v1 in Iteration v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("jump" | "Jump" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = jump_of_sexp v1 in Jump v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("decl" | "Decl" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = declaration_of_sexp v1 in Decl v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("asm" | "Asm" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = asmbody_of_sexp v1 in Asm v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("nestedFunc" | "NestedFunc" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = definition_of_sexp v1 in NestedFunc v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | Sexp.Atom ("macroStmt" | "MacroStmt") -> MacroStmt
+    | (Sexp.Atom ("labeled" | "Labeled") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("compound" | "Compound") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("exprStatement" | "ExprStatement") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("selection" | "Selection") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("iteration" | "Iteration") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("jump" | "Jump") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("decl" | "Decl") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("asm" | "Asm") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("nestedFunc" | "NestedFunc") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("macroStmt" | "MacroStmt") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and statementbis_of_sexp sexp = statementbis_of_sexp__ sexp
+and labeled_of_sexp__ =
+  let _loc = "Xxx.labeled"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("label" | "Label" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = name_of_sexp v1
+             and v2 = statement_of_sexp v2
+             in Label ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("case" | "Case" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = statement_of_sexp v2
+             in Case ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("caseRange" | "CaseRange" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = expression_of_sexp v2
+             and v3 = statement_of_sexp v3
+             in CaseRange ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("default" | "Default" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = statement_of_sexp v1 in Default v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("label" | "Label") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("case" | "Case") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("caseRange" | "CaseRange") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("default" | "Default") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and labeled_of_sexp sexp = labeled_of_sexp__ sexp
+and compound_of_sexp__ =
+  let _loc = "Xxx.compound"
+  in fun sexp -> Conv.list_of_sexp statement_sequencable_of_sexp sexp
+and compound_of_sexp sexp =
+  try compound_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and statement_sequencable_of_sexp__ =
+  let _loc = "Xxx.statement_sequencable"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("stmtElem" | "StmtElem" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = statement_of_sexp v1 in StmtElem v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("cppDirectiveStmt" | "CppDirectiveStmt" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = cpp_directive_of_sexp v1 in CppDirectiveStmt v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("ifdefStmt" | "IfdefStmt" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = ifdef_directive_of_sexp v1 in IfdefStmt v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("ifdefStmt2" | "IfdefStmt2" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Conv.list_of_sexp ifdef_directive_of_sexp v1
+             and v2 =
+               Conv.list_of_sexp
+                 (Conv.list_of_sexp statement_sequencable_of_sexp) v2
+             in IfdefStmt2 ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("stmtElem" | "StmtElem") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("cppDirectiveStmt" | "CppDirectiveStmt") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("ifdefStmt" | "IfdefStmt") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("ifdefStmt2" | "IfdefStmt2") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and statement_sequencable_of_sexp sexp = statement_sequencable_of_sexp__ sexp
+and exprStatement_of_sexp__ =
+  let _loc = "Xxx.exprStatement"
+  in fun sexp -> Conv.option_of_sexp expression_of_sexp sexp
+and exprStatement_of_sexp sexp =
+  try exprStatement_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and selection_of_sexp__ =
+  let _loc = "Xxx.selection"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("if" | "If" as tag)) :: sexp_args) as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = statement_of_sexp v2
+             and v3 = statement_of_sexp v3
+             in If ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("switch" | "Switch" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = statement_of_sexp v2
+             in Switch ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("if" | "If") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("switch" | "Switch") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and selection_of_sexp sexp = selection_of_sexp__ sexp
+and iteration_of_sexp__ =
+  let _loc = "Xxx.iteration"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("while" | "While" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = statement_of_sexp v2
+             in While ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("doWhile" | "DoWhile" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = statement_of_sexp v1
+             and v2 = expression_of_sexp v2
+             in DoWhile ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("for" | "For" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1; v2; v3; v4 ] ->
+             let v1 = wrap_of_sexp exprStatement_of_sexp v1
+             and v2 = wrap_of_sexp exprStatement_of_sexp v2
+             and v3 = wrap_of_sexp exprStatement_of_sexp v3
+             and v4 = statement_of_sexp v4
+             in For ((v1, v2, v3, v4))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("macroIteration" | "MacroIteration" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = Conv.string_of_sexp v1
+             and v2 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2
+             and v3 = statement_of_sexp v3
+             in MacroIteration ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("while" | "While") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("doWhile" | "DoWhile") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("for" | "For") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("macroIteration" | "MacroIteration") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and iteration_of_sexp sexp = iteration_of_sexp__ sexp
+and jump_of_sexp__ =
+  let _loc = "Xxx.jump"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("goto" | "Goto" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = name_of_sexp v1 in Goto v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | Sexp.Atom ("continue" | "Continue") -> Continue
+    | Sexp.Atom ("break" | "Break") -> Break
+    | Sexp.Atom ("return" | "Return") -> Return
+    | (Sexp.List
+         (Sexp.Atom (("returnExpr" | "ReturnExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in ReturnExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("gotoComputed" | "GotoComputed" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in GotoComputed v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("goto" | "Goto") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("continue" | "Continue") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("break" | "Break") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("return" | "Return") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.Atom ("returnExpr" | "ReturnExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("gotoComputed" | "GotoComputed") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and jump_of_sexp sexp = jump_of_sexp__ sexp
+and asmbody_of_sexp__ =
+  let _loc = "Xxx.asmbody"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = il_of_sexp v1
+        and v2 = Conv.list_of_sexp (wrap_of_sexp colon_of_sexp) v2
+        in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and asmbody_of_sexp sexp =
+  try asmbody_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and colon_of_sexp__ =
+  let _loc = "Xxx.colon"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("colon" | "Colon" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               Conv.list_of_sexp (wrap2_of_sexp colon_option_of_sexp) v1
+             in Colon v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("colon" | "Colon") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and colon_of_sexp sexp = colon_of_sexp__ sexp
+and colon_option_of_sexp__ =
+  let _loc = "Xxx.colon_option"
+  in fun sexp -> wrap_of_sexp colon_option_bis_of_sexp sexp
+and colon_option_of_sexp sexp =
+  try colon_option_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and colon_option_bis_of_sexp__ =
+  let _loc = "Xxx.colon_option_bis"
+  in
+    function
+    | Sexp.Atom ("colonMisc" | "ColonMisc") -> ColonMisc
+    | (Sexp.List
+         (Sexp.Atom (("colonExpr" | "ColonExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in ColonExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom ("colonMisc" | "ColonMisc") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.Atom ("colonExpr" | "ColonExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and colon_option_bis_of_sexp sexp = colon_option_bis_of_sexp__ sexp
+and declaration_of_sexp__ =
+  let _loc = "Xxx.declaration"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("declList" | "DeclList" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               wrap_of_sexp
+                 (Conv.list_of_sexp (wrap2_of_sexp onedecl_of_sexp)) v1
+             in DeclList v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("macroDecl" | "MacroDecl" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               wrap_of_sexp
+                 (function
+                  | Sexp.List ([ v1; v2 ]) ->
+                      let v1 = Conv.string_of_sexp v1
+                      and v2 =
+                        Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2
+                      in (v1, v2)
+                  | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+                 v1
+             in MacroDecl v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("declList" | "DeclList") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("macroDecl" | "MacroDecl") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and declaration_of_sexp sexp = declaration_of_sexp__ sexp
+and onedecl_of_sexp__ =
+  let _loc = "Xxx.onedecl"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let v_namei_field = ref None and v_type_field = ref None
+        and v_type_bis_field = ref None and v_storage_field = ref None
+        and v_local_field = ref None and v_attr_field = ref None
+        and duplicates = ref [] and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "v_namei" ->
+                     (match !v_namei_field with
+                      | None ->
+                          let fvalue =
+                            Conv.option_of_sexp
+                              (function
+                               | Sexp.List ([ v1; v2 ]) ->
+                                   let v1 = name_of_sexp v1
+                                   and v2 =
+                                     Conv.option_of_sexp
+                                       (function
+                                        | Sexp.List ([ v1; v2 ]) ->
+                                            let v1 = info_of_sexp v1
+                                            and v2 = initialiser_of_sexp v2
+                                            in (v1, v2)
+                                        | sexp ->
+                                            Conv_error.
+                                              tuple_of_size_n_expected _loc 2
+                                              sexp)
+                                       v2
+                                   in (v1, v2)
+                               | sexp ->
+                                   Conv_error.tuple_of_size_n_expected _loc 2
+                                     sexp)
+                              field_sexp
+                          in v_namei_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "v_type" ->
+                     (match !v_type_field with
+                      | None ->
+                          let fvalue = fullType_of_sexp field_sexp
+                          in v_type_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "v_type_bis" ->
+                     (match !v_type_bis_field with
+                      | None ->
+                          let fvalue =
+                            Conv.ref_of_sexp
+                              (Conv.option_of_sexp fullType_of_sexp)
+                              field_sexp
+                          in v_type_bis_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "v_storage" ->
+                     (match !v_storage_field with
+                      | None ->
+                          let fvalue = storage_of_sexp field_sexp
+                          in v_storage_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "v_local" ->
+                     (match !v_local_field with
+                      | None ->
+                          let fvalue = local_decl_of_sexp field_sexp
+                          in v_local_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "v_attr" ->
+                     (match !v_attr_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp attribute_of_sexp field_sexp
+                          in v_attr_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!v_namei_field), (!v_type_field),
+                       (!v_type_bis_field), (!v_storage_field),
+                       (!v_local_field), (!v_attr_field))
+                with
+                | (Some v_namei_value, Some v_type_value,
+                   Some v_type_bis_value, Some v_storage_value,
+                   Some v_local_value, Some v_attr_value) ->
+                    {
+                      v_namei = v_namei_value;
+                      v_type = v_type_value;
+                      v_type_bis = v_type_bis_value;
+                      v_storage = v_storage_value;
+                      v_local = v_local_value;
+                      v_attr = v_attr_value;
+                    }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!v_namei_field = None), "v_namei");
+                        ((!v_type_field = None), "v_type");
+                        ((!v_type_bis_field = None), "v_type_bis");
+                        ((!v_storage_field = None), "v_storage");
+                        ((!v_local_field = None), "v_local");
+                        ((!v_attr_field = None), "v_attr") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and onedecl_of_sexp sexp = onedecl_of_sexp__ sexp
+and storage_of_sexp__ =
+  let _loc = "Xxx.storage"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = storagebis_of_sexp v1
+        and v2 = Conv.bool_of_sexp v2
+        in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and storage_of_sexp sexp =
+  try storage_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and storagebis_of_sexp__ =
+  let _loc = "Xxx.storagebis"
+  in
+    function
+    | Sexp.Atom ("noSto" | "NoSto") -> NoSto
+    | Sexp.Atom ("stoTypedef" | "StoTypedef") -> StoTypedef
+    | (Sexp.List (Sexp.Atom (("sto" | "Sto" as tag)) :: sexp_args) as sexp)
+        ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = storageClass_of_sexp v1 in Sto v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom ("noSto" | "NoSto") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("stoTypedef" | "StoTypedef") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.Atom ("sto" | "Sto") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and storagebis_of_sexp sexp = storagebis_of_sexp__ sexp
+and storageClass_of_sexp__ =
+  let _loc = "Xxx.storageClass"
+  in
+    function
+    | Sexp.Atom ("auto" | "Auto") -> Auto
+    | Sexp.Atom ("static" | "Static") -> Static
+    | Sexp.Atom ("register" | "Register") -> Register
+    | Sexp.Atom ("extern" | "Extern") -> Extern
+    | (Sexp.List (Sexp.Atom ("auto" | "Auto") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("static" | "Static") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("register" | "Register") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("extern" | "Extern") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and storageClass_of_sexp sexp = storageClass_of_sexp__ sexp
+and local_decl_of_sexp__ =
+  let _loc = "Xxx.local_decl"
+  in
+    function
+    | Sexp.Atom ("localDecl" | "LocalDecl") -> LocalDecl
+    | Sexp.Atom ("notLocalDecl" | "NotLocalDecl") -> NotLocalDecl
+    | (Sexp.List (Sexp.Atom ("localDecl" | "LocalDecl") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("notLocalDecl" | "NotLocalDecl") :: _) as sexp)
+        -> Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and local_decl_of_sexp sexp = local_decl_of_sexp__ sexp
+and initialiser_of_sexp__ =
+  let _loc = "Xxx.initialiser"
+  in fun sexp -> wrap_of_sexp initialiserbis_of_sexp sexp
+and initialiser_of_sexp sexp =
+  try initialiser_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and initialiserbis_of_sexp__ =
+  let _loc = "Xxx.initialiserbis"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("initExpr" | "InitExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in InitExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("initList" | "InitList" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               Conv.list_of_sexp (wrap2_of_sexp initialiser_of_sexp) v1
+             in InitList v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("initDesignators" | "InitDesignators" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Conv.list_of_sexp designator_of_sexp v1
+             and v2 = initialiser_of_sexp v2
+             in InitDesignators ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("initFieldOld" | "InitFieldOld" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = Conv.string_of_sexp v1
+             and v2 = initialiser_of_sexp v2
+             in InitFieldOld ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("initIndexOld" | "InitIndexOld" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = initialiser_of_sexp v2
+             in InitIndexOld ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("initExpr" | "InitExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("initList" | "InitList") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("initDesignators" | "InitDesignators") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("initFieldOld" | "InitFieldOld") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("initIndexOld" | "InitIndexOld") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and initialiserbis_of_sexp sexp = initialiserbis_of_sexp__ sexp
+and designator_of_sexp__ =
+  let _loc = "Xxx.designator"
+  in fun sexp -> wrap_of_sexp designatorbis_of_sexp sexp
+and designator_of_sexp sexp =
+  try designator_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and designatorbis_of_sexp__ =
+  let _loc = "Xxx.designatorbis"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("designatorField" | "DesignatorField" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in DesignatorField v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("designatorIndex" | "DesignatorIndex" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in DesignatorIndex v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("designatorRange" | "DesignatorRange" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2 ] ->
+             let v1 = expression_of_sexp v1
+             and v2 = expression_of_sexp v2
+             in DesignatorRange ((v1, v2))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("designatorField" | "DesignatorField") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("designatorIndex" | "DesignatorIndex") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("designatorRange" | "DesignatorRange") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and designatorbis_of_sexp sexp = designatorbis_of_sexp__ sexp
+and definition_of_sexp__ =
+  let _loc = "Xxx.definition"
+  in fun sexp -> wrap_of_sexp definitionbis_of_sexp sexp
+and definition_of_sexp sexp =
+  try definition_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and definitionbis_of_sexp__ =
+  let _loc = "Xxx.definitionbis"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let f_name_field = ref None and f_type_field = ref None
+        and f_storage_field = ref None and f_body_field = ref None
+        and f_attr_field = ref None and f_old_c_style_field = ref None
+        and duplicates = ref [] and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "f_name" ->
+                     (match !f_name_field with
+                      | None ->
+                          let fvalue = name_of_sexp field_sexp
+                          in f_name_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "f_type" ->
+                     (match !f_type_field with
+                      | None ->
+                          let fvalue = functionType_of_sexp field_sexp
+                          in f_type_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "f_storage" ->
+                     (match !f_storage_field with
+                      | None ->
+                          let fvalue = storage_of_sexp field_sexp
+                          in f_storage_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "f_body" ->
+                     (match !f_body_field with
+                      | None ->
+                          let fvalue = compound_of_sexp field_sexp
+                          in f_body_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "f_attr" ->
+                     (match !f_attr_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp attribute_of_sexp field_sexp
+                          in f_attr_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "f_old_c_style" ->
+                     (match !f_old_c_style_field with
+                      | None ->
+                          let fvalue =
+                            Conv.option_of_sexp
+                              (Conv.list_of_sexp declaration_of_sexp)
+                              field_sexp
+                          in f_old_c_style_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!f_name_field), (!f_type_field), (!f_storage_field),
+                       (!f_body_field), (!f_attr_field),
+                       (!f_old_c_style_field))
+                with
+                | (Some f_name_value, Some f_type_value,
+                   Some f_storage_value, Some f_body_value,
+                   Some f_attr_value, Some f_old_c_style_value) ->
+                    {
+                      f_name = f_name_value;
+                      f_type = f_type_value;
+                      f_storage = f_storage_value;
+                      f_body = f_body_value;
+                      f_attr = f_attr_value;
+                      f_old_c_style = f_old_c_style_value;
+                    }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!f_name_field = None), "f_name");
+                        ((!f_type_field = None), "f_type");
+                        ((!f_storage_field = None), "f_storage");
+                        ((!f_body_field = None), "f_body");
+                        ((!f_attr_field = None), "f_attr");
+                        ((!f_old_c_style_field = None), "f_old_c_style") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and definitionbis_of_sexp sexp = definitionbis_of_sexp__ sexp
+and cpp_directive_of_sexp__ =
+  let _loc = "Xxx.cpp_directive"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("define" | "Define" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = define_of_sexp v1 in Define v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("include" | "Include" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = includ_of_sexp v1 in Include v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("undef" | "Undef" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = wrap_of_sexp Conv.string_of_sexp v1 in Undef v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("pragmaAndCo" | "PragmaAndCo" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = il_of_sexp v1 in PragmaAndCo v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("define" | "Define") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("include" | "Include") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("undef" | "Undef") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("pragmaAndCo" | "PragmaAndCo") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and cpp_directive_of_sexp sexp = cpp_directive_of_sexp__ sexp
+and define_of_sexp__ =
+  let _loc = "Xxx.define"
+  in
+    function
+    | Sexp.List ([ v1; v2 ]) ->
+        let v1 = wrap_of_sexp Conv.string_of_sexp v1
+        and v2 =
+          (match v2 with
+           | Sexp.List ([ v1; v2 ]) ->
+               let v1 = define_kind_of_sexp v1
+               and v2 = define_val_of_sexp v2
+               in (v1, v2)
+           | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+        in (v1, v2)
+    | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp
+and define_of_sexp sexp =
+  try define_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and define_kind_of_sexp__ =
+  let _loc = "Xxx.define_kind"
+  in
+    function
+    | Sexp.Atom ("defineVar" | "DefineVar") -> DefineVar
+    | (Sexp.List
+         (Sexp.Atom (("defineFunc" | "DefineFunc" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               wrap_of_sexp
+                 (Conv.list_of_sexp
+                    (wrap2_of_sexp (wrap_of_sexp Conv.string_of_sexp)))
+                 v1
+             in DefineFunc v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom ("defineVar" | "DefineVar") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.Atom ("defineFunc" | "DefineFunc") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and define_kind_of_sexp sexp = define_kind_of_sexp__ sexp
+and define_val_of_sexp__ =
+  let _loc = "Xxx.define_val"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("defineExpr" | "DefineExpr" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in DefineExpr v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("defineStmt" | "DefineStmt" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = statement_of_sexp v1 in DefineStmt v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("defineType" | "DefineType" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = fullType_of_sexp v1 in DefineType v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("defineDoWhileZero" | "DefineDoWhileZero" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               wrap_of_sexp
+                 (function
+                  | Sexp.List ([ v1; v2 ]) ->
+                      let v1 = statement_of_sexp v1
+                      and v2 = expression_of_sexp v2
+                      in (v1, v2)
+                  | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+                 v1
+             in DefineDoWhileZero v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("defineFunction" | "DefineFunction" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = definition_of_sexp v1 in DefineFunction v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("defineInit" | "DefineInit" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = initialiser_of_sexp v1 in DefineInit v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("defineText" | "DefineText" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = wrap_of_sexp Conv.string_of_sexp v1 in DefineText v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | Sexp.Atom ("defineEmpty" | "DefineEmpty") -> DefineEmpty
+    | Sexp.Atom ("defineTodo" | "DefineTodo") -> DefineTodo
+    | (Sexp.Atom ("defineExpr" | "DefineExpr") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("defineStmt" | "DefineStmt") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("defineType" | "DefineType") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("defineDoWhileZero" | "DefineDoWhileZero") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("defineFunction" | "DefineFunction") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("defineInit" | "DefineInit") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("defineText" | "DefineText") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("defineEmpty" | "DefineEmpty") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("defineTodo" | "DefineTodo") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and define_val_of_sexp sexp = define_val_of_sexp__ sexp
+and includ_of_sexp__ =
+  let _loc = "Xxx.includ"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let i_include_field = ref None and i_rel_pos_field = ref None
+        and i_is_in_ifdef_field = ref None and i_content_field = ref None
+        and duplicates = ref [] and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "i_include" ->
+                     (match !i_include_field with
+                      | None ->
+                          let fvalue =
+                            wrap_of_sexp inc_file_of_sexp field_sexp
+                          in i_include_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "i_rel_pos" ->
+                     (match !i_rel_pos_field with
+                      | None ->
+                          let fvalue =
+                            Conv.ref_of_sexp
+                              (Conv.option_of_sexp include_rel_pos_of_sexp)
+                              field_sexp
+                          in i_rel_pos_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "i_is_in_ifdef" ->
+                     (match !i_is_in_ifdef_field with
+                      | None ->
+                          let fvalue = Conv.bool_of_sexp field_sexp
+                          in i_is_in_ifdef_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "i_content" ->
+                     (match !i_content_field with
+                      | None ->
+                          let fvalue =
+                            Conv.option_of_sexp
+                              (function
+                               | Sexp.List ([ v1; v2 ]) ->
+                                   let v1 = Common.filename_of_sexp v1
+                                   and v2 = program_of_sexp v2
+                                   in (v1, v2)
+                               | sexp ->
+                                   Conv_error.tuple_of_size_n_expected _loc 2
+                                     sexp)
+                              field_sexp
+                          in i_content_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!i_include_field), (!i_rel_pos_field),
+                       (!i_is_in_ifdef_field), (!i_content_field))
+                with
+                | (Some i_include_value, Some i_rel_pos_value,
+                   Some i_is_in_ifdef_value, Some i_content_value) ->
+                    {
+                      i_include = i_include_value;
+                      i_rel_pos = i_rel_pos_value;
+                      i_is_in_ifdef = i_is_in_ifdef_value;
+                      i_content = i_content_value;
+                    }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!i_include_field = None), "i_include");
+                        ((!i_rel_pos_field = None), "i_rel_pos");
+                        ((!i_is_in_ifdef_field = None), "i_is_in_ifdef");
+                        ((!i_content_field = None), "i_content") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and includ_of_sexp sexp = includ_of_sexp__ sexp
+and inc_file_of_sexp__ =
+  let _loc = "Xxx.inc_file"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("local" | "Local" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = Conv.list_of_sexp inc_elem_of_sexp v1 in Local v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("nonLocal" | "NonLocal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = Conv.list_of_sexp inc_elem_of_sexp v1 in NonLocal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("weird" | "Weird" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in Weird v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("local" | "Local") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("nonLocal" | "NonLocal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("weird" | "Weird") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and inc_file_of_sexp sexp = inc_file_of_sexp__ sexp
+and inc_elem_of_sexp__ =
+  let _loc = "Xxx.inc_elem" in fun sexp -> Conv.string_of_sexp sexp
+and inc_elem_of_sexp sexp =
+  try inc_elem_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and include_rel_pos_of_sexp__ =
+  let _loc = "Xxx.include_rel_pos"
+  in
+    function
+    | (Sexp.List field_sexps as sexp) ->
+        let first_of_field = ref None and last_of_field = ref None
+        and duplicates = ref [] and extra = ref [] in
+        let rec iter =
+          (function
+           | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail ->
+               ((match field_name with
+                 | "first_of" ->
+                     (match !first_of_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp
+                              (Conv.list_of_sexp Conv.string_of_sexp)
+                              field_sexp
+                          in first_of_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | "last_of" ->
+                     (match !last_of_field with
+                      | None ->
+                          let fvalue =
+                            Conv.list_of_sexp
+                              (Conv.list_of_sexp Conv.string_of_sexp)
+                              field_sexp
+                          in last_of_field := Some fvalue
+                      | Some _ -> duplicates := field_name :: !duplicates)
+                 | _ ->
+                     if !Conv.record_check_extra_fields
+                     then extra := field_name :: !extra
+                     else ());
+                iter tail)
+           | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp
+           | [] -> ())
+        in
+          (iter field_sexps;
+           if !duplicates <> []
+           then Conv_error.record_duplicate_fields _loc !duplicates sexp
+           else
+             if !extra <> []
+             then Conv_error.record_extra_fields _loc !extra sexp
+             else
+               (match ((!first_of_field), (!last_of_field)) with
+                | (Some first_of_value, Some last_of_value) ->
+                    { first_of = first_of_value; last_of = last_of_value; }
+                | _ ->
+                    Conv_error.record_undefined_elements _loc sexp
+                      [ ((!first_of_field = None), "first_of");
+                        ((!last_of_field = None), "last_of") ]))
+    | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp
+and include_rel_pos_of_sexp sexp = include_rel_pos_of_sexp__ sexp
+and ifdef_directive_of_sexp__ =
+  let _loc = "Xxx.ifdef_directive"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("ifdefDirective" | "IfdefDirective" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               wrap_of_sexp
+                 (function
+                  | Sexp.List ([ v1; v2 ]) ->
+                      let v1 = ifdefkind_of_sexp v1
+                      and v2 = matching_tag_of_sexp v2
+                      in (v1, v2)
+                  | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+                 v1
+             in IfdefDirective v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("ifdefDirective" | "IfdefDirective") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and ifdef_directive_of_sexp sexp = ifdef_directive_of_sexp__ sexp
+and ifdefkind_of_sexp__ =
+  let _loc = "Xxx.ifdefkind"
+  in
+    function
+    | Sexp.Atom ("ifdef" | "Ifdef") -> Ifdef
+    | Sexp.Atom ("ifdefElseif" | "IfdefElseif") -> IfdefElseif
+    | Sexp.Atom ("ifdefElse" | "IfdefElse") -> IfdefElse
+    | Sexp.Atom ("ifdefEndif" | "IfdefEndif") -> IfdefEndif
+    | (Sexp.List (Sexp.Atom ("ifdef" | "Ifdef") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("ifdefElseif" | "IfdefElseif") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("ifdefElse" | "IfdefElse") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.Atom ("ifdefEndif" | "IfdefEndif") :: _) as sexp) ->
+        Conv_error.stag_no_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and ifdefkind_of_sexp sexp = ifdefkind_of_sexp__ sexp
+and matching_tag_of_sexp__ =
+  let _loc = "Xxx.matching_tag"
+  in
+    function
+    | (Sexp.List (Sexp.Atom (("ifdefTag" | "IfdefTag" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               (match v1 with
+                | Sexp.List ([ v1; v2 ]) ->
+                    let v1 = Conv.int_of_sexp v1
+                    and v2 = Conv.int_of_sexp v2
+                    in (v1, v2)
+                | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+             in IfdefTag v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("ifdefTag" | "IfdefTag") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and matching_tag_of_sexp sexp = matching_tag_of_sexp__ sexp
+and toplevel_of_sexp__ =
+  let _loc = "Xxx.toplevel"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("declaration" | "Declaration" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = declaration_of_sexp v1 in Declaration v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("definition" | "Definition" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = definition_of_sexp v1 in Definition v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("cppTop" | "CppTop" as tag)) :: sexp_args) as
+       sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = cpp_directive_of_sexp v1 in CppTop v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("ifdefTop" | "IfdefTop" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = ifdef_directive_of_sexp v1 in IfdefTop v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("macroTop" | "MacroTop" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1; v2; v3 ] ->
+             let v1 = Conv.string_of_sexp v1
+             and v2 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2
+             and v3 = il_of_sexp v3
+             in MacroTop ((v1, v2, v3))
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("emptyDef" | "EmptyDef" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = il_of_sexp v1 in EmptyDef v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("notParsedCorrectly" | "NotParsedCorrectly" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = il_of_sexp v1 in NotParsedCorrectly v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List (Sexp.Atom (("finalDef" | "FinalDef" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = info_of_sexp v1 in FinalDef v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("declaration" | "Declaration") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("definition" | "Definition") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("cppTop" | "CppTop") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("ifdefTop" | "IfdefTop") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("macroTop" | "MacroTop") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("emptyDef" | "EmptyDef") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("notParsedCorrectly" | "NotParsedCorrectly") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("finalDef" | "FinalDef") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and toplevel_of_sexp sexp = toplevel_of_sexp__ sexp
+and program_of_sexp__ =
+  let _loc = "Xxx.program"
+  in fun sexp -> Conv.list_of_sexp toplevel_of_sexp sexp
+and program_of_sexp sexp =
+  try program_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+
+
+
+(* 
+and metavars_binding_of_sexp__ =
+  let _loc = "Xxx.metavars_binding"
+  in
+    fun sexp ->
+      (*
+      Common.assoc_of_sexp Ast_cocci.meta_name_of_sexp metavar_binding_kind_of_sexp
+        sexp
+      *)
+      failwith "Todo"
+and metavars_binding_of_sexp sexp =
+  try metavars_binding_of_sexp__ sexp
+  with
+  | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp
+and metavar_binding_kind_of_sexp__ =
+  let _loc = "Xxx.metavar_binding_kind"
+  in
+    function
+    | (Sexp.List
+         (Sexp.Atom (("metaIdVal" | "MetaIdVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in MetaIdVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaFuncVal" | "MetaFuncVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in MetaFuncVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaLocalFuncVal" | "MetaLocalFuncVal" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in MetaLocalFuncVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaExprVal" | "MetaExprVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = expression_of_sexp v1 in MetaExprVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaExprListVal" | "MetaExprListVal" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v1
+             in MetaExprListVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaParamVal" | "MetaParamVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = parameterType_of_sexp v1 in MetaParamVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaParamListVal" | "MetaParamListVal" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               Conv.list_of_sexp (wrap2_of_sexp parameterType_of_sexp) v1
+             in MetaParamListVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaTypeVal" | "MetaTypeVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = fullType_of_sexp v1 in MetaTypeVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaInitVal" | "MetaInitVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = initialiser_of_sexp v1 in MetaInitVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaStmtVal" | "MetaStmtVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = statement_of_sexp v1 in MetaStmtVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaPosVal" | "MetaPosVal" as tag)) :: sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               (match v1 with
+                | Sexp.List ([ v1; v2 ]) ->
+                    let v1 = Ast_cocci.fixpos_of_sexp v1
+                    and v2 = Ast_cocci.fixpos_of_sexp v2
+                    in (v1, v2)
+                | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)
+             in MetaPosVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaPosValList" | "MetaPosValList" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] ->
+             let v1 =
+               Conv.list_of_sexp
+                 (function
+                  | Sexp.List ([ v1; v2; v3; v4 ]) ->
+                      let v1 = Common.filename_of_sexp v1
+                      and v2 = Conv.string_of_sexp v2
+                      and v3 = posl_of_sexp v3
+                      and v4 = posl_of_sexp v4
+                      in (v1, v2, v3, v4)
+                  | sexp -> Conv_error.tuple_of_size_n_expected _loc 4 sexp)
+                 v1
+             in MetaPosValList v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.List
+         (Sexp.Atom (("metaListlenVal" | "MetaListlenVal" as tag)) ::
+            sexp_args)
+       as sexp) ->
+        (match sexp_args with
+         | [ v1 ] -> let v1 = Conv.int_of_sexp v1 in MetaListlenVal v1
+         | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp)
+    | (Sexp.Atom ("metaIdVal" | "MetaIdVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaFuncVal" | "MetaFuncVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaLocalFuncVal" | "MetaLocalFuncVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaExprVal" | "MetaExprVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaExprListVal" | "MetaExprListVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaParamVal" | "MetaParamVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaParamListVal" | "MetaParamListVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaTypeVal" | "MetaTypeVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaInitVal" | "MetaInitVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaStmtVal" | "MetaStmtVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaPosVal" | "MetaPosVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaPosValList" | "MetaPosValList") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.Atom ("metaListlenVal" | "MetaListlenVal") as sexp) ->
+        Conv_error.stag_takes_args _loc sexp
+    | (Sexp.List (Sexp.List _ :: _) as sexp) ->
+        Conv_error.nested_list_invalid_sum _loc sexp
+    | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp
+    | sexp -> Conv_error.unexpected_stag _loc sexp
+and metavar_binding_kind_of_sexp sexp = metavar_binding_kind_of_sexp__ sexp
+
+*)
+
+
+
+let rec
+  sexp_of_info {
+                 pinfo = v_pinfo;
+                 cocci_tag = v_cocci_tag;
+                 comments_tag = v_comments_tag
+               } =
+  if not !show_info then Sexp.Atom ""
+  else 
+  let bnds = [] in
+  let arg = Conv.sexp_of_ref sexp_of_comments_around v_comments_tag in
+  let bnd = Sexp.List [ Sexp.Atom "comments_tag"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg =
+    Conv.sexp_of_ref
+      (Conv.sexp_of_option
+         (fun (v1, v2) ->
+            let v1 = Ast_cocci.sexp_of_mcodekind v1
+            and v2 = (* sexp_of_metavars_binding v2 *) failwith "todo"
+            in Sexp.List [ v1; v2 ]))
+      v_cocci_tag in
+  let bnd = Sexp.List [ Sexp.Atom "cocci_tag"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_parse_info v_pinfo in
+  let bnd = Sexp.List [ Sexp.Atom "pinfo"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_il v = Conv.sexp_of_list sexp_of_info v
+and sexp_of_wrap _of_a (v1, v2) =
+  let v1 = _of_a v1 and v2 = sexp_of_il v2 in Sexp.List [ v1; v2 ]
+and sexp_of_wrap2 _of_a (v1, v2) =
+  let v1 = _of_a v1 and v2 = sexp_of_il v2 in Sexp.List [ v1; v2 ]
+
+
+and
+  sexp_of_comments_around {
+                            mbefore = v_mbefore;
+                            mafter = v_mafter;
+                            mbefore2 = v_mbefore2;
+                            mafter2 = v_mafter2
+                          } =
+  let bnds = [] in
+  let arg = Conv.sexp_of_list sexp_of_comment_and_relative_pos v_mafter2 in
+  let bnd = Sexp.List [ Sexp.Atom "mafter2"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Conv.sexp_of_list sexp_of_comment_and_relative_pos v_mbefore2 in
+  let bnd = Sexp.List [ Sexp.Atom "mbefore2"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Conv.sexp_of_list Token_c.sexp_of_comment_like_token v_mafter in
+  let bnd = Sexp.List [ Sexp.Atom "mafter"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Conv.sexp_of_list Token_c.sexp_of_comment_like_token v_mbefore in
+  let bnd = Sexp.List [ Sexp.Atom "mbefore"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_comment_and_relative_pos { minfo = v_minfo; mpos = v_mpos } =
+  let bnds = [] in
+  let arg = Conv.sexp_of_int v_mpos in
+  let bnd = Sexp.List [ Sexp.Atom "mpos"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Common.sexp_of_parse_info v_minfo in
+  let bnd = Sexp.List [ Sexp.Atom "minfo"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_comment v = Common.sexp_of_parse_info v
+and sexp_of_com v = Conv.sexp_of_ref (Conv.sexp_of_list sexp_of_comment) v
+
+
+
+
+(* break let rec  *)
+let rec sexp_of_name =
+  function
+  | RegularName v1 ->
+      let v1 = sexp_of_wrap Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "RegularName"; v1 ]
+  | CppConcatenatedName v1 ->
+      let v1 =
+        Conv.sexp_of_list (sexp_of_wrap2 (sexp_of_wrap Conv.sexp_of_string))
+          v1
+      in Sexp.List [ Sexp.Atom "CppConcatenatedName"; v1 ]
+  | CppVariadicName v1 ->
+      let v1 = sexp_of_wrap Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "CppVariadicName"; v1 ]
+  | CppIdentBuilder ((v1, v2)) ->
+      let v1 = sexp_of_wrap Conv.sexp_of_string v1
+      and v2 =
+        Conv.sexp_of_list (sexp_of_wrap2 (sexp_of_wrap Conv.sexp_of_string))
+          v2
+      in Sexp.List [ Sexp.Atom "CppIdentBuilder"; v1; v2 ]
+and sexp_of_fullType (v1, v2) =
+  let v1 = sexp_of_typeQualifier v1
+  and v2 = sexp_of_typeC v2
+  in Sexp.List [ v1; v2 ]
+and sexp_of_typeC v = sexp_of_wrap sexp_of_typeCbis v
+and sexp_of_typeCbis =
+  function
+  | BaseType v1 ->
+      let v1 = sexp_of_baseType v1 in Sexp.List [ Sexp.Atom "BaseType"; v1 ]
+  | Pointer v1 ->
+      let v1 = sexp_of_fullType v1 in Sexp.List [ Sexp.Atom "Pointer"; v1 ]
+  | Array ((v1, v2)) ->
+      let v1 = Conv.sexp_of_option sexp_of_constExpression v1
+      and v2 = sexp_of_fullType v2
+      in Sexp.List [ Sexp.Atom "Array"; v1; v2 ]
+  | FunctionType v1 ->
+      let v1 = sexp_of_functionType v1
+      in Sexp.List [ Sexp.Atom "FunctionType"; v1 ]
+  | Enum ((v1, v2)) ->
+      let v1 = Conv.sexp_of_option Conv.sexp_of_string v1
+      and v2 = sexp_of_enumType v2
+      in Sexp.List [ Sexp.Atom "Enum"; v1; v2 ]
+  | StructUnion ((v1, v2, v3)) ->
+      let v1 = sexp_of_structUnion v1
+      and v2 = Conv.sexp_of_option Conv.sexp_of_string v2
+      and v3 = sexp_of_structType v3
+      in Sexp.List [ Sexp.Atom "StructUnion"; v1; v2; v3 ]
+  | EnumName v1 ->
+      let v1 = Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "EnumName"; v1 ]
+  | StructUnionName ((v1, v2)) ->
+      let v1 = sexp_of_structUnion v1
+      and v2 = Conv.sexp_of_string v2
+      in Sexp.List [ Sexp.Atom "StructUnionName"; v1; v2 ]
+  | TypeName ((v1, v2)) ->
+      let v1 = sexp_of_name v1
+      and v2 = Conv.sexp_of_option sexp_of_fullType v2
+      in Sexp.List [ Sexp.Atom "TypeName"; v1; v2 ]
+  | ParenType v1 ->
+      let v1 = sexp_of_fullType v1 in Sexp.List [ Sexp.Atom "ParenType"; v1 ]
+  | TypeOfExpr v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "TypeOfExpr"; v1 ]
+  | TypeOfType v1 ->
+      let v1 = sexp_of_fullType v1
+      in Sexp.List [ Sexp.Atom "TypeOfType"; v1 ]
+and sexp_of_baseType =
+  function
+  | Void -> Sexp.Atom "Void"
+  | IntType v1 ->
+      let v1 = sexp_of_intType v1 in Sexp.List [ Sexp.Atom "IntType"; v1 ]
+  | FloatType v1 ->
+      let v1 = sexp_of_floatType v1
+      in Sexp.List [ Sexp.Atom "FloatType"; v1 ]
+and sexp_of_intType =
+  function
+  | CChar -> Sexp.Atom "CChar"
+  | Si v1 -> let v1 = sexp_of_signed v1 in Sexp.List [ Sexp.Atom "Si"; v1 ]
+and sexp_of_signed (v1, v2) =
+  let v1 = sexp_of_sign v1 and v2 = sexp_of_base v2 in Sexp.List [ v1; v2 ]
+and sexp_of_base =
+  function
+  | CChar2 -> Sexp.Atom "CChar2"
+  | CShort -> Sexp.Atom "CShort"
+  | CInt -> Sexp.Atom "CInt"
+  | CLong -> Sexp.Atom "CLong"
+  | CLongLong -> Sexp.Atom "CLongLong"
+and sexp_of_sign =
+  function | Signed -> Sexp.Atom "Signed" | UnSigned -> Sexp.Atom "UnSigned"
+and sexp_of_floatType =
+  function
+  | CFloat -> Sexp.Atom "CFloat"
+  | CDouble -> Sexp.Atom "CDouble"
+  | CLongDouble -> Sexp.Atom "CLongDouble"
+and sexp_of_structUnion =
+  function | Struct -> Sexp.Atom "Struct" | Union -> Sexp.Atom "Union"
+and sexp_of_structType v = Conv.sexp_of_list sexp_of_field v
+and sexp_of_field =
+  function
+  | DeclarationField v1 ->
+      let v1 = sexp_of_field_declaration v1
+      in Sexp.List [ Sexp.Atom "DeclarationField"; v1 ]
+  | EmptyField v1 ->
+      let v1 = sexp_of_info v1 in Sexp.List [ Sexp.Atom "EmptyField"; v1 ]
+  | MacroDeclField v1 ->
+      let v1 =
+        sexp_of_wrap
+          (fun (v1, v2) ->
+             let v1 = Conv.sexp_of_string v1
+             and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2
+             in Sexp.List [ v1; v2 ])
+          v1
+      in Sexp.List [ Sexp.Atom "MacroDeclField"; v1 ]
+  | CppDirectiveStruct v1 ->
+      let v1 = sexp_of_cpp_directive v1
+      in Sexp.List [ Sexp.Atom "CppDirectiveStruct"; v1 ]
+  | IfdefStruct v1 ->
+      let v1 = sexp_of_ifdef_directive v1
+      in Sexp.List [ Sexp.Atom "IfdefStruct"; v1 ]
+and sexp_of_field_declaration =
+  function
+  | FieldDeclList v1 ->
+      let v1 =
+        sexp_of_wrap (Conv.sexp_of_list (sexp_of_wrap2 sexp_of_fieldkind)) v1
+      in Sexp.List [ Sexp.Atom "FieldDeclList"; v1 ]
+and sexp_of_fieldkind =
+  function
+  | Simple ((v1, v2)) ->
+      let v1 = Conv.sexp_of_option sexp_of_name v1
+      and v2 = sexp_of_fullType v2
+      in Sexp.List [ Sexp.Atom "Simple"; v1; v2 ]
+  | BitField ((v1, v2, v3, v4)) ->
+      let v1 = Conv.sexp_of_option sexp_of_name v1
+      and v2 = sexp_of_fullType v2
+      and v3 = sexp_of_info v3
+      and v4 = sexp_of_constExpression v4
+      in Sexp.List [ Sexp.Atom "BitField"; v1; v2; v3; v4 ]
+and sexp_of_enumType v =
+  Conv.sexp_of_list
+    (sexp_of_wrap2
+       (fun (v1, v2) ->
+          let v1 = sexp_of_name v1
+          and v2 =
+            Conv.sexp_of_option
+              (fun (v1, v2) ->
+                 let v1 = sexp_of_info v1
+                 and v2 = sexp_of_constExpression v2
+                 in Sexp.List [ v1; v2 ])
+              v2
+          in Sexp.List [ v1; v2 ]))
+    v
+and sexp_of_functionType (v1, v2) =
+  let v1 = sexp_of_fullType v1
+  and v2 =
+    match v2 with
+    | (v1, v2) ->
+        let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_parameterType) v1
+        and v2 = sexp_of_wrap Conv.sexp_of_bool v2
+        in Sexp.List [ v1; v2 ]
+  in Sexp.List [ v1; v2 ]
+and
+  sexp_of_parameterType {
+                          p_namei = v_p_namei;
+                          p_register = v_p_register;
+                          p_type = v_p_type
+                        } =
+  let bnds = [] in
+  let arg = sexp_of_fullType v_p_type in
+  let bnd = Sexp.List [ Sexp.Atom "p_type"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_wrap Conv.sexp_of_bool v_p_register in
+  let bnd = Sexp.List [ Sexp.Atom "p_register"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Conv.sexp_of_option sexp_of_name v_p_namei in
+  let bnd = Sexp.List [ Sexp.Atom "p_namei"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_typeQualifier v = sexp_of_wrap sexp_of_typeQualifierbis v
+and sexp_of_typeQualifierbis { const = v_const; volatile = v_volatile } =
+  if not !show_qualifier then Sexp.Atom ""
+  else 
+  let bnds = [] in
+  let arg = Conv.sexp_of_bool v_volatile in
+  let bnd = Sexp.List [ Sexp.Atom "volatile"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Conv.sexp_of_bool v_const in
+  let bnd = Sexp.List [ Sexp.Atom "const"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_attribute v = sexp_of_wrap sexp_of_attributebis v
+and sexp_of_attributebis =
+  function
+  | Attribute v1 ->
+      let v1 = Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "Attribute"; v1 ]
+and sexp_of_expression v =
+  sexp_of_wrap
+    (fun (v1, v2) ->
+       let v1 = sexp_of_expressionbis v1
+       and v2 = 
+         if not !show_expr_info then Sexp.Atom ""
+         else Conv.sexp_of_ref sexp_of_exp_info v2
+       in Sexp.List [ v1; v2 ])
+    v
+and sexp_of_exp_info (v1, v2) =
+  let v1 = Conv.sexp_of_option sexp_of_exp_type v1
+  and v2 = sexp_of_test v2
+  in Sexp.List [ v1; v2 ]
+and sexp_of_exp_type (v1, v2) =
+  let v1 = sexp_of_fullType v1
+  and v2 = sexp_of_local v2
+  in Sexp.List [ v1; v2 ]
+and sexp_of_local =
+  function
+  | LocalVar v1 ->
+      let v1 = sexp_of_parse_info v1
+      in Sexp.List [ Sexp.Atom "LocalVar"; v1 ]
+  | NotLocalVar -> Sexp.Atom "NotLocalVar"
+and sexp_of_test =
+  function | Test -> Sexp.Atom "Test" | NotTest -> Sexp.Atom "NotTest"
+and sexp_of_expressionbis =
+  function
+  | Ident v1 ->
+      let v1 = sexp_of_name v1 in Sexp.List [ Sexp.Atom "Ident"; v1 ]
+  | Constant v1 ->
+      let v1 = sexp_of_constant v1 in Sexp.List [ Sexp.Atom "Constant"; v1 ]
+  | FunCall ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2
+      in Sexp.List [ Sexp.Atom "FunCall"; v1; v2 ]
+  | CondExpr ((v1, v2, v3)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = Conv.sexp_of_option sexp_of_expression v2
+      and v3 = sexp_of_expression v3
+      in Sexp.List [ Sexp.Atom "CondExpr"; v1; v2; v3 ]
+  | Sequence ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_expression v2
+      in Sexp.List [ Sexp.Atom "Sequence"; v1; v2 ]
+  | Assignment ((v1, v2, v3)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_assignOp v2
+      and v3 = sexp_of_expression v3
+      in Sexp.List [ Sexp.Atom "Assignment"; v1; v2; v3 ]
+  | Postfix ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_fixOp v2
+      in Sexp.List [ Sexp.Atom "Postfix"; v1; v2 ]
+  | Infix ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_fixOp v2
+      in Sexp.List [ Sexp.Atom "Infix"; v1; v2 ]
+  | Unary ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_unaryOp v2
+      in Sexp.List [ Sexp.Atom "Unary"; v1; v2 ]
+  | Binary ((v1, v2, v3)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_binaryOp v2
+      and v3 = sexp_of_expression v3
+      in Sexp.List [ Sexp.Atom "Binary"; v1; v2; v3 ]
+  | ArrayAccess ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_expression v2
+      in Sexp.List [ Sexp.Atom "ArrayAccess"; v1; v2 ]
+  | RecordAccess ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_name v2
+      in Sexp.List [ Sexp.Atom "RecordAccess"; v1; v2 ]
+  | RecordPtAccess ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_name v2
+      in Sexp.List [ Sexp.Atom "RecordPtAccess"; v1; v2 ]
+  | SizeOfExpr v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "SizeOfExpr"; v1 ]
+  | SizeOfType v1 ->
+      let v1 = sexp_of_fullType v1
+      in Sexp.List [ Sexp.Atom "SizeOfType"; v1 ]
+  | Cast ((v1, v2)) ->
+      let v1 = sexp_of_fullType v1
+      and v2 = sexp_of_expression v2
+      in Sexp.List [ Sexp.Atom "Cast"; v1; v2 ]
+  | StatementExpr v1 ->
+      let v1 = sexp_of_wrap sexp_of_compound v1
+      in Sexp.List [ Sexp.Atom "StatementExpr"; v1 ]
+  | Constructor ((v1, v2)) ->
+      let v1 = sexp_of_fullType v1
+      and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_initialiser) v2
+      in Sexp.List [ Sexp.Atom "Constructor"; v1; v2 ]
+  | ParenExpr v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "ParenExpr"; v1 ]
+and sexp_of_argument v =
+  Common.sexp_of_either sexp_of_expression sexp_of_weird_argument v
+and sexp_of_weird_argument =
+  function
+  | ArgType v1 ->
+      let v1 = sexp_of_parameterType v1
+      in Sexp.List [ Sexp.Atom "ArgType"; v1 ]
+  | ArgAction v1 ->
+      let v1 = sexp_of_action_macro v1
+      in Sexp.List [ Sexp.Atom "ArgAction"; v1 ]
+and sexp_of_action_macro =
+  function
+  | ActMisc v1 ->
+      let v1 = sexp_of_il v1 in Sexp.List [ Sexp.Atom "ActMisc"; v1 ]
+and sexp_of_constant =
+  function
+  | String v1 ->
+      let v1 =
+        (match v1 with
+         | (v1, v2) ->
+             let v1 = Conv.sexp_of_string v1
+             and v2 = sexp_of_isWchar v2
+             in Sexp.List [ v1; v2 ])
+      in Sexp.List [ Sexp.Atom "String"; v1 ]
+  | MultiString v1 ->
+      let v1 = Conv.sexp_of_list Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "MultiString"; v1 ]
+  | Char v1 ->
+      let v1 =
+        (match v1 with
+         | (v1, v2) ->
+             let v1 = Conv.sexp_of_string v1
+             and v2 = sexp_of_isWchar v2
+             in Sexp.List [ v1; v2 ])
+      in Sexp.List [ Sexp.Atom "Char"; v1 ]
+  | Int (v1, _todo) ->
+      let v1 = Conv.sexp_of_string v1 in Sexp.List [ Sexp.Atom "Int"; v1 ]
+  | Float v1 ->
+      let v1 =
+        (match v1 with
+         | (v1, v2) ->
+             let v1 = Conv.sexp_of_string v1
+             and v2 = sexp_of_floatType v2
+             in Sexp.List [ v1; v2 ])
+      in Sexp.List [ Sexp.Atom "Float"; v1 ]
+and sexp_of_isWchar =
+  function | IsWchar -> Sexp.Atom "IsWchar" | IsChar -> Sexp.Atom "IsChar"
+and sexp_of_unaryOp =
+  function
+  | GetRef -> Sexp.Atom "GetRef"
+  | DeRef -> Sexp.Atom "DeRef"
+  | UnPlus -> Sexp.Atom "UnPlus"
+  | UnMinus -> Sexp.Atom "UnMinus"
+  | Tilde -> Sexp.Atom "Tilde"
+  | Not -> Sexp.Atom "Not"
+  | GetRefLabel -> Sexp.Atom "GetRefLabel"
+and sexp_of_assignOp =
+  function
+  | SimpleAssign -> Sexp.Atom "SimpleAssign"
+  | OpAssign v1 ->
+      let v1 = sexp_of_arithOp v1 in Sexp.List [ Sexp.Atom "OpAssign"; v1 ]
+and sexp_of_fixOp =
+  function | Dec -> Sexp.Atom "Dec" | Inc -> Sexp.Atom "Inc"
+and sexp_of_binaryOp =
+  function
+  | Arith v1 ->
+      let v1 = sexp_of_arithOp v1 in Sexp.List [ Sexp.Atom "Arith"; v1 ]
+  | Logical v1 ->
+      let v1 = sexp_of_logicalOp v1 in Sexp.List [ Sexp.Atom "Logical"; v1 ]
+and sexp_of_arithOp =
+  function
+  | Plus -> Sexp.Atom "Plus"
+  | Minus -> Sexp.Atom "Minus"
+  | Mul -> Sexp.Atom "Mul"
+  | Div -> Sexp.Atom "Div"
+  | Mod -> Sexp.Atom "Mod"
+  | DecLeft -> Sexp.Atom "DecLeft"
+  | DecRight -> Sexp.Atom "DecRight"
+  | And -> Sexp.Atom "And"
+  | Or -> Sexp.Atom "Or"
+  | Xor -> Sexp.Atom "Xor"
+and sexp_of_logicalOp =
+  function
+  | Inf -> Sexp.Atom "Inf"
+  | Sup -> Sexp.Atom "Sup"
+  | InfEq -> Sexp.Atom "InfEq"
+  | SupEq -> Sexp.Atom "SupEq"
+  | Eq -> Sexp.Atom "Eq"
+  | NotEq -> Sexp.Atom "NotEq"
+  | AndLog -> Sexp.Atom "AndLog"
+  | OrLog -> Sexp.Atom "OrLog"
+and sexp_of_constExpression v = sexp_of_expression v
+and sexp_of_statement v = sexp_of_wrap sexp_of_statementbis v
+and sexp_of_statementbis =
+  function
+  | Labeled v1 ->
+      let v1 = sexp_of_labeled v1 in Sexp.List [ Sexp.Atom "Labeled"; v1 ]
+  | Compound v1 ->
+      let v1 = sexp_of_compound v1 in Sexp.List [ Sexp.Atom "Compound"; v1 ]
+  | ExprStatement v1 ->
+      let v1 = sexp_of_exprStatement v1
+      in Sexp.List [ Sexp.Atom "ExprStatement"; v1 ]
+  | Selection v1 ->
+      let v1 = sexp_of_selection v1
+      in Sexp.List [ Sexp.Atom "Selection"; v1 ]
+  | Iteration v1 ->
+      let v1 = sexp_of_iteration v1
+      in Sexp.List [ Sexp.Atom "Iteration"; v1 ]
+  | Jump v1 -> let v1 = sexp_of_jump v1 in Sexp.List [ Sexp.Atom "Jump"; v1 ]
+  | Decl v1 ->
+      let v1 = sexp_of_declaration v1 in Sexp.List [ Sexp.Atom "Decl"; v1 ]
+  | Asm v1 ->
+      let v1 = sexp_of_asmbody v1 in Sexp.List [ Sexp.Atom "Asm"; v1 ]
+  | NestedFunc v1 ->
+      let v1 = sexp_of_definition v1
+      in Sexp.List [ Sexp.Atom "NestedFunc"; v1 ]
+  | MacroStmt -> Sexp.Atom "MacroStmt"
+and sexp_of_labeled =
+  function
+  | Label ((v1, v2)) ->
+      let v1 = sexp_of_name v1
+      and v2 = sexp_of_statement v2
+      in Sexp.List [ Sexp.Atom "Label"; v1; v2 ]
+  | Case ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_statement v2
+      in Sexp.List [ Sexp.Atom "Case"; v1; v2 ]
+  | CaseRange ((v1, v2, v3)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_expression v2
+      and v3 = sexp_of_statement v3
+      in Sexp.List [ Sexp.Atom "CaseRange"; v1; v2; v3 ]
+  | Default v1 ->
+      let v1 = sexp_of_statement v1 in Sexp.List [ Sexp.Atom "Default"; v1 ]
+and sexp_of_compound v = Conv.sexp_of_list sexp_of_statement_sequencable v
+and sexp_of_statement_sequencable =
+  function
+  | StmtElem v1 ->
+      let v1 = sexp_of_statement v1 in Sexp.List [ Sexp.Atom "StmtElem"; v1 ]
+  | CppDirectiveStmt v1 ->
+      let v1 = sexp_of_cpp_directive v1
+      in Sexp.List [ Sexp.Atom "CppDirectiveStmt"; v1 ]
+  | IfdefStmt v1 ->
+      let v1 = sexp_of_ifdef_directive v1
+      in Sexp.List [ Sexp.Atom "IfdefStmt"; v1 ]
+  | IfdefStmt2 ((v1, v2)) ->
+      let v1 = Conv.sexp_of_list sexp_of_ifdef_directive v1
+      and v2 =
+        Conv.sexp_of_list (Conv.sexp_of_list sexp_of_statement_sequencable)
+          v2
+      in Sexp.List [ Sexp.Atom "IfdefStmt2"; v1; v2 ]
+and sexp_of_exprStatement v = Conv.sexp_of_option sexp_of_expression v
+and sexp_of_selection =
+  function
+  | If ((v1, v2, v3)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_statement v2
+      and v3 = sexp_of_statement v3
+      in Sexp.List [ Sexp.Atom "If"; v1; v2; v3 ]
+  | Switch ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_statement v2
+      in Sexp.List [ Sexp.Atom "Switch"; v1; v2 ]
+and sexp_of_iteration =
+  function
+  | While ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_statement v2
+      in Sexp.List [ Sexp.Atom "While"; v1; v2 ]
+  | DoWhile ((v1, v2)) ->
+      let v1 = sexp_of_statement v1
+      and v2 = sexp_of_expression v2
+      in Sexp.List [ Sexp.Atom "DoWhile"; v1; v2 ]
+  | For ((v1, v2, v3, v4)) ->
+      let v1 = sexp_of_wrap sexp_of_exprStatement v1
+      and v2 = sexp_of_wrap sexp_of_exprStatement v2
+      and v3 = sexp_of_wrap sexp_of_exprStatement v3
+      and v4 = sexp_of_statement v4
+      in Sexp.List [ Sexp.Atom "For"; v1; v2; v3; v4 ]
+  | MacroIteration ((v1, v2, v3)) ->
+      let v1 = Conv.sexp_of_string v1
+      and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2
+      and v3 = sexp_of_statement v3
+      in Sexp.List [ Sexp.Atom "MacroIteration"; v1; v2; v3 ]
+and sexp_of_jump =
+  function
+  | Goto v1 -> let v1 = sexp_of_name v1 in Sexp.List [ Sexp.Atom "Goto"; v1 ]
+  | Continue -> Sexp.Atom "Continue"
+  | Break -> Sexp.Atom "Break"
+  | Return -> Sexp.Atom "Return"
+  | ReturnExpr v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "ReturnExpr"; v1 ]
+  | GotoComputed v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "GotoComputed"; v1 ]
+and sexp_of_asmbody (v1, v2) =
+  let v1 = sexp_of_il v1
+  and v2 = Conv.sexp_of_list (sexp_of_wrap sexp_of_colon) v2
+  in Sexp.List [ v1; v2 ]
+and sexp_of_colon =
+  function
+  | Colon v1 ->
+      let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_colon_option) v1
+      in Sexp.List [ Sexp.Atom "Colon"; v1 ]
+and sexp_of_colon_option v = sexp_of_wrap sexp_of_colon_option_bis v
+and sexp_of_colon_option_bis =
+  function
+  | ColonMisc -> Sexp.Atom "ColonMisc"
+  | ColonExpr v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "ColonExpr"; v1 ]
+and sexp_of_declaration =
+  function
+  | DeclList v1 ->
+      let v1 =
+        sexp_of_wrap (Conv.sexp_of_list (sexp_of_wrap2 sexp_of_onedecl)) v1
+      in Sexp.List [ Sexp.Atom "DeclList"; v1 ]
+  | MacroDecl v1 ->
+      let v1 =
+        sexp_of_wrap
+          (fun (v1, v2) ->
+             let v1 = Conv.sexp_of_string v1
+             and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2
+             in Sexp.List [ v1; v2 ])
+          v1
+      in Sexp.List [ Sexp.Atom "MacroDecl"; v1 ]
+and
+  sexp_of_onedecl {
+                    v_namei = v_v_namei;
+                    v_type = v_v_type;
+                    v_type_bis = v_v_type_bis;
+                    v_storage = v_v_storage;
+                    v_local = v_v_local;
+                    v_attr = v_v_attr
+                  } =
+  let bnds = [] in
+  let arg = Conv.sexp_of_list sexp_of_attribute v_v_attr in
+  let bnd = Sexp.List [ Sexp.Atom "v_attr"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_local_decl v_v_local in
+  let bnd = Sexp.List [ Sexp.Atom "v_local"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_storage v_v_storage in
+  let bnd = Sexp.List [ Sexp.Atom "v_storage"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg =
+    Conv.sexp_of_ref (Conv.sexp_of_option sexp_of_fullType) v_v_type_bis in
+  let bnd = Sexp.List [ Sexp.Atom "v_type_bis"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_fullType v_v_type in
+  let bnd = Sexp.List [ Sexp.Atom "v_type"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg =
+    Conv.sexp_of_option
+      (fun (v1, v2) ->
+         let v1 = sexp_of_name v1
+         and v2 =
+           Conv.sexp_of_option
+             (fun (v1, v2) ->
+                let v1 = sexp_of_info v1
+                and v2 = sexp_of_initialiser v2
+                in Sexp.List [ v1; v2 ])
+             v2
+         in Sexp.List [ v1; v2 ])
+      v_v_namei in
+  let bnd = Sexp.List [ Sexp.Atom "v_namei"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_storage (v1, v2) =
+  let v1 = sexp_of_storagebis v1
+  and v2 = Conv.sexp_of_bool v2
+  in Sexp.List [ v1; v2 ]
+and sexp_of_storagebis =
+  function
+  | NoSto -> Sexp.Atom "NoSto"
+  | StoTypedef -> Sexp.Atom "StoTypedef"
+  | Sto v1 ->
+      let v1 = sexp_of_storageClass v1 in Sexp.List [ Sexp.Atom "Sto"; v1 ]
+and sexp_of_storageClass =
+  function
+  | Auto -> Sexp.Atom "Auto"
+  | Static -> Sexp.Atom "Static"
+  | Register -> Sexp.Atom "Register"
+  | Extern -> Sexp.Atom "Extern"
+and sexp_of_local_decl =
+  function
+  | LocalDecl -> Sexp.Atom "LocalDecl"
+  | NotLocalDecl -> Sexp.Atom "NotLocalDecl"
+and sexp_of_initialiser v = sexp_of_wrap sexp_of_initialiserbis v
+and sexp_of_initialiserbis =
+  function
+  | InitExpr v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "InitExpr"; v1 ]
+  | InitList v1 ->
+      let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_initialiser) v1
+      in Sexp.List [ Sexp.Atom "InitList"; v1 ]
+  | InitDesignators ((v1, v2)) ->
+      let v1 = Conv.sexp_of_list sexp_of_designator v1
+      and v2 = sexp_of_initialiser v2
+      in Sexp.List [ Sexp.Atom "InitDesignators"; v1; v2 ]
+  | InitFieldOld ((v1, v2)) ->
+      let v1 = Conv.sexp_of_string v1
+      and v2 = sexp_of_initialiser v2
+      in Sexp.List [ Sexp.Atom "InitFieldOld"; v1; v2 ]
+  | InitIndexOld ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_initialiser v2
+      in Sexp.List [ Sexp.Atom "InitIndexOld"; v1; v2 ]
+and sexp_of_designator v = sexp_of_wrap sexp_of_designatorbis v
+and sexp_of_designatorbis =
+  function
+  | DesignatorField v1 ->
+      let v1 = Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "DesignatorField"; v1 ]
+  | DesignatorIndex v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "DesignatorIndex"; v1 ]
+  | DesignatorRange ((v1, v2)) ->
+      let v1 = sexp_of_expression v1
+      and v2 = sexp_of_expression v2
+      in Sexp.List [ Sexp.Atom "DesignatorRange"; v1; v2 ]
+and sexp_of_definition v = sexp_of_wrap sexp_of_definitionbis v
+and
+  sexp_of_definitionbis {
+                          f_name = v_f_name;
+                          f_type = v_f_type;
+                          f_storage = v_f_storage;
+                          f_body = v_f_body;
+                          f_attr = v_f_attr;
+                          f_old_c_style = v_f_old_c_style
+                        } =
+  let bnds = [] in
+  let arg =
+    Conv.sexp_of_option (Conv.sexp_of_list sexp_of_declaration)
+      v_f_old_c_style in
+  let bnd = Sexp.List [ Sexp.Atom "f_old_c_style"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Conv.sexp_of_list sexp_of_attribute v_f_attr in
+  let bnd = Sexp.List [ Sexp.Atom "f_attr"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_compound v_f_body in
+  let bnd = Sexp.List [ Sexp.Atom "f_body"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_storage v_f_storage in
+  let bnd = Sexp.List [ Sexp.Atom "f_storage"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_functionType v_f_type in
+  let bnd = Sexp.List [ Sexp.Atom "f_type"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_name v_f_name in
+  let bnd = Sexp.List [ Sexp.Atom "f_name"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_cpp_directive =
+  function
+  | Define v1 ->
+      let v1 = sexp_of_define v1 in Sexp.List [ Sexp.Atom "Define"; v1 ]
+  | Include v1 ->
+      let v1 = sexp_of_includ v1 in Sexp.List [ Sexp.Atom "Include"; v1 ]
+  | Undef v1 ->
+      let v1 = sexp_of_wrap Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "Undef"; v1 ]
+  | PragmaAndCo v1 ->
+      let v1 = sexp_of_il v1 in Sexp.List [ Sexp.Atom "PragmaAndCo"; v1 ]
+and sexp_of_define (v1, v2) =
+  let v1 = sexp_of_wrap Conv.sexp_of_string v1
+  and v2 =
+    match v2 with
+    | (v1, v2) ->
+        let v1 = sexp_of_define_kind v1
+        and v2 = sexp_of_define_val v2
+        in Sexp.List [ v1; v2 ]
+  in Sexp.List [ v1; v2 ]
+and sexp_of_define_kind =
+  function
+  | DefineVar -> Sexp.Atom "DefineVar"
+  | DefineFunc v1 ->
+      let v1 =
+        sexp_of_wrap
+          (Conv.sexp_of_list
+             (sexp_of_wrap2 (sexp_of_wrap Conv.sexp_of_string)))
+          v1
+      in Sexp.List [ Sexp.Atom "DefineFunc"; v1 ]
+and sexp_of_define_val =
+  function
+  | DefineExpr v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "DefineExpr"; v1 ]
+  | DefineStmt v1 ->
+      let v1 = sexp_of_statement v1
+      in Sexp.List [ Sexp.Atom "DefineStmt"; v1 ]
+  | DefineType v1 ->
+      let v1 = sexp_of_fullType v1
+      in Sexp.List [ Sexp.Atom "DefineType"; v1 ]
+  | DefineDoWhileZero v1 ->
+      let v1 =
+        sexp_of_wrap
+          (fun (v1, v2) ->
+             let v1 = sexp_of_statement v1
+             and v2 = sexp_of_expression v2
+             in Sexp.List [ v1; v2 ])
+          v1
+      in Sexp.List [ Sexp.Atom "DefineDoWhileZero"; v1 ]
+  | DefineFunction v1 ->
+      let v1 = sexp_of_definition v1
+      in Sexp.List [ Sexp.Atom "DefineFunction"; v1 ]
+  | DefineInit v1 ->
+      let v1 = sexp_of_initialiser v1
+      in Sexp.List [ Sexp.Atom "DefineInit"; v1 ]
+  | DefineText v1 ->
+      let v1 = sexp_of_wrap Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "DefineText"; v1 ]
+  | DefineEmpty -> Sexp.Atom "DefineEmpty"
+  | DefineTodo -> Sexp.Atom "DefineTodo"
+and
+  sexp_of_includ {
+                   i_include = v_i_include;
+                   i_rel_pos = v_i_rel_pos;
+                   i_is_in_ifdef = v_i_is_in_ifdef;
+                   i_content = v_i_content
+                 } =
+  let bnds = [] in
+  let arg =
+    Conv.sexp_of_option
+      (fun (v1, v2) ->
+         let v1 = Common.sexp_of_filename v1
+         and v2 = sexp_of_program v2
+         in Sexp.List [ v1; v2 ])
+      v_i_content in
+  let bnd = Sexp.List [ Sexp.Atom "i_content"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = Conv.sexp_of_bool v_i_is_in_ifdef in
+  let bnd = Sexp.List [ Sexp.Atom "i_is_in_ifdef"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg =
+    Conv.sexp_of_ref (Conv.sexp_of_option sexp_of_include_rel_pos)
+      v_i_rel_pos in
+  let bnd = Sexp.List [ Sexp.Atom "i_rel_pos"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg = sexp_of_wrap sexp_of_inc_file v_i_include in
+  let bnd = Sexp.List [ Sexp.Atom "i_include"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_inc_file =
+  function
+  | Local v1 ->
+      let v1 = Conv.sexp_of_list sexp_of_inc_elem v1
+      in Sexp.List [ Sexp.Atom "Local"; v1 ]
+  | NonLocal v1 ->
+      let v1 = Conv.sexp_of_list sexp_of_inc_elem v1
+      in Sexp.List [ Sexp.Atom "NonLocal"; v1 ]
+  | Weird v1 ->
+      let v1 = Conv.sexp_of_string v1 in Sexp.List [ Sexp.Atom "Weird"; v1 ]
+and sexp_of_inc_elem v = Conv.sexp_of_string v
+and sexp_of_include_rel_pos { first_of = v_first_of; last_of = v_last_of } =
+  let bnds = [] in
+  let arg =
+    Conv.sexp_of_list (Conv.sexp_of_list Conv.sexp_of_string) v_last_of in
+  let bnd = Sexp.List [ Sexp.Atom "last_of"; arg ] in
+  let bnds = bnd :: bnds in
+  let arg =
+    Conv.sexp_of_list (Conv.sexp_of_list Conv.sexp_of_string) v_first_of in
+  let bnd = Sexp.List [ Sexp.Atom "first_of"; arg ] in
+  let bnds = bnd :: bnds in Sexp.List bnds
+and sexp_of_ifdef_directive =
+  function
+  | IfdefDirective v1 ->
+      let v1 =
+        sexp_of_wrap
+          (fun (v1, v2) ->
+             let v1 = sexp_of_ifdefkind v1
+             and v2 = sexp_of_matching_tag v2
+             in Sexp.List [ v1; v2 ])
+          v1
+      in Sexp.List [ Sexp.Atom "IfdefDirective"; v1 ]
+and sexp_of_ifdefkind =
+  function
+  | Ifdef -> Sexp.Atom "Ifdef"
+  | IfdefElseif -> Sexp.Atom "IfdefElseif"
+  | IfdefElse -> Sexp.Atom "IfdefElse"
+  | IfdefEndif -> Sexp.Atom "IfdefEndif"
+and sexp_of_matching_tag =
+  function
+  | IfdefTag v1 ->
+      let v1 =
+        (match v1 with
+         | (v1, v2) ->
+             let v1 = Conv.sexp_of_int v1
+             and v2 = Conv.sexp_of_int v2
+             in Sexp.List [ v1; v2 ])
+      in Sexp.List [ Sexp.Atom "IfdefTag"; v1 ]
+and sexp_of_toplevel =
+  function
+  | Declaration v1 ->
+      let v1 = sexp_of_declaration v1
+      in Sexp.List [ Sexp.Atom "Declaration"; v1 ]
+  | Definition v1 ->
+      let v1 = sexp_of_definition v1
+      in Sexp.List [ Sexp.Atom "Definition"; v1 ]
+  | CppTop v1 ->
+      let v1 = sexp_of_cpp_directive v1
+      in Sexp.List [ Sexp.Atom "CppTop"; v1 ]
+  | IfdefTop v1 ->
+      let v1 = sexp_of_ifdef_directive v1
+      in Sexp.List [ Sexp.Atom "IfdefTop"; v1 ]
+  | MacroTop ((v1, v2, v3)) ->
+      let v1 = Conv.sexp_of_string v1
+      and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2
+      and v3 = sexp_of_il v3
+      in Sexp.List [ Sexp.Atom "MacroTop"; v1; v2; v3 ]
+  | EmptyDef v1 ->
+      let v1 = sexp_of_il v1 in Sexp.List [ Sexp.Atom "EmptyDef"; v1 ]
+  | NotParsedCorrectly v1 ->
+      let v1 = sexp_of_il v1
+      in Sexp.List [ Sexp.Atom "NotParsedCorrectly"; v1 ]
+  | FinalDef v1 ->
+      let v1 = sexp_of_info v1 in Sexp.List [ Sexp.Atom "FinalDef"; v1 ]
+and sexp_of_program v = Conv.sexp_of_list sexp_of_toplevel v
+
+(*
+and sexp_of_metavars_binding v =
+  failwith "Todo"
+(*
+  Common.sexp_of_assoc Ast_cocci.sexp_of_meta_name sexp_of_metavar_binding_kind v
+*)
+and sexp_of_metavar_binding_kind =
+  function
+  | MetaIdVal v1 ->
+      let v1 = Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "MetaIdVal"; v1 ]
+  | MetaFuncVal v1 ->
+      let v1 = Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "MetaFuncVal"; v1 ]
+  | MetaLocalFuncVal v1 ->
+      let v1 = Conv.sexp_of_string v1
+      in Sexp.List [ Sexp.Atom "MetaLocalFuncVal"; v1 ]
+  | MetaExprVal v1 ->
+      let v1 = sexp_of_expression v1
+      in Sexp.List [ Sexp.Atom "MetaExprVal"; v1 ]
+  | MetaExprListVal v1 ->
+      let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v1
+      in Sexp.List [ Sexp.Atom "MetaExprListVal"; v1 ]
+  | MetaParamVal v1 ->
+      let v1 = sexp_of_parameterType v1
+      in Sexp.List [ Sexp.Atom "MetaParamVal"; v1 ]
+  | MetaParamListVal v1 ->
+      let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_parameterType) v1
+      in Sexp.List [ Sexp.Atom "MetaParamListVal"; v1 ]
+  | MetaTypeVal v1 ->
+      let v1 = sexp_of_fullType v1
+      in Sexp.List [ Sexp.Atom "MetaTypeVal"; v1 ]
+  | MetaInitVal v1 ->
+      let v1 = sexp_of_initialiser v1
+      in Sexp.List [ Sexp.Atom "MetaInitVal"; v1 ]
+  | MetaStmtVal v1 ->
+      let v1 = sexp_of_statement v1
+      in Sexp.List [ Sexp.Atom "MetaStmtVal"; v1 ]
+  | MetaPosVal v1 ->
+      let v1 =
+        (match v1 with
+         | (v1, v2) ->
+             let v1 = Ast_cocci.sexp_of_fixpos v1
+             and v2 = Ast_cocci.sexp_of_fixpos v2
+             in Sexp.List [ v1; v2 ])
+      in Sexp.List [ Sexp.Atom "MetaPosVal"; v1 ]
+  | MetaPosValList v1 ->
+      let v1 =
+        Conv.sexp_of_list
+          (fun (v1, v2, v3, v4) ->
+             let v1 = Common.sexp_of_filename v1
+             and v2 = Conv.sexp_of_string v2
+             and v3 = sexp_of_posl v3
+             and v4 = sexp_of_posl v4
+             in Sexp.List [ v1; v2; v3; v4 ])
+          v1
+      in Sexp.List [ Sexp.Atom "MetaPosValList"; v1 ]
+  | MetaListlenVal v1 ->
+      let v1 = Conv.sexp_of_int v1
+      in Sexp.List [ Sexp.Atom "MetaListlenVal"; v1 ]
+  
+*)
+
+(* pad: *)
+let string_of_toplevel top = 
+  let sexp = sexp_of_toplevel top in
+  let s = Sexp.to_string_hum sexp in
+  s
+
+let string_of_expression x = 
+  let sexp = sexp_of_expression x in
+  let s = Sexp.to_string_hum sexp in
+  s
+
+let string_of_program xs = 
+  let sexp = sexp_of_program xs in
+  let s = Sexp.to_string_hum sexp in
+  s
diff --git a/parsing_c/sexp_ast_c.mli b/parsing_c/sexp_ast_c.mli
new file mode 100644 (file)
index 0000000..c280015
--- /dev/null
@@ -0,0 +1,8 @@
+val string_of_toplevel: Ast_c.toplevel -> string
+val string_of_expression: Ast_c.expression -> string
+
+val string_of_program: Ast_c.program -> string
+
+val show_info: bool ref
+val show_qualifier: bool ref
+val show_expr_info: bool ref
index e11d5df..21abaab 100644 (file)
@@ -58,7 +58,7 @@ let test_parse_gen xs ext =
     pr2 "";
     pr2 ("PARSING: " ^ file);
 
-    let (xs, stat) = Parse_c.parse_print_error_heuristic file in
+    let (xs, stat) = Parse_c.parse_c_and_cpp file in
     xs +> List.iter (fun (ast, (s, toks)) -> 
       Parse_c.print_commentized toks
     );
@@ -100,64 +100,11 @@ let test_parse_h xs =
 let test_parse_ch xs = 
   test_parse_gen xs "[ch]"
 
-
-(* ---------------------------------------------------------------------- *)
-
-let test_parse xs = 
-
-  Flag_parsing_c.filter_msg_define_error := true;
-  Flag_parsing_c.filter_define_error := true;
-  Flag_parsing_c.verbose_lexing := false;
-  Flag_parsing_c.verbose_parsing := false;
-
-  let dirname_opt = 
-    match xs with
-    | [x] when is_directory x -> Some x
-    | _ -> None
-  in
-  dirname_opt +> Common.do_option (fun dir -> 
-
-    let ext = "h" in 
-    let fullxs = Common.files_of_dir_or_files_no_vcs ext [dir] in
-    fullxs +> List.iter (fun file -> 
-      let xs = Parse_c.parse_cpp_define_file file in
-      xs +> List.iter (fun (x, def) -> 
-        let (s, params, body) = def in 
-        Hashtbl.replace !Parse_c._defs s (s, params, body);
-      );
-    );
-  );
-
-  let ext = "[ch]" in
-
-  let fullxs = Common.files_of_dir_or_files_no_vcs ext xs in
-
-  let stat_list = ref [] in
-  Common.check_stack_nbfiles (List.length fullxs);
-
-  fullxs +> List.iter (fun file -> 
-    if not (file =~ (".*\\."^ext))
-    then pr2 ("warning: seems not a ."^ext^" file");
-
-    pr2 "";
-    pr2 ("PARSING: " ^ file);
-
-    let (xs, stat) = Parse_c.parse_print_error_heuristic file in
-    xs +> List.iter (fun (ast, (s, toks)) -> 
-      Parse_c.print_commentized toks
-    );
-
-    Common.push2 stat stat_list;
-  );
-  
-  if not (null !stat_list) 
-  then begin 
-    Parsing_stat.print_recurring_problematic_tokens !stat_list;
-    Parsing_stat.print_parsing_stat_list !stat_list;
-  end;
-  ()
-
-
+(* could use a simpler parser than heavy parse_c_and_cpp here as there 
+ * is no more cpp stuff in the .i files
+ *)
+let test_parse_i xs = 
+  test_parse_gen xs "i"
 
 
 
@@ -180,7 +127,7 @@ let test_cfg file =
   if not (file =~ ".*\\.c") 
   then pr2 "warning: seems not a .c file";
 
-  let (program, _stat) = Parse_c.parse_print_error_heuristic file in
+  let (program, _stat) = Parse_c.parse_c_and_cpp file in
 
   program +> List.iter (fun (e,_) -> 
     let toprocess = 
@@ -218,7 +165,7 @@ let test_cfg file =
 
 
 let test_cfg_ifdef file = 
-  let (ast2, _stat) = Parse_c.parse_print_error_heuristic file in
+  let (ast2, _stat) = Parse_c.parse_c_and_cpp file in
   let ast = Parse_c.program_of_program2 ast2 in
 
   let ast = Cpp_ast_c.cpp_ifdef_statementize ast in
@@ -240,7 +187,7 @@ let test_parse_unparse infile =
   if not (infile =~ ".*\\.c") 
   then pr2 "warning: seems not a .c file";
 
-  let (program2, _stat) = Parse_c.parse_print_error_heuristic infile in
+  let (program2, _stat) = Parse_c.parse_c_and_cpp infile in
   let program2_with_ppmethod = 
     program2 +> List.map (fun x -> x, Unparse_c.PPnormal)
   in
@@ -252,6 +199,22 @@ let test_parse_unparse infile =
   ()
 
 
+let parse_and_print_sexp file = 
+  let (ast2,_stat) = Parse_c.parse_c_and_cpp file in
+  let ast = Parse_c.program_of_program2 ast2 in
+  let _ast = 
+    Type_annoter_c.annotate_program !Type_annoter_c.initial_env ast
+  in
+
+  (*
+  let sexp = Sexp_ast_c.sexp_of_program ast in
+  let s = Sexp.to_string_hum sexp in
+  *)
+  Sexp_ast_c.show_info := false;
+  let s = Sexp_ast_c.string_of_program ast in
+  pr2 s;
+  ()
+
 
 
 let test_type_c infile = 
@@ -260,7 +223,7 @@ let test_type_c infile =
 
   Flag_parsing_c.pretty_print_type_info := true;
 
-  let (program2, _stat) =  Parse_c.parse_print_error_heuristic infile in
+  let (program2, _stat) =  Parse_c.parse_c_and_cpp infile in
   let _program2 =
     program2 
     +> Common.unzip 
@@ -282,7 +245,7 @@ let test_type_c infile =
 (* ---------------------------------------------------------------------- *)
 (* ex: demos/platform_ifdef.c *)
 let test_comment_annotater infile = 
-  let (program2, _stat) =  Parse_c.parse_print_error_heuristic infile in
+  let (program2, _stat) =  Parse_c.parse_c_and_cpp infile in
   let asts = program2 +> List.map (fun (ast,_) -> ast) in
   let toks = program2 +> List.map (fun (ast, (s, toks)) -> toks) +> 
     List.flatten in
@@ -372,64 +335,117 @@ let test_cpp file =
   let (ast2, _stat) = Parse_c.parse_c_and_cpp file in
   let dirname = Filename.dirname file in
   let ast = Parse_c.program_of_program2 ast2 in
-  let _ast' = Cpp_ast_c.cpp_expand_include (cpp_options()) dirname ast in
+  let ast = Cpp_ast_c.cpp_expand_include (cpp_options()) dirname ast in
+  let _ast = Cpp_ast_c.cpp_ifdef_statementize ast in
+  
   
   ()
 
 
 
-let extract_macros ~selection x = 
-  (* CONFIG [ch] ? also do for .c ? maybe less needed now that I 
-   * add local_macros.
-   *)
-
+(* CONFIG [ch] ? also do for .c ? maybe less needed now that I 
+ * add local_macros.
+ *)
+let extract_macros ~selection dir = 
   let ext = "h" in 
-  let fullxs = Common.files_of_dir_or_files_no_vcs ext [x] in
-  fullxs +> List.iter (fun file -> 
-   
+  let fullxs = Common.files_of_dir_or_files_no_vcs ext [dir] in
+  let macros_and_filename = 
+    fullxs +> List.map (fun file -> 
+      pr2 (spf "processing: %s" file);
+      let xs = Parse_c.extract_macros file in
+      file, xs
+    )
+  in
+
+  let macros = 
+    if selection
+    then Cpp_analysis_c.extract_dangerous_macros macros_and_filename 
+    else macros_and_filename
+  in
+  macros +> List.iter (fun (file, defs) -> 
     pr ("/* PARSING: " ^ file ^ " */");
-    let xs = Parse_c.parse_cpp_define_file file in
-    xs +> List.iter (fun (x, def) -> 
-      let (s, params, body) = def in 
-      assert(s = x);
-      (match params, body with
-      | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [Parser_c.TInt _]
-      | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [] -> 
-          ()
-      | _ -> 
-
-          let s1 = 
-            match params with
-            | Cpp_token_c.NoParam -> spf "#define %s " s
-            | Cpp_token_c.Params xs -> 
-                spf "#define %s(%s) "
-                  s (Common.join "," xs)
-          in
-          let s2, bodytoks = 
-            match body with
-            | Cpp_token_c.DefineHint _ -> 
-                failwith "weird, hint in regular header file"
-            | Cpp_token_c.DefineBody xs -> 
-                Common.join " " (xs +> List.map Token_helpers.str_of_tok),
-                xs
-          in
-
-          let print = 
-            match () with
-            | () when s ==~ Parsing_hacks.regexp_annot -> true
-            | () when List.exists (function
-              | Parser_c.Tattribute _ -> true
-              | _ -> false) bodytoks -> true
-            | () -> false
-          in
-          if print || not selection then pr (s1 ^ s2)
+    defs +> List.iter (fun (s, def) -> 
+      let str = Cpp_token_c.string_of_define_def def in
+      pr str;
+    )
+  );
+  ()
+
+
+let test_parse xs = 
+
+  Flag_parsing_c.filter_msg_define_error := true;
+  Flag_parsing_c.filter_define_error := true;
+  Flag_parsing_c.verbose_lexing := false;
+  Flag_parsing_c.verbose_parsing := false;
+
+  let dirname_opt = 
+    match xs with
+    | [x] when is_directory x -> Some x
+    | _ -> None
+  in
+  dirname_opt +> Common.do_option (fun dir -> 
+
+    let ext = "h" in 
+    let fullxs = Common.files_of_dir_or_files_no_vcs ext [dir] in
+
+    let macros_and_filename = 
+      fullxs +> List.map (fun file -> 
+        pr2 (spf "processing: %s" file);
+        let xs = Parse_c.extract_macros file in
+        file, xs
+      )
+    in
+    let macros = 
+      Cpp_analysis_c.extract_dangerous_macros macros_and_filename 
+    in
+    macros +> List.iter (fun (file, xs) -> 
+      xs +> List.iter (fun (x, def) -> 
+        let (s, params, body) = def in 
+        let str = Cpp_token_c.string_of_define_def def in
+        pr str;
+        (* builtins ? *)
+        Hashtbl.replace !Parse_c._defs_builtins s (s, params, body);
       );
     );
   );
+
+  let ext = "[ch]" in
+
+  let fullxs = Common.files_of_dir_or_files_no_vcs ext xs in
+
+  let stat_list = ref [] in
+  Common.check_stack_nbfiles (List.length fullxs);
+
+  fullxs +> List.iter (fun file -> 
+    if not (file =~ (".*\\."^ext))
+    then pr2 ("warning: seems not a ."^ext^" file");
+
+    pr2 "";
+    pr2 ("PARSING: " ^ file);
+
+    let (xs, stat) = Parse_c.parse_c_and_cpp file in
+    xs +> List.iter (fun (ast, (s, toks)) -> 
+      Parse_c.print_commentized toks
+    );
+
+    Common.push2 stat stat_list;
+  );
+  
+  if not (null !stat_list) 
+  then begin 
+    Parsing_stat.print_recurring_problematic_tokens !stat_list;
+    Parsing_stat.print_parsing_stat_list !stat_list;
+  end;
   ()
 
 
 
+
+
+
+
+
 (* ---------------------------------------------------------------------- *)
 let test_xxx a  = 
   ()
@@ -460,6 +476,8 @@ let actions () = [
   Common.mk_action_n_arg test_parse_h;
   "-parse_ch", "   <file or dir>", 
   Common.mk_action_n_arg test_parse_ch;
+  "-parse_i", "   <file or dir>", 
+  Common.mk_action_n_arg test_parse_i;
 
   "-parse", "   <file or dir>", 
   Common.mk_action_n_arg test_parse;
@@ -472,6 +490,8 @@ let actions () = [
   Common.mk_action_1_arg test_cfg_ifdef;
   "-parse_unparse", "   <file>", 
   Common.mk_action_1_arg test_parse_unparse;
+  "-parse_and_print_sexp", "   <file>", 
+    Common.mk_action_1_arg parse_and_print_sexp;
   "-type_c", "   <file>", 
   Common.mk_action_1_arg test_type_c;
   "-compare_c", "   <file1> <file2>", 
index 7c8e6e7..38a5333 100644 (file)
@@ -43,7 +43,7 @@ open Common
  *)
 
 (*****************************************************************************)
-(* Cpp constructs put it comments in lexer or parsing_hack *)
+(* Cpp constructs put in comments in lexer or parsing_hack *)
 (*****************************************************************************)
 
 (* history: was in ast_c.ml before:
index d7e60ca..52d7336 100644 (file)
@@ -350,6 +350,7 @@ let info_of_tok = function
   | Tsizeof              (i) -> i
   | Tasm                 (i) -> i
   | Tattribute           (i) -> i
+  | TattributeNoarg           (i) -> i
   | Tinline              (i) -> i
   | Ttypeof              (i) -> i
 
@@ -499,6 +500,7 @@ let visitor_info_of_tok f = function
   | Tsizeof              (i) -> Tsizeof              (f i) 
   | Tasm                 (i) -> Tasm                 (f i) 
   | Tattribute           (i) -> Tattribute           (f i) 
+  | TattributeNoarg           (i) -> TattributeNoarg           (f i) 
   | Tinline              (i) -> Tinline              (f i) 
   | Ttypeof              (i) -> Ttypeof              (f i) 
   | EOF                  (i) -> EOF                  (f i) 
index 3fff96d..d2a3ceb 100644 (file)
@@ -29,11 +29,13 @@ val is_cbrace : Parser_c.token -> bool
 
 val is_ident_like: Parser_c.token -> bool
 
+(* ---------------------------------------------------------------------- *)
 val info_of_tok : Parser_c.token -> Ast_c.info
 
 val visitor_info_of_tok : 
   (Ast_c.info -> Ast_c.info) -> Parser_c.token -> Parser_c.token
 
+(* ---------------------------------------------------------------------- *)
 val linecol_of_tok : Parser_c.token -> int * int
 val col_of_tok     : Parser_c.token -> int
 val line_of_tok    : Parser_c.token -> int
index 7b8ef84..2535b3a 100644 (file)
@@ -461,15 +461,6 @@ let type_of_s a =
  * I now add a fake parse_info for such default int so no more failwith
  * normally.
  *)
-let offset ft = 
-  let (qu, ty) = ft in
-  (* bugfix: because of string->name, the ii can be deeper *)
-  let ii = Ast_c.get_local_ii_of_tybis_inlining_ii_of_name ty in
-  match ii with
-  | ii::_ -> ii.Ast_c.pinfo
-  | [] -> failwith "type has no text; need to think again"
-  
-
 
 let rec is_simple_expr expr = 
   match Ast_c.unwrap_expr expr with
@@ -1047,7 +1038,8 @@ let rec visit_toplevel ~just_add_in_env ~depth elem =
       (match d with
       | (DeclList (xs, ii)) -> 
           xs +> List.iter (fun ({v_namei = var; v_type = t;
-                                 v_storage = sto; v_local = local}, iicomma) -> 
+                                 v_storage = sto; v_local = local} as x
+                                   , iicomma) ->
 
             (* to add possible definition in type found in Decl *)
             Visitor_c.vk_type bigf t;
@@ -1056,9 +1048,8 @@ let rec visit_toplevel ~just_add_in_env ~depth elem =
            let local =
              match local with
              | Ast_c.NotLocalDecl -> Ast_c.NotLocalVar
-             | Ast_c.LocalDecl -> Ast_c.LocalVar (offset t)
+             | Ast_c.LocalDecl -> Ast_c.LocalVar (Ast_c.info_of_type t)
             in
-            
             var +> Common.do_option (fun (name, iniopt) -> 
               let s = Ast_c.str_of_name name in
 
@@ -1068,6 +1059,8 @@ let rec visit_toplevel ~just_add_in_env ~depth elem =
               | _ -> 
                   add_binding (VarOrFunc (s, (Lib.al_type t, local))) true;
 
+                  x.v_type_bis := 
+                    Some (typedef_fix (Lib.al_type t) !_scoped_env);
 
                   if need_annotate_body then begin
                     (* int x = sizeof(x) is legal so need process ini *)
@@ -1140,6 +1133,7 @@ let rec visit_toplevel ~just_add_in_env ~depth elem =
           in
           let (i1, i2) = 
             match ii with 
+             (* what is iifunc1?  it should be a type.  jll *)
             | iifunc1::iifunc2::ibrace1::ibrace2::ifakestart::isto -> 
                 iifunc1, iifunc2
             | _ -> raise Impossible
@@ -1160,7 +1154,7 @@ let rec visit_toplevel ~just_add_in_env ~depth elem =
                     match nameopt with 
                     | Some name ->
                         let s = Ast_c.str_of_name name in
-                       let local = Ast_c.LocalVar (offset t) in
+                       let local = Ast_c.LocalVar (Ast_c.info_of_type t) in
                        add_binding (VarOrFunc (s,(Lib.al_type t,local))) true
                     | None -> 
                     pr2 "no type, certainly because Void type ?"
index 9380543..6870cfd 100644 (file)
@@ -210,7 +210,8 @@ let get_fakeInfo_and_tokens celem toks =
         Common.push2 (Fake1 info) toks_out
     | OriginTok _ | ExpandedTok _ -> 
         (* get the associated comments/space/cppcomment tokens *)
-        let (before, x, after) = !toks_in +> Common.split_when (fun tok -> 
+        let (before, x, after) =
+         !toks_in +> Common.split_when (fun tok -> 
          info =*= TH.info_of_tok tok)
         in
         assert(info =*= TH.info_of_tok x);
index a51534f..c33378d 100644 (file)
@@ -1,9 +1,8 @@
-open Common
-
 type ppmethod = PPnormal | PPviastr
 
 (* program -> output filename (often "/tmp/output.c") -> unit *) 
 val pp_program : 
-  (Parse_c.toplevel2 * ppmethod) list -> filename -> unit
+  (Parse_c.toplevel2 * ppmethod) list -> Common.filename -> unit
 
-val pp_program_default: Parse_c.program2 -> filename -> unit
+val pp_program_default: 
+  Parse_c.program2 -> Common.filename -> unit
index 9328523..2d7e950 100644 (file)
@@ -1,3 +1,16 @@
+(* Copyright (C) 2006, 2007 Julia Lawall
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License (GPL)
+ * version 2 as published by the Free Software Foundation.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * file license.txt for more details.
+ * 
+ * This file was part of Coccinelle.
+ *)
 open Common
 
 (*****************************************************************************)
@@ -44,7 +57,7 @@ let print_between = Common.print_between in
 let outdent _ = () (* should go to leftmost col, does nothing now *) in
 
 let pretty_print_c =
-  Pretty_print_c.pretty_print_c pr_celem pr_cspace
+  Pretty_print_c.mk_pretty_printers pr_celem pr_cspace
     force_newline indent outdent unindent in
 
 (* --------------------------------------------------------------------- *)
@@ -369,7 +382,7 @@ and  logicalOp = function
 
 and constant = function
     Ast.String(s) -> print_string ("\""^s^"\"")
-  | Ast.Char(s) -> print_string s
+  | Ast.Char(s) -> print_string ("\'"^s^"\'")
   | Ast.Int(s) -> print_string s
   | Ast.Float(s) -> print_string s
 
index f2544b7..2d64261 100644 (file)
@@ -6,7 +6,7 @@ val pp_list_list_any :
   Ast_c.metavars_binding *
   (* pr cocci *)
   (string -> int (*line*) -> int (*lcol*) -> int (*rcol*) -> unit) *
-    Pretty_print_c.pr_elem_func (* pr c *) *
+    (Ast_c.info -> unit) (* pr c *) *
     (unit -> unit) (* pr C space *) *
     (unit -> unit) (* pr space *) *
     (string -> unit) (* pr arity *) *
index 54cbec1..6bbfb53 100644 (file)
@@ -1,3 +1,17 @@
+(* Copyright (C) 2006, 2007 Julia Lawall
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License (GPL)
+ * version 2 as published by the Free Software Foundation.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * file license.txt for more details.
+ * 
+ * This file was part of Coccinelle.
+ *)
+
 module Ast = Ast_cocci
 module V = Visitor_ast
 
@@ -295,10 +309,12 @@ let pp_meta_decl pr env decl =
   match decl with
     Ast.MetaIdDecl(ar, name) ->
       no_arity ar; pr "identifier "; pp_name name; pr ";\n"
-  | Ast.MetaFreshIdDecl(name, None) ->
+  | Ast.MetaFreshIdDecl(name, Ast.NoVal) ->
       pr "fresh identifier "; pp_name name; pr ";\n"
-  | Ast.MetaFreshIdDecl(name, Some x) ->
+  | Ast.MetaFreshIdDecl(name, Ast.StringSeed x) ->
       pr "fresh identifier "; pp_name name; pr " = \""; pr x; pr "\";\n"
+  | Ast.MetaFreshIdDecl(name, Ast.ListSeed x) ->
+      failwith "unparse_hrule: not supported"
   | Ast.MetaTypeDecl(ar, name) ->
       no_arity ar; pr "type "; pp_name name; pr ";\n"
   | Ast.MetaInitDecl(ar, name) ->
index 6bebde2..644ac8d 100644 (file)
@@ -1,7 +1,5 @@
-open Common
-
 (* program -> output filename (often "/tmp/output.c") -> unit *) 
 val pp_rule : 
     Ast_cocci.metavar list (* local metavars only *) ->
-      Ast_cocci.rule -> Ast_c.metavars_binding -> filename -> unit
+      Ast_cocci.rule -> Ast_c.metavars_binding -> Common.filename -> unit
 
index 08ebbe8..c7a8332 100644 (file)
@@ -505,10 +505,12 @@ and vk_onedecl = fun bigf onedecl ->
   match onedecl with
   | ({v_namei = var; 
       v_type = t; 
+      v_type_bis = tbis;
       v_storage = _sto; 
       v_attr = attrs})  -> 
 
     vk_type bigf t;
+    (* dont go in tbis *)
     attrs +> List.iter (vk_attribute bigf);
     var +> Common.do_option (fun (name, iniopt) -> 
       vk_name bigf name;
@@ -1285,6 +1287,7 @@ and vk_decl_s = fun bigf d ->
 
   and aux ({v_namei = var; 
             v_type = t; 
+            v_type_bis = tbis; 
             v_storage = sto; 
             v_local= local; 
             v_attr = attrs}, iicomma) = 
@@ -1296,6 +1299,8 @@ and vk_decl_s = fun bigf d ->
           vk_ini_s bigf init
         )));
      v_type = vk_type_s bigf t;
+    (* !!! dont go in semantic related stuff !!! *)
+     v_type_bis = tbis;
      v_storage = sto;
      v_local = local;
      v_attr = attrs +> List.map (vk_attribute_s bigf);
index d2f80c2..4c7f9f0 100644 (file)
@@ -8,7 +8,7 @@ check_meta.cmi: ast_cocci.cmi ast0_cocci.cmi
 comm_assoc.cmi: ast0_cocci.cmi 
 compute_lines.cmi: ast0_cocci.cmi 
 context_neg.cmi: ../commons/common.cmi ast0_cocci.cmi 
-data.cmi: type_cocci.cmi ast_cocci.cmi ast0_cocci.cmi 
+data.cmi: type_cocci.cmi ../commons/common.cmi ast_cocci.cmi ast0_cocci.cmi 
 disjdistr.cmi: ast_cocci.cmi 
 free_vars.cmi: ast_cocci.cmi 
 function_prototypes.cmi: ast_cocci.cmi ast0_cocci.cmi 
@@ -42,16 +42,16 @@ adjust_pragmas.cmx: visitor_ast0_types.cmx visitor_ast0.cmx ast0_cocci.cmx \
     adjust_pragmas.cmi 
 arity.cmo: ast_cocci.cmi ast0_cocci.cmi arity.cmi 
 arity.cmx: ast_cocci.cmx ast0_cocci.cmx arity.cmi 
-ast0_cocci.cmo: type_cocci.cmi ../globals/flag.cmo ast_cocci.cmi \
-    ast0_cocci.cmi 
-ast0_cocci.cmx: type_cocci.cmx ../globals/flag.cmx ast_cocci.cmx \
-    ast0_cocci.cmi 
+ast0_cocci.cmo: type_cocci.cmi ../globals/flag.cmo ../commons/common.cmi \
+    ast_cocci.cmi ast0_cocci.cmi 
+ast0_cocci.cmx: type_cocci.cmx ../globals/flag.cmx ../commons/common.cmx \
+    ast_cocci.cmx ast0_cocci.cmi 
 ast0toast.cmo: visitor_ast0_types.cmo visitor_ast0.cmi visitor_ast.cmi \
-    type_cocci.cmi ../globals/flag.cmo ast_cocci.cmi ast0_cocci.cmi \
-    ast0toast.cmi 
+    type_cocci.cmi ../globals/flag.cmo ../commons/ocamlextra/dumper.cmi \
+    ast_cocci.cmi ast0_cocci.cmi ast0toast.cmi 
 ast0toast.cmx: visitor_ast0_types.cmx visitor_ast0.cmx visitor_ast.cmx \
-    type_cocci.cmx ../globals/flag.cmx ast_cocci.cmx ast0_cocci.cmx \
-    ast0toast.cmi 
+    type_cocci.cmx ../globals/flag.cmx ../commons/ocamlextra/dumper.cmx \
+    ast_cocci.cmx ast0_cocci.cmx ast0toast.cmi 
 ast_cocci.cmo: type_cocci.cmi ../commons/common.cmi ast_cocci.cmi 
 ast_cocci.cmx: type_cocci.cmx ../commons/common.cmx ast_cocci.cmi 
 check_meta.cmo: visitor_ast0_types.cmo visitor_ast0.cmi type_cocci.cmi \
@@ -70,8 +70,10 @@ context_neg.cmo: visitor_ast0_types.cmo visitor_ast0.cmi unparse_ast0.cmi \
 context_neg.cmx: visitor_ast0_types.cmx visitor_ast0.cmx unparse_ast0.cmx \
     index.cmx ../globals/flag.cmx compute_lines.cmx ../commons/common.cmx \
     ast_cocci.cmx ast0_cocci.cmx context_neg.cmi 
-data.cmo: type_cocci.cmi ast_cocci.cmi ast0_cocci.cmi data.cmi 
-data.cmx: type_cocci.cmx ast_cocci.cmx ast0_cocci.cmx data.cmi 
+data.cmo: type_cocci.cmi ../commons/common.cmi ast_cocci.cmi ast0_cocci.cmi \
+    data.cmi 
+data.cmx: type_cocci.cmx ../commons/common.cmx ast_cocci.cmx ast0_cocci.cmx \
+    data.cmi 
 disjdistr.cmo: visitor_ast.cmi ../globals/flag.cmo ../commons/common.cmi \
     ast_cocci.cmi disjdistr.cmi 
 disjdistr.cmx: visitor_ast.cmx ../globals/flag.cmx ../commons/common.cmx \
index 51a86b4..9522b1e 100644 (file)
@@ -29,8 +29,8 @@ SOURCES = flag_parsing_cocci.ml type_cocci.ml ast_cocci.ml ast0_cocci.ml \
 pretty_print_cocci.ml unparse_ast0.ml visitor_ast0_types.ml \
 visitor_ast.ml visitor_ast0.ml compute_lines.ml comm_assoc.ml \
 iso_pattern.ml iso_compile.ml single_statement.ml simple_assignments.ml \
-ast0toast.ml check_meta.ml top_level.ml type_infer.ml test_exps.ml \
-unitary_ast0.ml arity.ml index.ml context_neg.ml \
+ast0toast.ml check_meta.ml top_level.ml type_infer.ml \
+test_exps.ml unitary_ast0.ml arity.ml index.ml context_neg.ml \
 adjust_pragmas.ml insert_plus.ml function_prototypes.ml \
 unify_ast.ml semantic_cocci.ml data.ml free_vars.ml parse_aux.ml disjdistr.ml \
 $(LEXER_SOURCES:.mll=.ml) $(PARSER_SOURCES:.mly=.ml) \
index 4256525..993e234 100644 (file)
@@ -558,9 +558,9 @@ let rec ast0_type_to_type ty =
        Id(tag) ->
          Type_cocci.StructUnionName(structUnion su,false,unwrap_mcode tag)
       | MetaId(tag,_,_) ->
-         (Printf.printf
+         (Common.pr2
             "warning: struct/union with a metavariable name detected.\n";
-          Printf.printf
+          Common.pr2
             "For type checking assuming the name of the metavariable is the name of the type\n";
           let (rule,tag) = unwrap_mcode tag in
           Type_cocci.StructUnionName(structUnion su,true,rule^tag))
@@ -570,7 +570,10 @@ let rec ast0_type_to_type ty =
   | TypeName(name) -> Type_cocci.TypeName(unwrap_mcode name)
   | MetaType(name,_) ->
       Type_cocci.MetaType(unwrap_mcode name,Type_cocci.Unitary,false)
-  | DisjType(_,types,_,_) -> failwith "unexpected DisjType"
+  | DisjType(_,types,_,_) ->
+      Common.pr2_once
+       "disjtype not supported in smpl type inference, assuming unknown";
+      Type_cocci.Unknown
   | OptType(ty) | UniqueType(ty) ->
       ast0_type_to_type ty
 
index 0809e95..dca8b8e 100644 (file)
@@ -120,8 +120,9 @@ let inline_mcodes =
                  |     _ -> failwith "unexpected annotation")
                mcl
          | _ ->
+             Printf.printf "before %s\n" (Dumper.dump bef);
              failwith
-               "context tree should not have bad code on both sides" in
+               "context tree should not have bad code before" in
        let attach_aft aft afterinfo = function
            (true,mcl) ->
              List.iter
@@ -149,7 +150,7 @@ let inline_mcodes =
                mcl
          | _ ->
              failwith
-               "context tree should not have bad code on both sides" in
+               "context tree should not have bad code after" in
        (match !befaft with
          (Ast.BEFORE(bef),beforeinfo,_) ->
            attach_bef bef beforeinfo
@@ -364,7 +365,8 @@ and expression e =
     | Ast0.MetaExprList(name,None,_) ->
        Ast.MetaExprList(mcode name,None,unitary,false)
     | Ast0.EComma(cm)         -> Ast.EComma(mcode cm)
-    | Ast0.DisjExpr(_,exps,_,_)     -> Ast.DisjExpr(List.map expression exps)
+    | Ast0.DisjExpr(_,exps,_,_)     ->
+       Ast.DisjExpr(List.map expression exps)
     | Ast0.NestExpr(_,exp_dots,_,whencode,multi) ->
        let whencode = get_option expression whencode in
        Ast.NestExpr(dots expression exp_dots,whencode,multi)
index 0d9bd39..efa6e0a 100644 (file)
@@ -35,7 +35,7 @@ type 'a wrap =
       node_line : line;
       free_vars : meta_name list; (*free vars*)
       minus_free_vars : meta_name list; (*minus free vars*)
-      fresh_vars : (meta_name * string (*seed*) option) list; (*fresh vars*)
+      fresh_vars : (meta_name * seed) list; (*fresh vars*)
       inherited : meta_name list; (*inherited vars*)
       saved_witness : meta_name list; (*witness vars*)
       bef_aft : dots_bef_aft;
@@ -75,7 +75,7 @@ and keep_binding = Type_cocci.keep_binding
 and multi = bool (*true if a nest is one or more, false if it is zero or more*)
 
 and end_info =
-    meta_name list (*free vars*) * (meta_name * string option) list (*fresh*) *
+    meta_name list (*free vars*) * (meta_name * seed) list (*fresh*) *
       meta_name list (*inherited vars*) * mcodekind
 
 (* --------------------------------------------------------------------- *)
@@ -85,7 +85,7 @@ and arity = UNIQUE | OPT | MULTI | NONE
 
 and metavar =
     MetaIdDecl of arity * meta_name (* name *)
-  | MetaFreshIdDecl of meta_name (* name *) * string option (* seed *)
+  | MetaFreshIdDecl of meta_name (* name *) * seed (* seed *)
   | MetaTypeDecl of arity * meta_name (* name *)
   | MetaInitDecl of arity * meta_name (* name *)
   | MetaListlenDecl of meta_name (* name *)
@@ -109,6 +109,9 @@ and metavar =
   | MetaDeclarerDecl of arity * meta_name (* name *)
   | MetaIteratorDecl of arity * meta_name (* name *)
 
+and seed = NoVal | StringSeed of string | ListSeed of seed_elem list
+and seed_elem = SeedString of string | SeedId of meta_name
+
 (* --------------------------------------------------------------------- *)
 (* --------------------------------------------------------------------- *)
 (* Dots *)
@@ -580,7 +583,8 @@ and anything =
 
 (* --------------------------------------------------------------------- *)
 
-and exists = Exists | Forall | ReverseForall | Undetermined
+and exists = Exists | Forall | Undetermined
+(* | ReverseForall - idea: look back on all flow paths; not implemented *)
 
 (* --------------------------------------------------------------------- *)
 
index 3771a7a..d18a2ea 100644 (file)
@@ -11,7 +11,7 @@ type 'a wrap =
       node_line : line;
       free_vars : meta_name list; (*free vars*)
       minus_free_vars : meta_name list; (*minus free vars*)
-      fresh_vars : (meta_name * string (*seed*) option) list; (*fresh vars*)
+      fresh_vars : (meta_name * seed) list; (*fresh vars*)
       inherited : meta_name list; (*inherited vars*)
       saved_witness : meta_name list; (*witness vars*)
       bef_aft : dots_bef_aft;
@@ -47,7 +47,7 @@ and keep_binding = Type_cocci.keep_binding
 and multi = bool (*true if a nest is one or more, false if it is zero or more*)
 
 and end_info =
-    meta_name list (*free vars*) * (meta_name * string option) list (*fresh*) *
+    meta_name list (*free vars*) * (meta_name * seed) list (*fresh*) *
       meta_name list (*inherited vars*) * mcodekind
 
 (* --------------------------------------------------------------------- *)
@@ -57,7 +57,7 @@ and arity = UNIQUE | OPT | MULTI | NONE
 
 and metavar =
     MetaIdDecl of arity * meta_name (* name *)
-  | MetaFreshIdDecl of meta_name (* name *) * string option (* seed *)
+  | MetaFreshIdDecl of meta_name (* name *) * seed (* seed *)
   | MetaTypeDecl of arity * meta_name (* name *)
   | MetaInitDecl of arity * meta_name (* name *)
   | MetaListlenDecl of meta_name (* name *)
@@ -81,6 +81,9 @@ and metavar =
   | MetaDeclarerDecl of arity * meta_name (* name *)
   | MetaIteratorDecl of arity * meta_name (* name *)
 
+and seed = NoVal | StringSeed of string | ListSeed of seed_elem list
+and seed_elem = SeedString of string | SeedId of meta_name
+
 (* --------------------------------------------------------------------- *)
 (* --------------------------------------------------------------------- *)
 (* Dots *)
@@ -540,7 +543,7 @@ and anything =
 
 (* --------------------------------------------------------------------- *)
 
-and exists = Exists | Forall | ReverseForall | Undetermined
+and exists = Exists | Forall | Undetermined
 
 (* --------------------------------------------------------------------- *)
 
@@ -563,7 +566,7 @@ val get_wcfvs : ('a wrap,'b wrap) whencode list -> meta_name list
 val set_fvs : meta_name list -> 'a wrap -> 'a wrap
 val get_mfvs : 'a wrap -> meta_name list
 val set_mfvs : meta_name list -> 'a wrap -> 'a wrap
-val get_fresh : 'a wrap -> (meta_name * string option) list
+val get_fresh : 'a wrap -> (meta_name * seed) list
 val get_inherited : 'a wrap -> meta_name list
 val get_saved : 'a wrap -> meta_name list
 val get_dots_bef_aft : statement -> dots_bef_aft
@@ -586,12 +589,12 @@ val no_info : info
 
 val make_meta_rule_elem :
     string -> mcodekind ->
-      (meta_name list * (meta_name * string option) list * meta_name list) ->
+      (meta_name list * (meta_name * seed) list * meta_name list) ->
       rule_elem
 
 val make_meta_decl :
     string -> mcodekind ->
-      (meta_name list * (meta_name * string option) list * meta_name list) ->
+      (meta_name list * (meta_name * seed) list * meta_name list) ->
       declaration
 
 val make_term : 'a -> 'a wrap
index 90bdd19..55dc822 100644 (file)
@@ -366,6 +366,7 @@ and statement old_metas table minus s =
   | Ast0.Define(def,id,_,body) ->
       ident GLOBAL old_metas table minus id;
       dots (statement old_metas table minus) body
+  | Ast0.Label(i,_) -> ident ID old_metas table minus i
   | Ast0.Goto(_,i,_) -> ident ID old_metas table minus i
   | _ -> () (* no metavariable subterms *)
 
index 8e22419..4174236 100644 (file)
@@ -49,6 +49,16 @@ let mkres x e left right =
       Ast0.strings_before = []; Ast0.strings_after = [] } in
   {x with Ast0.node = e; Ast0.info = info}
 
+(* This looks like it is there to allow distribution of plus code
+over disjunctions.  But this doesn't work with single_statement, as the
+plus code has not been distributed to the place that it expects.  So the
+only reasonably easy solution seems to be to disallow distribution. *)
+(* inherit attachable is because single_statement doesn't work well when +
+code is attached outside an or, but this has to be allowed after
+isomorphisms have been introduced.  So only set it to true then, or when we
+know that the code involved cannot contain a statement, ie it is a
+declaration. *)
+let inherit_attachable = ref false
 let mkmultires x e left right (astart,start_mcodes) (aend,end_mcodes) =
   let lstart = Ast0.get_info left in
   let lend = Ast0.get_info right in
@@ -61,8 +71,8 @@ let mkmultires x e left right (astart,start_mcodes) (aend,end_mcodes) =
       Ast0.offset = lstart.Ast0.pos_info.Ast0.offset; } in
   let info =
     { Ast0.pos_info = pos_info;
-      Ast0.attachable_start = astart;
-      Ast0.attachable_end = aend;
+      Ast0.attachable_start = if !inherit_attachable then astart else false;
+      Ast0.attachable_end = if !inherit_attachable then aend else false;
       Ast0.mcode_start = start_mcodes;
       Ast0.mcode_end = end_mcodes;
       (* only for tokens, not inherited upwards *)
@@ -780,5 +790,15 @@ let top_level t =
 (* --------------------------------------------------------------------- *)
 (* Entry points *)
 
-let compute_lines = List.map top_level
+let compute_lines attachable_or x =
+  inherit_attachable := attachable_or;
+  List.map top_level x
+
+let compute_statement_lines attachable_or x =
+  inherit_attachable := attachable_or;
+  statement x
+
+let compute_statement_dots_lines attachable_or x =
+  inherit_attachable := attachable_or;
+  statement_dots x
 
dissimilarity index 90%
index 4c6f1b7..2d2cdf0 100644 (file)
@@ -1,23 +1,8 @@
-val compute_lines : Ast0_cocci.rule -> Ast0_cocci.rule
-
-val expression_dots :
-    Ast0_cocci.expression Ast0_cocci.dots ->
-      Ast0_cocci.expression Ast0_cocci.dots
-val parameter_dots :
-    Ast0_cocci.parameterTypeDef Ast0_cocci.dots ->
-      Ast0_cocci.parameterTypeDef Ast0_cocci.dots
-val initialiser_dots :
-    Ast0_cocci.initialiser Ast0_cocci.dots ->
-      Ast0_cocci.initialiser Ast0_cocci.dots
-val statement_dots :
-    Ast0_cocci.statement Ast0_cocci.dots ->
-      Ast0_cocci.statement Ast0_cocci.dots
-
-val ident : Ast0_cocci.ident -> Ast0_cocci.ident
-val expression : Ast0_cocci.expression -> Ast0_cocci.expression
-val typeC : Ast0_cocci.typeC -> Ast0_cocci.typeC
-val declaration : Ast0_cocci.declaration -> Ast0_cocci.declaration
-val parameterTypeDef :
-    Ast0_cocci.parameterTypeDef -> Ast0_cocci.parameterTypeDef
-val statement : Ast0_cocci.statement -> Ast0_cocci.statement
-val top_level : Ast0_cocci.top_level -> Ast0_cocci.top_level
+val compute_lines : bool -> Ast0_cocci.rule -> Ast0_cocci.rule
+
+val compute_statement_dots_lines : bool ->
+    Ast0_cocci.statement Ast0_cocci.dots ->
+      Ast0_cocci.statement Ast0_cocci.dots
+
+val compute_statement_lines :
+    bool -> Ast0_cocci.statement -> Ast0_cocci.statement
index f5c6dee..e601467 100644 (file)
@@ -247,11 +247,18 @@ let neutral_mcode (_,_,info,mcodekind,pos,_) =
 (* neutral for context; used for mcode in bef aft nodes that don't represent
 anything if they don't contain some information *)
 let nc_mcode (_,_,info,mcodekind,pos,_) =
-  let offset = info.Ast0.pos_info.Ast0.offset in
+  (* distinguish from the offset of some real token *)
+  let offset = (-1) * info.Ast0.pos_info.Ast0.offset in
   match mcodekind with
     Ast0.MINUS(_) -> Token(AllMarked,offset,mcodekind,[])
   | Ast0.PLUS -> Token(AllMarked,offset,mcodekind,[])
-  | Ast0.CONTEXT(_) -> Token(Neutral,offset,mcodekind,[offset])
+  | Ast0.CONTEXT(_) ->
+      (* Unlike the other mcode cases, we drop the offset from the context
+        offsets.  This is because we don't know whether the term this is
+        associated with is - or context.  In any case, the context offsets are
+        used for identification, and this invisible node should not be needed
+        for this purpose. *)
+      Token(Neutral,offset,mcodekind,[])
   | _ -> failwith "not possible"
 
 let is_context = function Ast0.CONTEXT(_) -> true | _ -> false
@@ -839,7 +846,7 @@ let concat = function
                | _ -> failwith "no dots allowed in pure plus code")
            | _ -> failwith "plus code is being discarded") in
       let res =
-       Compute_lines.statement_dots
+       Compute_lines.compute_statement_dots_lines false
          (Ast0.rewrap (List.hd l) (Ast0.DOTS (loop l))) in
       [Ast0.rewrap res (Ast0.CODE res)]
 
index 98ca9fe..07834de 100644 (file)
@@ -28,6 +28,8 @@ module Ast = Ast_cocci
    metavariables *)
 type fresh = bool
 
+type incl_iso = Include of string | Iso of (string,string) Common.either
+
 type clt =
     line_type * int * int * int * int (* starting spaces *) *
       (string * Ast0.position_info) list (* code before *) *
@@ -52,9 +54,17 @@ let in_meta = ref false
 let in_iso = ref false
 let in_generating = ref false
 let in_prolog = ref false
+(* state machine for lexer..., allows smpl keywords as type names *)
+let saw_struct = ref false
 let inheritable_positions =
   ref ([] : string list) (* rules from which posns can be inherited *)
 
+let call_in_meta f =
+  in_meta := true; saw_struct := false;
+  let res = f() in
+  in_meta := false;
+  res
+
 let all_metadecls =
   (Hashtbl.create(100) : (string, Ast.metavar list) Hashtbl.t)
 
index 174babc..d07c415 100644 (file)
@@ -3,6 +3,8 @@
    metavariables *)
 type fresh = bool
 
+type incl_iso = Include of string | Iso of (string,string) Common.either
+
 type clt =
     line_type * int * int * int * int (* starting spaces *) *
       (string * Ast0_cocci.position_info) list (* code before *) *
@@ -25,8 +27,11 @@ val in_meta : bool ref      (* true if parsing the metavariable decls *)
 val in_iso : bool ref       (* true if parsing the isomorphisms *)
 val in_generating : bool ref(* true if generating a rule *)
 val in_prolog : bool ref    (* true if parsing the beginning of an SP *)
+val saw_struct : bool ref   (* true if saw struct/union *)
 val inheritable_positions : string list ref
 
+val call_in_meta : (unit -> 'a) -> 'a
+
 val all_metadecls : (string, Ast_cocci.metavar list) Hashtbl.t
 
 val clear_meta: (unit -> unit) ref
index be830b1..9396da8 100644 (file)
@@ -24,6 +24,9 @@
 Also augment various parts of each rule with unitary, inherited, and freshness
 informations *)
 
+(* metavar decls should be better integrated into computations of free
+variables in plus code *)
+
 module Ast = Ast_cocci
 module V = Visitor_ast
 module TC = Type_cocci
@@ -292,7 +295,42 @@ let cip_mcodekind r mck =
       | Ast.NOTHING -> [])
   | Ast.PLUS -> []
 
+
+let collect_fresh_seed_env metavars l =
+  let fresh =
+    List.fold_left
+      (function prev ->
+       function
+           Ast.MetaFreshIdDecl(_,seed) as x ->
+             ((Ast.get_meta_name x),seed)::prev
+         | _ -> prev)
+      [] metavars in
+  let (seed_env,seeds) =
+    List.fold_left
+      (function (seed_env,seeds) as prev ->
+       function x ->
+         try
+           (let v = List.assoc x fresh in
+           match v with
+             Ast.ListSeed l ->
+               let ids =
+                 List.fold_left
+                   (function prev ->
+                     function
+                         Ast.SeedId(id) -> id::prev
+                       | _ -> prev)
+                   [] l in
+               ((x,ids)::seed_env,Common.union_set ids seeds)
+           | _ -> ((x,[])::seed_env,seeds))
+         with Not_found -> prev)
+      ([],l) l in
+  (List.rev seed_env,List.rev seeds)
+
+let collect_fresh_seed metavars l =
+  let (_,seeds) = collect_fresh_seed_env metavars l in seeds
+
 let collect_in_plus_term =
+
   let bind x y = x @ y in
   let option_default = [] in
   let donothing r k e = k e in
@@ -347,10 +385,11 @@ let collect_in_plus_term =
     donothing donothing donothing donothing donothing donothing
     donothing astfvrule_elem astfvstatement donothing donothing donothing
 
-let collect_in_plus minirules =
+let collect_in_plus metavars minirules =
   nub
-    (List.concat
-       (List.map collect_in_plus_term.V.combiner_top_level minirules))
+    (collect_fresh_seed metavars
+       (List.concat
+         (List.map collect_in_plus_term.V.combiner_top_level minirules)))
 
 (* ---------------------------------------------------------------- *)
 
@@ -366,10 +405,10 @@ let collect_all_multirefs minirules =
 (* classify as unitary (no binding) or nonunitary (env binding) or saved
 (witness binding) *)
 
-let classify_variables metavars minirules used_after =
-  let metavars = List.map Ast.get_meta_name metavars in
+let classify_variables metavar_decls minirules used_after =
+  let metavars = List.map Ast.get_meta_name metavar_decls in
   let (unitary,nonunitary) = collect_all_multirefs minirules in
-  let inplus = collect_in_plus minirules in
+  let inplus = collect_in_plus metavar_decls minirules in
 
   let donothing r k e = k e in
   let check_unitary name inherited =
@@ -520,20 +559,23 @@ let astfvs metavars bound =
       [] metavars in
 
   let collect_fresh l =
-    List.rev
-      (List.fold_left
-       (function prev ->
+    let (matched,freshvars) =
+      List.fold_left
+       (function (matched,freshvars) ->
          function x ->
-           try let v = List.assoc x fresh in (x,v)::prev
-           with Not_found -> prev)
-       [] l) in
+           try let v = List.assoc x fresh in (matched,(x,v)::freshvars)
+           with Not_found -> (x::matched,freshvars))
+       ([],[]) l in
+    (List.rev matched, List.rev freshvars) in
 
   (* cases for the elements of anything *)
   let astfvrule_elem recursor k re =
     let minus_free = nub (collect_all_refs.V.combiner_rule_elem re) in
     let minus_nc_free =
       nub (collect_non_constraint_refs.V.combiner_rule_elem re) in
-    let plus_free = collect_in_plus_term.V.combiner_rule_elem re in
+    let plus_free =
+      collect_fresh_seed metavars
+       (collect_in_plus_term.V.combiner_rule_elem re) in
     let free = Common.union_set minus_free plus_free in
     let nc_free = Common.union_set minus_nc_free plus_free in
     let unbound =
@@ -542,10 +584,11 @@ let astfvs metavars bound =
       List.filter (function x -> List.mem x bound) nc_free in
     let munbound =
       List.filter (function x -> not(List.mem x bound)) minus_free in
+    let (matched,fresh) = collect_fresh unbound in
     {(k re) with
-      Ast.free_vars = unbound;
+      Ast.free_vars = matched;
       Ast.minus_free_vars = munbound;
-      Ast.fresh_vars = collect_fresh unbound;
+      Ast.fresh_vars = fresh;
       Ast.inherited = inherited;
       Ast.saved_witness = []} in
 
@@ -553,7 +596,9 @@ let astfvs metavars bound =
     let minus_free = nub (collect_all_refs.V.combiner_statement s) in
     let minus_nc_free =
       nub (collect_non_constraint_refs.V.combiner_statement s) in
-    let plus_free = collect_in_plus_term.V.combiner_statement s in
+    let plus_free =
+      collect_fresh_seed metavars
+       (collect_in_plus_term.V.combiner_statement s) in
     let free = Common.union_set minus_free plus_free in
     let nc_free = Common.union_set minus_nc_free plus_free in
     let classify free minus_free =
@@ -561,41 +606,40 @@ let astfvs metavars bound =
        List.partition (function x -> not(List.mem x bound)) free in
       let munbound =
        List.filter (function x -> not(List.mem x bound)) minus_free in
-      (unbound,munbound,collect_fresh unbound,inherited) in
+      let (matched,fresh) = collect_fresh unbound in
+      (matched,munbound,fresh,inherited) in
     let res = k s in
     let s =
+      let cip_plus aft =
+       collect_fresh_seed metavars
+         (cip_mcodekind collect_in_plus_term aft) in
       match Ast.unwrap res with
        Ast.IfThen(header,branch,(_,_,_,aft)) ->
-         let (unbound,_,fresh,inherited) =
-           classify (cip_mcodekind collect_in_plus_term aft) [] in
+         let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in
          Ast.IfThen(header,branch,(unbound,fresh,inherited,aft))
       | Ast.IfThenElse(header,branch1,els,branch2,(_,_,_,aft)) ->
-         let (unbound,_,fresh,inherited) =
-           classify (cip_mcodekind collect_in_plus_term aft) [] in
+         let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in
          Ast.IfThenElse(header,branch1,els,branch2,
                         (unbound,fresh,inherited,aft))
       | Ast.While(header,body,(_,_,_,aft)) ->
-         let (unbound,_,fresh,inherited) =
-           classify (cip_mcodekind collect_in_plus_term aft) [] in
+         let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in
          Ast.While(header,body,(unbound,fresh,inherited,aft))
       | Ast.For(header,body,(_,_,_,aft)) ->
-         let (unbound,_,fresh,inherited) =
-           classify (cip_mcodekind collect_in_plus_term aft) [] in
+         let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in
          Ast.For(header,body,(unbound,fresh,inherited,aft))
       | Ast.Iterator(header,body,(_,_,_,aft)) ->
-         let (unbound,_,fresh,inherited) =
-           classify (cip_mcodekind collect_in_plus_term aft) [] in
+         let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in
          Ast.Iterator(header,body,(unbound,fresh,inherited,aft))
       |        s -> s in
 
-    let (unbound,munbound,fresh,_) = classify free minus_free in
+    let (matched,munbound,fresh,_) = classify free minus_free in
     let inherited =
       List.filter (function x -> List.mem x bound) nc_free in
     {res with
       Ast.node = s;
-      Ast.free_vars = unbound;
+      Ast.free_vars = matched;
       Ast.minus_free_vars = munbound;
-      Ast.fresh_vars = collect_fresh unbound;
+      Ast.fresh_vars = fresh;
       Ast.inherited = inherited;
       Ast.saved_witness = []} in
 
@@ -603,7 +647,9 @@ let astfvs metavars bound =
     let minus_free = nub (collect_all_refs.V.combiner_statement_dots sd) in
     let minus_nc_free =
       nub (collect_non_constraint_refs.V.combiner_statement_dots sd) in
-    let plus_free = collect_in_plus_term.V.combiner_statement_dots sd in
+    let plus_free =
+      collect_fresh_seed metavars
+       (collect_in_plus_term.V.combiner_statement_dots sd) in
     let free = Common.union_set minus_free plus_free in
     let nc_free = Common.union_set minus_nc_free plus_free in
     let unbound =
@@ -612,10 +658,11 @@ let astfvs metavars bound =
       List.filter (function x -> List.mem x bound) nc_free in
     let munbound =
       List.filter (function x -> not(List.mem x bound)) minus_free in
+    let (matched,fresh) = collect_fresh unbound in
     {(k sd) with
-      Ast.free_vars = unbound;
+      Ast.free_vars = matched;
       Ast.minus_free_vars = munbound;
-      Ast.fresh_vars = collect_fresh unbound;
+      Ast.fresh_vars = fresh;
       Ast.inherited = inherited;
       Ast.saved_witness = []} in
 
@@ -732,7 +779,7 @@ let collect_top_level_used_after metavar_rule_list =
             | Ast.InitialScriptRule (_,_) | Ast.FinalScriptRule (_,_) -> []
             | Ast.CocciRule (_,_,rule,_,_) ->
                Common.union_set (nub (collect_all_rule_refs rule))
-                 (collect_in_plus rule) in
+                 (collect_in_plus metavar_list rule) in
          let inherited =
            List.filter (function x -> not (List.mem x locally_defined))
              free_vars in
@@ -748,26 +795,85 @@ let collect_top_level_used_after metavar_rule_list =
 
 let collect_local_used_after metavars minirules used_after =
   let locally_defined = List.map Ast.get_meta_name metavars in
-  let rec loop defined = function
-      [] -> (used_after,[],[])
+  let rec loop = function
+      [] -> (used_after,[],[],[],[])
     | minirule::rest ->
-       let free_vars =
-         Common.union_set
-           (nub (collect_all_minirule_refs minirule))
-           (collect_in_plus_term.V.combiner_top_level minirule) in
-       let local_free_vars =
-         List.filter (function x -> List.mem x locally_defined) free_vars in
-       let new_defined = Common.union_set local_free_vars defined in
-       let (mini_used_after,fvs_lists,mini_used_after_lists) =
-         loop new_defined rest in
-       let local_used = Common.union_set local_free_vars mini_used_after in
-       let (new_used_after,new_list) =
-         List.partition (function x -> List.mem x defined) mini_used_after in
-       let new_used_after = Common.union_set local_used new_used_after in
-       (new_used_after,free_vars::fvs_lists,
-        new_list::mini_used_after_lists) in
-  let (_,fvs_lists,used_after_lists) = loop [] minirules in
-  (fvs_lists,used_after_lists)
+       (* In a rule there are three kinds of local variables:
+          1. Variables referenced in the minus or context code.
+          These get a value by matching.  This value can be used in
+          subsequent rules.
+          2. Fresh variables referenced in the plus code.
+          3. Variables referenced in the seeds of the fresh variables.
+          There are also non-local variables. These may either be variables
+          referenced in the minus, context, or plus code, or they may be
+          variables referenced in the seeds of the fresh variables. *)
+       (* Step 1: collect all references in minus/context, plus, seed
+          code *)
+       let variables_referenced_in_minus_context_code =
+         nub (collect_all_minirule_refs minirule) in
+       let variables_referenced_in_plus_code =
+         collect_in_plus_term.V.combiner_top_level minirule in
+       let (env_of_fresh_seeds,seeds_and_plus) =
+         collect_fresh_seed_env
+           metavars variables_referenced_in_plus_code in
+       let all_free_vars =
+         Common.union_set variables_referenced_in_minus_context_code
+           seeds_and_plus in
+       (* Step 2: identify locally defined ones *)
+       let local_fresh = List.map fst env_of_fresh_seeds in
+       let is_local =
+         List.partition (function x -> List.mem x locally_defined) in
+       let local_env_of_fresh_seeds =
+         (* these have to be restricted to only one value if the associated
+            fresh variable is used after *)
+         List.map (function (f,ss) -> (f,is_local ss)) env_of_fresh_seeds in
+       let (local_all_free_vars,nonlocal_all_free_vars) =
+         is_local all_free_vars in
+       (* Step 3, recurse on the rest of the rules, making available whatever
+          has been defined in this one *)
+       let (mini_used_after,fvs_lists,mini_used_after_lists,
+            mini_fresh_used_after_lists,mini_fresh_used_after_seeds) =
+         loop rest in
+       (* Step 4: collect the results.  These are:
+          1. All of the variables used non-locally in the rules starting
+          with this one
+          2. All of the free variables to the end of the semantic patch
+          3. The variables that are used afterwards and defined here by
+          matching (minus or context code)
+          4. The variables that are used afterwards and are defined here as
+          fresh
+          5. The variables that are used as seeds in computing the bindings
+          of the variables collected in part 4. *)
+       let (local_used_after, nonlocal_used_after) =
+         is_local mini_used_after in
+       let (fresh_local_used_after(*4*),matched_local_used_after) =
+         List.partition (function x -> List.mem x local_fresh)
+           local_used_after in
+       let matched_local_used_after(*3*) =
+         Common.union_set matched_local_used_after nonlocal_used_after in
+       let new_used_after = (*1*)
+         Common.union_set nonlocal_all_free_vars nonlocal_used_after in
+       let fresh_local_used_after_seeds =
+         List.filter
+           (* no point to keep variables that already are gtd to have only
+              one value *)
+           (function x -> not (List.mem x matched_local_used_after))
+           (List.fold_left (function p -> function c -> Common.union_set c p)
+              []
+              (List.map
+                 (function fua ->
+                   fst (List.assoc fua local_env_of_fresh_seeds))
+                 fresh_local_used_after)) in
+       (new_used_after,all_free_vars::fvs_lists(*2*),
+        matched_local_used_after::mini_used_after_lists,
+        fresh_local_used_after::mini_fresh_used_after_lists,
+        fresh_local_used_after_seeds::mini_fresh_used_after_seeds) in
+  let (_,fvs_lists,used_after_lists(*ua*),
+       fresh_used_after_lists(*fua*),fresh_used_after_lists_seeds(*fuas*)) =
+    loop minirules in
+  (fvs_lists,used_after_lists,
+   fresh_used_after_lists,fresh_used_after_lists_seeds)
+
 
 
 let collect_used_after metavar_rule_list =
@@ -778,19 +884,26 @@ let collect_used_after metavar_rule_list =
         match r with
           Ast.ScriptRule (_,_,_,_)
        | Ast.InitialScriptRule (_,_) | Ast.FinalScriptRule (_,_) ->
-           ([], [used_after])
+           ([], [used_after], [], [])
         | Ast.CocciRule (name, rule_info, minirules, _,_) ->
           collect_local_used_after metavars minirules used_after
     )
     metavar_rule_list used_after_lists
 
+let rec split4 = function
+    [] -> ([],[],[],[])
+  | (a,b,c,d)::l -> let (a1,b1,c1,d1) = split4 l in (a::a1,b::b1,c::c1,d::d1)
+
 (* ---------------------------------------------------------------- *)
 (* entry point *)
 
 let free_vars rules =
   let metavars = List.map (function (mv,rule) -> mv) rules in
-  let (fvs_lists,used_after_lists) = List.split (collect_used_after rules) in
-  let neg_pos_lists = List.map2 get_neg_pos_list rules used_after_lists in
+  let (fvs_lists,used_after_matched_lists,
+       fresh_used_after_lists,fresh_used_after_lists_seeds) =
+    split4 (collect_used_after rules) in
+  let neg_pos_lists =
+    List.map2 get_neg_pos_list rules used_after_matched_lists in
   let positions_list = (* for all rules, assume all positions are used after *)
     List.map
       (function (mv, r) ->
@@ -808,15 +921,20 @@ let free_vars rules =
   let new_rules =
     List.map2
       (function (mv,r) ->
-       function ua ->
+       function (ua,fua) ->
           match r with
             Ast.ScriptRule _
          | Ast.InitialScriptRule _ | Ast.FinalScriptRule _ -> r
           | Ast.CocciRule (nm, rule_info, r, is_exp,ruletype) ->
              Ast.CocciRule
-               (nm, rule_info, classify_variables mv r (List.concat ua),
+               (nm, rule_info,
+                classify_variables mv r
+                  ((List.concat ua) @ (List.concat fua)),
                 is_exp,ruletype))
-      rules used_after_lists in
+      rules (List.combine used_after_matched_lists fresh_used_after_lists) in
   let new_rules = collect_astfvs (List.combine metavars new_rules) in
   (metavars,new_rules,
-   fvs_lists,neg_pos_lists,used_after_lists,positions_list)
+   fvs_lists,neg_pos_lists,
+   (used_after_matched_lists,
+    fresh_used_after_lists,fresh_used_after_lists_seeds),
+   positions_list)
index fac1f11..979a59f 100644 (file)
@@ -6,5 +6,7 @@ val free_vars : Ast_cocci.rule_with_metavars list ->
   (Ast_cocci.metavar list list) * (Ast_cocci.rule list) *
     (((Ast_cocci.meta_name list) list) list) (*fvs of the rule*) *
     (((Ast_cocci.meta_name list) list) list) (*negated position vars*) *
-    (((Ast_cocci.meta_name list) list) list) (*used after list*) *
+    ((((Ast_cocci.meta_name list) list) list) (*used after list*) *
+       (((Ast_cocci.meta_name list) list) list) (*fresh used after list*) *
+       (((Ast_cocci.meta_name list) list)list)(*fresh used after list seeds*))*
     (((Ast_cocci.meta_name list) list) list) (*positions list*)
index 0814be9..70a74bc 100644 (file)
@@ -335,9 +335,11 @@ let no_names dec =
 
 let merge mproto pproto =
   let mproto =
-    Compute_lines.compute_lines [Ast0.copywrap mproto (Ast0.DECL mproto)] in
+    Compute_lines.compute_lines true
+      [Ast0.copywrap mproto (Ast0.DECL mproto)] in
   let pproto =
-    Compute_lines.compute_lines [Ast0.copywrap pproto (Ast0.DECL pproto)] in
+    Compute_lines.compute_lines true
+      [Ast0.copywrap pproto (Ast0.DECL pproto)] in
   let (m,p) = List.split(Context_neg.context_neg mproto pproto) in
   Insert_plus.insert_plus m p true (* no isos for protos *);
   (* convert to ast so that the + code will fall down to the tokens
index 16d484b..d61c16c 100644 (file)
@@ -1837,6 +1837,7 @@ let merge_plus model_mcode e_mcode =
            | Ast.AFTER(a) -> (anythings@a,t)
            | Ast.BEFOREAFTER(b,a) -> (b@anythings@a,t)
            | Ast.NOTHING -> (anythings,t))
+      | Ast0.MIXED(_) -> failwith "how did this become mixed?"
       |        _ -> failwith "not possible 7")
   | Ast0.MIXED(_) -> failwith "not possible 8"
   | Ast0.PLUS -> failwith "not possible 9"
@@ -2418,5 +2419,5 @@ let apply_isos isos rule rule_name =
                   (new_extra_meta@extra_meta,t))
                 ([],t) isos)
             rule) in
-      (List.concat extra_meta, Compute_lines.compute_lines rule)
+      (List.concat extra_meta, (Compute_lines.compute_lines true) rule)
     end
index 878edc5..95d0b32 100644 (file)
@@ -179,7 +179,7 @@ let id_tokens lexbuf =
   let s = tok lexbuf in
   let linetype = get_current_line_type lexbuf in
   let in_rule_name = !Data.in_rule_name in
-  let in_meta = !Data.in_meta in
+  let in_meta = !Data.in_meta && not !Data.saw_struct in
   let in_iso = !Data.in_iso in
   let in_prolog = !Data.in_prolog in
   match s with
@@ -222,9 +222,9 @@ let id_tokens lexbuf =
   | "on" when in_rule_name      -> check_context_linetype s; TOn
   | "ever" when in_rule_name    -> check_context_linetype s; TEver
   | "never" when in_rule_name   -> check_context_linetype s; TNever
+  (* exists and forall for when are reparsed in parse_cocci.ml *)
   | "exists" when in_rule_name  -> check_context_linetype s; TExists
   | "forall" when in_rule_name  -> check_context_linetype s; TForall
-  | "reverse" when in_rule_name -> check_context_linetype s; TReverse
   | "script" when in_rule_name  -> check_context_linetype s; TScript
   | "initialize" when in_rule_name -> check_context_linetype s; TInitialize
   | "finalize" when in_rule_name   -> check_context_linetype s; TFinalize
@@ -236,9 +236,11 @@ let id_tokens lexbuf =
   | "float" ->      Tfloat    linetype
   | "long" ->       Tlong     linetype
   | "void" ->       Tvoid     linetype
-  | "struct" ->     Tstruct   linetype
-  | "union" ->      Tunion    linetype
-  | "enum" ->       Tenum     linetype
+  (* in_meta is only for the first keyword; drop it now to allow any type
+     name *)
+  | "struct" ->     Data.saw_struct := true; Tstruct   linetype
+  | "union" ->      Data.saw_struct := true; Tunion    linetype
+  | "enum" ->       Data.saw_struct := true; Tenum     linetype
   | "unsigned" ->   Tunsigned linetype
   | "signed" ->     Tsigned   linetype
 
@@ -291,6 +293,7 @@ let init _ =
   Data.in_rule_name := false;
   Data.in_meta := false;
   Data.in_prolog := false;
+  Data.saw_struct := false;
   Data.inheritable_positions := [];
   Hashtbl.clear all_metavariables;
   Hashtbl.clear Data.all_metadecls;
@@ -593,6 +596,7 @@ rule token = parse
   | "&"            { start_line true; TAnd    (get_current_line_type lexbuf) }
   | "^"            { start_line true; TXor(get_current_line_type lexbuf) }
 
+  | "##"            { start_line true; TCppConcatOp }
   | (( ("#" [' ' '\t']*  "define" [' ' '\t']+)) as def)
     ( (letter (letter |digit)*) as ident)
       { start_line true;
index 8922a0c..f8dccc6 100644 (file)
@@ -503,3 +503,30 @@ let make_initial_script_rule_name_result lang =
 let make_final_script_rule_name_result lang =
   let l = id2name lang in
   Ast.FinalScriptRulename(l)
+
+(* Allows type alone only when it is void and only when there is only one
+    parameter.  This avoids ambiguity problems in the parser. *)
+let verify_parameter_declarations = function
+    [] -> ()
+  | [x] ->
+      (match Ast0.unwrap x with
+       Ast0.Param(t, None) ->
+         (match Ast0.unwrap t with
+           Ast0.BaseType(Ast.VoidType,_) -> ()
+         | _ ->
+             failwith
+               (Printf.sprintf
+                  "%d: only void can be a parameter without an identifier"
+                  (Ast0.get_line t)))
+      |        _ -> ())
+  | l ->
+      List.iter
+       (function x ->
+         match Ast0.unwrap x with
+           Ast0.Param(t, None) ->
+             failwith
+               (Printf.sprintf
+                  "%d: only void alone can be a parameter without an identifier"
+                  (Ast0.get_line t))
+         | _ -> ())
+       l
index 209ab97..2f552e4 100644 (file)
@@ -64,6 +64,7 @@ let token2c (tok,_) =
   | PC.TLocal -> "local"
   | PC.Tlist -> "list"
   | PC.TFresh -> "fresh"
+  | PC.TCppConcatOp -> "##"
   | PC.TPure -> "pure"
   | PC.TContext -> "context"
   | PC.TTypedef -> "typedef"
@@ -81,7 +82,6 @@ let token2c (tok,_) =
   | PC.TNever -> "never"
   | PC.TExists -> "exists"
   | PC.TForall -> "forall"
-  | PC.TReverse -> "reverse"
   | PC.TError -> "error"
   | PC.TWords -> "words"
   | PC.TGenerated -> "generated"
@@ -596,11 +596,11 @@ let split_token ((tok,_) as t) =
     PC.TIdentifier | PC.TConstant | PC.TExpression | PC.TIdExpression
   | PC.TStatement | PC.TPosition | PC.TPosAny | PC.TInitialiser
   | PC.TFunction | PC.TTypedef | PC.TDeclarer | PC.TIterator | PC.TName
-  | PC.TType | PC.TParameter | PC.TLocal | PC.Tlist | PC.TFresh | PC.TPure
+  | PC.TType | PC.TParameter | PC.TLocal | PC.Tlist | PC.TFresh
+  | PC.TCppConcatOp | PC.TPure
   | PC.TContext | PC.TRuleName(_) | PC.TUsing | PC.TDisable | PC.TExtends
   | PC.TPathIsoFile(_)
   | PC.TDepends | PC.TOn | PC.TEver | PC.TNever | PC.TExists | PC.TForall
-  | PC.TReverse
   | PC.TError | PC.TWords | PC.TGenerated | PC.TNothing -> ([t],[t])
 
   | PC.Tchar(clt) | PC.Tshort(clt) | PC.Tint(clt) | PC.Tdouble(clt)
@@ -936,6 +936,42 @@ let rec translate_when_true_false = function
       (PC.TWhenFalse(clt),q)::x::(translate_when_true_false xs)
   | x::xs -> x :: (translate_when_true_false xs)
 
+(* ----------------------------------------------------------------------- *)
+
+let check_parentheses tokens =
+  let clt2line (_,line,_,_,_,_,_,_) = line in
+  let rec loop seen_open = function
+      [] -> tokens
+    | (PC.TOPar(clt),q) :: rest
+    | (PC.TDefineParam(clt,_,_,_),q) :: rest ->
+       loop (Common.Left (clt2line clt) :: seen_open) rest
+    | (PC.TOPar0(clt),q) :: rest ->
+       loop (Common.Right (clt2line clt) :: seen_open) rest
+    | (PC.TCPar(clt),q) :: rest ->
+       (match seen_open with
+         [] ->
+           failwith
+             (Printf.sprintf
+                "unexpected close parenthesis in line %d\n" (clt2line clt))
+       | Common.Left _ :: seen_open -> loop seen_open rest
+       | Common.Right open_line :: _ -> 
+           failwith
+             (Printf.sprintf
+                "disjunction parenthesis in line %d column 0 matched to normal parenthesis on line %d\n" open_line (clt2line clt)))
+    | (PC.TCPar0(clt),q) :: rest ->
+       (match seen_open with
+         [] ->
+           failwith
+             (Printf.sprintf
+                "unexpected close parenthesis in line %d\n" (clt2line clt))
+       | Common.Right _ :: seen_open -> loop seen_open rest
+       | Common.Left open_line :: _ -> 
+           failwith
+             (Printf.sprintf
+                "normal parenthesis in line %d matched to disjunction parenthesis on line %d column 0\n" open_line (clt2line clt)))
+    | x::rest -> loop seen_open rest in
+  loop [] tokens
+
 (* ----------------------------------------------------------------------- *)
 (* top level initializers: a sequence of braces followed by a dot *)
 
@@ -1191,7 +1227,8 @@ let prepare_tokens tokens =
   find_top_init
     (translate_when_true_false (* after insert_line_end *)
        (insert_line_end
-         (detect_types false (find_function_names (detect_attr tokens)))))
+         (detect_types false
+            (find_function_names (detect_attr (check_parentheses tokens))))))
 
 let prepare_mv_tokens tokens =
   detect_types false (detect_attr tokens)
@@ -1240,7 +1277,9 @@ let partition_either l =
 let get_metavars parse_fn table file lexbuf =
   let rec meta_loop acc (* read one decl at a time *) =
     let (_,tokens) =
-      tokens_all table file true lexbuf [PC.TArobArob;PC.TMPtVirg] in
+      Data.call_in_meta
+       (function _ ->
+         tokens_all table file true lexbuf [PC.TArobArob;PC.TMPtVirg]) in
     let tokens = prepare_mv_tokens tokens in
     match tokens with
       [(PC.TArobArob,_)] -> List.rev acc
@@ -1312,12 +1351,10 @@ let parse_iso file =
               | _ -> failwith "Script rules cannot appear in isomorphism rules"
               in
            Ast0.rule_name := rule_name;
-           Data.in_meta := true;
            let iso_metavars =
              match get_metavars PC.iso_meta_main table file lexbuf with
                (iso_metavars,[]) -> iso_metavars
-             | _ -> failwith "unexpected inheritance in iso" in
-           Data.in_meta := false;
+             | _ -> failwith "unexpected inheritance in iso" in
            (* get the rule *)
            let (more,tokens) =
              get_tokens
@@ -1370,7 +1407,7 @@ let parse_iso_files existing_isos iso_files extra_path =
   Data.in_iso := false;
   existing_isos@(List.concat (List.rev res))
 
-let parse file =
+let rec parse file =
   let table = Common.full_charpos_to_pos file in
   Common.with_open_infile file (fun channel ->
   let lexbuf = Lexing.from_channel channel in
@@ -1383,8 +1420,19 @@ let parse file =
     (true,data) ->
       (match List.rev data with
        ((PC.TArobArob as x),_)::_ | ((PC.TArob as x),_)::_ ->
-         let iso_files =
-           parse_one "iso file names" PC.include_main file data in
+         let include_and_iso_files =
+           parse_one "include and iso file names" PC.include_main file data in
+
+         let (include_files,iso_files) =
+           List.fold_left
+             (function (include_files,iso_files) ->
+               function
+                   Data.Include s -> (s::include_files,iso_files)
+                 | Data.Iso s -> (include_files,s::iso_files))
+             ([],[]) include_and_iso_files in
+
+         let (extra_iso_files, extra_rules) =
+           List.split (List.map parse include_files) in
 
           let parse_cocci_rule ruletype old_metas
              (rule_name, dependencies, iso, dropiso, exists, is_expression) =
@@ -1393,10 +1441,8 @@ let parse file =
                rule_name :: !Data.inheritable_positions;
 
             (* get metavariable declarations *)
-            Data.in_meta := true;
             let (metavars, inherited_metavars) =
-              get_metavars PC.meta_main table file lexbuf in
-            Data.in_meta := false;
+             get_metavars PC.meta_main table file lexbuf in
             Hashtbl.add Data.all_metadecls rule_name metavars;
             Hashtbl.add Lexer_cocci.rule_names rule_name ();
             Hashtbl.add Lexer_cocci.all_metavariables rule_name
@@ -1464,10 +1510,10 @@ let parse file =
             let get_tokens = tokens_script_all table file false lexbuf in
 
               (* meta-variables *)
-            Data.in_meta := true;
             let metavars =
-             get_script_metavars PC.script_meta_main table file lexbuf in
-            Data.in_meta := false;
+             Data.call_in_meta
+               (function _ ->
+                 get_script_metavars PC.script_meta_main table file lexbuf) in
 
             let exists_in old_metas (py,(r,m)) =
               let test (rr,mr) x =
@@ -1551,11 +1597,14 @@ let parse file =
             if more then
               rule::
              (loop (metavars @ old_metas) (gen_starts_with_name more tokens))
-            else [rule];
-
-            in
-
-         (iso_files, loop [] (x = PC.TArob))
+            else [rule] in
+
+         (List.fold_left
+            (function prev -> function cur -> Common.union_set cur prev)
+            iso_files extra_iso_files,
+          List.fold_left
+            (function prev -> function cur -> cur @ prev)
+            (loop [] (x = PC.TArob)) extra_rules)
       |        _ -> failwith "unexpected code before the first rule\n")
   | (false,[(PC.TArobArob,_)]) | (false,[(PC.TArob,_)]) ->
       ([],([] : Ast0.parsed_rule list))
@@ -1622,8 +1671,8 @@ let process file isofile verbose =
                     failwith
                       "bad list of reserved names - all must be at start" in
               let minus = Test_exps.process minus in
-              let minus = Compute_lines.compute_lines minus in
-              let plus = Compute_lines.compute_lines plus in
+              let minus = Compute_lines.compute_lines false minus in
+              let plus = Compute_lines.compute_lines false plus in
               let is_exp =
                 (* only relevant to Flag.make_hrule *)
                 (* doesn't handle multiple minirules properly, but since
@@ -1666,8 +1715,7 @@ let process file isofile verbose =
                   exists minus is_exp ruletype in
               match function_prototypes with
                 None -> [(extra_meta @ metavars, minus_ast)]
-              | Some mv_fp ->
-                  [(extra_meta @ metavars, minus_ast); mv_fp])
+              | Some mv_fp -> [(extra_meta @ metavars, minus_ast); mv_fp])
 (*          Ast0.CocciRule ((minus, metavarsm, (iso, dropiso, dependencies, rule_name, exists)), (plus, metavars))*)
       rules in
   let parsed = List.concat parsed in
index c7e2164..ef5e003 100644 (file)
@@ -2,9 +2,13 @@ val process :
     string (* filename *) -> string option (* iso filename *) ->
       bool (* verbose? *) ->
        (Ast_cocci.metavar list list) * (Ast_cocci.rule list) *
-         (((Ast_cocci.meta_name list) list) list) (*fvs of the rule*) *
-         (((Ast_cocci.meta_name list) list) list) (*negated pos vars*) *
-         (((Ast_cocci.meta_name list) list) list) (*used after list*) *
-         (((Ast_cocci.meta_name list) list) list) (*positions list*) *
+         Ast_cocci.meta_name list list list (*fvs of the rule*) *
+         Ast_cocci.meta_name list list list (*negated pos vars*) *
+         (Ast_cocci.meta_name list list list (*used after list*) *
+            (*fresh used after list*)
+            Ast_cocci.meta_name list list list *
+            (*fresh used after list seeds*)
+            Ast_cocci.meta_name list list list) *
+         Ast_cocci.meta_name list list list (*positions list*) *
          string list list (* non metavars in - code, for grep *) *
          string option (* non metavars in - code, for glimpse *)
index a5bb657..8caf447 100644 (file)
-
-# 23 "parser_cocci_menhir.mly"
-  
-
-(* Not clear how to allow function declarations to specify a return type
-and how to allow both to be specified as static, because they are in
-different rules.  The rules seem to have to be combined, which would allow
-functions to be declared as local variables *)
-
-(* Not clear how to let a function have a parameter of type void.  At the
-moment, void is allowed to be the type of a variable, which is wrong, and a
-parameter needs both a type and an identifier *)
-module Ast0 = Ast0_cocci
-module Ast = Ast_cocci
-module P = Parse_aux
-
-# 18 "parser_cocci_menhir.ml"
 exception Error
 
 type token = 
   | Tvolatile of (
 # 54 "parser_cocci_menhir.mly"
       (Data.clt)
-# 25 "parser_cocci_menhir.ml"
+# 8 "parser_cocci_menhir.ml"
 )
   | Tvoid of (
 # 50 "parser_cocci_menhir.mly"
       (Data.clt)
-# 30 "parser_cocci_menhir.ml"
+# 13 "parser_cocci_menhir.ml"
 )
   | Tunsigned of (
 # 51 "parser_cocci_menhir.mly"
       (Data.clt)
-# 35 "parser_cocci_menhir.ml"
+# 18 "parser_cocci_menhir.ml"
 )
   | Tunion of (
 # 50 "parser_cocci_menhir.mly"
       (Data.clt)
-# 40 "parser_cocci_menhir.ml"
+# 23 "parser_cocci_menhir.ml"
 )
   | Ttypedef of (
 # 53 "parser_cocci_menhir.mly"
       (Data.clt)
-# 45 "parser_cocci_menhir.ml"
+# 28 "parser_cocci_menhir.ml"
 )
   | Tstruct of (
 # 50 "parser_cocci_menhir.mly"
       (Data.clt)
-# 50 "parser_cocci_menhir.ml"
+# 33 "parser_cocci_menhir.ml"
 )
   | Tstatic of (
 # 53 "parser_cocci_menhir.mly"
       (Data.clt)
-# 55 "parser_cocci_menhir.ml"
+# 38 "parser_cocci_menhir.ml"
 )
   | Tsigned of (
 # 51 "parser_cocci_menhir.mly"
       (Data.clt)
-# 60 "parser_cocci_menhir.ml"
+# 43 "parser_cocci_menhir.ml"
 )
   | Tshort of (
 # 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 65 "parser_cocci_menhir.ml"
+# 48 "parser_cocci_menhir.ml"
 )
   | Tregister of (
 # 53 "parser_cocci_menhir.mly"
       (Data.clt)
-# 70 "parser_cocci_menhir.ml"
+# 53 "parser_cocci_menhir.ml"
 )
   | Tlong of (
 # 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 75 "parser_cocci_menhir.ml"
+# 58 "parser_cocci_menhir.ml"
 )
   | Tlist
   | Tint of (
 # 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 81 "parser_cocci_menhir.ml"
+# 64 "parser_cocci_menhir.ml"
 )
   | Tinline of (
 # 53 "parser_cocci_menhir.mly"
       (Data.clt)
-# 86 "parser_cocci_menhir.ml"
+# 69 "parser_cocci_menhir.ml"
 )
   | Tfloat of (
 # 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 91 "parser_cocci_menhir.ml"
+# 74 "parser_cocci_menhir.ml"
 )
   | Textern of (
 # 53 "parser_cocci_menhir.mly"
       (Data.clt)
-# 96 "parser_cocci_menhir.ml"
+# 79 "parser_cocci_menhir.ml"
 )
   | Tenum of (
 # 50 "parser_cocci_menhir.mly"
       (Data.clt)
-# 101 "parser_cocci_menhir.ml"
+# 84 "parser_cocci_menhir.ml"
 )
   | Tdouble of (
 # 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 106 "parser_cocci_menhir.ml"
+# 89 "parser_cocci_menhir.ml"
 )
   | Tconst of (
 # 54 "parser_cocci_menhir.mly"
       (Data.clt)
-# 111 "parser_cocci_menhir.ml"
+# 94 "parser_cocci_menhir.ml"
 )
   | Tchar of (
 # 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 116 "parser_cocci_menhir.ml"
+# 99 "parser_cocci_menhir.ml"
 )
   | Tauto of (
 # 53 "parser_cocci_menhir.mly"
       (Data.clt)
-# 121 "parser_cocci_menhir.ml"
+# 104 "parser_cocci_menhir.ml"
 )
   | Tattr of (
 # 55 "parser_cocci_menhir.mly"
       (string * Data.clt)
-# 126 "parser_cocci_menhir.ml"
+# 109 "parser_cocci_menhir.ml"
 )
   | TXor of (
 # 92 "parser_cocci_menhir.mly"
        (Data.clt)
-# 131 "parser_cocci_menhir.ml"
+# 114 "parser_cocci_menhir.ml"
 )
   | TWords
   | TWhy0
   | TWhy of (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 138 "parser_cocci_menhir.ml"
+# 121 "parser_cocci_menhir.ml"
 )
   | TWhile of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 143 "parser_cocci_menhir.ml"
+# 126 "parser_cocci_menhir.ml"
 )
   | TWhenTrue of (
 # 74 "parser_cocci_menhir.mly"
        (Data.clt)
-# 148 "parser_cocci_menhir.ml"
+# 131 "parser_cocci_menhir.ml"
 )
   | TWhenFalse of (
 # 74 "parser_cocci_menhir.mly"
        (Data.clt)
-# 153 "parser_cocci_menhir.ml"
+# 136 "parser_cocci_menhir.ml"
 )
   | TWhen of (
 # 74 "parser_cocci_menhir.mly"
        (Data.clt)
-# 158 "parser_cocci_menhir.ml"
+# 141 "parser_cocci_menhir.ml"
 )
   | TUsing
   | TTypedef
   | TTypeId of (
 # 59 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 165 "parser_cocci_menhir.ml"
+# 148 "parser_cocci_menhir.ml"
 )
   | TType
   | TTilde of (
 # 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 171 "parser_cocci_menhir.ml"
+# 154 "parser_cocci_menhir.ml"
 )
   | TSwitch of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 176 "parser_cocci_menhir.ml"
+# 159 "parser_cocci_menhir.ml"
 )
   | TString of (
 # 87 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 181 "parser_cocci_menhir.ml"
+# 164 "parser_cocci_menhir.ml"
 )
   | TStrict of (
 # 74 "parser_cocci_menhir.mly"
        (Data.clt)
-# 186 "parser_cocci_menhir.ml"
+# 169 "parser_cocci_menhir.ml"
 )
   | TStatement
   | TSizeof of (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 192 "parser_cocci_menhir.ml"
+# 175 "parser_cocci_menhir.ml"
 )
   | TShOp of (
 # 96 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
-# 197 "parser_cocci_menhir.ml"
+# 180 "parser_cocci_menhir.ml"
 )
   | TScriptData of (
 # 71 "parser_cocci_menhir.mly"
        (string)
-# 202 "parser_cocci_menhir.ml"
+# 185 "parser_cocci_menhir.ml"
 )
   | TScript
   | TRuleName of (
 # 47 "parser_cocci_menhir.mly"
       (string)
-# 208 "parser_cocci_menhir.ml"
+# 191 "parser_cocci_menhir.ml"
 )
   | TRightIso
-  | TReverse
   | TReturn of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 215 "parser_cocci_menhir.ml"
+# 197 "parser_cocci_menhir.ml"
 )
   | TPure
   | TPtrOp of (
 # 104 "parser_cocci_menhir.mly"
        (Data.clt)
-# 221 "parser_cocci_menhir.ml"
+# 203 "parser_cocci_menhir.ml"
 )
   | TPtVirg of (
 # 107 "parser_cocci_menhir.mly"
        (Data.clt)
-# 226 "parser_cocci_menhir.ml"
+# 208 "parser_cocci_menhir.ml"
 )
   | TPragma of (
 # 59 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 231 "parser_cocci_menhir.ml"
+# 213 "parser_cocci_menhir.ml"
 )
   | TPosition
   | TPosAny
   | TPlusFile of (
 # 83 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 238 "parser_cocci_menhir.ml"
+# 220 "parser_cocci_menhir.ml"
 )
   | TPlus0
   | TPlus of (
 # 98 "parser_cocci_menhir.mly"
        (Data.clt)
-# 244 "parser_cocci_menhir.ml"
+# 226 "parser_cocci_menhir.ml"
 )
   | TPathIsoFile of (
 # 79 "parser_cocci_menhir.mly"
        (string)
-# 249 "parser_cocci_menhir.ml"
+# 231 "parser_cocci_menhir.ml"
 )
   | TParameter
   | TPOEllipsis of (
 # 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 255 "parser_cocci_menhir.ml"
+# 237 "parser_cocci_menhir.ml"
 )
   | TPCEllipsis of (
 # 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 260 "parser_cocci_menhir.ml"
+# 242 "parser_cocci_menhir.ml"
 )
   | TPArob
   | TOrLog of (
 # 89 "parser_cocci_menhir.mly"
        (Data.clt)
-# 266 "parser_cocci_menhir.ml"
+# 248 "parser_cocci_menhir.ml"
 )
   | TOr of (
 # 91 "parser_cocci_menhir.mly"
        (Data.clt)
-# 271 "parser_cocci_menhir.ml"
+# 253 "parser_cocci_menhir.ml"
 )
   | TOn
   | TOPar0 of (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 277 "parser_cocci_menhir.ml"
+# 259 "parser_cocci_menhir.ml"
 )
   | TOPar of (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 282 "parser_cocci_menhir.ml"
+# 264 "parser_cocci_menhir.ml"
 )
   | TOInit of (
 # 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 287 "parser_cocci_menhir.ml"
+# 269 "parser_cocci_menhir.ml"
 )
   | TOEllipsis of (
 # 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 292 "parser_cocci_menhir.ml"
+# 274 "parser_cocci_menhir.ml"
 )
   | TOCro of (
 # 102 "parser_cocci_menhir.mly"
        (Data.clt)
-# 297 "parser_cocci_menhir.ml"
+# 279 "parser_cocci_menhir.ml"
 )
   | TOBrace of (
 # 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 302 "parser_cocci_menhir.ml"
+# 284 "parser_cocci_menhir.ml"
 )
   | TNothing
   | TNotEq of (
 # 94 "parser_cocci_menhir.mly"
        (Data.clt)
-# 308 "parser_cocci_menhir.ml"
+# 290 "parser_cocci_menhir.ml"
 )
   | TNever
   | TName
   | TMul of (
 # 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 315 "parser_cocci_menhir.ml"
+# 297 "parser_cocci_menhir.ml"
 )
   | TMinusFile of (
 # 83 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 320 "parser_cocci_menhir.ml"
+# 302 "parser_cocci_menhir.ml"
 )
   | TMinus of (
 # 98 "parser_cocci_menhir.mly"
        (Data.clt)
-# 325 "parser_cocci_menhir.ml"
+# 307 "parser_cocci_menhir.ml"
 )
   | TMid0 of (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 330 "parser_cocci_menhir.ml"
+# 312 "parser_cocci_menhir.ml"
 )
   | TMetaType of (
 # 64 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 335 "parser_cocci_menhir.ml"
+# 317 "parser_cocci_menhir.ml"
 )
   | TMetaStmList of (
 # 64 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 340 "parser_cocci_menhir.ml"
+# 322 "parser_cocci_menhir.ml"
 )
   | TMetaStm of (
 # 64 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 345 "parser_cocci_menhir.ml"
+# 327 "parser_cocci_menhir.ml"
 )
   | TMetaPos of (
 # 68 "parser_cocci_menhir.mly"
        (Parse_aux.pos_info)
-# 350 "parser_cocci_menhir.ml"
+# 332 "parser_cocci_menhir.ml"
 )
   | TMetaParamList of (
 # 66 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
-# 355 "parser_cocci_menhir.ml"
+# 337 "parser_cocci_menhir.ml"
 )
   | TMetaParam of (
 # 64 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 360 "parser_cocci_menhir.ml"
+# 342 "parser_cocci_menhir.ml"
 )
   | TMetaLocalIdExp of (
 # 67 "parser_cocci_menhir.mly"
        (Parse_aux.typed_info)
-# 365 "parser_cocci_menhir.ml"
+# 347 "parser_cocci_menhir.ml"
 )
   | TMetaLocalFunc of (
 # 61 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
-# 370 "parser_cocci_menhir.ml"
+# 352 "parser_cocci_menhir.ml"
 )
   | TMetaIterator of (
 # 62 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
-# 375 "parser_cocci_menhir.ml"
+# 357 "parser_cocci_menhir.ml"
 )
   | TMetaInit of (
 # 65 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 380 "parser_cocci_menhir.ml"
+# 362 "parser_cocci_menhir.ml"
 )
   | TMetaIdExp of (
 # 67 "parser_cocci_menhir.mly"
        (Parse_aux.typed_info)
-# 385 "parser_cocci_menhir.ml"
+# 367 "parser_cocci_menhir.ml"
 )
   | TMetaId of (
 # 61 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
-# 390 "parser_cocci_menhir.ml"
+# 372 "parser_cocci_menhir.ml"
 )
   | TMetaFunc of (
 # 61 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
-# 395 "parser_cocci_menhir.ml"
+# 377 "parser_cocci_menhir.ml"
 )
   | TMetaExpList of (
 # 66 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
-# 400 "parser_cocci_menhir.ml"
+# 382 "parser_cocci_menhir.ml"
 )
   | TMetaExp of (
 # 67 "parser_cocci_menhir.mly"
        (Parse_aux.typed_info)
-# 405 "parser_cocci_menhir.ml"
+# 387 "parser_cocci_menhir.ml"
 )
   | TMetaErr of (
 # 63 "parser_cocci_menhir.mly"
        (Parse_aux.expinfo)
-# 410 "parser_cocci_menhir.ml"
+# 392 "parser_cocci_menhir.ml"
 )
   | TMetaDeclarer of (
 # 62 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
-# 415 "parser_cocci_menhir.ml"
+# 397 "parser_cocci_menhir.ml"
 )
   | TMetaConst of (
 # 67 "parser_cocci_menhir.mly"
        (Parse_aux.typed_info)
-# 420 "parser_cocci_menhir.ml"
+# 402 "parser_cocci_menhir.ml"
 )
   | TMPtVirg
   | TLogOp of (
 # 95 "parser_cocci_menhir.mly"
        (Ast_cocci.logicalOp * Data.clt)
-# 426 "parser_cocci_menhir.ml"
+# 408 "parser_cocci_menhir.ml"
 )
   | TLocal
   | TLineEnd of (
 # 74 "parser_cocci_menhir.mly"
        (Data.clt)
-# 432 "parser_cocci_menhir.ml"
+# 414 "parser_cocci_menhir.ml"
 )
   | TIteratorId of (
 # 59 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 437 "parser_cocci_menhir.ml"
+# 419 "parser_cocci_menhir.ml"
 )
   | TIterator
   | TIsoType
@@ -448,60 +430,60 @@ type token =
   | TInt of (
 # 87 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 452 "parser_cocci_menhir.ml"
+# 434 "parser_cocci_menhir.ml"
 )
   | TInitialize
   | TInitialiser
   | TIncludeNL of (
 # 80 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 459 "parser_cocci_menhir.ml"
+# 441 "parser_cocci_menhir.ml"
 )
   | TIncludeL of (
 # 80 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 464 "parser_cocci_menhir.ml"
+# 446 "parser_cocci_menhir.ml"
 )
   | TInc of (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 469 "parser_cocci_menhir.ml"
+# 451 "parser_cocci_menhir.ml"
 )
   | TIf of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 474 "parser_cocci_menhir.ml"
+# 456 "parser_cocci_menhir.ml"
 )
   | TIdentifier
   | TIdent of (
 # 59 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 480 "parser_cocci_menhir.ml"
+# 462 "parser_cocci_menhir.ml"
 )
   | TIdExpression
   | TGoto of (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 486 "parser_cocci_menhir.ml"
+# 468 "parser_cocci_menhir.ml"
 )
   | TGenerated
   | TFunction
   | TFunDecl of (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 493 "parser_cocci_menhir.ml"
+# 475 "parser_cocci_menhir.ml"
 )
   | TFresh
   | TForall
   | TFor of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 500 "parser_cocci_menhir.ml"
+# 482 "parser_cocci_menhir.ml"
 )
   | TFloat of (
 # 87 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 505 "parser_cocci_menhir.ml"
+# 487 "parser_cocci_menhir.ml"
 )
   | TFinalize
   | TExtends
@@ -512,155 +494,173 @@ type token =
   | TEqEq of (
 # 94 "parser_cocci_menhir.mly"
        (Data.clt)
-# 516 "parser_cocci_menhir.ml"
+# 498 "parser_cocci_menhir.ml"
 )
   | TEq of (
 # 107 "parser_cocci_menhir.mly"
        (Data.clt)
-# 521 "parser_cocci_menhir.ml"
+# 503 "parser_cocci_menhir.ml"
 )
   | TElse of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 526 "parser_cocci_menhir.ml"
+# 508 "parser_cocci_menhir.ml"
 )
   | TEllipsis of (
 # 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 531 "parser_cocci_menhir.ml"
+# 513 "parser_cocci_menhir.ml"
 )
   | TDotDot of (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 536 "parser_cocci_menhir.ml"
+# 518 "parser_cocci_menhir.ml"
 )
   | TDot of (
 # 107 "parser_cocci_menhir.mly"
        (Data.clt)
-# 541 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.ml"
 )
   | TDo of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 546 "parser_cocci_menhir.ml"
+# 528 "parser_cocci_menhir.ml"
 )
   | TDmOp of (
 # 97 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
-# 551 "parser_cocci_menhir.ml"
+# 533 "parser_cocci_menhir.ml"
 )
   | TDisable
   | TDepends
   | TDefineParam of (
 # 82 "parser_cocci_menhir.mly"
        (Data.clt * token * int * int)
-# 558 "parser_cocci_menhir.ml"
+# 540 "parser_cocci_menhir.ml"
 )
   | TDefine of (
 # 81 "parser_cocci_menhir.mly"
        (Data.clt * token)
-# 563 "parser_cocci_menhir.ml"
+# 545 "parser_cocci_menhir.ml"
 )
   | TDefault of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 568 "parser_cocci_menhir.ml"
+# 550 "parser_cocci_menhir.ml"
 )
   | TDeclarerId of (
 # 59 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 573 "parser_cocci_menhir.ml"
+# 555 "parser_cocci_menhir.ml"
 )
   | TDeclarer
   | TDec of (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 579 "parser_cocci_menhir.ml"
+# 561 "parser_cocci_menhir.ml"
 )
+  | TCppConcatOp
   | TContinue of (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 584 "parser_cocci_menhir.ml"
+# 567 "parser_cocci_menhir.ml"
 )
   | TContext
   | TConstant
   | TComma of (
 # 107 "parser_cocci_menhir.mly"
        (Data.clt)
-# 591 "parser_cocci_menhir.ml"
+# 574 "parser_cocci_menhir.ml"
 )
   | TChar of (
 # 87 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 596 "parser_cocci_menhir.ml"
+# 579 "parser_cocci_menhir.ml"
 )
   | TCase of (
 # 57 "parser_cocci_menhir.mly"
        (Data.clt)
-# 601 "parser_cocci_menhir.ml"
+# 584 "parser_cocci_menhir.ml"
 )
   | TCPar0 of (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 606 "parser_cocci_menhir.ml"
+# 589 "parser_cocci_menhir.ml"
 )
   | TCPar of (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 611 "parser_cocci_menhir.ml"
+# 594 "parser_cocci_menhir.ml"
 )
   | TCEllipsis of (
 # 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 616 "parser_cocci_menhir.ml"
+# 599 "parser_cocci_menhir.ml"
 )
   | TCCro of (
 # 102 "parser_cocci_menhir.mly"
        (Data.clt)
-# 621 "parser_cocci_menhir.ml"
+# 604 "parser_cocci_menhir.ml"
 )
   | TCBrace of (
 # 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 626 "parser_cocci_menhir.ml"
+# 609 "parser_cocci_menhir.ml"
 )
   | TBreak of (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 631 "parser_cocci_menhir.ml"
+# 614 "parser_cocci_menhir.ml"
 )
   | TBang0
   | TBang of (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 637 "parser_cocci_menhir.ml"
+# 620 "parser_cocci_menhir.ml"
 )
   | TAssign of (
 # 108 "parser_cocci_menhir.mly"
        (Ast_cocci.assignOp * Data.clt)
-# 642 "parser_cocci_menhir.ml"
+# 625 "parser_cocci_menhir.ml"
 )
   | TArobArob
   | TArob
   | TAny of (
 # 74 "parser_cocci_menhir.mly"
        (Data.clt)
-# 649 "parser_cocci_menhir.ml"
+# 632 "parser_cocci_menhir.ml"
 )
   | TAndLog of (
 # 90 "parser_cocci_menhir.mly"
        (Data.clt)
-# 654 "parser_cocci_menhir.ml"
+# 637 "parser_cocci_menhir.ml"
 )
   | TAnd of (
 # 93 "parser_cocci_menhir.mly"
        (Data.clt)
-# 659 "parser_cocci_menhir.ml"
+# 642 "parser_cocci_menhir.ml"
 )
   | EOF
 
 and _menhir_jeton = token
 
+
+# 23 "parser_cocci_menhir.mly"
+  
+
+(* Not clear how to allow function declarations to specify a return type
+and how to allow both to be specified as static, because they are in
+different rules.  The rules seem to have to be combined, which would allow
+functions to be declared as local variables *)
+
+(* Not clear how to let a function have a parameter of type void.  At the
+moment, void is allowed to be the type of a variable, which is wrong, and a
+parameter needs both a type and an identifier *)
+module Ast0 = Ast0_cocci
+module Ast = Ast_cocci
+module P = Parse_aux
+
+# 664 "parser_cocci_menhir.ml"
 let _eRR =
   Error
 
@@ -715,217 +715,217 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           153
       | TContinue _ ->
           152
-      | TDec _ ->
+      | TCppConcatOp ->
           151
-      | TDeclarer ->
+      | TDec _ ->
           150
-      | TDeclarerId _ ->
+      | TDeclarer ->
           149
-      | TDefault _ ->
+      | TDeclarerId _ ->
           148
-      | TDefine _ ->
+      | TDefault _ ->
           147
-      | TDefineParam _ ->
+      | TDefine _ ->
           146
-      | TDepends ->
+      | TDefineParam _ ->
           145
-      | TDisable ->
+      | TDepends ->
           144
-      | TDmOp _ ->
+      | TDisable ->
           143
-      | TDo _ ->
+      | TDmOp _ ->
           142
-      | TDot _ ->
+      | TDo _ ->
           141
-      | TDotDot _ ->
+      | TDot _ ->
           140
-      | TEllipsis _ ->
+      | TDotDot _ ->
           139
-      | TElse _ ->
+      | TEllipsis _ ->
           138
-      | TEq _ ->
+      | TElse _ ->
           137
-      | TEqEq _ ->
+      | TEq _ ->
           136
-      | TError ->
+      | TEqEq _ ->
           135
-      | TEver ->
+      | TError ->
           134
-      | TExists ->
+      | TEver ->
           133
-      | TExpression ->
+      | TExists ->
           132
-      | TExtends ->
+      | TExpression ->
           131
-      | TFinalize ->
+      | TExtends ->
           130
-      | TFloat _ ->
+      | TFinalize ->
           129
-      | TFor _ ->
+      | TFloat _ ->
           128
-      | TForall ->
+      | TFor _ ->
           127
-      | TFresh ->
+      | TForall ->
           126
-      | TFunDecl _ ->
+      | TFresh ->
           125
-      | TFunction ->
+      | TFunDecl _ ->
           124
-      | TGenerated ->
+      | TFunction ->
           123
-      | TGoto _ ->
+      | TGenerated ->
           122
-      | TIdExpression ->
+      | TGoto _ ->
           121
-      | TIdent _ ->
+      | TIdExpression ->
           120
-      | TIdentifier ->
+      | TIdent _ ->
           119
-      | TIf _ ->
+      | TIdentifier ->
           118
-      | TInc _ ->
+      | TIf _ ->
           117
-      | TIncludeL _ ->
+      | TInc _ ->
           116
-      | TIncludeNL _ ->
+      | TIncludeL _ ->
           115
-      | TInitialiser ->
+      | TIncludeNL _ ->
           114
-      | TInitialize ->
+      | TInitialiser ->
           113
-      | TInt _ ->
+      | TInitialize ->
           112
-      | TInvalid ->
+      | TInt _ ->
           111
-      | TIso ->
+      | TInvalid ->
           110
-      | TIsoArgExpression ->
+      | TIso ->
           109
-      | TIsoDeclaration ->
+      | TIsoArgExpression ->
           108
-      | TIsoExpression ->
+      | TIsoDeclaration ->
           107
-      | TIsoStatement ->
+      | TIsoExpression ->
           106
-      | TIsoTestExpression ->
+      | TIsoStatement ->
           105
-      | TIsoTopLevel ->
+      | TIsoTestExpression ->
           104
-      | TIsoType ->
+      | TIsoTopLevel ->
           103
-      | TIterator ->
+      | TIsoType ->
           102
-      | TIteratorId _ ->
+      | TIterator ->
           101
-      | TLineEnd _ ->
+      | TIteratorId _ ->
           100
-      | TLocal ->
+      | TLineEnd _ ->
           99
-      | TLogOp _ ->
+      | TLocal ->
           98
-      | TMPtVirg ->
+      | TLogOp _ ->
           97
-      | TMetaConst _ ->
+      | TMPtVirg ->
           96
-      | TMetaDeclarer _ ->
+      | TMetaConst _ ->
           95
-      | TMetaErr _ ->
+      | TMetaDeclarer _ ->
           94
-      | TMetaExp _ ->
+      | TMetaErr _ ->
           93
-      | TMetaExpList _ ->
+      | TMetaExp _ ->
           92
-      | TMetaFunc _ ->
+      | TMetaExpList _ ->
           91
-      | TMetaId _ ->
+      | TMetaFunc _ ->
           90
-      | TMetaIdExp _ ->
+      | TMetaId _ ->
           89
-      | TMetaInit _ ->
+      | TMetaIdExp _ ->
           88
-      | TMetaIterator _ ->
+      | TMetaInit _ ->
           87
-      | TMetaLocalFunc _ ->
+      | TMetaIterator _ ->
           86
-      | TMetaLocalIdExp _ ->
+      | TMetaLocalFunc _ ->
           85
-      | TMetaParam _ ->
+      | TMetaLocalIdExp _ ->
           84
-      | TMetaParamList _ ->
+      | TMetaParam _ ->
           83
-      | TMetaPos _ ->
+      | TMetaParamList _ ->
           82
-      | TMetaStm _ ->
+      | TMetaPos _ ->
           81
-      | TMetaStmList _ ->
+      | TMetaStm _ ->
           80
-      | TMetaType _ ->
+      | TMetaStmList _ ->
           79
-      | TMid0 _ ->
+      | TMetaType _ ->
           78
-      | TMinus _ ->
+      | TMid0 _ ->
           77
-      | TMinusFile _ ->
+      | TMinus _ ->
           76
-      | TMul _ ->
+      | TMinusFile _ ->
           75
-      | TName ->
+      | TMul _ ->
           74
-      | TNever ->
+      | TName ->
           73
-      | TNotEq _ ->
+      | TNever ->
           72
-      | TNothing ->
+      | TNotEq _ ->
           71
-      | TOBrace _ ->
+      | TNothing ->
           70
-      | TOCro _ ->
+      | TOBrace _ ->
           69
-      | TOEllipsis _ ->
+      | TOCro _ ->
           68
-      | TOInit _ ->
+      | TOEllipsis _ ->
           67
-      | TOPar _ ->
+      | TOInit _ ->
           66
-      | TOPar0 _ ->
+      | TOPar _ ->
           65
-      | TOn ->
+      | TOPar0 _ ->
           64
-      | TOr _ ->
+      | TOn ->
           63
-      | TOrLog _ ->
+      | TOr _ ->
           62
-      | TPArob ->
+      | TOrLog _ ->
           61
-      | TPCEllipsis _ ->
+      | TPArob ->
           60
-      | TPOEllipsis _ ->
+      | TPCEllipsis _ ->
           59
-      | TParameter ->
+      | TPOEllipsis _ ->
           58
-      | TPathIsoFile _ ->
+      | TParameter ->
           57
-      | TPlus _ ->
+      | TPathIsoFile _ ->
           56
-      | TPlus0 ->
+      | TPlus _ ->
           55
-      | TPlusFile _ ->
+      | TPlus0 ->
           54
-      | TPosAny ->
+      | TPlusFile _ ->
           53
-      | TPosition ->
+      | TPosAny ->
           52
-      | TPragma _ ->
+      | TPosition ->
           51
-      | TPtVirg _ ->
+      | TPragma _ ->
           50
-      | TPtrOp _ ->
+      | TPtVirg _ ->
           49
-      | TPure ->
+      | TPtrOp _ ->
           48
-      | TReturn _ ->
+      | TPure ->
           47
-      | TReverse ->
+      | TReturn _ ->
           46
       | TRightIso ->
           45
@@ -1066,6 +1066,8 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           Obj.repr ()
       | TContinue _v ->
           Obj.repr _v
+      | TCppConcatOp ->
+          Obj.repr ()
       | TDec _v ->
           Obj.repr _v
       | TDeclarer ->
@@ -1276,8 +1278,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           Obj.repr ()
       | TReturn _v ->
           Obj.repr _v
-      | TReverse ->
-          Obj.repr ()
       | TRightIso ->
           Obj.repr ()
       | TRuleName _v ->
@@ -1370,19 +1370,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           Obj.repr _v
   
   let default_reduction =
-    (16, "\000\000\000\000\0015\0016\000\000\0018\0017\000\001\000\000\001q\000\000\000\000\000\137\000\000\000\000\001\237\000\143\000\000\001\025\000\000\001$\001\028\001\022\001.\002\226\002\225\000\000\001\026\000\000\001%\001\029\001\023\001/\001\027\000\000\001&\001\030\001 \000\000\0012\002\134\0011\001'\001\031\000\136\001\024\001-\000\000\000\000\001,\000\000\000\000\000\000\000\000\000\000\001c\000\241\002\216\000\000\000\000\000\000\000\000\000\000\002\221\000\000\001)\000\000\002\223\000\000\000\000\000\000\003\029\002P\000\000\003\027\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\026\003\028\002V\001\013\002U\001\011\001\012\002T\002S\002R\002N\000\000\000\000\002O\000\214\000\000\002Q\000\000\003\025\000\000\000c\001\n\0021\000\000\000\000\0024\000\000\000\015\000\000\000\000\000\000\000\000\000\215\002M\002Y\000[\000\021\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\002\018\000R\000\224\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000T\000\000\000S\001\021\000\000\000\000\000\141\000\225\000\000\0027\000\226\000\014\000\016\000\000\000\000\000\144\000\000\000\142\000\000\000\000\000\229\000\000\000\000\0022\0025\000\000\0023\0026\003\000\003\001\002\255\000\000\002W\002\254\000\000\002q\000\000\000\000\002p\002o\002n\002m\002l\002h\000\000\000\000\002i\000\000\002k\000\000\000\000\000g\002?\000\000\000\000\002B\000\000\000\000\002E\000\000\000\000\002@\002C\000\000\002A\002D\002s\002g\003\014\003\015\003\013\003\012\000h\000\000\000\000\000W\000\000\000V\000\236\000\000\001\229\000\000\000\000\000\000\000\000\000\000\000\219\001\235\000\000\000\000\001\137\000U\0001\000\212\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\0003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002X\000\000\000\145\000\000\000\000\001\213\000\000\001\127\001\194\000\000\000\000\001\212\000\000\001}\001\193\000\000\000\000\000d\000\000\002r\000\000\000\000\003\017\003\016\000\000\001\230\000\000\000\000\003\003\003\002\000\000\000Q\000\151\000\000\001e\000\000\002\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\249\000\155\000\000\000\000\000n\000o\001\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\166\001\218\000\000\000\152\000\161\000\000\001\220\000\000\000\000\000\000\000\000\000\153\000\167\000\000\001k\000\000\000\000\002\218\000\000\000\000\000\139\000\000\000\000\002\217\000\000\000\000\000\000\002\220\002\224\000\000\000\000\000\000\001*\000\000\000\223\000\000\001+\000\000\000\000\001N\000\000\001M\000\000\001[\000\000\001s\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\148\000\000\000\000\000\000\000\000\000\150\000\000\000\146\000\000\002\252\000\000\000\195\002\251\000\000\000\000\000\149\000\000\000\147\002\212\002\214\002\215\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002w\000\000\000\000\000\000\000\000\002~\000\000\000\000\002}\002|\002{\002z\002y\001J\002u\000\000\000\000\002v\000\000\002x\000\000\000\000\000i\002F\000\000\000\000\002I\000\000\000\000\002L\000\000\000\000\002G\002J\000\000\002H\002K\002\128\002t\003\021\003\022\003\020\003\019\000j\000\000\000\000\000Z\000\000\000Y\000\000\002\127\000\000\001\195\000X\000?\000\235\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\024\003\023\000\000\002\203\000\000\002\202\000\000\000\000\000\000\000\000\003$\000\000\000\000\000\000\003%\000\000\000\018\000\000\000\000\000\000\003 \000\000\001\139\000\000\000\000\000\000\000\168\002\193\001a\000\000\000\157\001`\001:\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\217\000\201\000\000\001o\000\000\000\000\000\200\000\196\000\000\000\203\000\197\000\202\000\000\002\205\000\000\002\204\002\190\000\000\000\000\000\000\000\000\000\000\002\199\000\000\000\000\000\000\000\000\000\000\002\200\002\192\000\000\002\206\000\000\002\194\000\000\000\172\000\000\002\209\000\156\000\000\001<\000\000\000\000\000\000\000\000\000\000\000\000\001\018\000\000\000w\000\000\000\000\000\000\002]\000\000\000\000\000\000\002e\000\000\000\000\002d\000\000\003\n\002c\002b\002a\002`\002_\002[\000\000\000\000\002\\\000\000\002^\000\000\000\000\000\000\000\000\000\000\000e\0028\000\000\000\000\002;\000\000\000\000\002>\000\000\000\000\0029\002<\000\000\002:\002=\002f\002Z\000f\003\007\003\008\003\006\003\005\003\t\000\000\000\000\000\000\000\000\000\211\000\210\000\000\000\000\000\000\000\000\001@\000\000\000\221\001=\000\000\000\209\001C\000\000\000\000\001D\000\000\000\000\001E\000\000\001m\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\001B\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\000t\000q\000r\001I\001?\000\000\001>\000\000\000\188\000\000\002\169\000\000\000\000\000\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\191\000\000\000\000\000\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\181\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\185\000\000\000\000\002\230\000\000\002\237\000\174\000\000\000\000\000\000\000\000\000\186\000\000\000\182\000\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\190\000\000\000\000\000\193\000\000\002\231\000\173\000\000\002\232\000\000\002\239\000\000\000\000\000\000\000\000\000\192\000\000\000\176\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\180\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\183\000\170\000\169\000\000\002\240\002\241\000\000\002\242\000\000\002\243\000\000\001;\002\197\000\000\000\000\001\217\000\000\001\135\001\199\000\000\002\191\000\000\000\000\000\000\002\196\000\000\000\000\000\000\001\003\000\000\000\253\000\000\000\254\000\000\001\008\000\252\001\007\000\000\002\208\001\t\000\000\000\175\000\000\000\000\000\000\000\000\001\005\001\000\001\214\000\000\001\001\000\000\001\002\000\000\001\129\001\196\000\000\000\000\000\000\001\225\000\000\001\223\000\000\000\000\001\227\001\221\000\000\001\228\001\222\000\000\002\210\001\231\000\000\000\171\000\000\000\000\001\215\000\000\001\131\001\197\000\000\003!\000\000\003\030\000\000\003\031\000\019\000\020\000\000\000\000\002\151\000\000\002\150\000\000\000\000\002\153\000\000\002\152\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\000\002\012\000\000\000\000\001\252\000\000\000\000\001\255\000\000\000\000\000\000\002\003\000\000\000\000\002\007\000\000\000\000\001\216\000\000\000\000\002\000\000\000\000\000\002\004\002\148\001\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\008\000\000\000\000\002\011\000\000\002\149\000\000\000\000\000\000\000\000\002\n\000\000\001\250\000\000\001\251\000\000\000\000\001\254\000\000\000\000\000\000\002\001\000\000\000\000\002\005\000\000\001\133\001\198\000\000\002\154\000\000\000\000\000\000\003\"\000\017\000u\000\000\003#\000\000\000\000\002\165\000\000\000\000\002\211\000a\000\000\000\000\000\000\000b\000\000\002\201\000\000\001g\002\198\000\000\000\000\001T\000\000\001S\000\000\001\\\000\000\001y\000\000\000\000\000\000\001R\000\000\001Q\000\000\001Y\000\000\001w\000\000\000\000\000\000\001V\000\000\001U\000\000\001Z\000\000\001{\000\000\000\000\000\000\001W\000\000\000\000\000\000\000\000\001P\000\000\001O\000\000\001]\000\000\001u\000\000\000\000\000\000\001X\000\002\000\000\000N\000O\000\000\000\000\002\137\002\139\000\000\000\000\001\162\002\140\002\138\000\129\000\000\000\000\002\189\000\000\000\000\002\146\002\135\002\136\000\000\001\174\000M\001^\000\003\000\000\000\000\002\131\000\000\002\016\000\000\000\128\000\000\000\000\002\187\000\000\000\000\000\000\000z\000\000\000\000\002\175\000\000\001\245\001\244\001\157\002\144\000\000\001\190\000\000\002\132\000\000\000\000\000|\000\000\000\000\002\179\000\000\001\171\000\000\000\000\001\167\000\000\000\000\000\000\001\170\000\000\001\169\000\000\000\000\000\000\000\000\000\000\000\000\001\191\000\000\001\165\000\000\001\164\000\000\000v\000\000\000\000\002\167\000\000\000\000\001\161\000\000\000\000\000~\000\000\000\000\002\183\000\000\000\000\000\000\000{\000\000\000\000\002\177\000\000\001\241\001\240\001\153\002\142\000\000\001\177\000\000\000\000\000\000\001\173\000\000\001\179\000\000\000\000\001\168\000\000\000\000\001\175\000\000\000\000\001\176\000\000\000\000\000\000\000\000\000\000\000\000\001\192\000\000\001\166\000}\000\000\000\000\002\181\000\000\000\000\000\000\0014\000y\0013\000\000\000\000\002\173\000\000\001\239\001\238\001\151\002\141\000\000\000\127\000\000\000\000\002\185\000\000\000\000\000\000\000\000\001\243\001\242\001\155\002\143\000\000\001\184\000\000\001\188\000\000\000\000\001\180\000\000\000\000\000\000\001\172\000\000\001\178\000\000\000\000\000\000\000\000\000\000\000\000\001\187\001\160\000\000\001\186\000\000\000\000\000\000\000\000\001\183\000\000\000\000\001\182\000\000\001\181\000\000\000\000\000\000\000\000\001\185\000\000\001\189\000\000\000\000\001_\000\004\000\000\001\163\000\005\000\000\000\000\000\239\000\006\000\000\001\203\001\204\001\202\000\000\000\000\000\000\000\000\000\000\000\000\000x\000\000\000\000\002\171\000\000\000\230\001\201\001\145\002\227\001\147\000\000\000\007\000\000\001\206\001\207\001\205\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\243\000\000\000\000\000\000\000\000\000\248\000\250\000\249\000\244\000\246\000\245\000\000\000\000\000\000\000\000\000\000\002\233\002\246\000\000\002\234\000\000\002\235\000\000\000\000\002\228\000\000\000\000\000\000\000\000\002\245\000\000\000\000\002\244\001\211\001\210\000\000\000\000\001\149\000\000\001\200\001\208\000\000\000\000\000\000\000\000\001\247\000\000\000\000\000l\000m\000\000\000\000\000\000\001\246\000\000\000\164\000\000\001i\000\000\000\000\000\163\000\159\000\000\000\000\000\000\000\000\001\014\000\000\000\000\002\249\000\000\002\250\000\000\000\000\001\234\001\232\000\000\001\233\000\008\000\000\000\t\000\000\002!\002\"\002 \000\000\000\000\002\031\000\000\000\n\000\000\002$\002%\002#\000\000\002'\000\000\000\000\000\000\002\025\000\000\000\000\002\027\000\000\002\021\000\000\002\023\000\000\002\028\000\000\002\029\002\022\002\020\002(\001\159\000\000\002\030\000\000\002*\000\000\002)\000\000\002+\000\000\002\147\000\011\000\000\000\000\000\000\000\000\000\000\000\000\002,\000\000\000\000\002/\000\000\002.\000\000\002-\000\204\000\000\000\000\000\000\000\000\000\205\0020\000\000\000\000\002\158\000\000\000\000\000\000\002\159\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\000\002\163\000k\000\000\000\000\000\213\000\000\000\000\000\233\000\232\000\231\000\000\001L\000\000\002\157\001\143\001\141\000\000\000\000\000\000\002\160\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\000\000\000\000\000\000\000\000\000\000\000\000\002\155\000\000\000\013\000\000\000\000\000\000\000\000\000\000\002\161")
+    (16, "\000\000\000\000\001F\001G\001E\000\000\001I\001H\000\001\000\000\001\130\000\000\000\000\000\136\000\000\000\000\001t\000\161\000\000\000\000\000\148\000\000\000\000\000\153\000\152\000\000\000\149\000\000\000\147\000\000\000\000\000\000\000\151\000\000\000\150\003\005\003\004\000\000\000\000\000\141\000\000\000\000\000\146\000\145\000\000\000\142\000\000\000\140\000\000\000\000\000\000\000\144\000\000\000\143\000\000\000\155\000\000\000\000\000\160\000\159\000\000\000\156\000\000\000\163\000\000\001B\002\148\001A\000\000\000\164\000\000\000\162\000\135\000\000\000\154\000\000\000\169\000\000\000\000\000\000\000\158\000\000\000\000\000\000\002\251\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\166\000\000\003\002\000\000\000\000\000\000\003}\002^\000\000\003{\000\000\002x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\003|\002d\001=\002c\001;\001<\002b\002a\002`\002\\\000\000\000\000\002]\001\n\000\000\002_\000\000\003y\000\000\000c\001:\002?\000\000\000\000\002B\000\000\000\015\000\000\000\000\000\000\000\000\001\011\002[\002g\000[\000\021\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\002 \000R\001\020\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000T\000\000\000S\001\021\000\000\002E\001\022\000\014\000\016\000\000\000\000\000\191\000\000\000\000\000\178\000\000\000\000\000\183\000\182\000\000\000\179\000\000\000\177\000\000\000\000\000\000\000\181\000\000\000\180\000\000\000\000\000\171\000\000\000\000\000\176\000\175\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\174\000\000\000\173\000\000\000\185\000\000\000\000\000\190\000\189\000\000\000\186\000\000\000\193\000\000\000\000\000\194\000\000\000\192\000\000\000\184\000\000\000\199\000\000\000\000\000\000\000\188\000\000\000\000\000\000\000\000\000\198\000\000\000\000\000\138\000\000\000\000\000\000\000\000\000\000\000\000\002\007\000\207\000\000\000\000\000n\000o\002\006\001\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\218\000\213\000\000\001\234\000\000\000\000\000\000\000\000\000\206\000\204\000\219\000\000\001|\000\000\000\000\002\253\000\000\002\252\000\000\000\000\000\000\000\000\000\000\000\196\000\000\000\000\000\000\000\000\000\197\000\195\000\000\000\000\002\255\003\003\000\187\000\000\000\000\001\025\000\000\000\000\002@\002C\000\000\002A\002D\003`\003a\003_\000\000\002e\003^\000\000\002\127\000\000\000\000\002~\002}\002|\002{\002z\002v\000\000\000\000\002w\000\000\002y\000\000\000\000\000g\002M\000\000\000\000\002P\000\000\000\000\002S\000\000\000\000\002N\002Q\000\000\002O\002R\002\129\002u\003n\003o\003m\003l\000h\000\000\000\000\000W\000\000\000V\001\030\000\000\001\243\000\000\000\000\000\000\000\000\000\000\001\015\001\249\000\000\000\000\001\154\000U\0001\001\008\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\0003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000\000\000\202\000\000\000\000\001\228\000\000\001\144\001\209\000\000\000\000\001\227\000\000\001\142\001\208\000\000\000\000\000d\000\000\002\128\000\000\000\000\003q\003p\000\000\001\244\000\000\000\000\003c\003b\000\000\000Q\000\203\000\000\001v\000\000\002\254\000\000\000\000\000\000\000\000\000\167\000\165\000\000\001\019\000\000\000\000\000\168\000\157\000\000\000\000\001_\000\000\001^\000\000\001l\000\000\001\132\000\000\000\000\000\000\0033\000\000\000\000\003&\000\000\000\000\003+\003*\000\000\003'\000\000\003%\000\000\000\000\000\000\003)\000\000\003(\000\000\000\000\003\031\000\000\000\000\003$\003#\000\000\003 \000\000\003\030\000\000\000\000\000\000\003\"\000\000\003!\000\000\003-\000\000\000\000\0032\0031\000\000\003.\000\000\0035\000\000\000\000\0036\000\000\0034\000\000\003,\000\000\003;\000\000\000\000\000\000\0030\000\000\000\000\003Z\000\000\000\000\000\000\000\000\003:\003/\000\000\003\\\000\000\000\247\003[\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\000\000\0039\0037\000\000\000\000\003Q\000\000\000\000\003D\000\000\000\000\003I\003H\000\000\003E\000\000\003C\000\000\000\000\000\000\003G\000\000\003F\000\000\000\000\003=\000\000\000\000\003B\003A\000\000\003>\000\000\003<\000\000\000\000\000\000\003@\000\000\003?\000\000\003K\000\000\000\000\003P\003O\000\000\003L\000\000\003S\000\000\000\000\003T\000\000\003R\000\000\003J\000\000\003Y\000\000\000\000\000\000\003N\000\000\000\000\000\000\000\000\003X\003M\000\000\000\000\000\000\000\000\003V\000\000\000\000\000\000\000\000\003W\003U\002\247\002\249\002\250\002\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\133\000\000\000\000\000\000\000\000\002\140\000\000\000\000\002\139\002\138\002\137\002\136\002\135\001[\002\131\000\000\000\000\002\132\000\000\002\134\000\000\000\000\000i\002T\000\000\000\000\002W\000\000\000\000\002Z\000\000\000\000\002U\002X\000\000\002V\002Y\002\142\002\130\003u\003v\003t\003s\000j\000\000\000\000\000Z\000\000\000Y\000\000\002\141\000\000\001\210\000X\000?\001\029\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003x\003w\000\000\002\238\000\000\002\237\000\000\000\000\000\000\000\000\003\132\000\000\000\000\000\000\003\133\000\000\000\018\000\000\000\000\000\000\003\128\000\000\001\156\000\000\000\000\000\000\000\220\002\228\001r\000\000\000\209\001q\001K\001J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\001\013\000\253\000\000\001\128\000\000\000\000\000\252\000\248\000\000\000\255\000\249\000\254\000\000\002\240\000\000\002\239\002\225\000\000\000\000\000\000\000\000\000\000\002\234\000\000\000\000\000\000\000\000\000\000\002\235\002\227\000\000\002\241\000\000\002\229\000\000\000\224\000\000\002\244\000\208\000\000\001M\000\000\000\000\000w\000\000\000\000\000\000\002k\000\000\000\000\000\000\002s\000\000\000\000\002r\000\000\003j\002q\002p\002o\002n\002m\002i\000\000\000\000\002j\000\000\002l\000\000\000\000\000\000\000\000\000\000\000e\002F\000\000\000\000\002I\000\000\000\000\002L\000\000\000\000\002G\002J\000\000\002H\002K\002t\002h\000f\003g\003h\003f\003e\003i\000\000\000\000\000\000\000\000\001\007\001\006\000\000\000\000\000\000\000\000\001Q\000\000\001\017\001N\000\000\001\005\001T\000\000\000\000\001U\000\000\000\000\001V\000\000\001~\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001W\000\000\001S\000\000\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000t\000q\000r\001Z\001P\000\000\001O\000\000\000\240\000\000\002\204\000\000\000\000\000\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\000\001@\000\000\000\000\000\000\000\233\000\000\000\230\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\237\000\000\000\000\003\t\000\000\003\016\000\226\000\000\000\000\000\000\000\000\000\238\000\000\000\234\000\231\000\000\003\n\000\225\000\000\003\011\000\000\003\018\000\000\000\000\000\000\000\000\000\244\000\000\000\228\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\242\000\000\000\000\000\245\000\000\000\000\000\000\000\000\001?\000\000\000\000\000\000\000\232\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\235\000\222\000\221\000\000\003\019\003\020\000\000\003\021\000\000\003\022\000\000\001L\002\232\000\000\000\000\001\232\000\000\001\152\001\214\000\000\002\226\000\000\000\000\000\000\002\231\000\000\000\000\000\000\0013\000\000\001-\000\000\001.\000\000\0018\001,\0017\000\000\002\243\0019\000\000\000\227\000\000\000\000\000\000\000\000\0015\0010\001\229\000\000\0011\000\000\0012\000\000\001\146\001\211\000\000\000\000\000\000\001\239\000\000\001\237\000\000\000\000\001\241\001\235\000\000\001\242\001\236\000\000\002\245\001\245\000\000\000\223\000\000\000\000\001\230\000\000\001\148\001\212\000\000\003\129\000\000\003~\000\000\003\127\000\019\000\020\000\000\000\000\002\183\000\000\002\182\000\000\000\000\002\185\000\000\002\184\000\000\000\000\000\000\002\016\000\000\000\000\002\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\023\000\000\000\000\002\026\000\000\002\n\000\000\000\000\002\013\000\000\000\000\000\000\002\017\000\000\000\000\002\021\000\000\000\000\001\231\000\000\000\000\002\014\000\000\000\000\002\018\002\180\002\011\000\000\002\181\000\000\000\000\000\000\000\000\002\024\000\000\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022\000\000\000\000\002\025\000\000\002\t\000\000\000\000\002\012\000\000\000\000\000\000\002\015\000\000\000\000\002\019\000\000\001\150\001\213\000\000\002\186\000\000\000\000\000\000\003\130\000\017\000u\000\000\003\131\000\000\000\000\002\200\000\000\000\000\002\246\000a\000\000\000\000\000\000\000b\000\000\002\236\000\000\001x\002\233\000\000\000\000\001e\000\000\001d\000\000\001m\000\000\001\138\000\000\000\000\000\000\001c\000\000\001b\000\000\001j\000\000\001\136\000\000\000\000\000\000\001g\000\000\001f\000\000\001k\000\000\001\140\000\000\000\000\000\000\001h\000\000\000\000\000\000\000\000\001a\000\000\001`\000\000\001n\000\000\001\134\000\000\000\000\000\000\001i\000\002\000\000\000N\000O\000\000\000\000\002\160\002\164\002\168\002\156\002\153\000\000\000\000\001\177\002\165\002\172\002\157\002\171\002\155\002\170\002\159\002\151\002\158\002\167\002\154\002\161\002\152\002\163\002\169\002\166\002\162\000\128\000\000\000\000\002\222\000\000\000\000\002\194\000\000\000\000\002\196\002\195\002\178\000\000\000\000\002\224\002\149\002\150\000\000\001\189\000M\001o\000\003\000\000\000\000\002\145\000\000\002\030\000\000\000\127\000\000\000\000\002\220\000\000\000\000\000\000\000y\000\000\000\000\002\208\000\000\002\003\002\002\001\172\002\176\000\000\001\205\000\000\002\146\000\000\000\000\000{\000\000\000\000\002\212\000\000\001\186\000\000\000\000\001\182\000\000\000\000\000\000\001\185\000\000\001\184\000\000\000\000\000\000\000\000\000\000\000\000\001\206\000\000\001\180\000\000\001\179\000\000\000v\000\000\000\000\002\202\000\000\000\000\001\176\000\000\000\000\000}\000\000\000\000\002\216\000\000\000\000\000\000\000z\000\000\000\000\002\210\000\000\001\255\001\254\001\168\002\174\000\000\001\192\000\000\000\000\000\000\001\188\000\000\001\194\000\000\000\000\001\183\000\000\000\000\001\190\000\000\000\000\001\191\000\000\000\000\000\000\000\000\000\000\000\000\001\207\000\000\001\181\000\000\001\251\000|\000\000\000\000\002\214\000\000\000\000\000\000\001D\000x\001C\000\000\000\000\002\206\000\000\001\253\001\252\001\166\002\173\000\000\000~\000\000\000\000\002\218\000\000\000\000\000\000\000\000\002\001\002\000\001\170\002\175\000\000\001\199\000\000\001\203\000\000\000\000\001\195\000\000\000\000\000\000\001\187\000\000\001\193\000\000\000\000\000\000\000\000\001\175\000\000\000\000\001\202\000\000\001\201\000\000\000\000\000\000\000\000\001\198\000\000\000\000\001\197\000\000\001\196\000\000\000\000\000\000\000\000\001\200\000\000\001\204\000\000\000\000\001p\000\004\000\000\001\178\000\005\000\000\000\000\001!\000\006\000\000\001\218\001\219\001\217\000\000\001\216\003\006\001\162\000\000\000\007\000\000\001\221\001\222\001\220\000\000\000\000\000\000\000\000\001#\000\000\000\000\000\000\000\000\001(\001*\001)\001$\001&\001%\000\000\000\000\000\000\000\000\000\000\003\012\003\025\000\000\003\013\000\000\003\014\000\000\000\000\003\007\000\000\000\000\000\000\000\000\003\024\000\000\000\000\003\023\001\226\001\225\000\000\000\000\001\164\001\215\001\223\000\000\000\000\000\000\000\000\002\005\000\000\000\000\000l\000m\002\004\000\000\000\000\000\000\000\216\000\000\001z\000\000\000\000\000\215\000\211\000\000\000\000\000\000\000\000\001>\000\000\003\028\000\000\003\029\000\000\000\000\001\248\001\246\000\000\001\247\000\008\000\000\000\t\000\000\002/\0020\002.\000\000\002-\000\000\000\n\000\000\0022\0023\0021\000\000\0025\000\000\000\000\000\000\002'\000\000\000\000\002)\000\000\002#\000\000\002%\000\000\002*\000\000\002+\000\000\002$\002\"\0026\001\174\002,\000\000\0028\000\000\0027\000\000\0029\000\000\002\179\000\011\000\000\000\000\000\000\000\000\000\000\000\000\002:\000\000\000\000\002=\000\000\002<\000\000\002;\001\000\000\000\000\000\000\000\000\000\001\001\002>\000\000\000\000\002\190\000\000\000\000\000\000\002\191\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\002\198\000k\000\000\000\000\001\t\000\000\001\027\001\026\000\000\001]\000\000\002\189\001\160\001\158\000\000\000\000\000\000\002\192\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\188\000\000\000\000\000\000\000\000\000\000\000\000\002\187\000\000\000\013\000\000\000\000\000\000\000\000\000\000\002\193")
   
   let error =
-    (173, "\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\1280\128\000\016\204\008\192 \008\002\000\004\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\244p\001\000a\000\001!\152\017\128@\016\004 \008\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002u\012\000@\024@\000Hf\004`\016\004\001\008\002\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000_\163\128\008\003\008\000\t\012\192\140\002\000\128!\000@\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\168`\002\000\194\000\002C0#\000\128 \008@\016\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\161\128\008\003\008\000\t\012\192\140\002\000\128!\000@\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\002U\012\000@\024@\000Lf\004`\016\004\001\008\002\000\000&C\023\173W\128\004\000\128\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\016\008\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\000\128\000\128H\008\192 \000\002\016\004\000\000L\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\144\002\000\000\016@@\000\000\000\000 \000\000\000\000\008\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\016\016\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000@\000\000\000\000\000\001\235U\224\001\000 \000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016@@\000\000\000\000 \000\004\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\000\000 \000\008\128\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004!\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130z\213x\000T\136\000\144h\021\006v\128\000\132\128@\016\001\008\004\019\214\171\192\002\164@\004\131@\1683\180\000\004$\002\000\128\008@ \128\000\000\000\005 \000$\026\005\001\157\160\000! \016\000\000B\001\004\245\170\240\000\169\016\001 \208*\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\136\1936Y,\000\000P\004\008\000\003\186\002'\135p\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \002A\160T\025\250\000\002\018\001\000@\004$\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000@ \131\000\150\000\000(\000\000\000\001\217\000\019C\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000H\000\017\008&\194%\128\000\n\000\128\000\000v@\004\240\238\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\017\008&\194%\128\000\n\000\128\000\000f@\004\240n\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\018\000\004B\t\176\137`\000\002\128 \000\000\025\144\001<\027\128\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\006d\000O\006\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\001 \000D \155\008\150\000\000(\002\000\000\001\153\000\019\193\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\006d\000O\006\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\001 \000D \155\008\150\000\000(\002\000\000\001\153\000\019\193\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000H\000\017\008&\194%\128\000\n\000\128\000\000f@\004\240n\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\018\000\004B\t\176\137`\000\002\128 \000\000\025\144\001<\027\128\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\006d\000O\006\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\003\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\001 \000D \155\008\150\000\000(\002\000\000\001\153\000\019\193\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000H\000\017\008&\194%\128\000\n\000\128\000\000f@\004\240n\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\018\000\004B\t\176\137`\000\002\128 \000\000\025\144\001<\027\128\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000@\024\000\000\008d\000\000\000\004\001\000\002\000\000&@\016\018\168`\002\000\194\000\002C0#\000\128 \008@\016\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173V\128\004\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\132\000\000\134@F\001\000@\016\000 \000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\181^\000\021\"\000$\026\005A\159\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000\000\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\000\001\008\004\016\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\004D\008\178I@\000\002\000 @\000\013P\017\012#\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000\018\013\002\160\207\208\000\016\144\008\002\000! \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\209\000\016\1948\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\128\000\000\000\000\016\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\016\002,\002P\000\000\128\008\000\000\002D\000C\000\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\145\000\016\1928\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\018\000\004@\008\176\t@\000\002\000 \000\000\t\016\001\012\003\128\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\018\000\004@\008\176\t@\000\002\000 \000\000\t\016\001\012\003\128\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\004\128\001\016\002,\002P\000\000\128\008\000\000\002D\000C\000\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\145\000\016\1928\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\1280\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\145\000\016\1928\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\018\000\004@\008\176\t@\000\002\000 \000\000\t\016\001\012\003\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000@\000z\213x\000@\008\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\021\"\000$\026\005A\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\000\144h\021\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\000\000\000\000\000\000\008\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\000@\000@$\004`\016\000\001\008\002\000\000&\003\016\018(`\000\000\002\000\002\000 #\000\128\000\008@\016\000\0010\024\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000F\000\000\000\000\000\000\004\000\000@\000\000\000\000\000\000\000\000\000@ \000\000\000\000\000\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\015Z\175\000\008\001\000\000\008\000#\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\008\000#\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\000@\000\002\000\008\192\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\016\016\000\000\000\000\008\000\000\000\000\002\000=j\188\000 \004\000\000 \128\128\000\000\000\000@\000\008\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\181Z\000\016\002\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000%P\192\004\001\132\000\004\198`F\001\000@\016\128 \000\002d1z\213x\000@\008\000\000A\001\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\000\000\001z\213x\000@\008\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016\\\137\000\128c\021\199w\132\001\158\160\192\0025\136\020\016\t\0200\000\000\000\000\001\000\128\017\128\000\000\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\168\016\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\235U\160\001\000 \000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\003\255\175\224\130\228H\004\131P\174;\188 \012\245\006\000\145\236a\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001\000\192(\012\237\000\003\t\000\128\000\002\016\008 \000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A=j\188\000*D\000H4\n\131;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000\000\002\144\000\016\012\002\128\206\208\0000\144\008\000\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\017\024&\203%\128\000\n\000\129\000\000u@@\160\238\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000*D\000H4\n\131?@\000B@ \008\000\132\130\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\007D\000\n\014\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\136A6\017,\000\000P\004\000\000\003\"\000\005\003p\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\144\000\"\016M\132K\000\000\020\001\000\000\000\200\128\001@\220\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\t\000\002!\004\216D\176\000\001@\016\000\000\012\136\000\020\013\192\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\t\000\002!\004\216D\176\000\001@\016\000\000\012\136\000\020\013\192\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\002@\000\136A6\017,\000\000P\004\000\000\003\"\000\005\003p\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\144\000\"\016M\132K\000\000\020\001\000\000\000\200\128\001@\220\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\024\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\144\000\"\016M\132K\000\000\020\001\000\000\000\200\128\001@\220\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\t\000\002!\004\216D\176\000\001@\016\000\000\012\136\000\020\013\222\181^\000\021\"\000$\026\005A\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\130A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\007\151\"@ \024\197q\221\225\000g\1680\000\141b\005\004\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\001\000\000\000\000\000\000\002\008\128\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\n\227\187\194\000\207P`\001\026\196\n\t\255\215\240Ar$\002A\168_\029\222\016\006z\131\000H\214(PO\254\191\131\203\145 \016\012b\184\238\240\1283\212\024\000F\177\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\191\240\242\228H\004\003\024\190;\188`\012\245&\008\017\236q\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\018\001\000\198+\142\239\008\003=A\128\004k\016('\255_\193\005\200\144\t\006\161|wx@\025\234\012\001#X\161A?\250\254\008.D\128H5\n\227\187\194\000\207P`\t\026\196\026\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002#\004\217d\176\000\001@\016 \000\014\232\008\148\029\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\228\008\004\003\016\162;\180 \012\245\006\000\017\140@\160\128\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\004\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\001\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\018\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\008\014@\128@1\n#\187B\000\207P`\001\024\196\n\008\000\000\000@r\004\002\001\136Q\029\218\016\006z\131\000\008\198 P@\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\016\024 \201%\128\000\008\000\001\000\0003@D\128\140\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\005H\128\t\006\129Pg\232\000\008H\004\001\000\016\144A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@r\004\002\001\136Q\029\218\016\006z\131\000\008\198 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128H5\n\227\187\194\000\207P`\t\026\196\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\195\203\145 \016\012b\248\238\241\1283\212\152 G\177\198\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\000\016\000\000\000\000\008\000\000\000\000\000\000\000\145C\000\000\000\000\000\016\008\001\024\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\008\000#\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\008\000\000\000\000\000\000R\000\002A\168P\027\218\000\002\018\001\000@\004 \016@\000\000\000\002\144\000\016\012\194\128\206\208\0000\144\008\n\128!\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000*D\000H4\n\131;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001\000\192(\012\237\000\003\t\000\128\000\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000@0\n\003;@\000\194@ \000\000\132\002\008\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016OZ\175\000\n\145\000\018\013\002\160\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\004\0082I@\000\002\000\000@\000\008P\017\000\003\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000\018\013\002\160\207\208\000\016\144\008\002\000! \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\016\012\194\128\206\208\0000\144\008\n\128!\004\130\000\000\000\002\020\128\000\128f\020\006v\128\001\132\128@T\001\008$\016\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000)\000\001\000\204(\012\237\000\003\t\000\128\136\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000R\000\002\001\152P\025\218\000\006\018\001\001\016\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\128\001\006\001(\000\000@\000\000\000\001\002\000 \000`\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\128\000 \000A\128J\000\000\016\000\000\000\000@\128\008\000\024\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000 \000\008\000\016`\018\128\000\004\000\000\000\000\016 \002\000\006\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\008\000\002\000\004\024\004\160\000\001\000\000\000\000\004\008\000\128\001\128\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000 \000\008\000\016`\018\128\000\004\000\000\000\000\016 \002\000\006\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\008\000\002\000\004\024\004\160\000\001\000\000\000\000\004\008\000\128\001\128\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\002\000\000\128\001\006\001(\000\000@\000\000\000\001\002\000 \000`\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\128\000 \000A\128J\000\000\016\000\000\000\000@\128\008\000\024\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000 \000\008\000\016`\018\128\000\004\000\000\000\000\016 \002\000\006\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\008\000\002\000\004\024\004\160\000\001\000\000\000\000\004\008\000\128\001\128\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\002\000\000\128\001\006\001(\000\000@\000\000\000\001\002\000 \000`\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\128\000 \000A\128J\000\000\016\000\000\000\000@\128\008\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\005 \000 \025\133\001\157\160\000a \016\021\000B\t\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006a@gh\000\024H\004\005@\016\130A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000R\000\002\001\152P\025\218\000\006\018\001\001P\004 \144@\000\000\000\002\144\000\016\012\194\128\206\208\0000\144\008\008\128!\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\164\000\004\0030\1603\180\000\012$\002\002\160\008A \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000 \000\140\000\000\000\000\000\000\008\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131P\1607\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\018\000\000\000\000\000\000\000\000 \000\008\000\000\000\000\000\000\000\000\128\000\144\000\000\000\000\000\000\000\001\000\000@\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000@\001\024\000\000\000\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\001\000\000\000\000\000\000\n@\000H5\n\003{@\000B@ \008\000\132\002\008\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\181Z\000\016\002\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\001\000\000\000\000\000\000\n@\000H5\n\003{@\000B@ \008\000\132\002\008\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"@ \024\197q\221\227\000g\1680\000\141b\005\004\000\000\000\000\000\000\000 \016\000\000\000\016\000\000\000\002 \000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\138\227\187\198\000\207P`\129\026\196\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D`\155,\150\000 (\002\004\128\001\221\001\002\131\184\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\128\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000 \000\140\000\000\000\000\000\000\008\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131P\1607\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\128\000\000\000\128\000\000\000\017\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\184\238\241\1283\212\024\"F\177\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228H\004\003\024\174;\188`\012\245\006\008\017\172@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\005H\128\t\006\129Pg\232\000\008H\004\001\000\016\144A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\0020\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\002\000\000\000\000\000\000\020\128\000\144j\020\006\246\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029j\180\000 \004\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\002\000\000\000\000\000\000\020\128\000\144j\020\006\246\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\184\238\241\1283\212\024\"F\177\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\144\t\006\161\\wx\192\025\234\012\001#X\129A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\008\192 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\031\253\255\132\023#@&\026\133\241\221\227\000\231\1690L\143c\173f\000\000\000 9\002\001\000\196(\142\237\008\003=A\128\004c\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\139\227\187\194\000\207P`\001\030\199\026\008\000\000\000\000\000\000\000@ \000\000\000\000\000\000\000\000@\000\000\000\015\254\191\130\011\145 \016\012b\248\238\240\1283\212\024\000G\177\198\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\018\001 \212/\142\239\008\003=A\128${\028h \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128H5\011\227\187\194\000\207P`\t\030\199\026\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\015\254\191\130\011\145 \016\012b\248\238\240\1283\212\024\000F\177B\130\000\000\000\000\000\000\000\016\008\002\000\000\000\000\000\000\000\016\000\002\000\003\255\175\224\130\228H\004\003\024\190;\188 \012\245\006\000\017\172P\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\008\004\001\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\248\238\240\1283\212\024\002F\177B\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000 #\000\000\000\008\000\000\000\000 \000\000\000\000\000\000\002\000\012\004\000\000\000\000\001\000\000\000\008\000\000@\005\255\215\240Ar$\002\001\140W\029\222\016\006z\131\000\008\214 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004 \024\008\000\000\000\000\002\000\000\000\016\000\000\128\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023#@&\026\133q\221\225\000\231\1680\004\141b%\006\255\235\248 \185\018\001\000\198+\142\239\008\003=A\128\004k\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar4\002a\168W\029\222\016\014z\131\000H\214\"P`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\015\254\191\130\011\145 \018\013B\248\238\240\1283\212\024\002F\177B\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000 \000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016\\\137\000\144j\021\199w\140\001\158\160\192\0185\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\191_\192\005H\144\008\006\001Pgx\000\024H\004\000\000X\129A\000\000\000\000\n@\016H4\n\003;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\223\175\224\002\164H\004\003\000\1683\188\000\012$\002\000\000,@\160\128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\001\000\004\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000F\000\000\000\000\000\000\004\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\168P\027\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\161@oh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Z\173\000\008\001\000\000\000\000 \000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \212(\013\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\015~\191\128\n\145 \016\012\002\160\206\240\0000\144\008\000\000\177\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002\003\004\025$\176\001\001\000\000$\000\006(\008\016\017\128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\161@oh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\001\000\004`\000\000\000\000\000\000@\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\000\144h\021\006~\128\000\132\128@\016\001\t\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000#\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144j\020\006\246\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\170\208\000\128\016\000\000\000\002\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013B\128\222\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000@\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000 \000\000\002\0020\000\000\000\128\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"@ \024\197q\221\225\000g\1680\000\141b\005\004\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\127\245\252\016\\\137\000\144j\021\199w\132\001\158\160\192\018=\1404\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\000\000\001\127\245\252\016\\\137\000\128c\021\199w\132\001\158\160\192\0025\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"@ \024\197q\221\225\000g\1680\000\141b\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\000\001\008\004\016\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000@\000\000\000\005 \000$\026\005\001\157\160\000! \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\008\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\016\000\000\001\001\200\016\008\006!Dwh@\025\234\012\000#\024\129A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@r\004\002\001\136Q\029\218\016\006z\131\000\008\198 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\000\000\016\128A\000\000\000\000\000\002\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\000@\008\000\000@\001\000\001\000\000\000\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\002\255\235\248\000\128\016\000\000\128\002\000\002\000\000\001\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\000 \004\000\000 \000\128\000\128\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\000\000\000@\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x@\225\008\137 B\001\000\000\018\000!J\t\000\002`\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\008\000\000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000@\000\016\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\0008B\"\008\016\128@\000\004\128\008R\002@\000\152\000\000\245\170\240\001\194\016\000@\132\002\000\000$\000B\144\018\000\004\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\002\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\128\000\000\002\000\000\008\002\000\000\000\008\000\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\004\000\000\000\000\000\000\001\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\0008B \008\016\128@\000\004\128\008R\002@\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\014\016\128\002\004 \016\000\001 \002\020\128\144\000\"\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\002\000\000\000\008\000\000 \008\000\000\000 \000\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\008\000\000 \008\000\000\000 \000\000@\000\000\128\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000 \000\000\128 \000\000\016\128\000\001\000\000\002\000\004\000\000@\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\001\000@\000\000\001\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\008\000\245\170\240\000\128\016\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000 \000\000\128 \000\000\016\192\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\000@\000\001\000@\000\000\001\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000 \000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000C\000\000\004\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\004\000\000\016\004\000\000\000P\000\000 \000\000@\000\128\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\008\002\000\000\000\008\000\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000 \008\000\000\000 \000\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000@\016\000\000\000`\000\000\000\000\001\000\002\000\000\000\000\000\000\128\000\002\000\128\000\000J\000\000\004\000\000\008\000\016\000\001\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\008\000\000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000  \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\016\000\000\000@\000\001\000@\000\000\001\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\128\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\008\002\000\000\000\008\000\000\000\000\000 \000@\000\000\000\000\000\016\000\000@\016\000\000\001@\000\000\128\000\001\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\221x\000`\008\000\000B!\000\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000@\016\000\000\001`\000\000\128\000\001\000\002\000\000 \000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\245\186\240\000\192\016\000\000\132b\000\000\000\000\001\000\002\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000B\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\008\028!\017$\008@ \000\002@\004)A \000L\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\007\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\003\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"@$\030\135q\221\225\000g\1690D\141b\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\137\000\144z\021\199w\132\001\158\164\193\0185\136\021\153\223\191p\002\000@\000\000\000\008\000\000\000\000\000 \000\000\000\000\000\000H\161\128\000\000\000\000\000\004\000\000\000\000\000\001\000\000\000\000\000\000w\239\220\000\128\016\000\000\000\002\000\000\000\000\000\008\000\000\000\000\000\003\191~\224\004\000\128\000\000\000\016\000\000\000\000\000@\000\000\000\000\000\000\145C\000\000\000\000\000\000\008\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\t\0200\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000H\161\128\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\002E\012\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\007\151\"@ \024\197q\221\225\000g\1680\000\141b\005\004\255\235\248 \185\018\001\000\198+\142\239\008\003=A\128\004k\016( \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\138\227\187\194\000\207P`\129\026\196\n\204\000\000\000\000\000\000\000@ \000\000\000\000\000\000\000\004@\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\008\128\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\018\001 \212+\142\239\008\003=A\130$k\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000@3\n\003;@\000\194@ *\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\030\\\137\000\128c\021\199w\132\001\158\160\192\0025\136\020\019\255\175\224\130\228H\004\003\024\174;\188 \012\245\006\000\017\172@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\255\235\248 \185\018\001\000\198+\142\239\008\003=A\130\004k\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\015.D\128@1\138\227\187\194\000\207P`\001\026\196\n\t\255\215\240Ar$\002\001\140W\029\222\016\006z\131\000\008\214 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\253\255\128\016\002\000\000\016\000@\000\000\000\000!\000\000\000\000\000\000\002E\012\000\000\000\000\000@\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\128\001\235U\224\001\000 \000\001\000\004`\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\181^\000\016\002\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\184\238\240\1283\212\024\002F\177\006\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\000\000\000\008\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000\000\000\000\002 \000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128H5\n\227\187\194\000\207P`\137\026\196\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000F\000\000\000\016\000 \000\000\0001\000\000\000\000\000 \016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160p\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\194\011\145 \018\015C\184\238\240\1283\212\152\"F\177\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.D\128H=\n\227\187\194\000\207R`\137\026\196\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\194\011\145 \016\012b\184\238\240\1283\212\152 F\177\002\179\000\000\000\000\000\000\000\016\008\000\000\000\000\000\000\000\001\016\000\000\001\139\255\191\240\130\228H\004\003\024\174;\188 \012\245&\008\017\172@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\239\252 \185\018\001 \212+\142\239\008\003=I\130$k\016+7\255\127\225\005\200\144\008\0061\\wx@\025\234L\016#X\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\004@\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\137\000\144j\021\199w\132\001\158\164\193\0185\136\021\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"@$\026\133q\221\225\000g\1690D\141b\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\127\225\005\200\144\t\006\161\\wx@\025\234L\017#X\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\127\225\005\200\144\t\006\161\\wx@\025\234L\017#X\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\004@\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\137\000\144j\021\199w\132\001\158\164\193\0185\136\021\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\140\000\000\000 \000@\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\t\000\000\000\000\000\000\000\000 H\158\000`\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\128\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\008\016\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\004\000\000\000\000\000\000\000 \000\000\000@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\016\002\000\000\000\000\000\004\000\000\016 \000\000\000\000\000\000\001\000\000\000\002\000\000\000\000\004\000\008\000\008\000\000\000\000\000\000\000\0040\002\000\004\002\128\000\000\000\000\001\000\000\004\008\000\000\000\000\000\000\000@\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\128\000\128\000\000\000\000\000\000\000C\000 \000\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\008\224\006\000\000\004\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\016\192\012\000\000\008\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\134\000@\000\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000!\128\016\002\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\024\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\0040\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\004p\003\000\000\002\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000!\128\024\000\000\016\000\000\000\001\000\002\000\000\000\000\000\000\000\000\000\001\012\000\128\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008`\004\000\000\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000C\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\0040\003\000\000\002\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000!\128\016\000\000\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\012\000\128\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008`\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")
+    (173, "\000\000\000\001\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\001\128\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\240\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 %P\208\020!\170\008\t\012\192\140\006\128\136w\130@\000\142d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\163\128\000\003\016\000\016\001\129\024\004\001\000B\000\000\000\004\200b\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\153C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\187G\000\000\006 \000 \003\0020\008\002\000\132\000\000\000\t\144\196\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000H\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\017\t\001\024\004\001\000B\000\000\000\004\200b\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\001 \004\000\000A\001\000\000\000\000\000\128\000\000\000\000\016\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\016@@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\001\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\004\000\000\136\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\017\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008'\173W\128\005H\128\018\013\002\160\206\208\000\016\144\008\002\000 \128A=j\188\000*D\000\144h\021\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016OZ\175\000\n\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\152&\203%\128\000\n\000\129\000\0007@Bxw\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\021\"\000H4\n\131?@\000B@ \008\000\130A\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\004\004\016`\018\192\000\005\000\000\000\000\027 \0014;\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\006\200\000O\014\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000`\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173V\128\004\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\129\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000L\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\008\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000D$\004`\016\004\001\008\000\000\000\019!\139\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000A\001\000\000\000\000\000\128\000\000\000\000\016\001\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000@\001\024\000\000\000\000\000\000\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\000@\000\004\000\017\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\004\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\007\173W\128\004\000\128\000\008\000#\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004`\000\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Z\173\000\008\001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\001\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145C\000\000\002 \000\"\018\0020\008\002\000\132\000\000\000\t\144\197\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\164@\t\006\129Pg\232\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\000\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\137\002,\146P\000\000\128\008\016\000\003T\004\001\004p\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \004\131@\1683\244\000\004$\002\000\128\008$\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\128\"\192%\000\000\008\000\128\000\0004@\000\016G\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\002\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\"\000\139\000\148\000\000 \002\000\000\000\145\000\000@\028\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\144\000\"\000\139\000\148\000\000 \002\000\000\000\145\000\000@\028\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \012\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008\000\015Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\164@\t\006\129Pgh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\002\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\017\t\001\024\004\001\000B\000\000\000\004\200b\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000/Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130z\213x\000@\008\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\168\016\000\000\016\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005@\128\000\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000@\008\000\000\130\002\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000@\000\000\000\000\000\000\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000@\008\000\000\130\002\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029j\180\000 \004\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\008\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\160@\000\000@\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000c\016\000\001 \002\029\160\144\000#\000\000\030\181^\000\016\002\000\000 \128\128\000\000\000\000@\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\008\000\000\000 \000\000\000\000\000\000z\213x\000@\008\000\000\130\002\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\198 \000\002@\004;A \000F\000\000=j\188\000 \004\000\000A\001\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\127\245\252\016\\\138\001 \212+\142\239\008\003=A\128$z\1404\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008'\173W\128\005H\128\018\013\002\160\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002&\t\178\201`\000\002\128 @\000\013P\016\020\029\192\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\005H\128\018\013\002\160\207\208\000\016\144\008\002\000 \144A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\" \155\008\150\000\000(\002\000\000\000\209\000\001A\220\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\017\016M\132K\000\000\020\001\000\000\000H\128\000\160n\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\018 \000(\027\128\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\001\"\000\002\129\184\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\001\"\000\002\129\184\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000H\128\000\160n\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\018 \000(\027\128\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\006\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\018 \000(\027\128\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\001\"\000\002\129\187\214\171\192\002\164@\t\006\129Pgh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@ \144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\242\228P\008\0061\\wx@\025\234\012\000#T@\160\128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000@\000\000\000\000\000\000\130 \000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\016\012B\184\238\240\1283\212\024\000F\168\129A?\250\254\008.E\000\144j\023\199w\132\001\158\160\192\0185E\n\t\255\215\240yr(\004\003\024\174;\188 \012\245\006\000\017\170 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\030\\\138\001\000\198/\142\239\024\003=I\128\004z\1425\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128@1\138\227\187\194\000\207P`\001\026\162\005\004\255\235\248 \185\020\002A\168_\029\222\016\006z\131\000H\213\020('\255_\193\005\200\160\018\013B\184\238\240\1283\212\024\002F\168\131A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D\1936Y,\000\000P\004\008\000\001\186\002\018\131\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016\028\130\001\000\196(\142\237\008\003=A\128\004b\136\020\016\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\001\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128A \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130A\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\001\001\200 \016\012B\136\238\208\1283\212\024\000F(\129A\000\000\000\008\014A\000\128b\020Gv\132\001\158\160\192\0021D\n\008\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002\006\0082I`\000\002\000\000@\000\012\208\016\144\017\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\169\016\002A\160T\025\250\000\002\018\001\000@\004\018\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\008\014A\000\128b\020Gv\132\001\158\160\192\0021D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\184\238\240\1283\212\024\002F\168\129A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\223\248yr(\004\003\024\190;\188`\012\245&\000\017\2348\214`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\020\128\001\000\204(\012\237\000\003\t\000\128\168\002\008$\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \004\131@\1683\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130z\213x\000T\136\001 \208*\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000 @\131$\148\000\000 \000\004\000\000\133\001\008\000\024\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\001 \208*\012\253\000\001\t\000\128 \002\t\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\128\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001\000\204(\012\237\000\003\t\000\128\168\002\008$\016\000\000\000\016\164\000\008\006a@gh\000\024H\004\005@\016A \128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\168P\027\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\001H\000\016\012\194\128\206\208\0000\144\008\008\128 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\017\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\004@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000\016`\018\128\000\004\000\000\000\000\016 \001\000\003\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\000\001\000\004\024\004\160\000\001\000\000\000\000\004\008\000@\000\192\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000@\001\006\001(\000\000@\000\000\000\001\002\000\016\0000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000@\000\016\000A\128J\000\000\016\000\000\000\000@\128\004\000\012\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000@\001\006\001(\000\000@\000\000\000\001\002\000\016\0000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000@\000\016\000A\128J\000\000\016\000\000\000\000@\128\004\000\012\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\016\000\004\000\016`\018\128\000\004\000\000\000\000\016 \001\000\003\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\000\001\000\004\024\004\160\000\001\000\000\000\000\004\008\000@\000\192\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000@\001\006\001(\000\000@\000\000\000\001\002\000\016\0000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000@\000\016\000A\128J\000\000\016\000\000\000\000@\128\004\000\012\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\016\000\004\000\016`\018\128\000\004\000\000\000\000\016 \001\000\003\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\000\001\000\004\024\004\160\000\001\000\000\000\000\004\008\000@\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000)\000\002\001\152P\025\218\000\006\018\001\001P\004\016H \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128f\020\006v\128\001\132\128@T\001\004\018\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\020\128\001\000\204(\012\237\000\003\t\000\128\136\002\008$\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\005 \000@3\n\003;@\000\194@ *\000\130\t\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000#\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\002\000\008\192\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000$\000\000\000\000\000\000\000\000@\000\008\000\000\000\000\000\000\000\001\000\001 \000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000\128\0020\000\000\000\000\000\000 \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\181Z\000\016\002\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128@1\138\227\187\198\000\207P`\001\026\162\005\004\000\000\000\000\000\000\000@ \000\000\000 \000\000\000\000@\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\128c\021\199w\140\001\158\160\192\0025D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D\1936Y,\000@P\004\t\000\001\186\002\002\131\184\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\016\000\000\000\000 \000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\020\002A\168W\029\2220\006z\131\000H\213\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\128c\021\199w\140\001\158\160\192\0025D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\001 \208*\012\253\000\001\t\000\128 \002\t\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\000F\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131P\1607\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173V\128\004\000\128\000\000\000 \000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar(\004\131P\174;\188`\012\245\006\000\145\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\128\000\000\000\128\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\020\002A\168W\029\2220\006z\131\000H\213\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000 \000\0020\008\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\004\000\000\000\000\000\000\000\000\000\002\000\003\255\191\240\130\228p\t\134\161|wx\1929\234L\003#\212u\172\192\000\000\004\007 \128@1\n#\187B\000\207P`\001\024\162\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\016\012b\248\238\240\1283\212\024\000G\168\227A\000\000\000\000\000\000\000\016\008\000\000\000\000\000\000\000\000\016\000\000\000\001\255\215\240Ar(\004\003\024\190;\188 \012\245\006\000\017\2348\208@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128H5\011\227\187\194\000\207P`\t\030\163\141\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\248\238\240\1283\212\024\002G\168\227A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\000\001\255\215\240Ar(\004\003\024\190;\188 \012\245\006\000\017\170(P@\000\000\000\000\000\000\004\002\000\128\000\000\000\000\000\000\004\000\000@\000\127\245\252\016\\\138\001\000\198/\142\239\008\003=A\128\004j\138\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000@\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar(\004\131P\190;\188 \012\245\006\000\145\170(P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\128\008\008\192\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000@\003\001\000\000\000\000\000@\000\000\002\000\000\008\000\191\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\006\002\000\000\000\000\000\128\000\000\004\000\000\016\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228p\t\134\161\\wx@9\234\012\001#TD\160\223\253\127\004\023\"\128@1\138\227\187\194\000\207P`\001\026\162\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.G\000\152j\021\199w\132\003\158\160\192\0185DJ\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\000\001\255\215\240Ar(\004\131P\190;\188 \012\245\006\000\145\170(P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \016\008\000\000\000\008\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@$\026\133q\221\227\000g\1680\004\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\235\248\000\169\020\002\001\128T\025\222\000\006\018\001\000\000\021\016( \000\000\000\001H\004\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\245\252\000T\138\001\000\192*\012\239\000\003\t\000\128\000\n\136\020\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000@\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\161@oh\000\008H\004\001\000\016@ \128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000F\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\017\128\000\000\000\000\000\001\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029j\180\000 \004\000\000\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\161@oh\000\008H\004\001\000\016@ \128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000 \000=\250\254\000*E\000\128`\021\006w\128\001\132\128@\000\005D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\024 \201%\128\008\008\000\001 \0001@@@F\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\021\"\000H4\n\131?@\000B@ \008\000\130A\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\000\017\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000#\000\000\000\000\000\000\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \212(\013\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000@\008\000\000\000\002\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\018\013B\128\222\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000@\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000 \000 \002\0020\000\000\000\128\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000?\250\254\008.E\000\144j\021\199w\132\001\158\160\192\018=F\026\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\191\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\000\001\004\002\008\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\008\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 9\004\002\001\136Q\029\218\016\006z\131\000\008\197\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\000 \004\000\000@\001\000\001\000\000\000\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\127\245\252\000@\008\000\000\128\002\000\002\000\000\001\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\000\016\002\000\000 \000\128\000\128\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000 \000\000\000\000\000\000\000 \000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188 p\132\137 B\001\000\000\018\000!J\t\000\0020\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000@\004\005\008H\130\000\002\000\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\001\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\002\000\000\000\000\000\000\004\008\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\"\000\000\000\000\000\000\004\008\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\007\008H\130\004 \016\000\001 \002\020\128\144\000#\000\000\030\181^\0008B\000\016!\000\128\000\t\000\016\164\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\132\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\016\000\000\000@\004\005\008H\130\000\002\000\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\007\008H\002\004 \016\000\001 \002\020\128\144\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\001\194\016\000\129\008\004\000\000H\000\133 $\000\008@\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000@\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\001\000\016\020!\"\008\000\008\000\000\020\128\008v\130@\000\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\004\000@P\132\136 \004 \000\000R\000!\218\t\000\0028\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\030\181^\000\016\002\000\000 \000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000@P\132\136 \0040\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\004\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\192\000\000\129\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\020\000\000\n@\004;A \000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000\002\000\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\000\024\000\000\t\000\016\237\004\128\001\024\000\000\000\016\001\001B\018 \128\018\128\000\001H\000\135h$\000\008\224\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\192\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000@\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\004\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\128\000\000\002\000 (BD\016\000\016\000\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\008\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\020\000\000\n@\004;A \000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\235\196\007\008H\130\004\"\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\022\000\000\n@\004;A \000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\007\173\215\136\014\016\145\004\008F \000\002@\004;A \000F\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \004 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x@\225\t\018@\132\002\000\000$\000B\148\018\000\004`\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160p\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\194\011\145@$\030\135q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\144z\021\199w\132\001\158\164\192\0185D\n\205\239\223\248\001\000 \000\002\000\008\000\000\000\000\000 \000\000\000\000\000\015~\255\192\008\001\000\000\016\000@\000\000\000\000\001\000\000\000\000\000\000{\247\254\000@\008\000\000\128\002\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002E\012\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\018(`\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\145C\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\229\200\160\016\012b\184\238\240\1283\212\024\000F\168\129A?\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\179\000\000\000\000\000\000\000 \016\000\000\000\000\000\000\000\000 \000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\000@\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\144j\021\199w\132\001\158\160\192\0185D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\007\151\"\128@1\138\227\187\194\000\207P`\001\026\162\005\004\255\235\248 \185\020\002\001\140W\029\222\016\006z\131\000\008\213\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000?\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\131\203\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\127\245\252\016\\\138\001\000\198+\142\239\008\003=A\128\004j\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\191\127\224\004\000\128\000\008\000 \000\000\000\000\016\128\000\000\000\000\000\000\145C\000\000\000\000\000 \000\0020\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\024\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000#\000\000\000\000\000\000\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\015Z\175\000\008\001\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\000\002\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@$\026\133q\221\225\000g\1680\004\141Q\006\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\008\004\000\000\000\000\000\000\000\000\008\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\184\238\240\1283\212\024\002F\168\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\001\000\001\000\000\017\128\000\000\004 \000\000\000\000\006 \000\000\000\000\004\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\028\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\144z\029\199w\132\001\158\164\192\0185D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\239\252 \185\020\002A\232W\029\222\016\006z\147\000H\213\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\128c\021\199w\132\001\158\164\192\0025D\n\204\000\000\000\000\000\000\000\128@\000\000\000\000\000\000\000\000\128\000\000\006/\254\255\194\011\145@ \024\197q\221\225\000g\1690\000\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\191\240\130\228P\t\006\161\\wx@\025\234L\001#T@\172\223\253\255\132\023\"\128@1\138\227\187\194\000\207R`\001\026\162\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000\000\000\000\000\000\000\000\002\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\223\248Ar(\004\131P\174;\188 \012\245&\000\145\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\138\001 \212+\142\239\008\003=I\128$j\136\021\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"\128H5\n\227\187\194\000\207R`\t\026\162\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000\004\000\004\000\000F\000\000\000\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"\128H5\n\227\187\194\000\207R`\t\026\162\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000\000\000\000\000\000\000\000\002\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\223\248Ar(\004\131P\174;\188 \012\245&\000\145\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000@\000@\000\004`\000\000\001\008\000\000\000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 \000\000\000\000\000\000\000\001\002D\240\003\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000@\128\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016 \000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000@\008\000\000\000\000\000\016\000\000\129\000\000\000\000\000\000\000\008\000\000\000\008\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000!\128\016\000\016\n\000\000\000\000\000\004\000\000 @\000\000\000\000\000\000\002\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\002\024\001\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000G\0000\000\000\016\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\134\000`\000\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0040\002\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\128\008\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\192\008\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\128\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\142\000`\000\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0040\003\000\000\001\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000!\128\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008`\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\134\000`\000\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0040\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\128\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")
   
   let action =
-    ((16, "\001\146\000\006\000\000\000\000\000\241\000\000\000\000\000\000\001\146\000\000\002B)\234\000\000\000[B\146\000\000\000\000\025x\000\000\029\170\000\000\000\000\000\000\000\000\000\000\000\000\0266\000\000\030h\000\000\000\000\000\000\000\000\000\000\031&\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\000L\000\000)\234\031\228\028\224\000\176C\218\000\000\000\000\000\000D\170\001\140\028\224\001J\028\224\000\000\001\030\000\000\028\224\000\000\000\133\001\2348\246\000\000\000\000:\252\000\000=f\000\000=\2388\2468\246\018^\018^=f\018^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000;\1328\246\000\000\000\000;\132\000\000;\132\000\0008\246\000\000\000\000\000\000\020\196\000\133\000\000\018^\000\0000P8\246\02708\246\000\000\000\000\000\000\000\000\000\000\000\000 28\246!*8\246!\1548\246\"\1468\246\000\0008\246\000\0008\246#\0028\246#\2508\246$j8\246%b8\246%\2108\246\001^8\246\000\000\000\000\000\000\000\000\000\0008\246&\2028\246':8\246(28\246\000\000\000\0008\246\000\000\000\000\017\244*f\000\000\000\000\001X\000\000\000\000\000\000\000\000\025F\000[\000\000*\014\000\000\000\179\018^\000\0008\246\001\170\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\001\176\000\000\000\000\002h\000\000\002\252=f\000\000\000\000\000\000\000\000\000\000\000\000>\1508\246\000\000>\150\000\000>\150=f\000\000\000\000/6\000\133\000\000\018^\003\006\000\0008\246\003,\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\0228\246\000\0008\246\000\000\000\000\0034\000\000\000G<,\004\0068\246\004\004\000\000\000\000=f\000G\000\000\000\000\000\000\000\000\000\000D\236=fEB=fE\246=fFL=f\000\000=f\000\000=fG\000=fGV=fH\n=fH`=fI\0208\246\003\210=f\000\000=fIj=fJ\030=fJt\003\194\000\000\003\212\000\000\000\1358\246\000\000\000\135\000\000\000\000\000\210)\234\000\000\000\210\000\000\000\000\003\2308\246\000\000\003\234\000\000\018^\003\254\000\000\000\000\005d\000\000\018^\004\160\000\000\000\000\004\228\000\000\000\000\001\234\000\000\005\204\000\000*fJ\248\005\174\005\160\000\133\005\004\005\214K\218\000\176\000\000\000\000\000tM$\000\000\000\000\000\000\005\224\005\216\0026\005\238K\218\001\030K\218\000\000\000\000\000\031\000\000\000\000\005:\000\000\005@\006\012K\218\005^\000\000\000\000\000t\000\000\005b\006>\000\000MhL\130\000\000\000\133\006F\000\000\025F\000\133\006L\000\000\000\000)\008\028\224\005n\000\000\006\006\000\000\005\160\000\000\000\t)\234\000\000)\234\000\000\005\144\000\000\000\t\000\000\016\030\026X\006fK\218\005\180\006\144\000\000N\182\000[\000\000\003\210\004B)\234\005\186\000\000\000i\000\000\001z\000\000\006\150\000\000\000\000;\192\000[\000\000\000i\000\000\000\000\000\000\000\000\000\000\006\1288\246\005\202\019\012\006\1368\246\005\210\006\134\000\136\005\254\006\182\000\000?\142?\224\018^\005\218\000\000\005\220?\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\1628\246\000\000@\162\000\000@\162?\224\000\000\000\000\024\154\000\133\000\000\018^\005\224\000\0008\246\005\224\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000,\0068\246\000\0008\246\000\000\005\232\000\000\000\135\000\000\000\000\000\000\000\000\000\0000\174?\2241\166?\2242\022?\2243\014?\224\000\000?\224\000\000?\2243~?\2244v?\2244\230?\2245\222?\2246N8\246\006\024?\224\000\000?\2247F?\2247\182?\2248\174\018^\005\248\000\000\000\0008\246\000\000\006\216\000\000\001V\006\1768\246\006|\000\000\006\1828\246\006\134\000\000\001:\000\000\006\182\006\182\001V\000\000\001V\000\000\016\030\006\182\006\182\000\000\000\000\000\000\023\162\000\000\000\000\000\000\000\000\006\2148\246\006\030\019\012\019\218\000\133\006\250\000\000\006\2269\204\007\n9\204\007\0208\246\006>\019\012\019\012\001J\001L\000\133\000\000\000\000\000\000\001L\000\000\001\236\001\012\000\000\000\000\006D\000\000\000\000\000\000\007 \000\000\007\"\000\000\000\000\007V\007\n8\246\006R\0074\000\000<\182\007\022\018^\006j\019\012\000\000\000\000\006\148\000\000\0012\000\000\005^\000\000\001V\000\000\000\000\006\230\000\000\021\164\026X\007.K\218\006|\007Z\000\000\000\133\000\000\003\0128\246,N\000\000@\2448\246\006\132\000\000\018^\006\136\000\000\006\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\1828\246\000\000A\182\000\000A\182B\008\018^\006\140B\008\000\000\000\000M\198\000\133\000\000\018^\006\144\000\0008\246\006\142\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\246\000W8\246\006\146\000\000\000\000-\028+6\007F8\246\000\000\007\016\000\000\000\000\000\133\000\000\000\000\006\208,N\000\000\006\208,N\000\000\000\004\000\000\000\000\030\144B\008:\026B\008<\246B\008A\000B\008\000\000B\008\000\000B\008NrB\008N\164B\008N\252B\008O<B\008OlB\008O\190B\008O\238B\008P\016\000\000\006\166\000\000\006\182-\196\000\000.l\006\194.l/~\006\204.l\000\000\000\000\000\000\000\000\000\000\006\196\000\000\007\166\000\000\000\133\000\000\000^\007\194\000\000\000F\007\148\000\133\007\000\007\188K\218\007\004\000\172\000\0008\246\007\226\000\000\000,\000\166\003\252\007\196K\218\007\012\007\232\000\000\003\1568\246\007\234\000\000\007\238\000\000\025F\000\133\003\2268\246\007\248\000\000\007\252\000\000\012\022\000K\000\000\012\022\000\000\000\000\021\188\004\0048\246\007\254\000\000\008\004\000\000\000\000\001\168\007\212\000\133\0076\007\242K\218\007:\002\200\000\0008\246\008\022\000\000\003\246\000\000\000\000\008\014\000\000\012\022\000\000\007\248\018^\007B\008*\000\000\000,\000\000\008\016K\218\007Z\0088\000\000\004d8\246\008:\000\000\008<\000\000\025F\000\133\004\1868\246\008>\000\000\008B\000\000\000\000\000\000\008\014\000\000\000\000\0012\000\000\006\182\000\000\000,\000\000\000\000\000\236\019\218\000\000\000\236\000\000\000\000\007n\000\000\001\182\000\003\019\012\000\000\004\006\000K\004\006\000\000\0012\000\000\006\182\000\000\006\182\000\000\000\000\000\000\007n\000\000\000\000\007x\000\000\002*\005^\0012\004\006\000\000\000\000\000\000\0012\000\000\006\182\000\000\002*\000\000\000\000\000\238\000\015\016\030\000\000\016\218\000\000\tf\016\030\000\000\000\000\tf\000\000\000\000\007~\000\000\000\000\007\148\000\000\002\166\006\182\000\000\002\166\000\000\000\000\008\n\000\000\0012\000\000\006\182\000\000\000\000\000\000\017j:T\000\000\008p\000\000\017j\008v\000\000\008x\000\000\021\164\000\133\002\216\000\0008\246\008z\000\000\008\\\008L\000\133\007\166\008bK\218\007\170\004F\000\0008\246\008\134\000\000\000,\004H\000\0008\246\008\140\000\000\025F\000\133\004\158\000\0008\246\008\142\000\000\003\022\017j\000\000\021\188\004\196\000\0008\246\008\156\000\000\000\000\000\000\008\134\008v\000\133\007\214\008\146K\218\007\218\004\228\000\0008\246\008\182\000\000\003\014\000\000\008\158\018^\007\232\008\196\000\000\003\018\000\000\005.\000\0008\246\008\200\000\000\025F\000\133\005^\000\0008\246\008\202\000\000\003\022\000\000\000\000\007\244\000\000\003\014\007\214\008n\000\000\000\000\000\000\008r\000\000\002\150\001:\000\000\016\030\008\200\000\000\000\0008\246\008*\006\182\000\000\008\000\000\000\000\136\000\000\000\000\001R\016\030\000\000\016\030\000\000\007\240\000\000\001R\000\000=f\003\134=f\000\000=f\000\000\007\242\000\000\003\134\000\000\019\012\0046\019\012\000\000\019\012\000\000\007\244\000\000\0046\000\000=f\003\134\007\248\000\000?\152\000\133\004D?\152\000\000?\152\000\000\007\250\000\000\004D\000\000=f\003\134\007\254\000\000\000\000\022\220\000\000\000\000\008l\n\226\000\000\000\000\008F\000\133\000\000\000\000\000\000\000\000\002\028\n\226\000\000\002~\t\024\000\000\000\000\000\000\008\188\000\000\000\000\000\000\000\000\027\024\028\136\000\000\006\018\000\000\n\226\000\000\004\144\n\226\000\000\000G\000J\000J\000\000\002N\000J\000\000\008>\000\000\000\000\000\000\000\000\008\208\000\000\029\024\000\000)\234\n\226\000\000\004\224\n\226\000\000\008\210\000\000\n\226\008\212\000\000\011B\011\174\008\214\000\000\008\216\000\000\012:\022\022\n\226\008\\\n\226\008\222\000\000\008\224\000\000\008\228\000\000)\234\000\000\004t)\234\000\000\008f\013\178\000\000\000\004\n\226\000\000\005\022\n\226\000\000\0030\004*\000\133\000\000\001(\000\133\000\000\008n\000\000\000\000\000\000\000\000\008\242\000\000\013B\027f\008\246\000\000\008\248\000\000\n\226\t\004\000\000\n\226\t\006\000\000\n\226\t\008\000\000\n\006\018\226\n\226\008\138\n\226\t\012\000\000\t\014\000\000\000\000\005&\n\226\000\000\0050\001z\001z\000\000\000\000\000\000\005\030\001z\000\000\008\142\000\000\000\000\000\000\000\000\n\226\000\000\005@\n\226\000\000\005^\004H\000\133\008\144\000\000\000\000\000\000\000\000\t\022\000\000\t\024\000\000\n\226\t\030\000\000\014\"\027f\t \000\000\t\"\000\000\023l\008\204\008\252\020Z\n\226\t.\000\000\000\000\t2\000\000\t\004\023l\n\226\t6\000\000\n\226\t8\000\000\t<\000\000\012\202\008\192\n\226\tH\000\000\tJ\000\000\000\133\008\190\000\000\000\000\022\220\000\000\000\000\002N\t\170\000\000\000\000\001\023\000\000\000\000\000\0008\246\000\171\t\248\t\024\t\162=f\000\000\002\140=f\000\000\008\236\000\000\000\000\000\000\000\000\000\000\002\174\000\000\001\024\000\000\000\000\000\000\004\006\024\130\005\158\024\130\024\130\005\158\000\000\000\000\000F\000F\000F\000F\000\000\000\000\000\000\000\000\000\000\000\000\001V\016\030\t\186\013n\000K\000\000\000\000\003\246\000\000\008\014\000\000,N\008\240\000\000\001V\016\030\008\246\014\198\000\000\001V\013n\000\000\000\000\000\000\021\164\000F\000\000\000\171\000\000\000\000\t>\0014\t\182L\186\000\000\002DM\252\000\000\000\000\t\184\t\168\000\133\000\000\000\133\000\000\002D\000\000\005TL\186\000\000\000\000\t\002\t\200\006\182\t\020\000\000\001\168\003\246\000\000\008\014\000\000\003\138\004\130\000\000\000\000\t\188\000\000\000\000\002N\000\000\004\182\000\000\000\000\000\0008\246\000\171\000\000\002\174\000\000\004\212\000\000\000\000\000\000\005^\000\000\n\190\004\130\n\190\000\000\006\182\n\190\000\000\006\166\000\000\006\182\000\000\006\182\000\000\006\182\000\000\000\000\000\000\000\000\000\000\000\171\000\000\006\182\000\000\006\166\000\000\006\182\000\000\006:\000\000\000\000\tf\tJ\000\133\004t\t\242\003(\000\000\003(\n\028\000\000\n\030\000\000\n \000\000\000\000\004`\003(\025\162\003(\000\000\000\000\003z\t*\000\000\tf\000\133\t0\000\000\007\254\n,\000\000\007f\006*\nD\002\128\nD\000\000\000\000\0050\000\133\000\000\002L\t\148\000\000\000\000\000\000\002\232\000\000\tH\000\000\000\000\000\000\t\136\000\133\tR\000\000\000\000\007\254\007f\006*\0050\002L\002\232\tT\000\000\007f\006*\0050\002L\002\232\tX\000\000\000\133\000\000\nX\nV\t\152\000\133\t\242\000\000"), (16, "\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\004\138\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\008J\002\146\000\158\006\029\011\t\005\133\020\159\020\163\000:\008~\011\t\020\167\011\t\011\t\011\t\017\214\007}\011\t\000\n\006\002\006\142\011\t\011\t\006\146\011\t\000\023\000\027\021&\020\178\006\150\008J\007}\000\162\011\t\006\154\021*\011\t\011\t\000\014\008~\006m\011\173\011\t\011\t\002\202\011\t\005\133\011\t\003\141\n\166\013\006\t\n\011\t\000\158\011\t\011\t\011\t\011\t\011\t\017^\006=\006=\011\t\011\t\011\t\006=\011\t\011\t\011\t\005\245\011\t\011\t\011\t\011\t\n\174\n\157\011\173\011\t\011\t\011\230\t\158\007}\003\198\000\162\006\n\017\218\001^\011\t\011\t\011\t\012\022\001j\011\t\011\t\011\t\011\t\n\186\011\t\006m\011\t\013~\0085\011\t\006\029\018\166\011\t\011\t\000\194\011\173\011\173\t\158\004\197\011\t\011\173\012\002\013\174\011\t\005\173\007i\011\t\000\162\n\222\007i\011\t\011\t\011\t\011\t\004)\011\t\011\t\004\197\007}\005\133\011\t\011\t\011\t\000\198\011\t\003\217\011\t\011\t\000\218\011\t\007}\011\t\011\t\005\197\013\006\011\t\011\t\006%\006%\006%\006%\006%\006%\006%\006%\006%\006%\006%\004\162\006%\006%\006%\006%\006%\006%\006%\006%\006%\006%\n\189\008r\013\138\004\162\006%\008N\008^\008n\011\206\t\146\006%\001^\006%\006%\006%\012\022\001j\006%\008J\005>\016\130\006%\006\194\005\165\006%\006\142\004\197\008~\006\146\012\006\000\158\016Z\021&\006%\006\150\008v\005\149\004\013\000\006\006\154\021*\000\250\006%\006%\004\197\000\162\001^\006%\006%\002e\001f\001j\006%\002e\006%\006%\006%\006%\006%\011\173\000\162\000\158\006%\006%\006%\019j\006%\006%\006%\005\237\006%\006%\006%\006%\006j\t\146\000\242\006%\006%\t\002\000\162\n\189\006\021\005\237\012\166\016\138\n\189\n\189\006%\006%\014\170\000\162\006%\006%\006%\006%\014\174\006%\t\158\006%\014\178\005\141\006%\004\138\005f\006%\006%\019n\002\145\018\206\t\002\001\006\006%\020\247\020\251\000\162\n\189\004\013\020\255\006%\001\026\002F\n\189\006%\006%\006%\006%\t\006\006%\006%\003\021\005\181\016.\006%\006%\006%\006E\002\162\006E\006%\006%\006E\006%\003\217\006%\006%\023\190\005\221\006%\006%\006E\006E\006E\006E\006E\006E\006E\006E\006E\006E\006E\013\254\006E\006E\006E\006E\006E\006E\006E\006E\006E\006E\n\133\n\237\005\189\005\189\006E\020\142\006E\000\158\002\218\002\254\006E\005\245\006E\006E\006E\006E\005\141\006E\006E\006E\006E\006E\006E\006E\006E\006E\000.\006\"\016\162\016\202\016\242\017\002\017.\006E\005\141\t\"\006E\000\162\005\141\003\025\012\194\006E\006E\006E\006E\006E\006E\006E\014\230\006E\nA\014~\006E\020\142\006E\023\198\006E\006E\006E\017z\003\165\023\202\006E\006E\006E\n\141\006E\006E\006E\005\253\006E\006E\006E\006E\n\157\015\186\005Z\015\214\006E\021\218\006E\n\133\023.\005\157\017\230\006E\n\133\n\133\006E\006E\017\134\n\181\006E\006E\006E\006E\003\165\006E\n\133\006E\006E\003\n\006E\004\138\0232\006E\006E\015^\nA\023\162\003=\0236\006E\001^\018\190\020\202\006E\012\022\001j\006E\016B\n\165\n\133\006E\006E\003=\006E\012\198\006E\006E\016\170\006\005\000J\006E\000N\014\234\000V\013\006\023\210\006]\006E\023V\006E\000Z\006E\006E\n\157\000\162\006E\006E\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\t\218\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\023>\001^\005)\003\018\006\158\012\022\001j\011\206\003f\n\157\000\186\005\245\001\030\006\174\006\202\006\013\000n\006\206\000r\t\146\000z\000\190\004\193\016\178\008:\006]\n\157\000~\008J\003r\000^\023F\003\190\001*\003=\000\162\021J\008~\004%\003=\003=\004\193\008\146\006\214\021v\021\130\016\210\008\150\013\186\003\206\007A\003=\001R\017\014\001V\003\233\000\206\t\154\008\158\015\022\015.\0126\006\234\001^\008\162\018\194\006\238\008\166\001j\011\173\006\242\006\246\008\170\006\250\n\157\003=\003\214\023^\008\174\011\206\019\182\022G\007A\007A\023V\005\213\000\130\007A\006\254\007\002\022K\004V\008\178\008\182\007\006\008\186\012V\000\162\008J\008\206\022N\004z\003\197\015J\011\173\008\218\007\014\008~\t\158\004\193\004\130\016\218\006M\012\138\011\206\000\162\021\150\n\157\017\022\008\250\004\186\004\198\015n\008\254\t:\003\233\t\166\004\193\007\018\t>\000\162\011\206\004\210\007\022\003\233\003\233\011\173\011\173\015\166\003\233\tF\011\173\007\026\n\229\006M\006M\015\026\0152\001\154\006M\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\013\"\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\0065\005\229\008]\015\222\006\158\023&\t\158\011\206\005\205\023f\000\186\n\197\001\030\006\174\006\202\018\142\005\133\006\206\015N\005\133\023^\000\190\n\149\005\133\008:\005\133\019f\015\250\0039\017\202\005\133\005\133\013B\001*\008]\008]\008J\015r\n\213\008]\004\222\004\234\008\146\006\214\021v\008~\n\205\008\150\014\002\019\178\011\206\006U\001R\015\170\001V\003\249\000\206\t\154\008\158\n\221\022g\022k\006\234\001^\008\162\022o\006\238\008\166\001j\018\"\006\242\006\246\008\170\006\250\006e\022\139\022\143\004\246\008\174\0089\022\147\0065\005\n\005\026\002\146\005\030\0065\0065\006\254\007\002\015\226\005&\008\178\008\182\007\006\008\186\018\178\000\162\023\178\008\206\019~\0089\003\197\005*\019Z\008\218\007\014\n\173\005R\006U\023\154\0089\006u\005V\015\254\005^\t\158\019\166\005\130\008\250\017\186\005\138\0065\008\254\t:\006-\t\166\022\n\007\018\t>\005\142\002\133\006e\007\022\005\133\003\249\005\150\013\006\005\170\005\174\tF\0089\007\026\005\198\006u\006u\005\214\005\234\001\154\006u\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\005\242\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\005\250\001^\006\023\006.\006\158\012\022\001j\0066\006:\006Z\000\186\006r\001\030\006\174\006\202\0089\006\162\006\206\006\170\t\146\006\178\000\190\006\186\006\190\008:\006\198\006\222\006\230\008J\007>\0089\007J\007\146\001*\006-\000\162\008J\008~\008\n\006-\006-\0082\008z\006\214\008F\008~\008R\008\150\008Z\008b\008\149\006-\001R\008j\001V\004\021\000\206\008\154\008\158\008\190\008\198\008\214\006\234\001^\008\162\008\222\006\238\008\166\001j\008\230\006\242\006\246\008\170\006\250\008\238\006-\008\246\011\181\008\174\t2\tB\tJ\008\149\008\149\tV\tZ\tb\008\149\006\254\007\002\tf\tr\008\178\008\182\007\006\008\186\0039\000\162\tz\008\206\t\138\t\174\003\197\t\190\008]\008\218\007\014\t\198\t\158\t\202\t\242\0039\008e\t\254\n\006\nF\t\158\nf\nr\008\250\n\182\n\202\n\214\008\254\t:\004\021\t\166\n\238\007\018\t>\n\250\011\130\011\138\007\022\004\021\004\021\008]\008]\011\154\004\021\tF\008]\007\026\011\166\008e\008e\011\194\011\202\001\154\008e\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\011\222\000\146\011\234\000\150\006\150\000\154\000\174\000\178\000\182\006\154\015\214\003\177\011\242\011\246\011\254\006\158\012\014\012\"\012*\012.\012>\000\186\012F\001\030\006\174\006\202\003\177\012^\006\206\012f\012\146\0039\000\190\012\154\012\170\008:\0039\0039\004\162\012\178\012\182\012\190\012\206\012\242\001*\012\250\001^\008J\0039\023&\012\022\001j\012\254\008z\006\214\013\014\008~\013\022\008\150\013\026\013*\0132\013J\001R\013R\001V\013\162\000\206\008\154\008\158\013\234\013\246\0039\006\234\001^\008\162\014j\006\238\008\166\001j\000\162\006\242\006\246\008\170\006\250\014v\014\150\014\194\011\181\008\174\014\206\014\214\014\242\014\250\014\254\015\006\015\n\015\018\015\"\006\254\007\002\015:\015V\008\178\008\182\007\006\008\186\003\177\000\162\015z\008\206\023\138\003\177\003\177\015\138\015\142\008\218\007\014\005\237\015\150\015\154\015\162\015\178\011\181\003\177\003\177\015\194\t\158\015\202\015\206\008\250\015\234\016\006\016\026\008\254\t:\016*\t\166\016:\007\018\t>\016R\016b\016n\007\022\016\151\016\191\016\231\003\177\016\255\017#\tF\017;\007\026\017R\011\181\011\181\017b\017\138\001\154\011\181\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\017\155\000\146\017\242\000\150\006\150\000\154\000\174\000\178\000\182\006\154\018\007\018/\018;\018K\018S\006\158\018f\018o\018w\003\177\018\127\000\186\018\154\001\030\006\174\006\202\018\218\018\239\006\206\018\255\019\007\023\026\000\190\007\133\003\177\008:\019\019\019\031\019+\019>\019G\019O\019\138\019\190\001*\019\211\019\219\008J\007\133\019\231\019\247\019\255\020\n\008z\006\214\020\014\008~\020\027\008\150\020'\020.\020;\020G\001R\020O\001V\020Z\000\206\008\154\008\158\020c\020k\020w\006\234\001^\008\162\020\146\006\238\008\166\001j\0192\006\242\006\246\008\170\006\250\020\182\020\186\020\190\020\214\008\174\021V\021~\021\142\021\198\021\206\021\234\021\238\022\026\007\133\006\254\007\002\023v\017Z\008\178\008\182\007\006\008\186\022\030\000\162\022&\008\206\023\134\017^\022S\023\030\003\177\008\218\007\014\023\230\023\138\003\177\003\177\023*\023:\023B\023J\023s\t\158\023z\023\131\008\250\023\142\003\177\003\177\008\254\t:\023\158\t\166\023\194\007\018\t>\023\219\017j\000:\007\022\023\234\023\243\024\023\007\133\0243\024B\tF\024F\007\026\024J\024S\003\177\000\000\000\000\001\154\007\133\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\000\000\000\000\000\000\000\000\006\158\000\162\000\000\017V\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\000\000\017n\000\190\000\000\000\000\008:\000\000\000\000\000\000\000\000\017Z\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\017^\000\000\000\000\008\146\006\214\000\000\000\000\000\000\008\150\022\162\000\000\000\000\000\000\001R\000\000\001V\018B\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\017j\006\242\006\246\008\170\006\250\000\000\000\000\000\000\017Z\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017^\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\003\197\000\000\000\000\008\218\007\014\000\000\000\000\017V\000\000\000\000\008I\000\000\000\000\000\162\000\000\017j\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\017n\017Z\000\000\007\022\000\000\000\000\000\000\000\000\000\000\000\000\tF\017^\007\026\000\000\008I\008I\000\000\000\000\001\154\008I\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\162\000\150\006\150\000\154\000\174\000\178\000\182\006\154\017j\000\000\000\000\000\000\000\000\006\158\000\000\017n\018Z\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\000\000\000\000\000\190\n!\000\000\008:\000\000\000\000\000\000\000\000\017Z\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\017^\000\000\000\000\008\146\006\214\000\000\000\162\000\000\008\150\012n\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\t\154\008\158\000\000\017n\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\017j\006\242\006\246\008\170\006\250\000\000\000\000\000\000\011\145\008\174\017V\n!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\017Z\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\017^\011\145\000\000\000\000\000\162\000\000\000\000\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\017n\000\000\000\000\007\022\000\000\000\000\020V\000\000\000\000\017V\tF\017j\007\026\000\000\011\145\011\145\000\000\000\000\001\154\011\145\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\017Z\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\017^\000\000\000\000\000\000\000\000\006\158\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\162\000\000\006\206\000\000\000\000\000\000\000\190\000\000\005\133\008:\000\000\000\000\000\000\000\000\018\246\017n\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\146\006\214\000\000\005\133\000\000\008\150\021Z\000\000\000\000\000\000\001R\000\000\001V\005\133\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\162\000\000\000\000\008\174\017V\005\133\000\000\000\000\000\000\000\000\005\133\002\146\000\000\006\254\007\002\017n\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\017Z\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\017^\011\221\000\000\000\000\000\000\000\000\000\000\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\000\000\005\133\000\000\007\022\000\000\000\000\000\000\000\000\000\000\000\000\tF\019\238\007\026\000\000\011\221\011\221\005\133\000\000\001\154\011\221\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\000\000\000\000\000\000\000\000\000\000\006\158\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\162\000\000\006\206\000\000\000\000\000\000\000\190\000\000\000\000\008:\000\000\000\000\000\000\000\000\000\000\017n\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\146\006\214\000\000\000\000\000\000\008\150\021Z\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\000\000\011\217\000\000\000\000\000\000\000\000\000\000\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\000\000\000\000\000\000\007\022\000\000\000\000\000\000\000\000\000\000\000\000\tF\000\000\007\026\000\000\011\217\011\217\000\000\000\000\001\154\011\217\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\000\000\000\000\000\000\000\000\000\000\006\158\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\000\000\000\000\000\190\000\000\000\000\008:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\146\006\214\000\000\000\000\000\000\008\150\0146\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007}\000\000\000\000\008\250\000\000\t\146\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\008J\007}\000\000\007\022\000\000\000\000\000\000\000\000\000\000\008~\tF\000\000\007\026\000\000\0002\006&\000F\000b\001\154\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\000\000\006\202\007}\000\000\006\206\000\000\000\000\000\000\000\190\000\000\000\000\014\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\198\006\214\t\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\000\000\005\133\000\000\000\000\000\000\006\234\001^\000\000\007}\006\238\001f\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\000\000\000\007}\000\000\000\000\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\005\133\005\133\000\000\000\000\007\006\000\000\000\000\000\162\000\000\000\000\0002\0006\000F\000b\000\000\000f\007\014\000j\000\134\000\000\000\138\000\000\000\146\000\000\000\150\005\133\000\154\000\174\000\178\000\182\005\133\002\146\000\000\000\000\005\133\000\000\t\166\000\000\007\018\014\202\000\000\000\000\000\186\007\022\001\030\000\000\001\"\000\000\000\000\001&\014\210\000\000\007\026\000\190\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\001*\005\133\000\000\001.\000\000\000\000\000\000\000\000\000\000\001F\001B\005\133\001J\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\017V\000\206\000\000\000\000\005\133\000\000\000\000\001Z\001^\000\000\000\000\001b\001f\001j\001\190\001n\001r\000\000\001v\000\000\000\000\000\000\017Z\000\000\005\133\000\000\000\000\005\133\005\133\000\000\000\000\005\133\017^\000\000\001z\000\000\006\158\000\000\000\000\001~\000\000\005\133\000\162\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\001\134\000\000\000\000\000\000\000\000\008:\0196\000\000\000\000\n!\001\138\017j\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\142\008\202\006\214\000\000\000\000\001\146\008\150\000\000\003\137\000\000\000\000\001R\n!\001V\001\150\000\000\000\000\008\158\000\000\000\000\001\154\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\000\000\006\250\000\000\000\000\000\162\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\017n\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\006\158\000\000\000\000\000\000\n!\000\000\000\000\000\000\001\030\006\174\006\202\000\000\008\250\006\206\000\000\000\000\008\254\t:\000\000\000\000\008:\007\018\t>\000\000\000\000\000\000\007\022\000\000\000\000\001*\000\000\000\000\000\000\tF\000\000\007\026\000\000\000\000\006\210\006\214\000\000\001\154\000\000\008\150\000\000\000\000\000\000\000\000\001R\004\173\001V\000\000\000\000\000\000\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\000\000\006\250\000\000\004\173\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\004\173\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\000\000\000\000\n\021\000\000\004\173\004\173\011\241\000\000\008\250\011\241\000\000\000\000\008\254\t:\000\000\000\000\000\000\007\018\t>\000\000\000\000\000\000\007\022\000\000\011\241\000\000\000\000\n\021\011\241\tF\000\000\007\026\001\178\011\241\000\000\000\000\000\000\001\154\000\000\011\241\000\000\000\000\011\241\011\241\000\000\011\241\011\241\000\000\000\000\001\186\004\173\011\241\002\210\000\000\000\000\011\241\000\000\000\000\011\241\000\000\011\241\011\241\000\000\000\000\000\000\004\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\241\000\000\011\241\000\000\n\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\241\000\000\000\000\0002\t\182\000F\000b\002\222\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\011\241\011\241\011\241\000\000\011\241\011\241\002\226\000\000\011\241\000\000\000\186\000\000\004%\000\000\000\000\004%\002\234\000\000\000\000\000\000\011\241\000\190\000\000\011\241\011\241\011\241\011\241\000\000\000\000\000\000\004%\011\241\011\241\011\241\004%\011\241\011\241\011\241\004%\004%\000\000\000\000\000\202\000\000\000\000\004%\017V\000\000\004%\004%\000\000\004%\004%\000\000\000\000\004%\000\206\004%\004%\000\000\000\000\004%\000\000\000\000\004%\000\000\004%\004%\017Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017^\000\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\162\000\000\004%\000\000\000\000\003\197\018^\000\000\000\000\004%\000\000\017j\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\004%\004%\000\000\004%\004\193\004%\n!\004%\000\000\001=\001=\001=\001=\000\000\001=\004%\001=\001=\000\000\001=\000\000\001=\004%\001=\004%\001=\001=\001=\001=\000\162\004%\004%\004%\017F\004%\004%\004%\000\000\000\000\000\000\001=\001=\001=\000\000\017n\000\000\000\000\001=\000\000\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\000\000\000\017J\n!\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\000\000\000\000\001=\000\000\000\000\0002\0006\000F\000b\000\000\000f\001=\000j\000\134\000\000\000\138\017V\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\000\000\000\000\000\186\017Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\020\006\000\000\000\000\001=\000\000\001=\004)\000\000\001=\004)\017N\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\000\000\000\202\000\000\000\000\004)\000\000\018\130\000\000\004)\000\000\017j\000:\004)\004)\001=\000\206\000\000\001=\001=\004)\000\000\000\000\004)\004)\000\000\004)\004)\000\000\017\158\004)\000\000\004)\004)\000\000\000\000\004)\000\000\000\000\004)\000\000\004)\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\000\004)\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017n\000\000\004)\000\000\000\000\000\000\021\n\000F\000b\004)\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\021\006\000\150\006\150\000\154\000\174\000\000\000\182\006\154\021\014\004)\004)\004)\000\000\004)\004\197\004)\000\000\004)\000\000\000\186\000\000\012E\000\000\000\000\012E\004)\000\000\000\000\000\000\004)\000\190\000\000\004)\000\000\004)\000\000\000\000\000\000\000\000\012E\004)\004)\004)\012E\004)\004)\004)\007.\012E\000\000\000\000\000\000\000\000\000\000\012E\000\000\000\000\012E\012E\000\000\012E\012E\000\000\000\000\0076\000\206\012E\007B\000\000\000\000\012E\000\000\000\000\012E\000\000\012E\012E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\182\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\012E\000\146\012E\000\150\000\000\000\154\000\174\000\000\000\182\000\000\000\000\000\000\012E\000\000\000\000\003\197\000\000\000\000\000\000\007N\004I\000\186\000J\004I\000N\004I\000V\004I\000\000\004I\000\000\000\000\000\190\000Z\004I\004I\000\000\012E\012E\012E\000\000\012E\000\000\007R\000\000\012E\000\000\004I\000\000\000\000\000\000\000\000\000\000\007Z\000\000\000\000\000\000\004I\004I\000\000\012E\000\000\012E\004I\000\000\0035\000\000\000\206\012E\012E\012E\000\000\012E\012E\012E\000\000\000\000\000\000\000\000\004I\0035\000\000\004I\000\000\000\000\000\000\000\000\004I\004I\000\000\000\000\004I\000^\000\000\000\000\000\000\0035\000\000\000\000\004I\000\000\000\000\000\000\004I\004I\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\000\004I\000\000\004M\000\000\000n\004M\000r\004M\000z\004M\004I\004M\000\000\000\000\000\000\000~\004M\004M\000\000\005\133\004I\000\000\005\133\000\000\000\000\004I\005\133\000\000\005\133\004M\000\000\000\000\000\000\005\133\005\133\004I\000\000\000\000\000\000\004M\004M\000\000\000\000\000\000\000\000\004M\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\004I\000\000\000\000\004I\004I\000\000\004M\004I\000\000\004M\0035\000\000\004I\004I\004M\004M\000\000\004I\004M\000\130\000\000\000\000\000\000\005\133\000\000\0035\004M\000\000\000\000\000\000\004M\004M\000\218\000\000\0035\000\000\023^\000\000\000\000\000\000\004M\000\000\000\000\001^\000\000\000\000\000\000\001f\001j\000\000\004M\000\000\000\000\000\000\n\017\n\017\n\017\n\017\000\000\n\017\004M\n\017\n\017\000\000\n\017\004M\n\017\000\000\n\017\000\000\n\017\n\017\n\017\n\017\000\000\004M\000\000\000\162\000\000\000\000\000\000\000\000\005\133\000\000\000\000\n\017\n\017\n\017\001\137\000\000\000\000\001\137\n\017\000\000\000\000\004M\000\000\n\017\004M\004M\000\000\017\174\004M\000\000\017V\017\182\001\137\004M\004M\000\000\001\137\n\017\004M\000\000\000\000\001\137\000\000\000\000\n\017\000\000\000\000\001\137\000\000\n\017\001\137\001\137\017Z\001\137\001\137\000\000\000\000\000\000\n\017\001\137\000\000\000\000\017^\001\137\000\000\000\000\001\137\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\017\000\000\000\000\n\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\n-\001\137\017j\n\017\000\000\000\000\000\000\000\000\n\017\000\000\n\017\001\137\000\000\n\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\017\000\000\000\000\n\017\n-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\001\137\001\206\n\017\001\137\001\137\018\n\n\017\001\137\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\001\137\001\137\001\137\001\137\017n\000\000\000\000\000\000\002v\001\137\001\137\000\000\001\137\001\137\001\137\n\001\n\001\n\001\n\001\000\000\n\001\000\000\n\001\n\001\n-\n\001\000\000\n\001\000\000\n\001\000\000\n\001\n\001\n\001\n\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\001\n\001\n\001\000\000\000\000\000\000\000\000\n\001\000\000\000\000\000\000\000\000\n\001\0002\000\214\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\n\001\000\150\000\000\000\154\000\174\000\178\000\182\n\001\000\000\000\000\000\000\000\000\n\001\000\000\000\000\n\005\n\005\n\005\n\005\000\186\n\005\n\001\n\005\n\005\000\000\n\005\000\000\n\005\000\000\n\005\000\190\n\005\n\005\n\005\n\005\000\000\000\000\000\000\000\000\000\000\000\000\n\001\000\000\000\000\n\001\000\000\n\005\n\005\n\005\000\000\000\000\000\202\000\000\n\005\000\000\000\000\n\001\000\230\n\005\000\000\000\000\n\001\018\014\n\001\000\000\000\206\n\001\000\000\000\000\000\000\000\000\000\000\n\005\000\000\n\001\000\000\000\000\n\001\000\000\n\005\000\000\000\000\000\000\000\000\n\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\001\n\005\004\129\017\178\n\001\004\129\000R\004\129\000\000\004\129\000\000\004\129\000\000\000\000\000\162\000\000\004\129\004\129\000\000\000\000\000\000\n\005\000\000\000\000\n\005\000\000\000\000\000\000\000\000\004\129\000\000\000\000\000\000\000\234\000\000\000\000\n\005\000\000\000\000\004\129\004\129\n\005\000\000\n\005\000\000\004\129\n\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\005\000\000\011u\n\005\000\000\000\000\000\000\004\129\000\000\000\000\004\129\000\000\000\000\000\000\000\000\004\129\004\129\000\000\n\005\004\129\004\129\000\000\n\005\000\000\000\000\000\000\000\000\004\129\000\000\000\000\000\000\004\129\004\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\129\000\000\004\133\000\000\000\000\004\133\000v\004\133\000\000\004\133\004\129\004\133\000\000\000\000\000\000\000\000\004\133\004\133\000\000\000\000\004\129\000\000\000\000\000\000\000\000\004\129\000\000\000\000\000\000\004\133\000\000\000\000\000\000\000\000\000\000\004\129\000\000\000\000\011\018\004\133\004\133\000\000\000\000\000\000\000\000\004\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\129\011\026\000\000\004\129\004\129\000\000\004\133\004\129\000\000\004\133\000\000\000\000\004\129\004\129\004\133\004\133\011\"\004\129\004\133\004\133\000\000\000\000\011b\011j\000\000\000\000\004\133\000\000\000\000\000\000\004\133\004\133\011B\000\000\000\000\011*\000\000\011:\000\000\000\000\004\133\000\000\004\137\000\000\000\000\004\137\000\142\004\137\000\000\004\137\004\133\004\137\000\000\000\000\000\000\000\000\004\137\004\137\011J\000\000\004\133\000\000\000\000\000\000\000\000\004\133\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\004\133\000\000\000\000\000\000\004\137\004\137\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\133\011R\000\000\004\133\004\133\000\000\004\137\004\133\0112\004\137\000\000\000\000\004\133\004\133\004\137\004\137\000\000\004\133\004\137\004\137\005\001\000\000\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\004\137\004\137\000\000\000\000\000\000\011r\011Z\000\000\000\000\000\000\004\137\000\000\004\189\000\000\000\000\004\189\000\000\004\189\000\000\004\189\004\137\004\189\000\000\000\000\000\000\000\000\004\189\004\189\000\000\000\000\004\137\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\004\189\000\000\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\004\189\004\189\000\000\000\000\000\000\000\000\004\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\137\000\000\001\238\004\137\004\137\002>\004\189\004\137\000\000\004\189\000\210\000\000\004\137\004\137\004\189\004\189\000\000\004\137\004\189\004\189\001\246\000\000\000\000\000\000\002\005\000\000\004\189\000\000\000\000\002\005\004\189\004\189\000\000\000\000\000\000\001\254\000\000\000\000\002\005\002\005\004\189\002^\002f\000\000\000\000\000\000\000\000\002\005\000\000\000\000\004\189\002\030\000\000\000\000\002\006\000\000\002\022\002\005\000\000\000\000\004\189\000\000\000\000\000\000\000\000\004\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\189\000\000\002&\000\000\002\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\005\000\000\000\000\000\000\000\000\000\000\004\189\000\000\000\000\004\189\004\189\000\000\000\000\004\189\000\000\000\000\000\000\000\000\004\189\004\189\000\000\000\000\000\000\004\189\000\000\002\005\002.\000\000\000\000\002\005\002\005\000\000\000\000\002\014\000\000\000\000\000\000\000}\000\000\000\000\000}\000\000\000\000\000\000\000\000\002\005\000\000\000\000\002\005\002\005\002\005\002\005\000\000\000\000\000\000\001\246\000\000\002\005\002\005\000}\002n\0026\002\005\000\000\000}\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000}\000}\000\000\000}\000}\000\000\000\000\000\000\000\000\000}\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000}\000e\000\000\000\000\000e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\002&\000\000\000}\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000}\000\000\001\254\000\000\000\000\000e\000e\000\000\000e\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000e\000\000\000\000\002\006\000\000\002\022\000e\000}\002.\000\000\000\000\000}\000}\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000}\000e\000\000\000}\000}\000}\000}\000\000\000\000\000\000\000\000\000e\000}\000}\000\000\000}\0026\000}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000e\000\000\000\000\000e\000e\000\000\000\000\002\014\000\000\000\000\000\000\000]\000\000\000\000\000]\000\000\000\000\000\000\000\000\000e\000\000\000\000\000e\000e\000e\000e\000\000\000\000\000\000\000]\000\000\000e\000e\000]\000e\000e\000e\000\000\000]\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000]\000]\000\000\000\000\000\000\000\000\000]\000\000\000\000\000\000\000]\000\000\000\000\002\006\000\000\000]\000]\000a\000\000\000\000\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000]\000\000\000]\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000]\000\000\000a\000\000\000\000\000a\000a\000\000\000a\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000a\000\000\000\000\002\006\000\000\000a\000a\000]\000]\000\000\000\000\000]\000]\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000]\000a\000\000\000]\000]\000]\000]\000\000\000\000\000\000\000\000\000a\000]\000]\000\000\000]\000]\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000a\000\000\000\000\000a\000a\000\000\000\000\002\014\000\000\000\000\000\000\000q\000\000\000\000\000q\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000a\000a\000\000\000\000\000\000\001\246\000\000\000a\000a\000q\000a\000a\000a\000\000\000q\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000q\000q\000\000\000q\000q\000\000\000\000\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\002\006\000\000\002\022\000q\000i\000\000\000\000\000i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002&\000\000\000q\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000q\000\000\001\254\000\000\000\000\000i\000i\000\000\000i\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000i\000\000\000\000\002\006\000\000\002\022\000i\000q\000q\000\000\000\000\000q\000q\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000q\000i\000\000\000q\000q\000q\000q\000\000\000\000\000\000\000\000\000i\000q\000q\000\000\000q\000q\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000i\000\000\000\000\000i\000i\000\000\000\000\002\014\000\000\000\000\000\000\000m\000\000\000\000\000m\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000i\000i\000i\000\000\000\000\000\000\001\246\000\000\000i\000i\000m\000i\000i\000i\000\000\000m\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000m\000m\000\000\000m\000m\000\000\000\000\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\002\006\000\000\002\022\000m\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002&\000\000\000m\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\000m\000\000\001\254\000\000\000\000\000u\000u\000\000\000u\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000u\000m\000m\000\000\000\000\000m\000m\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000m\000u\000\000\000m\000m\000m\000m\000\000\000\000\000\000\000\000\000u\000m\000m\000\000\000m\000m\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\002.\000\000\000\000\000u\000u\000\000\000\000\002\014\000\000\000\000\000\000\001\238\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000u\000u\000u\000\000\000\000\000\000\001\246\000\000\000u\000u\000\133\000u\000u\000u\000\000\000\133\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\133\000\133\000\000\000\133\002f\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000\133\001\238\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002&\000\000\000\133\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\133\000\000\001\254\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000y\000\133\002.\000\000\000\000\000\133\000\133\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\133\000y\000\000\000\133\000\133\000\133\000\133\000\000\000\000\000\000\000\000\000y\000\133\000\133\000\000\002n\0026\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000y\002.\000\000\000\000\000y\000y\000\000\000\000\002\014\000\000\000\000\000\000\001\238\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000y\000y\000\000\000\000\000\000\001\246\000\000\000y\000y\000\129\000y\0026\000y\000\000\000\129\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\129\000\129\000\000\000\129\002f\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\004\157\000\000\000\000\004\157\000\000\004\157\000\000\004\157\000\000\004\157\000\000\000\000\000\000\000\000\004\157\004\157\000\000\000\000\000\000\000\000\000\000\000\129\002.\000\000\000\000\000\129\000\129\004\157\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\004\157\000\000\000\000\000\129\000\000\004\157\000\129\000\129\000\129\000\129\000\000\000\000\000\000\000\000\000\000\000\129\000\129\000\000\000\129\0026\000\129\004\157\000\000\000\000\004\157\005\226\000\000\000\000\000\000\004\157\004\157\000\000\000\000\004\157\004\157\000\000\000\000\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\004\157\004\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\0002\0006\000F\000b\000\000\000f\004\157\000j\000\134\000\000\000\138\004\157\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\004\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\018\022\000\186\0182\000\000\000\000\000\000\000\000\018>\000\000\000\000\004\157\000\000\000\190\004\157\004\157\000\000\000\000\004\157\000\000\000\000\005\133\000\000\004\157\004\157\000\000\000\000\018V\004\157\000\000\000\000\005\133\005\133\000\000\000\202\000\000\000\000\005\133\005\133\018\130\000\000\005\133\000\000\005\133\000\000\005\133\000\000\005\133\000\206\000\000\000\000\000\000\005\133\005\133\000\000\000\000\005\133\000\000\000\000\000\000\000\000\005\133\002\146\000\000\000\000\005\133\000\000\000\000\018\162\000\000\000\000\018\242\000\000\005\133\000\000\005\133\005\133\005\133\005\133\000\000\000\000\005\133\000\000\019\n\000\000\000\000\000\000\005\133\019\022\000\000\0081\000\000\000\000\019\"\000\000\000\000\000\000\005\133\000\000\000\000\005\133\019.\000\000\000\000\019\222\005\133\002\146\005\133\000\000\005\133\005\133\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\019\234\000\000\005\133\005\133\020\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\005\133\000\000\000\000\005\133\005\133\000\000\000\000\005\133\000\000\005\133\000\000\000\000\005\133\005\133\005\133\000\000\000\000\005\133\000\000\000\000\000\000\000\000\000\000\n\198\005\133\000\000\000\000\000\000\003m\000\000\003m\000\000\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\000\000\005\133\005\133\003m\000\000\005\133\000\000\000\000\000\000\000\000\005\133\005\133\003m\003m\000\000\005\133\003m\003m\000\000\000\000\000\000\000\000\003m\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\000\000\000\000\003m\003m\003m\000\000\003m\003m\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\000\000\000\000\000\000\000\000\003m\000\000\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\003m\001\161\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\000\003m\000\000\003m\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\003m\000\000\000\000\001\161\000\000\003m\000\000\000\000\000\000\001\161\000\000\003m\001\161\001\161\003m\001\161\001\161\000\000\000\000\000\000\003m\001\161\000\000\000\000\001\030\001\161\t\226\000\000\001\161\t\230\001\161\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\001\161\000\000\001\161\t\234\n>\000\000\000\000\n\166\n\190\000\000\000\000\000\000\001\161\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\001\161\001\161\007~\000\000\001\161\000\000\000\000\000\000\001\161\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\000\000\000\162\000\000\001\161\000\000\001\161\000\000\000\000\000\000\000\000\n*\007\134\001\161\001\161\000\000\001\161\001\161\001\161\005\173\001\030\n\194\t\226\n\222\000\000\t\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n.\000\000\000\000\000\000\000\000\n2\000\000\000\000\001*\000\000\000\000\011\186\000\000\000\000\n6\000\000\000\000\t\234\n>\000\000\001\154\n\166\n\190\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\001\030\000\162\t\226\000\000\000\000\t\230\000\000\000\000\000\000\000\000\n*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\173\000\000\n\194\001*\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\234\n>\n.\000\000\n\166\n\190\000\000\n2\000\000\000\000\001R\000\000\001V\n\230\000\000\000\000\n6\000\000\000\000\000\000\n\n\001^\001\154\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\001\030\000\162\t\226\000\000\000\000\t\230\000\000\000\000\000\000\000\000\n*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\173\000\000\n\194\001*\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\234\n>\n.\000\000\n\166\n\190\000\000\n2\000\000\000\000\001R\000\000\001V\005\025\000\000\000\000\n6\000\000\000\000\000\000\n\n\001^\001\154\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\000\000\000\162\000\000\000\000\000\000\012)\000\000\000\000\012)\000\000\n*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\173\000\000\n\194\000\000\n\222\012)\000\000\000\000\000\000\012)\000\000\000\000\000\000\003V\n.\000\000\000\000\000\000\000\000\n2\012)\000\000\000\000\000\000\012)\001\189\012)\012)\n6\000\000\003^\000\000\000\000\003j\001\154\001\030\012)\t\226\000\000\012)\t\230\012)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\012)\000\000\000\000\t\234\n>\000\000\000\000\n\166\n\190\000\000\000\000\000\000\012)\001R\000\000\001V\000\000\000\000\000\000\003v\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\012)\012)\000\000\012)\000\000\003z\000\000\012)\000\000\000\000\000\000\006\254\n\030\000\000\000\000\003\130\000\000\n\"\000\000\012)\000\162\000\000\000\000\000\000\012)\012)\000\000\000\000\001\137\n*\012)\001\137\000\000\000\000\012)\012)\012)\005\173\000\000\000\000\000\000\n\222\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\000\000\n.\000\000\000\000\000\000\001\137\n2\000\000\000\000\000\000\000\000\001\137\001\201\000\000\000\000\n6\000\000\001\137\001\137\000\000\000\000\001\154\000\000\000\000\000\000\007\178\000\000\001\137\008\002\000\000\001\137\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\000\000\000\000\000\000\002\021\000\000\000\000\000\000\000\000\002\021\001\137\000\000\001\137\000\000\000\000\007\194\000\000\000\000\002\021\002\021\000\000\008\018\008\026\000\000\000\000\000\000\000\000\002\021\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\002\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\001\137\001\198\000\000\001\137\001\137\000\000\000\000\001\137\000\000\007\234\000\000\002\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\002\021\001\137\001\137\000\000\001\137\000\000\000\000\000\000\000\000\002\130\001\137\001\137\000\000\001\137\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\021\007\242\000\000\000\000\002\021\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001%\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\021\000\000\002\021\000\000\000\000\000\000\000\000\007\186\000\000\002\021\002\021\001%\008\"\007\250\002\021\000\000\001%\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001%\001%\000\000\001%\001%\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001%\001\013\000\000\000\000\001\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\007\234\000\000\001%\001\013\000\000\000\000\000\000\000\000\001\013\000\000\000\000\000\000\001%\000\000\007\194\000\000\000\000\001\013\001\013\000\000\001\013\001\013\000\000\000\000\000\000\000\000\001\013\000\000\000\000\000\000\001\013\000\000\000\000\007\202\000\000\007\218\001\013\001%\007\242\000\000\000\000\001%\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\001\013\000\000\001%\000\000\001%\000\000\000\000\000\000\000\000\000\000\001\013\001%\001%\000\000\001%\007\250\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\001\013\000\000\000\000\001\013\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001\005\000\000\000\000\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\001\013\000\000\000\000\000\000\000\000\001\005\000\000\001\013\001\013\001\005\001\013\001\013\001\013\000\000\001\005\000\000\000\000\000\000\000\000\000\000\001\005\000\000\000\000\001\005\001\005\000\000\001\005\001\005\000\000\000\000\000\000\000\000\001\005\000\000\000\000\000\000\001\005\000\000\000\000\007\202\000\000\001\005\001\005\001\t\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\001\005\000\000\001\005\001\t\000\000\000\000\000\000\000\000\001\t\000\000\000\000\000\000\001\005\000\000\001\t\000\000\000\000\001\t\001\t\000\000\001\t\001\t\000\000\000\000\000\000\000\000\001\t\000\000\000\000\000\000\001\t\000\000\000\000\007\202\000\000\001\t\001\t\001\005\001\005\000\000\000\000\001\005\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\t\000\000\001\005\000\000\001\005\000\000\000\000\000\000\000\000\000\000\001\t\001\005\001\005\000\000\001\005\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\001\t\000\000\000\000\001\t\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001\025\000\000\000\000\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\t\000\000\000\000\000\000\000\000\007\186\000\000\001\t\001\t\001\025\001\t\001\t\001\t\000\000\001\025\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001\025\001\025\000\000\001\025\001\025\000\000\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\025\000\000\000\000\007\202\000\000\007\218\001\025\001\017\000\000\000\000\001\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\007\234\000\000\001\025\001\017\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\000\001\025\000\000\007\194\000\000\000\000\001\017\001\017\000\000\001\017\001\017\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\000\001\017\000\000\000\000\007\202\000\000\007\218\001\017\001\025\001\025\000\000\000\000\001\025\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\001\017\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\000\000\001\017\001\025\001\025\000\000\001\025\001\025\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\001\017\000\000\000\000\001\017\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001\021\000\000\000\000\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\001\017\000\000\000\000\000\000\000\000\007\186\000\000\001\017\001\017\001\021\001\017\001\017\001\017\000\000\001\021\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001\021\001\021\000\000\001\021\001\021\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001\021\000\000\000\000\007\202\000\000\007\218\001\021\001\029\000\000\000\000\001\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\007\234\000\000\001\021\001\029\000\000\000\000\000\000\000\000\001\029\000\000\000\000\000\000\001\021\000\000\007\194\000\000\000\000\001\029\001\029\000\000\001\029\001\029\000\000\000\000\000\000\000\000\001\029\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001\029\001\021\001\021\000\000\000\000\001\021\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\234\000\000\001\029\000\000\001\021\000\000\001\021\000\000\000\000\000\000\000\000\000\000\001\029\001\021\001\021\000\000\001\021\001\021\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\029\007\242\000\000\000\000\001\029\000\000\000\000\000\000\007\210\000\000\000\000\000\000\007\178\000\000\000\000\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\029\000\000\001\029\000\000\000\000\000\000\000\000\007\186\000\000\001\029\001\029\001-\001\029\001\029\001\029\000\000\001-\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001-\001-\000\000\001-\008\026\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001-\007\178\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\007\234\000\000\001-\001!\000\000\000\000\000\000\000\000\001!\000\000\000\000\000\000\001-\000\000\007\194\000\000\000\000\001!\001!\000\000\001!\001!\000\000\000\000\000\000\000\000\001!\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001!\001-\007\242\000\000\000\000\001-\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\234\000\000\001!\000\000\001-\000\000\001-\000\000\000\000\000\000\000\000\000\000\001!\001-\001-\000\000\008\"\007\250\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\007\242\000\000\000\000\001!\000\000\000\000\000\000\007\210\000\000\000\000\000\000\007\178\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000\000\001!\000\000\000\000\000\000\000\000\007\186\000\000\001!\001!\001)\001!\007\250\001!\000\000\001)\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001)\001)\000\000\001)\008\026\000\000\000\000\000\000\000\000\001)\000\000\000\000\001\030\007\226\001\"\000\000\007\202\001&\007\218\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008>\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\000\000\007\234\000\000\001)\001>\001B\000\000\001J\000\000\t\222\000\000\000\000\000\000\001)\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\001^\000\000\n\206\001b\001f\001j\000\000\001n\001r\000\000\001v\000\000\000\000\001)\007\242\000\000\000\000\001)\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\001z\000\000\000\000\000\000\000\000\001~\000\000\000\000\000\162\000\000\001)\000\000\001)\000\000\000\000\000\000\000\000\001\134\000\000\001)\001)\000\000\001)\007\250\001)\000\000\000\000\001\138\008A\000\000\001\030\000\000\001\"\000\000\000\000\001&\000\000\000\000\000\000\001\142\000\000\000\000\000\000\000\000\001\146\008A\000\000\008A\000\000\008A\000\000\001*\000\000\001\150\001.\000\000\000\000\000\181\000\000\001\154\001>\001B\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\011\026\000\000\000\000\000\000\000\000\001Z\001^\000\000\000\000\001b\001f\001j\000\000\001n\001r\011\"\001v\000\000\000\000\000\000\000\000\000\181\000\181\001\030\000\000\001\"\000\000\000\000\001&\000\000\000\000\011B\001z\000\000\011*\000\000\011:\001~\014\186\000\000\000\162\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\001\134\000\000\000\000\000\000\001>\001B\000\000\001J\011J\000\000\001\138\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\001\142\000\000\001Z\001^\000\000\001\146\001b\001f\001j\000\000\001n\001r\000\000\001v\001\150\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\011R\000\000\000\000\000\000\000\000\001z\000\000\0112\000\000\000\000\001~\000\000\001\030\000\162\001\"\000\000\000\000\001&\000\000\000\181\000\000\000\000\001\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\001*\000\181\011Z\001.\000\000\000\000\000\000\000\000\000\000\001>\004\226\001\142\001J\000\000\000\000\000\000\001\146\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\001\150\000\000\000\000\000\000\001Z\001^\001\154\000\000\001b\001f\001j\000\000\001n\001r\000\000\001v\000\000\000\000\000\000\006~\006J\000b\001\030\000f\001\"\006N\000\134\001&\000\138\000\000\000\146\001z\000\150\000\000\000\154\000\174\001~\000\182\000\000\000\162\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\001\134\000\000\000\186\000\000\001>\001\130\000\000\001J\000\000\000\000\001\138\000\000\000\000\000\190\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\001\142\000\000\001Z\001^\000\000\001\146\001b\001f\001j\000\000\001n\001r\000\000\001v\001\150\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\001z\000\000\003\202\000\000\000\000\001~\000\000\003e\000\162\003e\000\000\000\000\003e\000\000\000\000\000\000\000\000\001\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\003e\000\000\000\000\003e\000\000\000\000\000\000\000\000\000\000\003e\003e\001\142\003e\000\000\000\000\000\000\001\146\000\000\000\000\003e\000\000\003e\000\000\000\000\000\000\001\150\000\000\000\000\000\000\003e\003e\001\154\000\000\003e\003e\003e\004%\003e\003e\004%\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\003e\000\000\000\000\000\000\000\000\003e\004%\004%\003e\000\000\000\000\000\000\000\157\004%\000\000\000\000\000\000\003e\000\000\004%\004%\000\000\000\000\004%\000\000\000\000\004%\000\000\000\000\004%\000\157\000\000\004%\000\000\004%\004%\000\000\000\000\000\000\003e\000\000\000\000\000\000\000\000\003e\011\"\000\000\000\000\000\000\000\000\000\000\000\157\000\157\003e\000\000\004%\000\000\000\000\000\000\003e\000\000\000\157\000\000\000\000\011*\000\000\011:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\001\030\000\000\0012\000\000\000\000\0016\000\000\000\157\000\000\000\000\000\000\000\000\000\000\004%\004%\000\000\000\000\004\193\004%\000\000\004%\001*\000\000\000\000\001.\000\000\000\000\000\000\004%\000\000\001:\001N\004%\001J\000\000\004%\000\000\000\000\000\000\000\000\001R\000\000\001V\004%\000\000\000\157\000\000\004%\004%\000\000\003\022\001^\0112\000\000\003\026\001f\001j\000\000\003\030\003\"\000\000\003&\000\000\000\000\000\157\000\000\000\000\000\000\001\030\000\000\0012\000\000\000\000\0016\000\000\000\000\000\000\003*\000\000\000\157\000\157\000\000\003.\000\000\000\000\000\162\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\0036\000\000\000\000\000\000\001:\004\202\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\003:\000\000\003\022\001^\000\000\003>\003\026\001f\001j\000\000\003\030\003\"\000\000\003&\003B\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\000\000\000\000\000\003.\000\000\001\030\000\162\0012\000\000\000\000\0016\000\000\000\000\000\000\000\000\0036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\000\000\000\000\000\000\000\000\001:\0032\003:\001J\000\000\000\000\000\000\003>\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\003B\000\000\000\000\000\000\003\022\001^\001\154\000\000\003\026\001f\001j\000\000\003\030\003\"\000\000\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\000\000\000\000\000\003.\000\000\000\000\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0036\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\003:\000\000\000\000\000\000\000\000\003>\000\000\000\000\001\030\000\000\006\202\000\186\000\000\006\206\003B\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\190\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\210\008*\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\001R\001\030\001V\006\202\000\000\000\000\006\206\000\000\000\000\000\206\006\234\001^\000\000\000\000\006\238\001f\001j\000\000\006\242\006\246\000\000\006\250\001*\000\000\000\000\008\170\000\000\000\000\000\000\000\000\000\000\006\210\006\214\000\000\000\000\000\000\006\254\007\002\000\000\000\000\000\000\001R\007\006\001V\000\000\000\162\000\000\000\000\000\000\000\000\000\162\006\234\001^\000\000\007\014\006\238\001f\001j\000\000\006\242\006\246\000\000\006\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\018\006\254\007\002\t\166\000\000\007\022\000\000\007\006\000\000\000\000\000\162\000\000\000\000\000\000\007\026\000\000\000\000\000\000\000\000\007\014\001\154\000\000\001\030\000\000\006\202\000\000\000\000\006\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\018\000\000\001*\000\000\000\000\007\022\000\000\000\000\000\000\000\000\000\000\006\210\007\n\000\000\007\026\000\000\000\149\000\000\000\000\000\000\001\154\001R\001\030\001V\t\226\000\000\000\000\t\230\000\000\000\000\000\000\006\234\001^\000\000\000\149\006\238\001f\001j\000\000\006\242\006\246\000\000\006\250\001*\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\t\234\t\246\000\000\000\149\000\149\006\254\007\002\000\000\000\000\000\000\001R\007\006\001V\000\149\000\162\000\000\011*\000\000\000\149\000\000\n\n\001^\000\000\007\014\n\014\001f\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\007\018\006\254\n\030\000\000\000\000\007\022\000\000\n\"\000\000\000\000\000\162\000\000\000\000\000\000\007\026\000\000\000\000\000\000\000\000\n*\001\154\000\000\001\030\000\000\t\226\000\000\000\000\t\230\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\0112\000\000\n.\000\000\001*\000\000\000\000\n2\000\000\000\000\000\000\000\000\000\149\t\234\n&\000\000\n6\000\000\000\000\000\000\000\000\000\000\001\154\001R\001\030\001V\t\226\000\149\000\149\t\230\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\001f\001j\000\000\n\018\n\022\000\000\n\026\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\234\n>\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\001R\n\"\001V\000\000\000\162\000\000\007\173\000\000\000\000\000\000\n\n\001^\000\000\n*\n\014\001f\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\000\000\000\000\n.\006\254\n\030\007\173\007\173\n2\000\000\n\"\000\000\007\173\000\162\000\000\000\000\000\000\n6\000\000\000\000\000\000\000\000\n*\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\007\173\000:\000\000\000\000\007\173\007\173\000\000\000\000\n.\000\000\000\000\000\000\007\173\n2\000\000\001\153\007\173\007\173\001\153\000\000\000\000\000\000\n6\000\000\000\000\000\000\007\173\000\000\001\154\000\000\000\000\000\000\000\000\001\153\000\000\000\000\007\173\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\001\153\000\000\000\000\000\000\001\153\000\000\001\153\001\153\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\001\153\000\000\000\000\001\153\000\000\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\007\173\007\173\000\000\000\000\007\173\000\000\001\153\000\000\000\000\007\173\007\173\000\000\000\000\005\133\007\173\000\000\005\133\000\000\001\153\000\000\005\133\000\000\005\133\000\000\000\000\000\000\000\000\005\133\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\003\166\000\000\001\153\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\001\153\001\153\000\000\000\000\005\133\000\000\003\174\000\000\000\000\000\000\001\153\001\153\001\153\000\218\000\000\000\000\007\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\007\173\007\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\003u\003u\003u\003u\000\000\003u\000\000\003u\003u\000\000\003u\000\000\003u\000\000\003u\007\173\003u\003u\003u\003u\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\238\007\173\000\000\003u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\007\173\007\173\003\254\000\000\000\000\004N\000\000\000\000\000\000\007\173\007\173\003u\000\000\000\000\007\173\000\000\000\000\003u\000\000\000\000\004\006\000\000\000\000\000\000\002\013\003u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\014\000\000\000\000\000\000\002\013\000\000\004^\004f\000\000\000\000\000\237\000\000\000\000\000\237\000\000\000\000\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\004\006\000\000\000\000\003u\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\004\014\000\000\000\000\000\000\000\237\000\000\000\237\000\237\000\000\000\000\000\000\002\013\000\000\000\000\000\000\000\000\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\000\000\000\000\000\000\000\000\000\000\000\004>\000\000\000\000\002\013\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\000\002\013\000\213\000\000\000\000\000\213\002\013\002\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004n\004F\002\013\000\000\000\213\000\000\000\000\000\000\000\213\004>\000\000\000\000\000\237\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\213\000\000\000\213\000\213\000\000\000\237\000\205\000\000\000\000\000\205\000\237\000\237\000\213\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\237\004F\000\237\000\000\000\205\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\205\000\000\000\000\000\000\000\205\000\000\000\205\000\205\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\205\000\000\000\000\004\022\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\213\000\000\000\205\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\213\000\209\000\000\000\000\000\209\000\213\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\213\000\213\000\000\000\209\000\000\000\000\000\000\000\209\000\205\000\000\000\000\000\205\000\000\000\000\000\000\004\030\000\000\000\000\000\209\000\000\000\000\000\000\000\209\000\000\000\209\000\209\000\000\000\205\000\225\000\000\000\000\000\225\000\205\000\205\000\209\000\000\000\000\004\022\000\000\000\209\000\000\000\000\000\205\000\205\000\205\000\000\004\006\000\000\000\000\000\000\000\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\004\014\000\000\000\000\000\000\000\225\000\000\000\225\000\225\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\225\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\000\000\209\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\209\000\217\000\000\000\000\000\217\000\209\000\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\209\000\209\000\000\004\006\000\000\000\000\000\000\000\217\000\225\000\000\000\000\000\225\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\217\000\000\000\217\000\217\000\000\000\225\000\221\000\000\000\000\000\221\000\225\000\225\000\217\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\225\000\225\000\225\000\000\004\006\000\000\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\004\014\000\000\000\000\000\000\000\221\000\000\000\221\000\221\000\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\221\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\217\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\217\000\229\000\000\000\000\000\229\000\217\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\217\000\217\000\000\004\006\000\000\000\000\000\000\000\229\000\221\000\000\000\000\000\221\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\229\000\000\000\229\000\229\000\000\000\221\003\254\000\000\000\000\000\245\000\221\000\221\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\221\000\221\000\221\000\000\004\006\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\004\014\000\000\000\000\000\000\000\245\000\000\000\245\004f\000\000\000\000\000\000\000\229\000\000\000\000\000\000\000\000\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004>\000\000\000\000\000\229\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\229\003\254\000\000\000\000\000\233\000\229\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\229\000\000\004\006\000\000\000\000\000\000\000\233\004>\000\000\000\000\000\245\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\233\000\000\000\233\000\233\000\000\000\245\003\254\000\000\000\000\000\241\000\245\000\245\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\004n\004F\000\245\000\000\004\006\000\000\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\004\014\000\000\000\000\000\000\000\241\000\000\000\241\004f\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\000\004.\003\189\000\000\004\022\003\189\004&\000\000\000\000\003\189\000\000\003\189\000\000\000\000\000\000\000\000\003\189\003\189\000\000\000\000\000\000\000\000\004>\000\000\000\000\000\233\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\233\000\000\000\000\000\000\0021\000\233\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\233\004F\000\233\000\000\000\000\003\189\000\000\000\000\000\000\004>\000\000\000\000\000\241\000\000\000\000\000\000\004\030\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\000\000\000\000\000\241\0021\0021\000\000\000\000\000\241\000\241\000\000\000\000\000\000\000\000\0021\000\000\000\000\000\000\000\241\004F\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\005.\000F\000b\000\000\000f\0021\000j\000\134\000\000\000\138\003\189\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\000\000\000\190\0021\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\0021\000\000\000\000\000\000\0021\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000\0052\0056\0002\000\214\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\005.\000F\000b\000\186\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\000\000\000\150\000\190\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\000\005:\000\000\000\000\000\000\000\000\000\000\000\186\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000\230\000\190\000\000\000\000\002}\000\000\000\000\000\000\000\206\000\000\000\000\0002\005.\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\000\202\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000\021\210\0056\000\000\000\186\000\000\0002\000\214\000F\000b\000\162\000f\000\000\000j\000\134\000\190\000\138\000\000\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\234\000\000\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\190\000\206\000\000\002-\000\000\0052\0056\000\000\021\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\012\013\000\230\002u\000\000\000\000\0002\005.\000F\000b\000\206\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\012\013\000\150\000\000\000\154\000\174\000\178\000\182\000\000\nV\000\000\000\000\000\000\000\000\000\000\000\000\012\013\000\000\005B\000\000\000\186\000\000\012\013\012\013\000\000\000\000\n^\000\000\000\000\nj\000\000\000\190\012\013\000\162\000\000\012\013\000\000\012\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\000\000\012\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\153\021\210\0056\000\000\000\000\000\000\002%\000\000\nv\000\000\000\000\000\000\0002\006B\006J\000b\000\000\000f\000\153\006N\000\134\000\000\000\138\000\000\000\146\000\169\000\150\012\013\000\154\000\174\000\178\000\182\nz\000\153\012\013\000\000\000\000\000\000\000\000\000\153\000\153\000\000\n\130\011\026\000\186\000\000\012\013\000\000\000\000\000\153\000\000\000\000\011*\000\000\000\153\000\190\000\000\021\222\011\"\000\000\000\000\012\013\012\013\000\000\000\169\000\169\000\000\000\000\000\000\000\161\000\000\000\000\000\000\000\000\000\169\000\153\006R\011*\000\000\011:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\026\000\000\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011J\000\165\011\"\000\000\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\161\011\026\0112\011*\000\000\011:\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\153\000\000\011\"\000\000\000\000\000\000\000\169\000\000\000\165\000\165\000\000\011\026\000\161\0112\000\000\000\153\000\153\000\000\000\165\000\000\000\000\011*\000\000\011:\000\000\000\169\011\"\000\000\000\000\000\000\000\000\000\000\000\173\000\173\011\018\000\000\000\000\000\000\000\000\000\000\000\169\000\169\011B\000\000\011J\011*\000\000\011:\000\000\000\000\000\161\000\000\011\026\000\000\000\000\000\000\000\000\0112\011\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\"\011J\000\161\000\000\000\000\000\000\000\189\011j\011\018\011\026\000\000\000\000\000\000\000\000\000\000\000\165\011B\000\161\000\161\011*\000\000\011:\0112\000\000\011\"\000\000\011\026\000\000\000\000\000\000\000\177\000\177\000\000\000\000\000\165\000\000\000\000\000\000\000\000\011R\011B\011\"\011J\011*\000\000\011:\0112\000\185\011j\000\165\000\165\000\000\000\000\000\000\000\000\000\000\000\000\011B\000\173\000\000\011*\000\000\011:\000\000\000\000\000\000\011J\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\011R\000\000\000\000\011J\000\000\000\000\000\000\0112\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\011R\000\000\000\000\000\000\000\000\000\000\000\000\0112\000\000\000\000\011r\011Z\000\000\000\000\000\000\000\000\000\000\011R\000\000\000\177\000\000\000\000\000\000\000\000\0112\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\011Z\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\011Z"))
+    ((16, "\000\224\001Z\000\000\000\000\000\000\001\031\000\000\000\000\000\000\000\224\000\000\001T\023\164\000\000\018B\018F\000\000\000\000+\022\018B\000\000;h\018B\000\000\000\000\018B\000\000\018B\000\000\001\003\000\195\018B\000\000\018B\000\000\000\000\000\000+\224\018B\000\000;\156\018B\000\000\000\000\018B\000\000\018B\000\000\000W\000\017\018B\000\000\018B\000\000\018B\000\000;\160\018B\000\000\000\000\018B\000\000\018B\000\000\000O\000\000\000\000\000\000\018B\000\000\018B\000\000\000\000\018B\000\000\018B\000\000\000\224\001\134\018B\000\000\023\164\018B-P\000\000G<\002\008-P\000O-P\000\000\001\156\018B\000\000G\242\000\000\000O\001\234-\254\000\000\000\0008\024\000\000<\172\000\000=\"-\254-\254\019\158\019\158<\172\019\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\228-\254\000\000\000\0008\228\000\0008\228\000\000-\254\000\000\000\000\000\000\022\250\000O\000\000\019\158\000\000.v-\254\027\180-\254\000\000\000\000\000\000\000\000\000\000\000\000\030\246-\254\031d-\254 \\-\254 \202-\254\000\000-\254\000\000-\254!\194-\254\"0-\254#(-\254#\150-\254$\142-\254\001\220-\254\000\000\000\000\000\000\000\000\000\000-\254$\252-\254%\244-\254&b-\254\000\000\000\000-\254\000\000\000\000\001\190\000\000\000\000\000\000\000\000\019\236\018B\000\000\003^\018B\000\000=\220\018B\000\000\000\000\018B\000\000\018B\000\000\002<\002v\018B\000\000\018B\000\000\004\246\018B\000\000=\254\018B\000\000\000\000\018B\000\000\018B\000\000\002d\002\144\018B\000\000\018B\000\000\018B\000\000>\024\018B\000\000\000\000\018B\000\000\018B\000\000\000O\018B\000\000\018B\000\000\018B\000\000\018B\000\000\002\130\002\234\018B\000\000;h-P\002\242\018B\000\000H\252H\028\000\000\000\152\003\226\000O\003Z\004(+x\000\000\000\000\000\235I\162\000\000\000\000\000\000\000\000\001*\004l\001\012\004\128+x\000++x\000\000\000\000\003\228\000\000\003\232\004\182+x\004N\000\000\000\000\000\000\000\235\000\000\004\176\005\188\000\000\005\210\000\000\019\236\001*-P\005\028\018B\000\000;\156-P\005Z\018B\000\000\000\000\000O\006N\000\000\000\000\000\000\000\015\019\158\000\000-\254\005\140\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\005\166\000\000\000\000\005\172\000\000\005\184<\172\000\000\000\000\000\000\000\000\000\000\000\000?\000-\254\000\000?\000\000\000?\000<\172\000\000\000\000.\212\000O\000\000\019\158\005\188\000\000-\254\005\206\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H6-\254\000\000-\254\000\000\000\000\005\216\000\000\000\1889n\006\140-\254\006V\000\000\000\000<\172\000\188\000\000\000\000\000\000\000\000\000\000I\254<\172J4<\172J\138<\172K4<\172\000\000<\172\000\000<\172K\138<\172K\192<\172L4<\172L\182<\172L\236-\254\006\n<\172\000\000<\172MB<\172M\236<\172NB\005\230\000\000\005\234\000\000\001&-\254\000\000\001&\000\000\000\000\002\174\023\164\000\000\002\174\000\000\000\000\005\234-\254\000\000\005\242\000\000\019\158\005\242\000\000\000\000\006\188\000\000\019\158\005\246\000\000\000\000\005\248\000\000\000\000\001\234\000\000\006\220\000\000;\160-P\006\020\018B\000\000\000\000\006\150\000\000\006 \018B\000\000\000\000\001\132\023\164\000\000\023\164\000\000\006\020\000\000\001\132\000\000\016\030\026\006\0182\000\000\005\218\0182\000\000\0186\0182\000\000\000\000\0182\000\000\0182\000\000\006`\006\140\0182\000\000\0182\000\000\006\022\0182\000\000\018F\0182\000\000\000\000\0182\000\000\0182\000\000\006h\006\148\0182\000\000\0182\000\000\0182\000\000/\190\0182\000\000\000\000\0182\000\000\0182\000\000\000O\0182\000\000\0182\000\000\0182\000\000\0182\000\000\006l\006\152\0182\000\000\023\164\006L\000\000\0182-P\006H\0182\000\000\000\000\000[\000\000\007,\000\000\000\000\001\188-P\006L\0182\000\000\018F-P\006T\0182\000\000\000\000\021\002\0182\000\000\006R\0182\000\000/\226\0182\000\000\000\000\0182\000\000\0182\000\000\006\138\006\184\0182\000\000\0182\000\000\0072\0182\000\000/\242\0182\000\000\000\000\0182\000\000\0182\000\000\006\146\006\190\0182\000\000\0182\000\000\0182\000\0000\002\0182\000\000\000\000\0182\000\000\0182\000\000\000O\0182\000\000\0182\000\000\0182\000\000\0182\000\000\006\152\006\196\0182\000\000/\226-P\006t\0182\000\000\000\000\002\160-P\006v\0182\000\000/\242-P\006x\0182\000\000\000\000\000\000\000\000\000\000\000\000\007>-\254\006\132\021f\007B-\254\006\142\007H\000\213\006\190\006\182\000\000@<@\178\019\158\006\152\000\000\006\162@\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000A(-\254\000\000A(\000\000A(@\178\000\000\000\000\026\\\000O\000\000\019\158\006\166\000\000-\254\006\166\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000,p-\254\000\000-\254\000\000\006\174\000\000\001&\000\000\000\000\000\000\000\000\000\0000\214@\17812@\1781\206@\1782*@\178\000\000@\178\000\000@\1782\198@\1783\"@\1783\190@\1784\026@\1784\182-\254\006\214@\178\000\000@\1785\018@\1785\174@\1786\n\019\158\006\182\000\000\000\000-\254\000\000\007\148\000\000\001V\007j-\254\0078\000\000\007z-\254\007`\000\000\000\003\000\000\006\182\006\182\001V\000\000\001V\000\000\016\030\006\182\006\182\000\000\000\000\000\000\025\\\000\000\000\000\000\000\000\000\007\184-\254\006\254\021f\0224\000O\007\220\000\000\007\1906\208\007\2286\208\007\2306\208\007\012\021f\021f\000\248\001J\002\208\000\000\000\000\000\000\001J\000\000\001N\000\248\000\000\000\000\007\014\000\000\000\000\000\000\007\236\000\000\007\254\000\000\000\000\008,\007\226-\254\007.\008\012\000\000\024R\007\238\019\158\0074\021f\000\000\000\000\007^\000\000\001&\000\000\005^\000\000\001V\000\000\000\000\007\176\000\000-P\000O\000\000\002\004-\254'\242\000\000A\158-\254\007<\000\000\019\158\007<\000\000\007@\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\020-\254\000\000B\020\000\000B\020B\138\019\158\007BB\138\000\000\000\000\029\022\000O\000\000\019\158\007H\000\000-\254\007F\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000-\254\000\134-\254\007H\000\000\000\000(\166'>\007\254-\254\000\000\007\204\000\000\000\000\000O\000\000\000\000\007\138'\242\000\000\007\134'\242\000\000\000\028\000\000\000\000:DB\138>\144B\138NxB\138N\164B\138\000\000B\138\000\000B\138N\246B\138ONB\138O\170B\138O\186B\138P\018B\138P\"B\138PDB\138P\198\000\000\007Z\000\000\007j)Z\000\000*\014\007n*\014-J\007r*\014\000\000\000\000\000\000\000\000\000\000\007l\000\000\008P\000\000\000O\000\000\002\004\008R\000\000\000N\008(\000O\007\134\008L+x\007\146\001(\000\000-\254\008p\000\000\003\226\005\020\008R+x\007\154\008x\000\000\002\008-\254\008z\000\000\008|\000\000\019\236\000O\002\172-\254\008~\000\000\008\128\000\000\012\022\003z\000\000\012\022\000\000\000\000\024R\002\188-\254\008\132\000\000\008\140\000\000\000\000\003z\000\000\000\000\tf\000\000\012\022\000\000\008n\019\158\007\188\008\156\000\000\000%\000\000\008n\000O\007\198\008\132+x\007\202\003\216\000\000-\254\008\174\000\000\008\144+x\007\214\008\180\000\000\003B-\254\008\182\000\000\008\184\000\000\019\236\000O\003r-\254\008\186\000\000\008\188\000\000\000\000\000\000\tf\000\000\000\000\003z\000\000\006\182\000\000\000%\000\000\000\000\003\154\0224\000\000\003\154\000\000\000\000\007\228\000\000\001&\000\003\021f\000\000\004\006\000Z\004\006\000\000\001\240\000\000\006\182\000\000\006\182\000\000\000\000\000\000\007\224\000\000\000\000\007\234\000\000\003\192\005^\000Z\004\006\000\000\000\000\000\000\001\240\000\000\006\182\000\000\003\192\000\000\000\000\007\168\003D\016\030\000\000\003\250\000\000\008\014\016\030\000\000\000\000\008\014\000\000\000\000\007\236\000\000\000\000\007\242\000\000\005\018\006\182\000\000\005\018\000\000\000\000\008n\000\000\003z\000\000\006\182\000\000\000\000\000\000\017j7F\000\000\008\214\000\000\017j\008\218\000\000\008\222\000\000-P\000O\005d\000\000-\254\008\226\000\000\002\254\008\180\000O\008\012\008\202+x\008\018\005t\000\000-\254\008\244\000\000\005\242\000\000-\254\008\252\000\000\019\236\000O\006\004\000\000-\254\008\254\000\000\005f\017j\000\000\024R\006\014\000\000-\254\t\000\000\000\000\000\000\000\005.\000\000\008\252\019\158\008D\t0\000\000\007\020\000\000\t\000\000O\008Z\t\024+x\008`\006\028\000\000-\254\t>\000\000\0062\000\000-\254\t@\000\000\019\236\000O\0066\000\000-\254\tB\000\000\005f\000\000\000\000\008j\000\000\005.\008\168\008\228\000\000\000\000\000\000\008\236\000\000\004~\000\003\000\000\016\030\t>\000\000\000\000-\254\008\162\006\182\000\000\008v\000\000\000\213\000\000\000\000\001\146\016\030\000\000\016\030\000\000\008d\000\000\001\146\000\000<\172\003\134<\172\000\000<\172\000\000\008h\000\000\003\134\000\000\021f\003\142\021f\000\000\021f\000\000\008l\000\000\003\142\000\000<\172\003\134\008n\000\000-P\000O\004\214-P\000\000-P\000\000\008p\000\000\004\214\000\000<\172\003\134\008r\000\000\000\000\024R\000\000\000\000\008\2247\242\000\000\000\000\000\000\000\000\000\000\008\182\000\143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\1397\242\000\000\0036\001\144\000\000\008\184\000\143\000\000\000\000\000\000\003~\001\144\000\000\000\000\000\000\t\018\000\000\000\000\000\000\000\000\027\180\029\012\000\000C>\000\0007\242\000\000\00307\242\000\000\004|\000\250\000\250\000\000\000\187\000\250\000\000\008\146\000\000\000\000\000\000\000\000\t\024\000\000\030\004\000\000\030\1507\242\000\000\004\2227\242\000\000\t\028\000\0007\242\t\030\000\000D\1807\242\t \000\000\t\"\000\000E\148:\0027\242\008\1687\242\t.\000\000\t2\000\000\t4\000\000\023\164\000\000\004\134\023\164\000\000\008\178\0182\000\000\001\2427\242\000\000\005\1887\242\000\000\004\136\004l\000\143\000\000\000\207\000\143\000\000\008\180\000\000\000\000\000\000\000\000\t<\000\000E\222:\226\t@\000\000\tH\000\0007\242\tJ\000\0007\242\tL\000\0007\242\tT\000\000C\1387\2427\242\008\2187\242\tf\000\000\th\000\000Dj\000\000\000\000\005\2107\242\000\000\005\000\005\174\000\143\000\000\000\000\000\000\005\176\000\143\000\000\008\230\000\000\000\000\000\000\000\0007\242\000\000\005\2247\242\000\000\005\028\006\028\000\143\008\236\000\000\000\000\000\000\000\000\tr\000\000\tt\000\0007\242\tv\000\000F\190:\226\tx\000\000\tz\000\000\020\158\t$\tP/\226\000\0007\242\t\128\000\000\t\134\000\000\tX\020\1587\242\t\146\000\0007\242\t\150\000\000\t\154\000\000:\226\t\0267\242\t\158\000\000\t\160\000\000\000\143\t\018\000\000\000\000\024R\000\000\000\000\002X\t\254\000\000\000\000\002v\000\000\000\000\000\000-\254\000\000\000\000\000\000\002\174\000\000\004J\000\000\000\000\000\000\004\006@L@L@L\000\000\000N\000N\000N\000N\000\000\000\000\000\000\000\000\000\000\000\000\001V\016\030\t\244\013n\003z\000\000\000\000\003z\000\000\tf\000\000'\242\t(\000\000\001V\016\030\t.\014\198\000\000\001V\013n\000\000\000\000\000\000@L\000N\000\000\000\000\000\000\tx\001\166\t\240H\252\000\000\005\178J\002\000\000\000\000\000\000\005R\t\224\000O\000\000\005\178\000\000\005\206H\252\000\000\000\000\t8\t\238\006\182\t8\000\000\003z\000\000\tf\000\000\022L\004h\000\000\000\000\t\220\000\000\000\000\002X\000\000\004\128\000\000\000\000\000\000-\254\000\000\002\174\000\000\005\n\000\000\000\000\000\000\005^\000\000\n\190\003\196\n\190\000\000\006\182\n\190\000\000\004\210\000\000\006\182\000\000\006\182\000\000\006\182\000\000\017\004\000\000\000\000\000\000\000\000\000\000\006\182\000\000\004\210\000\000\006\182\000\000D\218\000\000\000\000\000\180\tl\000\143\003v\n\006\002\248\000\000\002\248\n.\000\000\n4\000\000\n8\000\000\000\000\002l\002\248\002\030\002\248\000\000\000\000\000\198\tD\000\000\t\130\000\143\tJ\000\000\000\180\nD\000\000\003v\004\188\nV\000I\nV\000\000\000\000\0005\000\143\000\000\003\212\000\000\000\000\000;\000\000\tR\000\000\000\000\000\000\t\142\000\143\tV\000\000\000\000\000\180\003v\004\188\0005\003\212\000;\tX\000\000\003v\004\188\0005\003\212\000;\tZ\000\000\000\143\000\000\n\\\nZ\t\160\000\143\t\250\000\000"), (16, "\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\000z\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\000~\011A\000\027\000\031\011\149\011q\011A\011A\001f\016V\011\149\008\186\011\149\011\149\011\149\012\014\004F\011\149\023R\n^\005\233\011\149\011\149\011\149\n*\016Z\001\n\n.\001\006\019\206\022\170\024\206\011\149\n2\005\217\011\149\011\149\011A\n6\024\210\021\194\011\149\011\149\011A\011\149\001\206\011\149\0119\012\018\015\150\001\218\011\149\001\n\011\149\011\149\011\149\011\149\011\149\001\n\016\250\014*\011\149\011\149\011\149\0216\011\149\011\149\011\149\011\017\011\149\011\149\011\149\011\149\011\017\011\017\000\198\011\149\011\149\006y\001\n\027b\011\230\015j\006y\006y\011\017\011\149\011\149\011\149\000\202\012\026\011\149\011\149\011\149\011\149\027J\011\149\027:\011\149\004y\004\205\011\149\001\206\018&\011\149\011\149\015\150\001\218\004\013\018*\011\017\026\178\004r\018.\017*\011\149\003a\005m\011\149\004&\006y\000\006\011\149\011\149\011\149\011\149\005\006\011\149\005\241\011\149\004]\006a\014b\011\149\011\149\011\149\001\n\011\149\026\238\011\149\011\149\004\153\011\149\001\006\011\149\011\149\019\162\020\222\011\149\011\149\006i\006i\006i\006i\006i\006i\006i\006i\006i\006i\006i\013:\006i\006i\006i\006i\006i\006i\006i\006i\006i\006i\021\182\001\n\013.\015\134\006i\011\234\011\250\012\n\027\014\004\205\006i\0142\006i\006i\006i\001\n\000\n\006i\027\030\001\006\004^\006i\004y\006i\004\198\027v\027\"\004y\004y\001\006\006\198\004\013\006i\000\018\014>\000\014\004\013\004\013\006\002\004y\004y\006i\006i\021F\001\006\007~\006i\006i\004\013\001\n\021J\006i\019\246\006i\006i\006i\006i\006i\001:\001\n\006a\006i\006i\006i\004y\006i\006i\006i\012\158\006i\006i\006i\006i\004\013\001\n\026\246\006i\006i\0002\007\158\020\022\020>\020f\020v\020\162\006\001\006\001\006i\006i\003\229\015\138\006i\006i\006i\006i\021V\006i\008\206\006i\004f\005\209\006i\001\206\013.\006i\006i\001\214\001\218\004\005\007\134\0031\0069\011\230\011)\0031\011)\019\254\001\006\006i\001\138\001>\012\026\006i\006i\006i\006i\012\162\006i\012\190\006i\005\249\004\205\003\233\006i\006i\006i\001\n\001^\004\005\006i\006i\006\129\006i\006\129\006i\006i\006\129\001\n\006i\006i\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\t\006\129\001r\008m\006\129\026\238\022\130\006!\006\129\024r\006\129\002\182\006\129\006\129\006\129\005\209\003\002\006\129\006\129\006\129\013:\006\129\006\129\006\129\006\129\011)\006\129\006\129\013^\006\129\015\182\004\005\006\129\011)\005\209\006\129\004\005\004\005\005\209\n\002\004\205\006\129\006\129\006\129\006\129\006\129\006\129\015R\004\005\015R\006\129\006\129\024r\006\129\006\222\006\129\006\129\006\129\026\198\001\006\003N\006\129\006\129\006\129\004\005\006\129\006\129\006\129\003R\006\129\006\129\006\129\006\129\004\005\003\"\026\246\003*\006\129\003:\026\202\003\146\003\150\018v\001\006\006\129\003B\026\206\006\129\006\129\001\n\006\129\006\129\006\129\006\129\006\129\003\246\006\129\007\181\006\129\006\129\011)\006\129\001\206\026\254\006\129\006\129\015\150\001\218\004\t\003J\011\230\007\181\015\214\001\n\026\246\006\129\024\131\024\135\006\129\012\026\016\n\024\139\006\129\006\129\011)\006\129\003\250\006\129\013.\006\129\020\030\015R\012\166\006\129\020F\0061\001\n\011\230\011i\015R\006\129\n\193\006\129\003Z\006\129\006\129\012\026\026\214\006\129\006\129\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\007\181\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\017\006\004\014\011\230\016v\n:\011y\0129\026\222\005\005\021B\001.\012\026\001\142\nJ\nf\016\158\007\181\nj\013:\017z\013.\0016\020&\011\214\004\233\021\166\020N\005\005\n\193\011\230\007\181\004\t\001\154\004*\015R\024\242\004\t\004\t\012\026\016\190\007\181\012.\nr\025\030\025*\013:\0122\0176\004\t\026\190\0042\001\194\007\181\001\198\004\169\001J\0136\012:\015R\0046\021b\n\134\001\206\012>\011y\n\138\012B\001\218\025\227\n\142\n\146\012F\n\150\004\t\0129\0129\025\231\012J\027V\0129\007\181\006Y\013:\004m\027Z\006\025\025\234\n\154\n\158\006)\016z\012N\012R\n\162\012V\005\005\001\n\022\158\012j\0272\006A\004\133\004b\004j\012v\n\170\003f\021\178\003n\013:\003~\008\149\008\149\022\154\005\005\025>\008\149\003\134\012\150\004\130\004m\004\138\012\154\012\214\004\169\013B\020\130\n\174\013.\012\218\004\142\007\181\006\169\n\178\004\169\004\169\011\025\011\230\006\153\004\169\012\226\003\142\n\182\007\181\006\137\006\137\012\026\001\n\002\n\006\137\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\005\001\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\004\150\023J\019\002\003\158\n:\004\229\024\171\024\175\005\001\011I\001.\024\179\001\142\nJ\nf\023\150\017\250\nj\020\138\006\169\019\182\0016\006q\011\214\022j\006\153\006\145\006q\006q\018b\006\198\011!\001\154\026\003\026\007\011\230\025\146\018\146\026\011\006q\006\161\012.\nr\025\030\012\026\013:\0122\017~\007\178\004\174\007\186\001\194\007\202\001\198\004\185\001J\0136\012:\018\214\007\210\001\006\n\134\001\206\012>\006q\n\138\012B\001\218\021\254\n\142\n\146\012F\n\150\004\178\008\149\008\149\005\001\012J\007\246\008\149\007\254\006\017\008\014\007\218\004\186\006\145\023N\n\154\n\158\008\022\001\n\012N\012R\n\162\012V\005\001\001\n\006I\012j\006\161\018\166\004\133\026#\026'\012v\n\170\004\206\026+\t\006\018\194\t\014\0069\t\030\008\030\018\230\013:\018f\007\234\012\150\t&\011Y\019>\012\154\012\214\018\150\013B\0031\n\174\023R\012\218\0031\011Q\019R\n\178\019n\004\185\001\n\004\226\011a\006Q\012\226\023\154\n\182\t.\006\177\006\177\004\246\008.\002\n\006\177\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\005\022\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\005:\023b\025~\005F\n:\t>\005\225\022\142\0111\005N\001.\005\162\001\142\nJ\nf\018\170\025\170\nj\023>\001\n\003U\0016\005\174\011\214\018\198\023\138\005\250\006\n\006\018\018\234\006\146\006\182\001\154\006\190\006\246\011\230\019B\007\002\007\014\007\026\007&\012\022\nr\0072\012\026\007F\0122\019V\tJ\019r\tR\001\194\tb\001\198\004\213\001J\0126\012:\007V\tj\007f\n\134\001\206\012>\007n\n\138\012B\001\218\007\147\n\142\n\146\012F\n\150\019\030\007\222\007\226\012A\012J\008\"\008&\008\134\008\138\008\154\tr\008\170\008\194\008\214\n\154\n\158\019\"\008\234\012N\012R\n\162\012V\t2\001\n\t6\012j\tv\tz\004\133\t\218\t\222\012v\n\170\t\242\n\n\n\030\001\206\n>\nF\nN\015\150\001\218\013:\nV\t\130\012\150\nZ\nb\nz\012\154\012\214\004\213\013B\n\130\n\174\n\218\012\218\n\230\011.\011\166\n\178\004\213\004\213\011\206\011\226\011\238\004\213\012\226\011\246\n\182\001\n\008\157\008\157\011\254\016V\002\n\008\157\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\012\006\000\242\016Z\000\250\n2\001\002\001\026\001\"\001&\n6\012Z\012b\012r\012z\006\222\n:\012\130\012\138\012\146\012\206\012\222\001.\001\206\001\142\nJ\nf\015\150\001\218\nj\012\230\012\242\012\246\0016\007\189\011\214\012\254\013\002\013\014\013\022\013&\013J\013v\013\130\001\154\013\138\013\202\011\230\007\189\013\234\013\246\014:\014N\012\022\nr\014Z\012\026\001\n\0122\014r\014~\015\006\015\014\001\194\015\030\001\198\015*\001J\0126\012:\015F\015N\015b\n\134\001\206\012>\015n\n\138\012B\001\218\015v\n\142\n\146\012F\n\150\015z\015\130\015\146\015\162\012J\015\170\015\174\015\190\015\198\015\222\015\230\0061\016\018\007\189\n\154\n\158\016\026\016B\012N\012R\n\162\012V\016J\001\n\016N\012j\016^\016f\016j\016r\019\030\012v\n\170\016\130\016\138\016\146\016\150\016\166\016\174\016\198\016\206\017\030\013:\017f\017r\012\150\019\"\017\230\017\242\012\154\012\214\018\018\013B\018>\n\174\018J\012\218\018R\006\222\018n\n\178\018z\018\130\018\134\007\189\018\142\001\206\012\226\018\158\n\182\015\150\001\218\018\178\018\206\018\242\002\n\007\189\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\019\n\000\242\019\018\000\250\n2\001\002\001\026\001\"\001&\n6\019\022\019&\001\n\019.\0192\n:\019:\019J\019^\019z\019\142\001.\019\158\001\142\nJ\nf\019\174\019\198\nj\019\214\019\226\020\011\0016\0203\011\214\020[\020s\020\151\020\175\020\198\020\226\021N\021w\001\154\021\206\021\227\011\230\022\011\022\023\022'\022/\0061\012\022\nr\022B\012\026\022K\0122\022S\022[\022v\022\182\001\194\022\203\001\198\022\219\001J\0126\012:\022\227\022\239\022\251\n\134\001\206\012>\023\007\n\138\012B\001\218\023\026\n\142\n\146\012F\n\150\023#\023+\023n\012A\012J\023\162\023\183\023\191\023\203\023\219\023\227\023\238\023\242\024\003\n\154\n\158\024\011\024\018\012N\012R\n\162\012V\024\031\001\n\024+\012j\0243\024>\024G\024O\024[\012v\n\170\024v\024\254\025&\0256\025j\025r\025\150\025\186\025\190\013:\025\198\025\239\012\150\026\182\026\194\026\210\012\154\012\214\026\218\013B\026\226\n\174\027\011\012\218\027\018\027\027\027&\n\178\0276\027k\027z\027\131\027\167\027\195\012\226\027\210\n\182\027\214\012A\012A\027\218\027\227\002\n\012A\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\026:\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\004\133\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\008\129\008\129\000\000\000\000\002\n\008\129\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\015\238\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\012\029\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\000\000\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\012\029\012\029\000\000\000\000\002\n\012\029\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\025\002\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\000\000\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\012i\012i\000\000\000\000\002\n\012i\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\025\002\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\000\000\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\012e\012e\000\000\000\000\002\n\012e\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\017\178\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\n*\000\000\000\000\n.\000\000\012v\n\170\024\206\000\000\n2\000\000\000\000\000\000\000\000\n6\024\210\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\016V\n\182\000\000\0006\000:\000J\000\142\002\n\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\016Z\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\001\206\001\142\000\000\nf\015\150\001\218\nj\000\000\000\000\000\000\0016\000\000\0182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018B\nr\000\000\000\000\001\n\000\000\000\000\000\000\000\000\004\153\001\194\000\000\001\198\000\000\001J\000\000\000\000\000\000\000\000\000\000\n\134\001\206\000\000\000\000\n\138\001\214\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\005\201\007\190\005\201\005\201\n\162\005\201\005\201\001\n\005\201\008\002\005\201\000\000\005\201\000\000\005\201\000\000\n\170\005\201\005\201\005\201\005\201\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\005\201\005\201\000\000\005\201\000\000\005\201\005\201\013B\005\201\n\174\005\201\018F\005\201\005\201\005\201\n\178\005\201\000\000\005\201\000\000\005\201\000\000\018N\000\000\n\182\000\000\005\201\005\201\008\162\005\201\002\n\000\000\005\201\000>\005\201\000>\001N\005\201\008\226\005\201\000\000\000>\005\201\000>\005\201\000\000\005\201\005\201\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\000\000\005\201\005\201\005\201\000\000\005\201\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\000\000\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\000\000\000\000\005\201\000\000\000\000\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\005\201\005\201\005\201\005\201\000\000\005\201\000\000\005\201\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\000\000\001\146\000\000\000\000\001\150\003\022\003\030\000\142\0016\000\146\000\000\003b\003\166\000\000\003\174\000\000\003\190\000\000\003\198\001\154\003\206\003\218\001\158\003\226\000\000\000\000\000\000\000\000\001\182\001\178\000\000\001\186\000\000\000\000\000\000\000\000\003\234\000\000\001\194\000\000\001\198\000\000\001J\000\000\000\000\000\000\000\000\003\242\001\202\001\206\000\000\000\000\001\210\001\214\001\218\002.\001\222\001\226\000\000\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\234\000\000\000\000\000\000\000\000\001\238\004\002\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\0006\007\166\007\174\000\142\000\000\000\146\000\000\007\242\0086\001\250\008>\020\202\008N\000\000\008V\000\000\008^\008j\001\"\008r\000\000\001\254\000\000\020\206\000\000\000\000\000\000\002\002\000\000\001\n\004Y\020\210\008z\020\214\000\000\000\000\002\006\000\000\020\218\000\000\000\000\000\000\002\n\023\234\000\000\000\000\020\234\000\000\000\000\000\000\020\238\008\250\t\002\000\142\000\000\000\146\020\242\tF\t\138\000\000\t\146\000\000\t\162\008\146\t\170\000\000\t\178\t\190\022^\t\198\000\000\000\000\020\246\023.\000\000\000\000\000\000\008\158\000\000\000\000\000\000\000\000\t\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\214\000\000\000\000\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\n:\t\230\000\000\000\000\021\026\000\000\000\000\021\030\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\000\000\000\000\011\214\000\000\000\000\021\"\000\000\000\000\000\000\021&\021*\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012f\nr\000\000\000\000\000\000\0122\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\000\000\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\n*\000\000\000\000\n.\000\000\012v\n\170\024\206\n:\n2\000\000\000\000\000\000\000\000\n6\024\210\001\142\nJ\nf\012\150\000\000\nj\000\000\012\154\012\214\000\000\000\000\011\214\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\001\154\000\000\000\000\000\000\000\000\012\226\016V\n\182\000\000\nn\nr\000\000\000\000\002\n\0122\000\000\000\000\000\000\000\000\001\194\000\000\001\198\016Z\000\000\000\000\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\000\000\n\150\000\000\001\206\000\000\000\000\012J\015\150\001\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\013q\000\000\000\000\013q\000\000\012v\n\170\000\000\000\000\001\n\000\000\000\000\000\000\000\000\004\153\000\000\000\000\000\000\013q\012\150\000\000\000\000\013q\012\154\012\214\002\"\013q\000\000\n\174\000\000\012\218\000\000\013q\000\000\n\178\013q\013q\000\000\013q\013q\000\000\012\226\002*\n\182\013q\005\014\000\000\000\000\013q\002\n\000\000\013q\000\000\013q\013q\000\000\000\000\007}\007}\000\000\000\000\000\000\007}\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\013q\000\242\013q\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\013q\000\000\000\000\000\000\000\000\000\000\000\000\005\026\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\013q\013q\000\000\013q\013q\005\030\000\000\013q\000\000\000\000\000\000\000\000\000\000\000\000\001F\005&\000\000\000\000\000\000\000\000\013q\000\000\000\000\013q\013q\013q\013q\000\000\001J\000\000\000\000\013q\013q\013q\000\000\013q\013q\013q\001=\001=\001=\001=\000\000\001=\000\000\001=\001=\000\000\001=\000\000\001=\000\000\001=\000\000\001=\001=\001=\001=\000\000\000\000\004\229\000\000\020\186\004\229\000\000\000\000\000\000\000\000\000\000\001=\001=\001=\000\000\000\000\000\000\000\000\001=\000\000\004\229\000\000\000\000\001=\004\229\000\000\001=\004\229\004\229\000\000\001=\000\000\000\000\020\190\004\229\000\000\001=\004\229\004\229\000\000\004\229\004\229\000\000\001=\004\229\000\000\004\229\004\229\001=\000\000\004\229\000\000\000\000\004\229\000\000\004\229\004\229\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\229\001=\004\229\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\229\000\000\000\000\000\000\001=\000\000\000\000\004\229\000\000\001=\001\n\001=\000\000\000\000\001=\000\000\020\194\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\004\229\004\229\000\000\004\229\005\001\004\229\000\000\004\229\000\000\000\000\000\000\000\000\000\000\000\000\001=\004\229\000\000\000\000\001=\001=\004\229\004\233\000\000\004\229\004\233\004\229\000\000\000\000\000\000\021z\000\000\004\229\004\229\004\229\000\000\004\229\004\229\004\229\000\000\004\233\000\000\000\000\000\000\004\233\000\000\000\000\004\233\004\233\000\000\000\000\000\000\000\000\000\000\004\233\000\000\000\000\004\233\004\233\000\000\004\233\004\233\000\000\000\000\004\233\000\000\004\233\004\233\000\000\000\000\004\233\000\000\000\000\004\233\000\000\004\233\004\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\007\166\007\174\000\142\000\000\000\146\000\000\007\242\0086\000\000\008>\004\233\008N\004\233\008V\000\000\008^\008j\001\"\008r\000\000\000\000\000\000\004\233\000\000\000\000\000\000\000\000\000\000\000\000\004\233\000\000\008z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\130\000\000\000\000\000\000\000\000\000\000\004\233\004\233\000\000\004\233\005\005\004\233\000\000\004\233\000\000\000\000\000\000\000\000\000\000\000\000\008\146\004\233\013\197\000\000\000\000\013\197\004\233\000\000\000\000\004\233\000\000\004\233\000\000\000\000\008\158\000\000\000\000\004\233\004\233\004\233\013\197\004\233\004\233\004\233\013\197\000\000\000\000\n\202\013\197\000\000\000\000\000\000\000\000\000\000\013\197\000\000\000\000\013\197\013\197\000\000\013\197\013\197\000\000\000\000\n\210\000\000\013\197\n\222\000\000\000\000\013\197\000\000\000\000\013\197\000\000\013\197\013\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\000\000\013\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\000\000\000\000\000\000\000\000\000\000\000\000\n\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\013\197\000\000\013\197\000\000\n\238\000\000\013\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\000\000\013\197\000\000\000\000\000\000\000\000\000\000\013\197\013\197\013\197\000\000\013\197\013\197\013\197\nI\nI\nI\nI\000\000\nI\000\000\nI\nI\000\000\nI\000\000\nI\000\000\nI\000\000\nI\nI\nI\nI\000\000\000\000\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\nI\nI\nI\000\000\000\000\000\000\000\000\nI\000\000\001\137\000\000\000\000\nI\001\137\000\000\021\138\000\000\001\137\000\000\021\146\000\000\000\000\000\000\001\137\000\000\nI\001\137\001\137\000\000\001\137\001\137\000\000\nI\000\000\000\000\001\137\000\000\nI\000\000\001\137\000\000\000\000\001\137\000\000\001\137\001\137\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\nI\001\137\000\000\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\nI\000\000\000\000\000\000\000\000\nI\000\000\nI\000\000\000\000\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\nI\001\137\002>\000\000\001\137\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\021\230\nI\001\137\000\000\000\000\001\137\001\137\001\137\001\137\000\000\000\000\000\000\000\000\002\230\001\137\001\137\000\000\001\137\001\137\001\137\n9\n9\n9\n9\000\000\n9\000\000\n9\n9\000\000\n9\000\000\n9\000\000\n9\000\000\n9\n9\n9\n9\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\141\000\000\000\000\000\000\n9\n9\n9\000\000\000\000\000\000\000\000\n9\000\000\000\000\000\000\000\000\n9\000\000\013\141\000\000\000\000\000\000\000\000\000\000\000\000\013\218\000\000\000\000\000\000\n9\000\000\000\000\013\141\000\000\000\000\000\000\n9\000\000\013\141\013\141\000\000\n9\013\226\000\000\000\000\013\238\000\000\000\000\013\141\000\000\n9\013\141\000\000\013\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n9\000\000\000\000\n9\013\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n9\000\000\000\000\000\000\000\000\n9\000\000\n9\013\250\000\000\n9\000\000\n=\n=\n=\n=\000\000\n=\n9\n=\n=\n9\n=\000\000\n=\000\000\n=\013\141\n=\n=\n=\n=\013\254\000\000\013\141\000\000\n9\000\000\000\000\000\000\021\142\n9\014\006\n=\n=\n=\000\000\013\141\000\000\000\000\n=\000\000\000\000\000\000\000\000\n=\000\000\000\000\021\234\000\000\000\000\000\000\013\141\013\141\000\000\000\000\000\000\000\000\n=\000\000\000\000\000\000\000\000\000\000\000\000\n=\000\000\000\000\000\000\000\000\n=\000\000\000\000\000\000\000\000\0006\007\166\007\174\000\142\n=\000\146\000\000\007\242\0086\000\000\008>\000\000\008N\000\000\008V\000\000\008^\008j\001\"\008r\000\000\000\000\000\000\000\000\n=\000\000\000\000\n=\000\000\000\000\000\000\021\242\008z\022\014\000\000\000\000\000\000\000\000\022\026\n=\000\000\000\000\000\000\008\130\n=\000\000\n=\000\000\000\000\n=\000\000\000\000\000\000\000\000\000\000\000\000\0222\n=\000\000\000\000\n=\000\000\000\000\008\146\000\000\000\000\000\000\000\000\022^\000\000\002^\000\000\000\000\002\174\000\000\n=\000\000\008\158\000\000\000\000\n=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\000\002\001\000\000\000\000\000\000\002\001\022~\000\000\000\000\022\206\000\000\002n\000\000\000\000\002\001\002\001\000\000\002\206\002\214\000\000\000\000\022\230\000\000\002\001\000\000\000\000\022\242\002\142\008i\000\000\002v\022\254\002\134\002\001\000}\000\000\000\000\000}\000\000\023\n\000\000\000\000\023\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\002\001\000}\023\206\000\000\000\000\000}\000\000\023\230\000\000\000\000\002\001\002n\000\000\000\000\000}\000}\000\000\000}\000}\000\000\000\000\000\000\000\000\000}\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000}\000\000\000\000\002\158\000\000\000\000\002\001\002\001\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000}\002\001\000\000\000\000\002\001\002\001\002\001\002\001\000\000\000\000\000}\000\000\000\000\002\001\002\001\000\000\002\222\002\166\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000}\000}\000\000\000\000\002~\000\000\000\000\000\000\000\000\000e\000\000\000\000\000e\000\000\000\000\000\000\000\000\000}\000\000\000\000\000}\000}\000}\000}\000\000\000\000\000\000\000e\000\000\000}\000}\000e\000}\002\166\000}\000e\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000e\000e\000\000\000e\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000e\000\000\000\000\002v\000\000\002\134\000e\000]\000\000\000\000\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000e\000\000\000e\000]\000\000\000\000\000\000\000]\000\000\000\000\000\000\000\000\000e\000]\000\000\000\000\000]\000]\000\000\000]\000]\000\000\000\000\000\000\000\000\000]\000\000\000\000\000\000\000]\000\000\000\000\002v\000\000\000]\000]\000\000\000\000\000e\000\000\000\000\000e\000e\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000\000\000]\000e\000\000\000\000\000e\000e\000e\000e\000\000\000\000\000]\000\000\000\000\000e\000e\000\000\000e\000e\000e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000\000\002~\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000]\000]\000\000\000\000\000\000\000a\000\000\000]\000]\000a\000]\000]\000]\000a\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000a\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000a\000\000\000\000\002v\000\000\000a\000a\000q\000\000\000\000\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000a\000\000\000a\000q\000\000\000\000\000\000\000q\000\000\000\000\000\000\000\000\000a\002n\000\000\000\000\000q\000q\000\000\000q\000q\000\000\000\000\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\002v\000\000\002\134\000q\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000q\000a\000\000\000\000\000a\000a\000a\000a\000\000\000\000\000q\000\000\000\000\000a\000a\000\000\000a\000a\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\002~\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000q\000q\000\000\000\000\000\000\002f\000\000\000q\000q\000i\000q\000q\000q\000i\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000i\000i\000\000\000i\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000i\000\000\000\000\002v\000\000\002\134\000i\000m\000\000\000\000\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000i\000\000\000i\000m\000\000\000\000\000\000\000m\000\000\000\000\000\000\000\000\000i\002n\000\000\000\000\000m\000m\000\000\000m\000m\000\000\000\000\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\002v\000\000\002\134\000m\000\000\000\000\000i\000\000\000\000\000i\000i\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000m\000i\000\000\000\000\000i\000i\000i\000i\000\000\000\000\000m\000\000\000\000\000i\000i\000\000\000i\000i\000i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000\000\002~\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000m\000m\000\000\000\000\000\000\002f\000\000\000m\000m\000u\000m\000m\000m\000u\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000u\000u\000\000\000u\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000u\002^\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\000u\000\133\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000u\002n\000\000\000\000\000\133\000\133\000\000\000\133\002\214\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000\133\000\000\000\000\002\158\000\000\000\000\000u\000u\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000\133\000u\000\000\000\000\000u\000u\000u\000u\000\000\000\000\000\133\000\000\000\000\000u\000u\000\000\000u\000u\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\133\000\133\000\000\000\000\002~\000\000\000\000\000\000\000\000\002^\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\133\000\133\000\133\000\133\000\000\000\000\000\000\002f\000\000\000\133\000\133\000y\002\222\002\166\000\133\000y\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000y\002^\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\000y\000\129\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000y\002n\000\000\000\000\000\129\000\129\000\000\000\129\002\214\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000\129\000\000\000\000\002\158\000\000\000\000\000y\000y\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000\129\000y\000\000\000\000\000y\000y\000y\000y\000\000\000\000\000\129\000\000\000\000\000y\000y\000\000\000y\002\166\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\129\000\129\014J\000\000\002~\000\000\000\000\004=\000\000\004=\000\000\000\000\004=\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\129\000\129\000\000\000\000\000\000\004=\000\000\000\129\000\129\000\000\000\129\002\166\000\129\000\000\004=\004=\000\000\000\000\004=\004=\000\000\000\000\000\000\000\000\004=\000\000\004=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004=\004=\000\000\000\000\004=\004=\004=\000\000\004=\004=\000\000\004=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004=\004=\000\000\000\000\000\000\000\000\004=\000\000\000\000\004=\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\004=\000\000\013j\000\000\000\000\000\000\000\000\000\000\004=\000\000\004=\000\000\004=\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\004=\000\000\000\000\000\000\013n\013\194\004=\000\000\014*\014B\000\000\000\000\004=\000\000\001\194\004=\001\198\000\000\000\000\000\000\000\000\004=\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\013\174\000\000\013j\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\000\000\014b\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\013\178\000\000\000\000\000\000\013n\013\194\013\182\000\000\014*\014B\000\000\000\000\015>\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\013\174\000\000\013j\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\000\000\014b\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\013\178\000\000\000\000\000\000\013n\013\194\013\182\000\000\014*\014B\000\000\000\000\014j\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\013\174\000\000\013j\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\000\000\014b\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\013\178\000\000\000\000\000\000\013n\013\194\013\182\000\000\014*\014B\000\000\000\000\005]\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\003!\014b\000N\003!\000V\000\000\000f\003!\000\000\003!\000\000\013\178\000\000\000n\003!\003!\000\000\013\182\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\013\186\000\000\000\000\000\000\000\000\000\000\002\n\000\000\000\000\000\000\000\000\000v\003!\000\000\000\000\000\000\003!\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\003!\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\134\000\000\000\000\000\000\001.\000\000\000\000\003!\000\000\000\000\000\000\003!\003!\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\029\003!\000\154\003\029\000\162\001F\000\178\003\029\000\000\003\029\000\000\003!\000\000\000\186\003\029\003\029\003!\000\000\000\000\001J\000\000\000\000\000\000\004:\004>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\194\003\029\000\000\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003!\000\000\000\000\003!\003!\000\000\000\000\003!\000\000\000\000\000\000\003\029\003!\003!\000\000\000\000\000\000\003!\000\000\000\000\000\000\000\000\000\000\003\029\000\210\000\000\000\000\000\000\000\000\000\000\000\000\003\029\004B\000\000\000\000\003\029\003\029\000\000\000\000\000\000\000\000\001\161\000\000\000\000\001\161\003\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\000\000\003\029\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\003\029\000\000\001\161\000\000\000\000\003\029\000\000\000\000\001\161\000\000\000\000\001\161\001\161\000\000\001\161\001\161\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\000\000\001\161\000\000\001\161\001\161\000\000\000\000\000\000\000\000\000\000\003\029\000\000\000\000\003\029\003\029\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\003\029\001\161\000\000\001\161\003\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\001\161\011\026\000\000\001\161\000\000\000\000\000\000\001\161\000\000\001\142\001.\013f\000\000\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\001\161\000\000\001\161\000\000\000\000\000\000\001\154\000\000\011\"\001\161\001\161\000\000\001\161\001\161\001\161\013n\013\194\000\000\001F\014*\014B\000\000\000\000\000\000\001R\001\194\000\000\001\198\000\000\000\000\000\000\000\000\001J\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\012F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\001\n\000\000\000\000\001\142\000\000\001\146\013\174\000\000\001\150\000\000\000\000\000\000\000\000\000\000\005\241\000\000\000\000\011\218\014b\001V\000\000\000\000\000\000\001\154\000\000\000\000\001\158\000\000\013\178\013B\000\000\000\000\001\174\001\178\013\182\001\186\000\000\013b\000\000\000\000\001\201\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\001\137\001\202\001\206\001\137\014R\001\210\001\214\001\218\000\000\001\222\001\226\000\000\001\230\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\001\234\000\000\000\000\000\000\001\137\001\238\000\000\000\000\001\n\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\001\246\000\000\013\169\001\137\000\000\013\169\001\137\000\000\001\137\001\137\001\250\008y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\169\000\000\001\254\000\000\013\169\000\000\000\000\005\146\002\002\001\137\000\000\001\137\000\000\008y\013\169\000\000\000\000\002\006\013\169\000\000\013\169\013\169\000\000\002\n\005\154\000\000\000\000\005\166\000\000\000\000\013\169\000\000\000\000\013\169\000\000\013\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\0026\000\000\001\137\001\137\000\000\000\000\001\137\000\000\013\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\013\169\000\000\001\137\001\137\000\000\001\137\000\000\005\178\000\000\000\000\002\242\001\137\001\137\000\000\001\137\001\137\001\137\000\000\000\000\008B\005\201\000\000\000\000\000\000\000\000\000\000\013\169\013\169\000\000\013\169\000\000\005\182\005\201\013\169\000\000\000\000\000\000\t\018\005\201\000\000\005\201\005\190\005\201\000\000\000\000\tV\005\201\005\201\000\000\000\000\005\201\013\169\005\201\t\150\005\201\005\201\000\000\013\169\005\201\005\201\005\201\013\169\013\169\013\169\000\000\005\201\005\201\000\000\005\201\000\000\005\201\000\000\000\000\005\201\005\201\000\000\005\201\005\201\005\201\000\000\000\000\005\201\000>\005\201\000\000\005\201\005\201\000\000\000\000\005\201\000\000\005\201\000\000\005\201\005\201\t\234\000\000\nM\000\000\005\201\000>\000\000\005\201\n\022\005\201\000\000\005\201\005\201\000>\005\201\005\201\000\000\005\201\000\000\000\000\005\201\000>\000\000\000\000\000\000\005\201\005\201\nM\000\000\005\201\000\000\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\000\000\005\201\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\000\000\005\201\005\201\000\000\005\201\005\201\000\000\000\000\011N\000\000\005\201\011\158\005\201\005\201\000\000\000\000\005\201\005\201\nM\000\000\005\201\000\000\000\000\000\000\005\201\005\201\011V\000\000\005\201\000\000\002\017\000\000\005\201\005\201\002\017\000\000\000\000\000\000\000\000\000\000\011^\000\000\000\000\002\017\002\017\000\000\011\174\011\182\000\000\000\000\000\000\000\000\002\017\000\000\001%\000\000\011~\001%\000\000\011f\000\000\011v\002\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011V\000\000\000\000\000\000\001%\000\000\000\000\000\000\001%\000\000\011\134\000\000\002\017\000\000\011^\000\000\000\000\001%\001%\000\000\001%\001%\002\017\000\000\000\000\000\000\001%\000\000\000\000\000\000\011~\000\000\000\000\011f\000\000\011v\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\002\017\000\000\000\000\000\000\011n\011\134\000\000\001%\000\000\001\013\000\000\000\000\001\013\000\000\000\000\000\000\000\000\001%\000\000\000\000\002\017\000\000\002\017\000\000\000\000\000\000\000\000\001\013\000\000\002\017\002\017\001\013\011\190\011\150\002\017\001\013\000\000\000\000\000\000\000\000\000\000\011^\000\000\011\142\001\013\001\013\001%\001\013\001\013\000\000\011n\000\000\000\000\001\013\000\000\001\005\000\000\001\013\001\005\000\000\011f\000\000\011v\001\013\000\000\000\000\001%\000\000\001%\000\000\000\000\000\000\000\000\001\005\000\000\001%\001%\001\005\001%\011\150\001%\001\005\000\000\001\013\000\000\001\013\000\000\001\005\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\013\000\000\000\000\000\000\001\005\000\000\000\000\000\000\001\005\000\000\000\000\011f\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\000\000\001\013\000\000\000\000\000\000\011n\001\005\000\000\001\005\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\000\000\001\005\000\000\000\000\001\013\000\000\001\013\000\000\000\000\000\000\000\000\001\t\000\000\001\013\001\013\001\t\001\013\001\013\001\013\001\t\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\005\001\t\001\t\001\005\001\t\001\t\000\000\011n\000\000\000\000\001\t\000\000\001\025\000\000\001\t\001\025\000\000\011f\000\000\001\t\001\t\000\000\000\000\001\005\000\000\001\005\000\000\000\000\000\000\000\000\011V\000\000\001\005\001\005\001\025\001\005\001\005\001\005\001\025\000\000\001\t\000\000\001\t\000\000\011^\000\000\000\000\001\025\001\025\000\000\001\025\001\025\001\t\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\025\000\000\000\000\011f\000\000\011v\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\011n\011\134\000\000\001\025\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\000\000\001\025\000\000\000\000\001\t\000\000\001\t\000\000\000\000\000\000\000\000\011V\000\000\001\t\001\t\001\017\001\t\001\t\001\t\001\017\000\000\000\000\000\000\000\000\000\000\011^\000\000\001\025\001\017\001\017\001\025\001\017\001\017\000\000\011n\000\000\000\000\001\017\000\000\001\021\000\000\001\017\001\021\000\000\011f\000\000\011v\001\017\000\000\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\011V\000\000\001\025\001\025\001\021\001\025\001\025\001\025\001\021\000\000\001\017\000\000\001\017\000\000\011^\000\000\000\000\001\021\001\021\000\000\001\021\001\021\001\017\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001\021\000\000\000\000\011f\000\000\011v\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\011n\011\134\000\000\001\021\000\000\001\029\000\000\000\000\001\029\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\017\000\000\001\017\000\000\000\000\000\000\000\000\011V\000\000\001\017\001\017\001\029\001\017\001\017\001\017\001\029\000\000\000\000\000\000\000\000\000\000\011^\000\000\001\021\001\029\001\029\001\021\001\029\001\029\000\000\011n\000\000\000\000\001\029\000\000\011N\000\000\011~\001-\000\000\011f\000\000\011v\001\029\000\000\000\000\001\021\000\000\001\021\000\000\000\000\000\000\000\000\011V\000\000\001\021\001\021\001-\001\021\001\021\001\021\001-\000\000\011\134\000\000\001\029\000\000\011^\000\000\000\000\001-\001-\000\000\001-\011\182\001\029\000\000\000\000\000\000\001-\000\000\000\000\000\000\011~\000\000\000\000\011f\000\000\011v\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\001\029\000\000\000\000\000\000\011n\011\134\000\000\001-\000\000\011N\000\000\000\000\001!\000\000\000\000\000\000\000\000\001-\000\000\000\000\001\029\000\000\001\029\000\000\000\000\000\000\000\000\011V\000\000\001\029\001\029\001!\001\029\001\029\001\029\001!\000\000\000\000\000\000\000\000\000\000\011^\000\000\011\142\001!\001!\001-\001!\001!\000\000\011n\000\000\000\000\001!\000\000\011N\000\000\011~\001)\000\000\011f\000\000\011v\001!\000\000\000\000\001-\000\000\001-\000\000\000\000\000\000\000\000\011V\000\000\001-\001-\001)\011\190\011\150\001-\001)\000\000\011\134\000\000\001!\000\000\011^\000\000\000\000\001)\001)\000\000\001)\011\182\001!\000\000\000\000\000\000\001)\000\000\000\000\000\000\011~\000\000\000\000\011f\000\000\011v\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\001!\000\000\000\000\000\000\011n\011\134\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\001!\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\001!\001!\000\000\001!\011\150\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\142\011\142\001\146\000\000\001)\001\150\000\000\000\000\011n\000\000\000\000\000\000\000\000\000\000\008y\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\001\158\001)\000\000\001)\000\000\000\000\001\174\001\178\000\000\001\186\001)\001)\000\000\001)\011\150\001)\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\001\142\001\230\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0186\000\000\000\000\001\234\000\000\000\000\001\154\000\000\001\238\001\158\000\000\001\n\000\000\000\000\000\000\001\174\001\178\000\000\001\186\000\000\001\246\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\001\250\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\001\254\001\222\001\226\000\000\001\230\000\000\002\002\020\202\000\000\008y\000\000\000\000\000\000\000\000\000\000\002\006\000\000\000\000\000\000\020\206\001\234\002\n\000\000\000\000\000\000\001\238\000\000\020\210\001\n\020\214\000\000\000\000\000\000\000\000\020\218\000\000\000\000\001\246\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\001\250\000\000\001\142\000\000\001\146\020\242\000\000\001\150\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\000\023\018\000\000\002\002\n}\000\000\020\246\001\154\000\000\000\000\001\158\000\000\002\006\000\000\000\000\000\000\001\174\007\030\002\n\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\n}\000\000\020\250\000\000\000\000\020\254\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\021\002\001\230\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\000\000\000\000\000\000\001\234\021\026\000\000\000\000\021\030\001\238\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\000\000\021\"\000\000\000\000\000\000\021&\021*\n}\001\142\001\250\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\002\002\001\154\000\000\000\000\001\158\000\000\000\000\000\000\000\000\002\006\001\174\001\242\000\000\001\186\000\000\002\n\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\000\000\001\230\000\000\000\000\000\000\006\006\000\000\000\000\000\000\000\000\0045\000\000\0045\000\000\000\000\0045\000\000\001\234\000\000\000\000\000\000\000\000\001\238\000\000\000\000\001\n\000\000\000\000\000\000\000\000\0045\000\000\000\000\0045\001\246\000\000\000\000\000\000\000\000\0045\0045\000\000\0045\000\000\001\250\000\000\000\000\000\000\000\000\0045\000\000\0045\000\000\000\000\000\000\000\000\001\254\000\000\000\000\0045\0045\020\202\002\002\0045\0045\0045\000\000\0045\0045\000\000\0045\002\006\000\000\020\206\000\000\000\000\000\000\002\n\000\000\000\000\000\000\020\210\000\000\020\214\000\000\000\000\0045\000\000\020\218\000\000\000\000\0045\000\000\020\222\0045\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\0045\000\000\014\150\020\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022:\000\000\000\000\000\000\000\000\020\246\014\158\000\000\0045\000\000\000\000\000\000\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\014\166\000\000\000\000\0045\000\000\000\000\014\230\014\238\n}\0045\020\250\000\000\000\000\020\254\000\000\000\000\014\198\000\000\000\000\014\174\000\000\014\190\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\020\202\021\022\000\000\000\000\000\000\000\000\014\206\021\026\000\000\000\000\021\030\000\000\020\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\210\000\000\020\214\000\000\000\000\021\"\000\000\020\218\000\000\021&\021*\n}\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\014\214\020\242\000\000\000\000\000\000\000\000\000\000\014\182\000\000\000\000\000\000\000\000\024:\000\000\000\000\n\169\000\000\020\246\005\201\000\000\005E\005\201\000Z\000\000\000\000\005\201\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\014\246\014\222\000\000\000\000\000\000\n\169\000\000\020\250\000\000\005\201\020\254\005\201\005\201\000\166\005\201\000\230\005\201\000\000\005\201\000\000\005\201\005\201\021\002\005\201\005\201\005\201\005\201\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\000\000\000\000\000\000\000\000\021\026\005\201\000\000\021\030\000\000\004\006\000\000\005\201\000\000\005\201\000>\005\201\000\000\005\201\000\000\000\000\000\000\000\000\021\"\000\000\000\000\005\201\021&\021*\n\169\005\201\005\201\005\201\000\000\005\201\000\000\004\218\000\000\007N\000\000\005\201\000>\000\000\000>\005\201\000\000\005\201\000\000\000\000\000\000\005\201\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\005\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\000\000\005\201\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\000\000\000\000\005\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\005\201\005\201\005\201\005\201\001\142\005\201\001\162\005\201\000\000\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\001\158\000\000\000\000\000\000\000\000\000\000\001\170\001\190\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\001\206\000\000\000\000\005V\001\214\001\218\000\000\005Z\005^\001\142\005b\001\162\000\000\000\000\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005f\000\000\000\000\001\154\000\000\005j\001\158\000\000\001\n\000\000\000\000\000\000\001\170\007\006\000\000\001\186\000\000\005r\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\001\206\000\000\000\000\005V\001\214\001\218\005v\005Z\005^\000\000\005b\000\000\005z\000\000\000\000\005\201\000\000\000\000\005\201\003.\000\000\005~\005\201\000\000\005\201\000\000\005f\002\n\000\000\005\201\005\201\005j\005\201\000\000\001\n\005\201\003r\000\000\000\000\005\201\000\000\005\201\000\000\005r\000\000\005\201\005\201\005\201\005\201\003\178\000\000\000\000\005\201\005\201\005\201\000\000\000\000\005\201\000\000\005\201\005\201\000\000\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\005\201\005z\000\000\005\201\005\201\000\000\000\000\000\000\000\000\000\000\005~\000\000\000>\005\201\000\000\005\201\002\n\005\201\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000\000\000\000\005\201\005\201\000>\000\000\000\000\005\201\005\201\000\000\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000>\000\000\005\201\005\201\000\000\005\201\000\000\000\000\000\000\000\181\000\000\005\201\005\201\000\000\000\000\005\201\005\201\000\000\000\000\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\014\158\000\000\000\000\000\000\000\000\005\201\000\000\000\000\005\201\000\000\005\201\000\000\000\000\000\000\014\166\000\000\000\000\000\000\005\201\000\000\000\181\000\181\000\000\005\201\005\201\000\000\000\000\005\201\005\201\000\000\014\198\005\201\000\000\014\174\000\000\014\190\005\201\005\201\000\000\000\000\000\000\005\201\000\000\000\000\005\201\005\201\000\000\000\000\005\201\000\000\001\142\000\000\001\162\005\201\005\201\001\166\014\206\005\201\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\000\000\001\154\005\201\000\000\001\158\000\000\000\000\000\000\000\000\000\000\001\170\005n\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\014\214\000\000\000\000\000\000\000\000\005R\001\206\014\182\000\000\005V\001\214\001\218\000\000\005Z\005^\000\000\005b\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005f\000\000\000\000\000\181\014\222\005j\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\000\000\005z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005~\000\000\0006\000:\000J\000\142\002\n\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\000\000\000\000\000\000\000\000\001\142\000\000\nf\000\000\000\000\nj\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nn\011\198\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\134\001\206\001J\000\000\n\138\001\214\001\218\000\000\n\142\n\146\001\142\n\150\nf\000\000\000\000\nj\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\001\154\000\000\n\162\000\000\000\000\001\n\000\000\000\000\000\000\nn\nr\000\000\000\000\001\n\n\170\000\000\000\000\000\000\004\133\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\134\001\206\000\000\000\000\n\138\001\214\001\218\n\174\n\142\n\146\001\142\n\150\nf\n\178\000\000\nj\000\000\000\000\000\000\000\000\000\000\000\000\n\182\000\000\000\000\000\000\n\154\n\158\002\n\000\000\001\154\000\000\n\162\000\000\000\000\001\n\000\000\000\000\000\000\nn\n\166\000\000\000\000\000\000\n\170\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\134\001\206\000\000\000\000\n\138\001\214\001\218\n\174\n\142\n\146\001\142\n\150\013f\n\178\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\n\182\000\000\000\000\000\000\n\154\n\158\002\n\000\000\001\154\000\000\n\162\000\000\000\000\001\n\000\000\000\000\000\000\013n\013z\000\000\000\000\000\000\n\170\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\142\001\206\000\000\000\000\013\146\001\214\001\218\n\174\013\150\013\154\001\142\013\158\013f\n\178\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\n\182\000\000\000\000\000\000\n\154\013\162\002\n\000\000\001\154\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\013n\013\170\000\000\000\000\000\000\013\174\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\142\001\206\000\000\000\000\013\146\001\214\001\218\013\178\013\150\013\154\001\142\013\158\013f\013\182\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\013\186\000\000\000\000\000\000\n\154\013\162\002\n\000\000\001\154\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\013n\013\194\000\000\000\000\000\000\013\174\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\142\001\206\000\000\000\000\013\146\001\214\001\218\013\178\013\150\013\154\000\000\013\158\000\000\013\182\000\000\000\000\000\000\000\000\008q\000\000\000\000\000\000\013\186\000\000\000\000\000\000\n\154\013\162\002\n\000\000\008q\000\000\013\166\000\000\000\000\001\n\000\000\000\000\008q\000\000\008q\000\000\000\000\000\000\013\174\008q\000\000\000\000\000\000\000\000\008q\000\000\000\000\008q\000\000\000\000\023\014\008q\021\150\000\000\000\000\000\000\000\000\008q\000\000\000\000\013\178\000\000\020\206\000\000\000\000\000\000\013\182\000\000\000\000\000\000\020\210\000\000\020\214\008q\000\000\013\186\000\000\020\218\000\000\000\000\000\000\002\n\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\008q\000\000\000\000\008q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\246\023.\008q\000\000\000\000\000\000\000\000\008q\008q\008q\000\000\008q\008q\000\000\008q\000\000\000\000\000\000\000\000\000\000\008q\000\000\000\000\008q\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008q\000\000\021\002\000\000\008q\008q\000\000\021\006\001\n\021\n\000\000\021\014\021\018\007\229\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\000\000\007\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\229\000\000\007\229\000\000\000\000\021\"\000\000\007\229\000\000\021&\021*\000\000\007\229\000\000\000\000\007\229\000\000\022\030\000\000\007\229\000\000\000\000\000\000\000\000\000\000\007\229\000\000\000\000\000\000\020\206\000\000\n*\000\000\000\000\n.\000\000\000\000\020\210\024\206\020\214\n2\007\229\023.\000\000\020\218\n6\024\210\000\000\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\007\229\000\000\000\000\007\229\000\000\000\000\000\000\016V\000\000\000\000\000\000\000\000\020\246\000\000\000\000\007\229\000\000\000\000\000\000\000\000\007\229\007\229\007\229\016Z\007\229\007\229\000\000\007\229\000\000\000\000\000\000\000\000\000\000\007\229\000\000\000\000\007\229\020\250\000\000\000\000\020\254\000\000\000\000\001\206\000\000\000\000\000\000\015\150\001\218\000\000\000\000\007\229\021\002\000\000\000\000\007\229\007\229\021\006\001\n\021\n\000\000\021\014\021\018\0226\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\000\000\020\206\000\000\001\n\000\000\000\000\000\000\000\000\004\153\020\210\000\000\020\214\000\000\000\000\021\"\000\000\020\218\000\000\021&\021*\000\000\020\222\000\000\000\000\020\234\000\000\020\202\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\020\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\210\000\000\020\214\000\000\020\246\008\205\008\205\020\218\000\000\000\000\008\205\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\210\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\"\021\002\000\000\000\000\021&\021*\021\006\001\n\021\n\000\000\021\014\021\018\020\202\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\000\000\020\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\210\000\000\020\214\000\000\000\000\021\"\000\000\020\218\000\000\021&\021*\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\000\000\000\000\000\000\004E\004E\004E\004E\000\000\004E\000\000\004E\004E\023\210\004E\000\000\004E\000\000\004E\000\000\004E\004E\004E\004E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\004E\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\004E\000\000\000\000\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\004E\000\000\000\000\000\000\021\026\000\000\004E\021\030\000\000\000\000\000\000\000\000\000\000\000\000\004E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\"\000\000\000\000\000\000\021&\021*\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\0006\000:\000J\000\142\000\000\000\146\004E\000\150\000\218\000\000\000\226\001.\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\153\000\000\000\000\001\153\000\000\000\000\000\000\001F\0016\000\000\000\000\000\000\000\000\001R\004E\000\000\000\000\000\000\001\153\000\000\000\000\001J\001\153\000\000\000\000\000\000\000\000\000\000\001F\000\000\000\000\000\000\001\153\000\000\001R\000\000\001\153\000\000\001\153\001\153\000\000\000\000\001J\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\001\153\000\000\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\0006\000:\000J\000\142\001V\000\146\001\n\000\150\000\218\001\153\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\012\001\000\000\000\000\000\000\001.\000\000\000\000\001\153\005\226\000\000\001\153\000\000\000\000\000\000\001\153\0016\000\000\000\000\000\000\000\000\000\000\002)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\001F\000\000\000\000\005\234\000\000\000\000\001R\001\153\001\153\001\153\000\000\000\000\000\000\000\000\001J\000\000\000\000\000\000\025v\004>\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\000\0006\000:\000J\000\142\000\000\000\146\025z\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\001F\001\002\001\026\001\"\001&\006:\000\000\000\000\006\138\000\000\000\000\000\000\003E\000\000\001J\002!\000\000\001.\004:\004>\000\000\000\000\000\000\006B\000\000\000\000\000\000\002\t\0016\000\000\000\000\000\000\000\237\000\000\000\000\000\237\000\000\006J\000\000\000\000\000\000\002\t\000\000\006\154\006\162\000\000\000\000\000\000\001F\000\000\006B\000\000\000\000\006j\000\237\000\000\006R\000\000\006b\000\000\000\000\000\000\001J\000\000\006J\000\000\025v\004>\000\237\000\000\000\237\000\237\000\000\000\000\004J\000\213\000\000\000\000\000\213\006r\006j\000\000\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\213\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\213\000\000\000\213\000\213\000\000\000\000\006z\000\237\000\000\002\t\000\000\025\130\000\213\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\006z\000\000\000\000\000\237\000\000\000\213\000\000\006Z\006\170\006\130\002\t\000\000\000\000\000\000\000\000\000\000\000\205\000\213\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\205\000\237\006\130\000\237\000\205\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\213\000\000\000\205\000\000\006Z\000\000\000\205\000\000\000\205\000\205\000\000\000\000\000\000\000\209\000\000\000\000\000\209\000\000\000\205\000\000\000\000\006R\000\213\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\213\000\213\000\213\000\209\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\225\000\205\000\209\000\000\000\000\000\000\000\209\000\000\000\209\000\209\000\000\000\000\000\000\000\205\000\000\006B\000\000\000\000\000\209\000\225\000\000\006R\000\000\000\209\000\000\000\000\000\000\000\000\000\000\006J\000\000\000\000\000\000\000\225\000\000\000\225\000\225\000\000\000\000\000\205\000\000\000\000\000\205\000\000\000\209\000\225\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\217\000\209\000\000\000\217\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\006r\000\000\006B\000\205\000\205\000\205\000\217\000\000\000\000\000\000\000\000\000\209\000\225\000\000\000\209\000\000\006J\000\000\006Z\000\000\000\217\000\000\000\217\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\006R\000\209\006b\000\225\000\000\000\000\000\225\000\000\000\000\000\000\006Z\000\209\000\209\000\209\000\221\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\000\006B\000\000\000\000\000\217\000\221\000\000\000\225\000\225\000\225\000\229\000\000\000\000\000\229\000\000\006J\000\000\000\000\000\000\000\221\000\000\000\221\000\221\000\000\000\000\000\000\000\000\000\000\006B\000\000\000\217\000\221\000\229\000\217\006R\000\000\006b\006Z\000\000\000\000\000\000\000\000\006J\000\000\000\000\000\000\000\229\000\000\000\229\000\229\000\000\000\000\000\000\006:\000\000\000\217\000\245\006r\006j\000\000\000\000\006R\000\000\006b\000\000\000\217\000\217\000\217\000\000\000\221\000\000\006B\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\245\000\000\000\245\006\162\000\000\000\000\000\221\000\229\000\000\000\221\000\000\000\000\006j\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\006z\000\000\000\000\000\229\000\000\006r\000\000\006Z\000\221\000\221\000\221\000\000\000\000\000\000\000\000\000\000\006:\000\245\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\000\229\000\229\000\229\000\233\000\000\000\000\000\000\000\000\006z\000\000\000\000\000\245\000\000\006J\000\000\006Z\000\000\000\233\000\000\000\233\000\233\000\000\000\000\000\000\006:\000\000\000\000\000\241\000\000\006j\000\000\000\000\006R\000\245\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\006\170\006\130\000\245\000\241\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\241\000\000\000\241\006\162\000\000\000\000\000\000\000\233\000\000\000\157\000\000\000\000\006j\000\149\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\014\166\000\000\000\000\000\000\000\000\000\000\000\157\000\157\000\149\000\000\006z\000\000\000\000\000\233\000\000\006r\000\157\006Z\000\000\014\174\000\000\014\190\000\149\000\000\000\000\000\000\000\000\000\241\000\149\000\149\000\000\000\153\000\000\000\000\000\000\000\233\000\000\000\000\000\149\000\000\000\000\014\174\000\157\000\149\000\000\000\233\006\130\000\233\000\000\000\153\000\000\000\000\000\000\006z\000\000\000\000\000\241\000\000\000\000\000\000\006Z\000\000\000\000\000\153\000\149\000\000\000\000\000\000\000\000\000\153\000\153\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\241\000\153\000\157\000\000\014\174\000\000\000\153\000\000\000\000\014\182\000\241\006\130\000\241\000\000\000\000\014\158\000\000\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\149\000\000\000\000\000\153\000\000\014\166\000\000\014\182\000\000\000\000\000\000\000\169\000\169\000\157\000\157\000\000\000\000\000\000\000\000\000\161\000\149\000\169\000\000\000\000\014\174\000\000\014\190\000\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\149\014\158\000\000\000\000\000\000\000\153\000\000\000\000\000\000\014\158\000\000\014\206\014\182\000\000\000\000\014\166\000\000\000\000\000\000\000\000\000\000\000\161\000\161\014\166\000\000\000\153\000\000\000\000\000\000\000\165\000\165\000\161\000\000\000\000\014\174\000\173\014\190\000\000\000\000\000\165\000\153\000\153\014\174\014\150\014\190\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\000\014\158\000\000\000\000\014\182\000\161\000\000\000\000\014\150\014\158\000\000\000\000\000\000\014\206\000\000\014\166\000\000\000\169\000\000\000\000\000\000\000\173\000\173\014\166\000\000\000\000\014\158\000\000\000\000\000\189\014\238\014\198\000\169\000\169\014\174\000\000\014\190\000\000\000\000\014\198\014\166\000\000\014\174\000\161\014\190\000\000\000\177\000\177\000\000\000\000\014\182\000\165\000\000\000\000\000\000\000\000\014\198\014\206\014\182\014\174\000\000\014\190\000\000\000\161\000\000\014\206\000\000\000\000\000\000\000\000\000\000\000\165\000\000\014\150\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\014\206\000\000\000\000\000\000\000\165\000\165\000\000\000\000\000\000\014\158\000\000\000\000\000\000\014\214\000\000\000\000\000\000\000\000\000\000\000\000\014\182\014\214\000\000\014\166\000\000\000\000\000\000\000\000\014\182\000\185\014\238\000\000\000\000\000\173\000\000\000\000\000\000\000\000\014\214\014\198\000\000\000\189\014\174\000\000\014\190\014\182\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\014\246\014\222\000\177\000\000\000\000\000\000\000\000\000\000\000\000\014\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\014\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\214\000\000\000\000\000\000\000\000\000\000\000\000\014\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\014\222"))
   
   let lhs =
-    (16, "\000\012\000\011\000\n\000\t\000\008\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\t\001\t\001\t\001\008\001\008\001\008\001\008\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\003\001\003\001\003\001\003\001\002\001\001\001\001\001\001\001\000\001\000\001\000\000\255\000\255\000\255\000\254\000\254\000\254\000\253\000\252\000\251\000\250\000\250\000\249\000\249\000\248\000\248\000\247\000\247\000\246\000\246\000\245\000\244\000\244\000\243\000\243\000\242\000\242\000\242\000\241\000\241\000\240\000\239\000\238\000\237\000\236\000\235\000\234\000\233\000\232\000\231\000\230\000\229\000\228\000\227\000\227\000\226\000\226\000\225\000\225\000\224\000\224\000\223\000\223\000\223\000\222\000\222\000\222\000\222\000\222\000\221\000\221\000\221\000\221\000\221\000\220\000\219\000\219\000\219\000\219\000\218\000\218\000\217\000\217\000\216\000\216\000\215\000\215\000\215\000\214\000\214\000\214\000\213\000\213\000\213\000\213\000\212\000\212\000\212\000\212\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\210\000\209\000\209\000\208\000\208\000\208\000\207\000\207\000\206\000\206\000\206\000\205\000\205\000\204\000\204\000\204\000\203\000\202\000\201\000\201\000\200\000\200\000\199\000\199\000\198\000\198\000\197\000\197\000\196\000\195\000\194\000\194\000\193\000\193\000\192\000\191\000\191\000\191\000\191\000\190\000\189\000\188\000\188\000\187\000\186\000\186\000\185\000\185\000\185\000\185\000\185\000\184\000\184\000\184\000\184\000\183\000\183\000\183\000\183\000\182\000\182\000\182\000\182\000\181\000\180\000\180\000\179\000\179\000\179\000\178\000\177\000\177\000\177\000\177\000\176\000\175\000\175\000\175\000\175\000\174\000\174\000\174\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\172\000\172\000\171\000\171\000\170\000\170\000\169\000\169\000\168\000\168\000\168\000\168\000\167\000\167\000\167\000\167\000\166\000\166\000\166\000\166\000\166\000\165\000\164\000\164\000\164\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\159\000\159\000\158\000\158\000\157\000\157\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\155\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\140\000\139\000\139\000\138\000\138\000\137\000\137\000\136\000\136\000\135\000\135\000\134\000\134\000\133\000\133\000\132\000\132\000\131\000\131\000\130\000\130\000\129\000\129\000\128\000\128\000\127\000\127\000~\000~\000}\000}\000|\000|\000{\000{\000z\000z\000y\000y\000x\000w\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000u\000t\000s\000r\000q\000p\000o\000n\000m\000l\000l\000l\000k\000k\000k\000j\000j\000j\000j\000i\000h\000g\000f\000e\000d\000c\000c\000c\000b\000b\000b\000a\000a\000`\000`\000`\000_\000_\000^\000]\000]\000]\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000V\000V\000U\000U\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000S\000S\000R\000R\000Q\000Q\000P\000P\000P\000P\000P\000O\000O\000N\000N\000N\000N\000M\000L\000K\000K\000K\000J\000J\000J\000I\000I\000I\000I\000I\000I\000H\000H\000H\000H\000H\000G\000G\000G\000G\000G\000G\000G\000F\000F\000F\000F\000F\000F\000F\000E\000E\000E\000E\000E\000E\000E\000D\000D\000D\000D\000D\000D\000D\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000?\000?\000?\000?\000?\000>\000=\000=\000=\000=\000=\000=\000<\000;\000:\0009\0008\0008\0007\0006\0006\0006\0006\0006\0006\0006\0005\0005\0005\0005\0005\0005\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000+\000+\000*\000*\000)\000)\000(\000(\000'\000'\000&\000&\000%\000%\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000#\000#\000#\000\"\000\"\000\"\000\"\000!\000!\000!\000!\000!\000 \000\031\000\031\000\031\000\030\000\030\000\029\000\028\000\027\000\027\000\027\000\027\000\026\000\026\000\026\000\025\000\025\000\024\000\024\000\024\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\016\000\016\000\016\000\015\000\015\000\014\000\013\000\013\000\013\000\013\000\013")
+    (16, "\000\012\000\011\000\n\000\t\000\008\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\004\001\004\001\004\001\003\001\003\001\003\001\003\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\254\000\254\000\254\000\254\000\253\000\252\000\252\000\252\000\251\000\251\000\251\000\250\000\250\000\250\000\249\000\249\000\249\000\248\000\247\000\246\000\245\000\245\000\244\000\244\000\243\000\243\000\242\000\242\000\241\000\241\000\240\000\239\000\239\000\238\000\238\000\237\000\237\000\237\000\236\000\236\000\235\000\234\000\233\000\232\000\231\000\230\000\229\000\228\000\227\000\226\000\225\000\224\000\223\000\223\000\222\000\222\000\221\000\221\000\220\000\220\000\219\000\219\000\219\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\217\000\216\000\216\000\216\000\216\000\215\000\215\000\214\000\214\000\213\000\213\000\212\000\212\000\212\000\211\000\211\000\211\000\210\000\210\000\210\000\210\000\209\000\209\000\209\000\209\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\207\000\206\000\206\000\205\000\205\000\205\000\204\000\204\000\203\000\203\000\203\000\202\000\202\000\201\000\201\000\201\000\200\000\199\000\198\000\198\000\197\000\197\000\196\000\196\000\195\000\195\000\194\000\194\000\193\000\192\000\191\000\191\000\190\000\190\000\189\000\189\000\189\000\188\000\187\000\186\000\186\000\185\000\184\000\184\000\184\000\184\000\184\000\183\000\183\000\183\000\183\000\182\000\182\000\182\000\182\000\181\000\181\000\181\000\181\000\180\000\179\000\179\000\178\000\178\000\178\000\177\000\176\000\176\000\176\000\176\000\175\000\174\000\174\000\173\000\173\000\172\000\172\000\171\000\171\000\171\000\170\000\170\000\169\000\169\000\169\000\169\000\168\000\168\000\168\000\168\000\167\000\167\000\167\000\167\000\167\000\166\000\165\000\165\000\165\000\164\000\163\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\159\000\159\000\158\000\158\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\156\000\155\000\154\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\140\000\139\000\139\000\138\000\138\000\137\000\137\000\136\000\136\000\135\000\135\000\134\000\134\000\133\000\133\000\132\000\132\000\131\000\131\000\130\000\130\000\129\000\129\000\128\000\128\000\127\000\127\000~\000~\000}\000}\000|\000|\000{\000{\000z\000y\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000w\000v\000u\000t\000s\000r\000q\000p\000o\000n\000n\000n\000m\000m\000m\000l\000l\000l\000l\000k\000j\000i\000h\000g\000f\000e\000e\000d\000d\000d\000c\000c\000b\000b\000b\000a\000a\000`\000_\000_\000_\000^\000]\000]\000\\\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000U\000U\000T\000T\000S\000S\000R\000R\000R\000R\000R\000Q\000Q\000P\000P\000P\000P\000O\000N\000M\000M\000M\000L\000L\000L\000K\000K\000K\000K\000K\000K\000J\000J\000J\000J\000J\000I\000I\000I\000I\000I\000I\000I\000H\000H\000H\000H\000H\000H\000H\000G\000G\000G\000G\000G\000G\000G\000F\000F\000F\000F\000F\000F\000F\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000A\000A\000A\000A\000A\000@\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000>\000=\000<\000;\000:\000:\0009\0008\0008\0008\0008\0008\0008\0008\0007\0007\0007\0007\0007\0007\0006\0005\0005\0005\0004\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000+\000+\000*\000*\000)\000)\000(\000(\000'\000'\000&\000&\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000$\000$\000$\000#\000#\000#\000#\000\"\000\"\000\"\000\"\000\"\000!\000 \000 \000 \000\031\000\031\000\030\000\029\000\028\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\025\000\025\000\025\000\024\000\024\000\024\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\016\000\016\000\016\000\015\000\015\000\014\000\013\000\013\000\013\000\013\000\013")
   
   let goto =
-    ((16, "\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\159\002\206\000\000\000\179\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000[\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\011\000\179\000u\000\000\000\000\000\000\000\000\000\000\012\226\000\128\006\208\000\000\000\000\000\000\004\232\000\000\0004\001!\0024\000\000\000\000\015\168\000\000\003\244\000\000\000B\013\"\018('x&\138\005\028'\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\012'x\000\000\000\0000$\000\0004\200\000\000\t\216\000\000\000\000\000\000\000\000\001r\000\000\"\014\000\000\000\000\000\236\000\000\n\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018T\000\000\020L\000\000\020\244\000\000\021\178\000\000\024R\000\000\026J\000\000\028B\000\000\028\212\000\000\030\204\000\000\",\000\000\007\178\000\000\011\166\000\000\000\000\000\000\000\000\000\0009\170\000\0009\176\000\000:\128\000\000\"z\000\000\000\000\"\162\000\000\000\000\000#\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004F\000Z\000\000\000\230\000\000\000\000%\176\000\0004N\000\000\000\000\000\000\001\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\000\000\000\000\000\000\000\000\000\000\000\000\003\254'\156\000\000\n\186\000\000\018\160\005n\000\000\000\000\000\000\002\026\000\000\"\160\000\000\000\0004n\000\000\000\000\000\000\002.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\012\000\0008 \000\000\000\000\000\000\000\000\0006\000\000\000\0004\198\000\000\000\000\000\000\tz\000\248\000\000\000\000\000\000\000\000\000\000\000\000\016&\000\000\021\232\000\000\022\188\000\000\023\224\000\000\026\128\000\000\027T\000\000\027\208\000\000\029 \000\000\029L\000\000\031\024\000\000\023h\000\000\005V\000\000\031D\000\000%\250\000\000(b\000\000\000\000\000\000\000\000\000\000\000\1314\240\000\000\000\006\000\000\000\000\000C\003@\000\000\002@\000\000\000\000\000\000\013N\000\000\000\000\000\000'\236\000\000\000\000\000\000\000\000\000\000(`\000\000\000\000\000\000\000\000\000\000\000\000\000F\000\000\000\000\000\000\0014\000\000\000\000\000\000\000\168\000\000\000\000\0004\000\179\000\000\000\000\001\023\008\208\000\000\000\000\000\000\000\000\000\000\002\164\000\000\007j\000\000\0064\000\000\000\000\003x\000\000\000\000\000\000\000\000\000\000\000\000)\\\000\000\000\000\000\000\0008\000\000\000\000\000\000\000\000\008\244\012\212\000\000\002P\000\000\000\000\004\212\003\006\000\000\000\000\000\000\000\000\014\190\000\000\000\000\000\000\000\000\000\000\000\000\001\132\003\134\000\000\005D\000\000\000\000\000\000\002*\000\000\011\152\000-\000\000.\016\000\000\000\000\000\000\000\182\002$\000\000\000\000\000\000\001\210\000\000\000\000\002\030\000\000\002j\000\000\000\000\000\000\000\000\000\"\002\170\000\000\003\"\000\000\000\000\000\000\000\000\000\000\000\0005\016\000\000)\008\000\0005:\000\000\000\000\002\194\000\000\006\172\000\000\007\252\018\204)N\000\000\000\000\000\000\000&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\130)N\000\000\020\028\000\000\023:\nL\000\000\000\000\000\000\003\218\000\000#\\\000\000\000\0005>\000\000\000\000\000\000\004\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008,\000\0008\180\000\000\000\000\000\000\002\164\000\000\000\000\000\000\000\000\000\000\000\000\012\180\000\000\019t\000\000\022\146\000\000\022\234\000\000\029\202\000\000 \136\000\000#\030\000\000$l\000\000(\154\000\000+\n\000\000\025`\000\000\000f\000\000+\164\000\000/\016\000\0001\206\000\000)\158\000\000\000\000\000\0005\232\000\000\000\000\000\000\000\017\000\0006\030\000\000\000\000\000\0006\"\000\000\000\000\000]\000\000\0244\000!\000\007\000\000\003\150\000\000\012\166\001\234\007B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006h\000\000)\246&\252\004<\000\000\000\000\000\000 \030\000\000.L\000\000.z\000\000*F*\154\000V\002\176\004~\000\000\000\000\000\000\004\168\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\212\000\000\000\000\000\000\000\000\000\000#\238\000\000+2\000\000\000\000\000\000\000\000\000\000\000\000\013f\000\000\005\148\000\000\000\000\000\000\000\000\004\140\000\025\000\0006B\000\000\000\000\000\000\006\138\000\000\000\000\001v\003z\000\000\014X.\242\000\000\000\000+B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \208+B\000\000$\254\000\000)4\008\168+`\000\000\027\022\000\000\000\000\000\000\004\186\000\000$\128\000\000\000\0006\252\000\000\000\000\000\000\005N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0007\002\000\0007\026\000\000\000\000\000\000.\026\000\000\000\000\016D\000\000\000\000\000\000\000\000\005\160\000\000\000\000\000\000&X\000\000\000\0007\236\000\000\003l\000\000\000\000\000\000\002x\000\000\024\154\000\000\025\216\000\000\025\234\000\000 b\000\000\"\234\000\000%\144\000\000&\222\000\000-F\000\0000\018\000\0008\218\000\0009\166\000\000:^\000\000\000\000\000\000\000\000\000\000/n\000\000\013\160\000\000/|%\n\000\000/\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\000\000\000\000\000\000\000\000\000\000\000\000\003\160\000\000\000\0008\176\000\000\000\000\000\000.\202\000\000\000\000\003\002\000\000\000\000\000\0008\238\000\000\000\000\000\000\000\000/\220\000\000\000\000\000\000\000\000\0050\nZ\000\0000j\000\000\000\000\000\000\000\000\024\220\000&\000\000\025\132\000\000\000\000\0128\000\0000\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\226\000\000\000\0009\024\000\000\000\000\000\0000\192\000\000\000\000\004\220\000\000\000\000\013\238\000\000\026,\000\000\000\000%<\000\000\000\000\000\000\000C\000\000\000\00098\000\000\000\000\000\000\000\0000\234\000\000\000\000\000\000\000\000\t\190\0146\000\0001x\000\000\000\000\000\000\000\000\000\000\000\000\014\174\000\000\000\000\006\000\000\000\0156\000\000\000C\000\000\000\000\005^-\174\000\000\005\134\000\000\000\000\000\000\000\000\002\164\000\000,*\000\000\026\212\002D\027|\000\000\004&\000\000\015\180\000\000\016<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006d\028$\002\164\028\204\000\000\000\000\000\000\003\020\000\000\016\252\000\000\006\178\000\000\000\000\000C\005\"\029t\000\000\005\150\000\000\017\164\030\028\000\000\000\000\018L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\184\007\246\000\000\006\216\000\000\000\000\000\000\000\000\006\208\000\000\018\244\000\000\000\000\000\000!\"7\182\000\000\000\000\000\000 \252\000\000\000\000\000\000\000\000\014\004\004\248\000\000\000\0001\154\000\000\000\000\000\000\000\000\005\006\000\000\000\0009\164\000\000\000\000\000\0001\160\000\000\000\000\000m\000\000\000\0002x\000\000\000\000\011b\006\246\000\000\000\0002~\000\000\000\000\0078!\184\000\000\0072\000\000\000\0002\150\000\000\000\000\000\000\000\000\000\000\000\000\007j\000\000\000\0009\186\000\000\000\000\000\0002\190\000\000\000\000\000\000\000\000\000\000%\206\000\000\000\000\000\000\001f\000\000\000\000\000\0003<\000\000\000\000\013\188\t\004\000\000\000\0003n\000\000\000\000\007B\000\000\000\000\000\000\000\000\002\164\001f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d\000\000\019\156\000\000\000\000\000\0008\002\000\000\008t\000\000\000\000\000\000\0040\000\000\000\000\005:\020D\000\000\020\236\000\000\000\000\000\000\005\226\000\000!\232\006^\"\204\000\000#\204\000\000\000\000\000\000\006\220\000\000,\194\007\014-\022\000\000-6\000\000\000\000\000\000\007L\000\000'\234\007\164\000\000\000\000\005\008\0128\007\174\012\030\000\000 :\000\000\000\000\000\000\007\178\000\000,\002\007\222\000\000\000\000\000\000\003\200\000\000\000\000\000\000\004Z\000\000\000\000\000\000\004n\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\014\000\000\000\000\005J\000\000\002\168\000\000\000\000\007\\\000\000\006\192\005:\003J\000\000\000\000\004J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\224\000Q\000\000\000\000\002\172\000\000\000\000\000\000\008\\\000\000\000\000\t\148\n\166\000\000\000\000\000\000\000\000\011v\012\248\002\156\000\000\015,\000\000\000\000\000\000\000\000\000\000\000\000\015\236\000\000\000\000\0150\000\000\000\000\005*\000\000\000\000\007\226\000\000\000\000\tj\000\000\007\208\006\012\003\004\000\000\000\000\008\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\022\015\134\000\000\000\000\000\000\000\000\015\190\000\000\000\000\017\004\000\000\000\000\019\n\000\000\000\000\000\000\0188\004\216\000\000\020\188\000\000\000\000\000\000\000\000\000\000\000\000\000=\000\000\008d\006\008\003\248\000\000\000\000\000\000\000\000\002d\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\000\000\003\150\000\000\t$\006:\007\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\000\000\000\000\021\170\020\216\000\000\000\000\000\000\000\000\0202\000\000\004n\000\000\002\196\000\000\000\000\000\000\000\000\000\000\000\000\019\138\008\140\000\000\000\000\011 \000\000\000\000\000\000\000\000\000\222\000\000\014\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\191\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\150\004\008\000\000\000\000\000\000\008\234\000\000\000\000\017F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000`\012\012\000\179\012J\021\164\005\150\000\000\000\000\005R\007\n\007\136\008\030\000\000\000\000\000\000\000\000\000\000\000\000\006t\021\148\000\000\030\196\007\138\000\000\000\000\007\142\000\000\022<\000\000.\156\000\000\000\000\007x\022\228\000\000\031l\000\000\008\008 \020\000\000\000\000\000\000\006>\005R\000\000\004<\000\000\000\000\000\000\001\158\000\000\016Z\000\000\005\184\013\022\000\000\000\000\000\000\000\000\002\164\000\000\003x\000\000\005\222\000\000\000\000\005\138\000\000\000\000\000\000\000\000\tB\000\000\000\000\005R\008\236\000\000\023\140\000\000\000C\006h\000\000\000\000\000\000\000\000\000\000\001\226\000\000\000\000\000\000\000\000\000\0004 \008\130\000\000\005\016\000\000\000\000\000\000\000\000\000\000\000\230\000\000\n\002\008\160\n\138\000\000\002p\011\016\000\000\t\016\000\000\002\238\000\000\003\188\000\000\004\172\000\000\000\000\000\000\000\000\000\000\008\150\000\000\005z\000\000\t(\000\000\005\248\000\000\000C\006\194\000\000\003n\000\000\006\198\006B\000\000\004\024\000\000\008\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\136\000\000\t\144\000\000\000\000\000\000\000\000\000\000\000\000\007p\000\000\000\000\006\190\000\000\000\000\007\018\008\216\008n\000\000\008t\000\000\000\000\008\014\t\218\000\000\007\248\000\000\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\t\140\000\000\000\000\000\000\008\174\008\162\t\006\t<\008\196\t\004\000\000\000\000\008\184\t\014\t^\008\230\t,\000\000\000\000\t`\000\000\000\000\000\000\000\000\t\250\000\000\000\000"), (16, "\001\200\001\223\000\017\004\135\004\013\002!\002\"\001?\003\007\001g\002!\002\"\004\216\005<\000>\002u\005=\000*\002m\003n\003V\004\136\004d\005!\005\"\000>\000@\001~\000C\003\007\004\214\004\217\004d\000\016\005A\001\200\001\201\004\232\000*\001%\000j\000\n\004\213\000\210\003\029\000\211\003!\000>\001\202\000\210\000j\0016\001\203\004\232\003\030\004\233\000>\000E\004\236\004d\004\214\004\217\004d\0009\001\200\001\223\000\t\001\200\001\201\000\017\005i\004\233\001+\001'\004\236\004d\005j\004P\000>\000\017\004e\000j\005k\001\202\003 \004`\005\029\001\203\000*\000j\004e\004\231\000\212\005:\0008\000j\000\213\003\157\000\212\001\228\004\018\001 \000\213\004^\001h\000*\001-\001%\004a\004d\003!\001Y\001\202\000j\001@\001\202\001\203\004e\000F\001\203\004e\000>\000\226\003\008\004\019\001S\000*\000+\000\226\002$\0009\001\200\001\223\004e\000h\000\166\000\175\002\\\000s\000F\0009\001&\000>\005\167\003C\000>\000*\001\216\002H\005k\005\168\003 \002a\004\213\005m\001\139\002b\000\163\001D\003(\000\247\001\217\003\159\003|\004k\002o\003\203\004e\000\163\001D\003)\004\214\004\217\004d\003j\005n\001i\003!\005\031\001\202\000j\001F\001\216\001\203\002J\000k\001A\003H\005\186\000l\001\162\002f\001m\004\139\004\014\003W\001\217\003v\000F\000\163\001D\002\\\003<\000h\000\227\003L\003\141\000q\003N\001\232\000\227\001\216\001T\000u\001\216\002H\002a\001p\004\016\001s\002b\000\163\001D\003(\005p\001\217\000\248\004\244\001\217\001 \001\233\004e\004\246\005q\005\139\001\234\001x\005\187\005\140\001\235\001_\003\007\001j\004\249\001\236\001\\\001B\000*\001]\000j\000\173\002K\002L\002N\000k\002f\000F\000\250\000l\0037\005\142\001\200\001\223\000>\001\152\001\222\003<\000\177\002\\\000j\005\144\001h\003N\001\232\000\232\000>\002\004\000*\001\216\002m\003n\003V\000u\002a\001+\000\163\000\164\002b\000\163\001D\003(\005\189\001\217\001@\001\233\000v\000\005\001\233\000h\001\234\005q\005\139\000q\001\235\001I\005\191\001E\003!\001\236\001\202\002\245\001\236\001\154\001\203\004\016\001\159\005\152\005\153\001-\000w\000\008\000\t\002f\000\248\000*\003p\0037\005\193\001\200\001\223\001\156\000*\002\143\003<\001(\002\147\000\173\005\195\001\133\003N\001\232\000*\000>\005\026\000j\000x\005k\005\173\003V\000k\001\150\000F\004\225\000l\002\242\001\135\003C\000n\000*\003}\001\228\001\233\001 \001=\000v\001\146\001\234\000y\004\222\005\157\001\235\001\158\000\160\003\130\003!\001\236\001\202\000u\000j\004q\001\203\000{\002\148\002\183\005s\004\138\002\149\000\186\000w\000>\005\183\001\200\001\223\001+\004\232\004\153\004d\004r\002\\\003\247\000*\004u\004d\004\136\004d\000>\000\163\000\164\001\216\005k\005\173\003V\004\233\002a\000\149\004\236\004d\002b\000\163\001D\003(\001\136\001\217\001\153\003\127\005&\005'\001,\005:\003\130\004\178\003)\001\161\002u\000F\003j\000y\003!\001\135\001\202\000\150\000\215\001%\001\203\000\151\005+\000>\003\007\004\179\000*\000{\000\224\002f\005\178\004e\001(\003W\000\173\003v\000v\004e\002\143\004e\003<\002\147\002\\\004x\003\141\000F\003N\001\232\003x\002!\002\"\004e\001\216\001\231\004\223\000\148\002\162\002a\000>\002\246\000w\002b\000\163\001D\003(\005\179\001\217\002E\001\233\005\254\002\163\001\200\001\223\001\234\005q\005\139\004\235\001\235\005\255\002d\004\027\005:\001\236\000*\002[\000>\000\149\001b\002\148\005k\005\173\003V\002\149\001q\004\233\003\132\002f\004\236\004d\000\210\003W\000\233\005\181\000*\000\210\002\\\000\231\003<\000y\000\163\000\164\003A\000\150\003N\001\232\001\216\000\151\003!\004y\001\202\002a\002F\000{\001\203\002b\000\163\001D\003(\005\179\001\217\001\163\004\221\000*\005\180\000F\001\233\000F\005q\005\139\003\008\001\234\002\195\002d\003p\001\235\000j\004\129\004\222\000\212\001\236\000j\003\135\000\213\000\212\000>\002\198\004e\000\213\001\128\002f\000\173\005\006\002\194\003W\000*\005\181\000\163\000\164\002#\002\187\003<\004{\004]\005\212\003A\000\238\003N\001\232\000\226\004i\004\029\000*\003\013\000\226\001u\002\162\002\223\002\240\002\226\000>\004^\001\200\001\223\001^\002\190\004a\004d\004\182\001\233\002\163\003\017\000\163\000\164\001\234\006\007\000>\004Z\001\235\002\\\005k\005\173\003V\001\236\000F\000*\001*\004j\000\173\001\216\002\193\002\229\002t\0057\002a\0036\000>\002\193\002b\000\163\001D\003(\005\179\001\217\004|\003\030\000>\000D\003!\000C\001\202\005q\005\139\001\205\001\203\000*\002d\004y\000\210\005o\000\233\001\130\000>\000\173\005\182\004e\002m\004\223\001t\004\207\004d\000\227\002\252\002f\004\030\000*\000\227\003W\000E\005\181\003\143\002\195\000>\0017\003<\001\214\000*\000\210\003A\000\211\003N\001\232\000>\000*\004B\002\196\0058\000\241\004\133\000\210\003s\000\211\0025\005L\000j\001\200\001\223\000\212\000\163\000\176\005\161\000\213\001\233\005\162\003\020\002!\002\"\001\234\005\219\000>\000\251\001\235\0058\005k\005\173\003V\001\236\000>\004e\000*\002G\004k\004\226\000j\000\238\002D\000\212\000\226\003\143\002\\\000\213\000\252\003\153\000\163\001D\000j\000\253\004p\000\212\001\216\000\254\003!\000\213\001\202\002a\000\255\002\249\001\203\002b\000\163\001D\003(\005\179\001\217\005\166\002\151\000\226\005\190\001\200\001\223\000*\005q\005\139\004f\004\029\003e\002d\004~\000\226\000\163\000\176\003\\\000>\005\130\002F\000F\005k\005\173\003V\000\163\001D\003\030\003\005\002f\003\019\003e\000F\003W\004%\005\181\003\146\004\168\001F\000F\003<\000\163\001D\003(\003A\003g\003N\001\232\000>\001m\003!\004'\001\202\000>\003)\000\227\001\203\005E\004\222\005:\004\184\000\163\000\176\002!\002\"\003f\005\194\000\239\001\233\003,\002i\000\163\000\164\001\234\001p\002\160\001s\001\235\002\\\004C\003\185\000\241\001\236\004\241\000\227\002t\003<\003\193\001\216\005P\003A\005G\003N\002a\001\200\001\223\000\227\002b\000\163\001D\003(\005\179\001\217\001Y\000\251\005\127\000\163\001D\000>\002u\005q\005\139\002m\003n\003V\002d\002\185\001S\004(\005z\001\132\003\168\000\173\000*\005\129\000\252\000>\000@\000A\000C\000\253\003\030\002f\001\023\000\254\004'\003W\005\150\005\181\000\255\003!\002\\\001\202\003<\005\197\003\138\001\203\003A\005\132\003N\001\232\001\216\005}\005\201\000\252\005~\002a\000\173\000E\005L\002b\000\163\001D\003(\005\179\001\217\000\228\004\228\000\255\001\200\001\223\001\233\004\178\005q\005\139\004\127\001\234\000*\002d\003\140\001\235\004/\005T\000>\003\138\001\236\003\162\002m\003n\003V\004\179\000\163\001D\002!\002\"\002f\000\163\001D\0041\003W\005\128\005\181\003\162\000>\001T\004t\003<\000*\005H\005l\003A\004\128\003N\001\232\005X\003!\005[\001\202\003\139\005\128\003\164\001\203\005L\004r\003\030\000h\003\030\004u\004d\000q\005\220\002\\\001[\000F\001\233\000*\003\163\001\\\005\224\001\234\001]\001\216\000\173\001\235\0042\003\005\002a\003\019\001\236\004\003\002b\000\163\001D\003(\004\003\001\217\004\022\003|\001Y\001\200\001\223\0041\001\200\002\014\003)\002!\002\"\0049\002d\000\163\001D\000j\001S\000>\004\171\005\229\000k\002m\003n\003V\000l\002v\001F\004\005\004;\002f\004e\000F\004\004\003W\000\145\003v\004\172\001m\004\175\004d\003<\005L\004<\002\247\003A\004\181\003N\001\232\000u\003!\002\\\001\202\000j\005O\001\202\001\203\005b\004\185\001\203\004;\001\216\000F\001p\004\179\001s\002a\001\200\001\223\001\233\002b\000\163\001D\003(\001\234\001\217\003z\003|\001\235\005\230\003\210\000>\004\135\001\236\003)\002m\003n\003V\002d\004?\000F\000\163\001D\002\143\004\186\004H\002\147\004K\004e\005\235\004\136\004d\005\234\004\232\001T\002f\0041\004\239\005\170\003W\003\219\003v\004J\003!\004J\001\202\003<\005N\004N\001\203\003A\004\233\003N\001\232\004\236\004d\000\210\000>\000\233\005g\005\239\000v\001_\004\229\001`\0041\005\141\001\\\003\229\000j\001]\002\\\000\173\002\148\001\233\000>\003\030\002\149\001n\001\234\000\148\001\216\005\184\001\235\001\216\000w\002a\0051\001\236\004e\002b\000\163\001D\003(\005\170\001\217\003\161\003|\001\217\004\230\001\200\001\223\000j\004\171\003)\000\212\005\170\000E\002d\000\213\005\244\000\149\001R\004e\000>\000*\005\212\005\159\002m\003n\003V\004\172\005M\004\175\004d\002f\001S\005\188\000\210\003W\000\233\003v\005\248\000y\002\\\000\226\003<\000\150\005\176\004\187\003A\000\151\003N\001\232\001\216\004\174\003!\000{\001\202\002a\005\192\006\015\001\203\002b\000\163\001D\003(\004\242\001\217\004\026\003|\006\016\005\236\004\172\001\233\004\175\004d\003)\004\135\001\234\002\162\002d\005\246\001\235\000j\000h\000>\000\212\001\236\000i\0058\000\213\004e\005\252\002\163\006\002\004\136\004d\002f\006\t\0058\005\212\003W\004\243\003v\005\212\001\200\001\223\006\000\003<\000\163\001D\004\142\003A\005\238\003N\001\232\000\226\003O\006\001\000>\006\003\006\004\001T\005k\006\005\003 \000\227\000\163\001D\006\008\000j\004\179\005\014\004e\000F\000k\001\233\006\n\006\011\000l\001F\001\234\001\200\001\201\006\012\001\235\002\\\006\020\000\000\000\000\001\236\003!\0052\001\202\004e\001\\\001\216\001\203\001]\005\213\000\173\002a\000\000\000u\002\165\002b\000\163\001D\003(\005\185\001\217\005\137\003|\001\200\001\223\000\251\001p\001w\001s\003)\000h\002u\003\254\002d\000s\005\249\0055\000>\000j\000\000\001\202\005k\005\248\003 \001\203\000*\000\252\000\210\000\227\000\230\002f\000\253\004\193\000\000\003W\000\254\003v\000\000\005\249\005\248\000\255\003<\005\249\000\000\004\135\003A\000\000\003N\001\232\003!\000\000\001\202\000\000\000\000\000\249\001\203\000j\000\000\000\163\000\176\000>\000k\004\136\004d\005\215\000l\000\000\005\171\005\217\001\233\001\200\001\223\002\\\000j\001\234\000v\000\212\000\251\001\235\000\000\000\213\000\000\001\216\001\236\000>\000\000\000\000\002a\005k\000u\003 \002b\000\163\001D\003(\005\172\001\217\004\148\000\252\000w\000\000\000\000\004\232\000\253\005q\005\139\000\226\000\254\000\000\005\175\000\000\000\000\000\255\005\011\000\000\000\000\003!\000\000\001\202\001\216\004\233\004e\001\203\004\236\004d\000>\002f\000\000\000\000\000\000\0037\005\177\000\000\001\217\005\174\000F\000\000\003<\001\200\001\223\002\\\003A\000\000\003N\001\232\000h\000\000\000\188\004\135\000i\001\216\005\021\000>\000\000\000\000\002a\002m\003\209\003 \002b\000\163\001D\003(\005\172\001\217\001\233\004\136\004d\000\000\000\000\001\234\000v\005q\005\139\001\235\000\000\000\000\005\175\000\000\001\236\000\000\000\000\004e\003\021\003!\000\000\001\202\000\000\000\227\000\000\001\203\000j\000\000\000\000\002f\000w\000k\000\000\0037\005\177\000l\003\025\001\218\000\163\000\164\003<\000\000\002\\\000\000\003A\000>\003N\001\232\000\000\005E\000\000\004 \001\216\000\000\000>\003\156\000x\002a\002m\000u\004e\002b\000\163\001D\003(\005\172\001\217\000\000\001\233\004\146\000\000\000\000\000\000\001\234\005q\005\139\000>\001\235\000y\005\175\005E\000\000\001\236\000z\000\000\002u\004B\005\008\000\000\000\173\001\200\001\221\000{\000\000\000\000\000\000\002f\000\000\000\000\000*\0037\005\177\000\000\000\163\000\176\000\000\000\000\003<\001\200\001\223\002\\\003A\000\000\003N\001\232\001\200\001\201\000\000\000\000\000\000\001\216\000\000\000>\000\000\000\000\002a\002m\005\017\003 \002b\000\163\001D\003(\000\000\001\217\001\233\000j\000\000\001\202\000\000\001\234\000v\001\203\003)\001\235\000>\001o\003\145\000C\001\236\000\000\000\000\000>\000\000\003!\001|\001\202\000\000\000\000\000\000\001\203\000j\000\000\001\202\002f\000w\000\000\001\203\0037\003\147\000h\000\000\000\000\004\159\000q\003<\004\135\000E\000>\003A\000\000\003N\001\232\000\000\000E\000\000\003\154\000\000\000\163\005F\003\156\000\147\000h\000\000\004\136\004d\000i\000\163\001D\003(\005R\005I\000\000\001\233\001\200\001\223\000\000\000\000\001\234\000F\003)\002k\001\235\000y\000\000\000\000\000j\001\236\000>\000\163\005F\000k\002m\003\027\003 \000l\000\000\000{\000\000\000\000\000\000\005Q\005I\002\143\005y\004E\002\147\001\216\000j\000\000\000\000\000\000\003<\000k\000\000\002\\\003A\000l\003N\000u\003!\001\217\001\202\004e\000\000\001\216\001\203\003\"\000\000\000\000\002a\000>\001\216\000\000\002b\000\163\001D\003(\000\000\001\217\0011\000u\001\200\001\223\000\000\003&\001\217\000\000\003)\002[\0039\000\000\003\145\002\148\000\000\000\000\000>\002\149\000\163\001D\002m\003:\003V\003\253\000\000\000\163\001D\000>\000\000\002f\000\000\001F\000\000\0037\003\147\004\232\000\000\000\000\001F\000\000\003<\000\000\001m\000\000\003A\000\000\003N\001\232\003!\000\000\001\202\000\163\001D\004\233\001\203\002\143\004\236\004d\002\169\003\184\000\000\000v\000\000\000\000\005z\000\000\000\000\001p\001\233\001s\002u\002\\\000\000\001\234\001p\001\233\001s\001\235\000\000\000\000\001\"\001\216\001\236\000v\000*\000w\002a\000\000\000\000\001\238\002b\000\163\001D\003(\002\187\001\217\004\157\005}\001\200\001\223\005~\000j\000\173\000\000\003)\002\148\003Y\000w\003[\002\149\002\162\000\149\000>\002\230\000\000\004e\002m\003:\003V\002\190\000>\000@\001z\000C\002\163\002f\000\000\000\000\000\000\0037\003]\000\000\000\000\000y\000\163\000\176\003<\000\150\000\000\002\\\003_\000\151\003N\001\232\003!\002\232\001\202\000{\000\000\001\216\001\203\002\193\000E\000\000\002a\0010\000\000\000\000\002b\000\163\001D\003(\000\000\001\217\001\233\000\000\001\200\001\223\000\000\001\234\000\163\001D\003)\001\235\003^\000\000\002d\000>\001\236\000\000\000>\000\000\000\000\003\190\002m\003:\003V\000\000\004\135\002\238\000\000\000\000\000\000\002f\000F\002\195\004\165\003W\000\000\003X\000\000\000\000\002\162\000\000\003<\000\000\004\136\004d\003A\002\196\003N\001\232\003!\000\000\001\202\000\000\002\163\000\000\001\203\003\202\000\000\003\208\000\000\000h\000\000\005\024\000\000\001<\000\000\001\200\001\223\000\000\001\233\004\135\000\000\002\\\000\000\001\234\000\000\000\000\000\000\001\235\003P\000>\000\000\001\216\001\236\002m\003n\003V\002a\004\136\004d\000\000\002b\000\163\001D\003(\000\000\001\217\003T\004\135\000\000\000\163\001D\004e\000\000\000\000\003)\000j\000\000\000>\002d\000\000\000k\003!\001F\001\202\000l\004\136\004d\001\203\000\000\000\000\000\000\000\000\000\210\001m\000\211\002f\004\162\000\000\000\000\003W\000\000\003X\000\000\001\200\001\223\000\000\003<\000h\000u\002\\\003A\000q\003N\001\232\000\000\000\000\004e\000>\001p\001\216\001s\002m\003n\003V\002a\000\000\000\163\000\164\002b\000\163\001D\003(\000>\001\217\001\233\000\000\000\000\000\000\000j\001\234\000\000\000\212\003)\001\235\004e\000\213\002d\000\000\001\236\003!\000\000\001\202\000\000\000j\000\000\001\203\000\000\000\000\000k\000\000\000\000\000\000\000l\002f\000\000\000\000\000\000\003W\000\000\003X\000\000\000\226\002\\\000\000\003<\004\163\000\000\000\173\003A\000\000\003N\001\232\001\216\000\000\004\155\000\000\000u\002a\005\130\000\000\000v\002b\000\163\001D\003(\000\000\001\217\000\000\003u\001\200\001\223\000\000\001\233\000\000\000\000\003)\000\000\001\234\000\000\002d\000\000\001\235\000\000\000>\000w\000\000\001\236\002m\003n\003V\000\163\000\164\000\000\000\000\000\000\000\000\002f\000\000\004\171\004\191\003W\000\000\003v\000\000\000\000\000\000\000\210\003<\000\233\000\000\002\\\003A\000\000\003N\001\232\003!\004\172\001\202\004\175\004d\001\216\001\203\000\000\000\227\000\000\002a\000\000\004\196\002\181\002b\000\163\001D\003(\000\000\001\217\001\233\003w\0054\000v\004\163\001\234\000\173\000\000\003)\001\235\000\163\001D\002d\000\000\001\236\000\000\000\000\000j\001\200\001\223\000\212\004\166\002\183\005z\000\213\000\000\000\000\000w\000\000\002f\000\000\000\000\000>\003W\000\000\003v\002m\003\148\003V\000\000\003<\000\000\004e\000\000\003A\000\000\003N\001\232\000\000\000\000\000\226\000\000\005\133\000\149\005\134\000\000\005}\000\000\000\252\005~\000\000\000\173\000\000\000\000\003!\000\000\001\202\000\000\001\233\000\000\001\203\002\\\001\001\001\234\000\000\000y\000\000\001\235\000\000\000\150\000\000\001\216\001\236\000\151\000h\000\000\002a\000\000\000q\000{\002b\000\163\001D\003(\000\000\001\217\000\000\003\137\003\150\000\000\000\000\000\000\001\200\001\223\003)\000\000\000h\000\000\002d\000\000\000i\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\004\135\002m\003\148\003V\000\000\000\000\002f\000\000\000\000\000\000\003W\000j\003v\000\227\000\000\000\000\000k\003<\004\136\004d\000l\003A\000\000\003N\001\232\000\210\000\000\000\229\000\000\003!\000\000\001\202\000\000\000j\004\199\001\203\002\\\000\000\000k\0052\000\000\000\000\000l\000\000\000u\001\233\001\216\001\200\001\223\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\251\003\152\000\000\001\030\000u\001\200\001\223\003)\000\000\000j\000\000\002d\000\212\003\170\000\000\004e\000\213\000\000\000\000\000>\000\000\000\252\000\000\002m\003:\003V\000\253\000\000\002f\000\000\000\254\000j\003W\001\202\003\151\000\255\000\000\001\203\000\000\003<\000\000\004\171\000\226\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\004\172\000\000\004\175\004d\000\000\000v\000\000\000\000\001\233\001\216\001\200\001\201\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\001\"\001\228\000\000\000v\000\000\000w\001\200\001\223\003)\000\000\000\000\000>\002d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\004\232\000\000\000\000\002m\000\000\003 \000w\000\000\002f\000\000\000\149\000j\003W\001\202\003\151\000\000\004e\001\203\004\233\003<\000\227\004\236\004d\003A\004\211\003N\001\232\000\000\001\216\000\000\000\000\003!\000y\001\202\000\000\000\000\000\150\001\203\002\\\000\000\000\151\000\000\001\217\000\000\000\000\000\000\000{\001\233\001\216\001\200\001\220\005\013\001\234\002a\000y\001\230\001\235\002b\000\163\001D\003(\001\236\001\217\004\020\000\000\000\000\000\000\003\156\000}\001\200\001\223\003)\000\000\000h\000>\002d\000\000\000i\000\000\000\000\004e\005\016\000\000\000>\004\232\000\000\000\000\002m\000\000\003 \001\232\000\000\002f\000\000\000\000\000j\003W\001\202\003X\000\000\000\000\001\203\004\233\003<\000\000\004\236\004d\003A\000\000\003N\001\232\001\233\001\216\000\000\000\000\003!\001\234\001\202\000\000\000j\001\235\001\203\002\\\000\000\000k\001\236\001\217\004\202\000l\000\000\000\000\001\233\001\216\000\163\000\164\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\004\"\000\000\000\000\000\000\003\156\000u\001\200\001\223\003)\004\135\000h\000\000\003\145\000\000\000i\000\000\000\000\004e\005\005\000\000\000>\000\000\000\000\004\135\002m\000\000\003 \004\136\004d\002f\000\000\000\000\000\000\0037\003\147\005\008\000\000\000\173\000\000\000\000\003<\004\136\004d\005\019\003A\000\000\003N\001\232\001\233\001\216\000\000\000\000\003!\000\000\001\202\000\000\000j\000\000\001\203\002\\\000\000\000k\001\240\001\217\000\000\000l\000\000\000\000\001\233\001\216\000\163\000\164\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\004$\000\000\004e\000v\003\156\000u\001\200\001\223\003)\000\000\000\000\000\000\003\145\000\000\000\000\000\000\004e\000\000\000\000\000\000\000>\000h\000\000\000\000\002m\000i\003 \000w\000>\002f\000\000\000\000\005E\0037\003\147\005\008\000\000\000\173\000\000\000\000\003<\000\000\004\171\005\t\003A\000\000\003N\001\232\000\210\000\000\000\211\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\004\172\000\000\004\175\004d\000\000\000\000\000\000\000j\001\233\001\216\000\000\000\000\000k\001\234\002a\000y\000l\001\235\002b\000\163\001D\003(\001\236\001\217\005U\000\000\000\000\000v\003\156\000\127\001\200\001\223\003)\000\000\000j\000\000\003\145\000\212\005]\000\000\000u\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\003:\003V\000w\000\000\002f\000\000\004\209\000\000\0037\003\147\000\000\000\000\004e\000\000\000\000\003<\000\000\000\000\000\226\003A\004\253\003N\001\232\000\000\001\200\001\201\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\233\001\216\000\210\000\000\000\211\001\234\002a\000y\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\163\005F\000\129\001\200\001\223\003)\001\200\001\201\000j\003\145\001\202\000v\005H\005I\001\203\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\000\000\000\002f\000\000\000\000\000j\0037\003\147\000\212\000\000\000\000\000w\000\213\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\000\001\200\001\219\000\000\003!\000\000\001\202\000j\000\000\001\202\001\203\002\\\000\000\001\203\000\000\000\000\004\255\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000h\001\234\002a\000\000\000q\001\235\002b\000\163\001D\003(\001\236\001\217\005c\000\000\000y\000\000\003\156\000\000\001\200\001\223\003)\000\000\000\000\000j\002d\001\202\005\143\000\000\000\131\001\203\000\000\000\000\000>\000\000\000\000\000\000\002m\003:\003V\000\252\001\216\002f\000\000\000\000\000\000\003W\000j\003X\000\000\000\000\000\000\000k\003<\001\003\001\217\000l\003A\000\000\003N\001\232\000\210\000\000\000\211\000\000\003!\001\021\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000u\001\233\001\216\000\000\000\000\001\216\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\001\217\000\000\000\000\003\165\001\200\001\223\003)\000\000\000j\000\000\003\145\000\212\000\000\000\000\000\000\000\213\000\000\000\000\000>\000h\000\000\000\000\002m\000i\003V\001\233\001\216\002f\000\000\000\000\000\000\0037\003\147\000\000\000\000\000\000\000\000\000\000\003<\001\242\001\217\000\226\003A\000\000\003N\001\232\000\000\000\252\000\000\000\000\003!\000\000\001\202\000\000\000\000\002\143\001\203\002\\\002\147\000\000\000\000\001\005\000\000\000v\000\000\000j\001\233\001\216\000\000\001\233\000k\001\234\002a\000\000\000l\001\235\002b\000\163\001D\003(\001\236\001\217\000\148\001\244\000\000\000\000\000\000\000w\001\200\001\223\003)\000\000\000\000\000\000\002d\000\000\000\000\000\000\000u\003Z\000\000\000j\000>\000\000\000\000\002\148\002m\000\000\003 \002\149\000\000\002f\000\000\000\149\000\000\003W\000\000\003X\000\000\000\000\000\000\000\000\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000y\001\202\000\000\000\000\000\150\001\203\002\\\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\001\233\001\216\000\000\000\000\000h\001\234\002a\000\000\000q\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\000\000\001\200\001\223\003)\000\000\000\000\000\000\003\167\000\000\000v\000\000\000\000\003\031\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\252\000\000\002f\000\000\000\000\000\000\003W\000j\003\169\002\162\000\000\000w\000k\003<\001\007\000\000\000l\003A\000\000\003N\001\232\002\143\000\000\002\163\002\147\003!\002\002\001\202\000\000\000\000\002\143\001\203\002\\\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000u\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000y\000\000\000\000\000\000\001\200\001\223\003)\000\000\000j\000\000\0035\000\000\002\148\000\000\000\133\003;\002\149\000j\000>\000h\000\000\002\148\002m\000i\003 \002\149\000\000\002f\000\000\000\000\000\000\0037\0038\000\000\000\000\002\195\000\000\000\000\003<\000\000\000\000\000\000\003A\000\000\003N\001\232\000\210\000\000\000\211\002\200\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000v\000\000\000j\001\233\001\216\000\000\000\000\000k\001\234\002a\000\000\000l\001\235\002b\000\163\001D\003(\001\236\001\217\000\148\000\000\000\000\000\000\000\000\000w\001\200\001\223\003)\000\000\000j\000\000\0035\000\212\000\000\000\000\000u\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \002\162\000\000\002f\000\000\000\149\000\000\0037\0038\000\000\002\162\000\000\000\000\002\143\003<\002\163\002\147\000\226\003A\000\000\003N\001\232\000\000\000\000\002\163\000\000\003!\000y\001\202\000\000\000\000\000\150\001\203\002\\\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\001\233\001\216\000\210\000\000\000\211\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000j\000\000\000\000\000\000\002\148\001\200\001\223\003)\002\149\000\000\000\000\0035\000\000\000v\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\000\002\195\002f\000\000\000\000\000j\0037\0038\000\212\000\000\002\195\000w\000\213\003<\000\227\002\202\000\000\003A\000\000\003N\001\232\000\210\000\000\000\211\002\204\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000y\000\000\000\000\003y\001\200\001\223\003)\000\000\000j\000\000\003r\000\212\000\000\000\000\000\135\000\213\002\162\000\000\000>\000h\000\000\000\000\002m\000i\003 \000\252\000\000\002f\000\000\000\000\002\163\0037\003t\000\000\000\000\000\000\000\000\000\000\003<\001\t\000\000\000\226\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000j\001\233\001\216\000\000\000\000\000k\001\234\002a\000\000\000l\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\003q\001\200\001\223\003)\000\000\000h\000\000\003r\000\000\000i\000\000\000u\000\000\000\000\002\164\000>\000\000\000\000\000\000\002m\000\000\003 \000\000\000\000\002f\000\000\000\000\000\000\0037\003t\000\000\000\000\000\000\000\000\000\000\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\210\000\252\000\211\000\000\003!\000\000\001\202\000\000\000j\000\000\001\203\002\\\000\000\000k\000\000\001\011\000\000\000l\000\000\000\000\001\233\001\216\000\210\000\000\000\211\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\003\133\000u\001\200\001\223\003)\000\000\000j\000\000\003\134\000\212\000v\000\000\000\000\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\252\000\000\002f\000\000\000\000\000j\0037\003\136\000\212\000\000\000\000\000w\000\213\003<\001\013\000\000\000\226\003A\000\000\003N\001\232\000\000\001\200\001\201\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000y\000v\003\144\003\131\001\200\001\223\003)\000\000\000\000\000j\003r\001\202\000\000\000\000\000\137\001\203\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000w\000\000\002f\000\000\000\000\000\000\0037\003t\000\000\000\000\000\000\000\000\000\000\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000y\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\003\149\000\139\001\200\001\223\003)\000\000\000h\000\000\003\145\000\000\000i\000\000\005Y\000\000\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\252\001\216\002f\000\000\000\000\000\000\0037\003\147\000\000\000\000\000\000\000\000\000\000\003<\001\015\001\217\000\000\003A\000\000\003N\001\232\000\210\000\252\000\211\000\000\003!\000\000\001\202\000\000\000j\000\000\001\203\002\\\000\000\000k\000\000\001\017\000\000\000l\000\000\000\000\001\233\001\216\000\210\000\000\000\211\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\000u\001\200\001\223\003)\000\000\000j\000\000\003\145\000\212\000\000\000\000\005e\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \001\233\000\000\002f\000\000\000\000\000j\0037\003\147\000\212\000\000\000\000\000\000\000\213\003<\001\246\000\000\000\226\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000v\000\000\000\000\001\200\001\223\003)\000\000\000\000\000h\005Z\000\000\000\000\000q\005h\000\000\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000w\000\000\002f\000\000\000\000\000\000\0037\005\\\000\000\000\000\000\000\000\000\000>\003<\000\227\000\000\002m\003A\002\143\003N\001\232\002\147\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000j\001\203\002\\\000\000\000\000\000k\000\227\001\200\001\201\000l\000\000\001\233\001\216\000\000\004B\000\000\001\234\002a\000y\0029\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\000\141\000u\000j\003)\000\000\000\000\002\148\005Z\000\000\000\000\002\149\002\143\000\000\000\000\002\168\000\000\000\000\000\000\000\000\000\000\000\000\000j\000\252\001\202\002f\000\000\000\000\001\203\0037\005\\\000\000\000\000\000\000\001\200\001\223\003<\001\019\000\000\000\000\003A\000\000\003N\001\232\000\000\000\252\000\000\000\000\000>\000\000\000\000\000\000\003\183\001\200\001\223\002\\\000\000\000\000\000j\001\025\000\000\000\000\002\148\000\000\001\233\001\216\002\149\000>\000\000\001\234\002a\003\183\003\215\001\235\002b\000\163\001D\003(\001\236\001\217\003\218\000\000\001\202\000\000\000v\000\000\001\203\000\000\003)\000\000\000\000\004\n\005Z\000\000\000\163\001D\003(\000\000\000\000\003\218\000\000\001\202\003\224\000\148\002\162\001\203\000\000\003)\000w\002f\000\000\000\000\000\000\0037\005\\\000\000\000\000\000\000\002\163\000\000\003<\003\224\000\000\001\216\003A\000\000\003N\001\232\001\200\001\223\004\006\000\000\004G\001\228\000\149\001 \000\000\001\217\000\000\003<\000\000\000\000\000>\003A\000\000\003N\003\183\000\000\001\233\000\000\000\000\000\000\000\210\001\234\000\233\000\000\000y\001\235\000\000\002\162\000\150\000\000\001\236\000\000\000\151\000\000\003\217\000\000\000\000\000\000\000{\000h\000\000\002\163\003\218\000q\001\202\000\000\000\000\000\000\001\203\001\216\000\000\000\000\000\000\000>\000h\000\000\000\000\002\195\000i\000\163\001D\003\225\000\000\001\217\003\224\000\000\000j\000\000\001\216\000\212\000\000\002\206\003\226\000\213\001\233\000\000\004\008\000\000\000\163\001D\003\225\000\000\001\217\000\000\000\000\000j\000\000\000\000\001\248\000\000\000k\003\226\000\000\000h\000l\003\238\000\000\000s\000\000\000\226\000j\000\000\000\000\000\000\003\240\000k\000\000\000\000\004\t\000l\003\252\001\232\000h\000h\000\000\000\000\000q\000s\000u\000\000\000\000\000\000\000\000\003\240\000\000\000\000\000>\003\245\000\000\003\252\001\232\000\000\001\233\000u\000\210\000\000\000\233\001\234\000\000\000j\000\000\001\235\000\000\001\216\000k\000\000\001\236\000\000\000l\002\143\000\000\001\233\002\147\000\163\001D\003\225\001\234\001\217\000j\000j\001\235\000\000\000\000\000k\000k\001\236\003\226\000l\000l\000\000\003\238\000\000\000u\000\000\000\000\001\200\001\201\000\000\000\000\000\000\000j\000\227\000\000\000\212\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000u\000u\000\000\000\000\000j\000\163\000\164\003\240\002\148\000v\000\000\003\245\002\149\003\252\001\232\000h\004*\000\000\000\000\000q\000\000\000\000\000\226\000\000\000v\000\167\000\168\000\170\000\171\000>\000j\000\000\001\202\000w\000\000\001\233\001\203\000\000\000\000\000\251\001\234\000\000\000\000\000\000\001\235\000\000\000\000\000\000\000w\001\236\000\000\000\000\000\000\000\000\000\172\000\000\000\173\000\000\000\000\000\149\000\252\000j\000\000\000v\000\000\000\253\000k\000\000\000\000\000\254\000l\000\210\000\000\000\233\000\255\000\000\000\000\000\000\000\163\000\164\000\000\000y\000v\000v\000\000\000\150\000\000\000w\000h\000\151\000\000\000\000\000q\000\000\000u\000{\000y\000\178\000\167\000\217\000\170\000\171\000>\000\000\000\227\002\162\000w\000w\000\000\000\000\000\143\000\000\000\000\000x\000\000\000\000\000\000\000j\000\000\002\163\000\212\000\000\000\000\000\000\000\213\000\000\000\000\000\172\000\000\000\173\004,\001\216\000\149\000x\000j\000y\000\000\000\000\000\000\000k\000\159\000\000\000\000\000l\000\000\001\217\000\000\000\000\000\000\000{\000\226\001\200\001\201\000\251\000y\000y\000\000\000\000\000\150\000\000\000\162\000h\000\151\000\000\000\000\000q\000\000\000u\000{\000{\000\178\000\000\000\163\000\164\000\252\000>\000v\000\000\000\000\000\253\000\000\000\000\000\000\000\254\000\000\000\000\000\000\000\000\000\255\000\000\002\195\000\000\000\167\001\207\000\170\000\171\000\000\000j\000\000\001\202\000w\000\000\000\000\001\203\002\208\000\000\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\001\233\000\000\000l\000\000\000\000\000\000\000\000\000\172\000\000\000\173\002\143\000\000\000\149\002\167\001\250\000\000\002\143\000\000\000\227\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\163\000\164\000\000\000y\000v\000\000\000\000\000\150\000\000\000\000\000h\000\151\000\000\004.\000q\000\000\000\000\000{\000\000\000\178\000\167\002^\000\170\000\171\000>\000j\000\000\000\000\000w\002\148\000\000\002[\000\000\002\149\000\000\002\148\000\251\000\000\000\000\002\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\172\000\000\000\173\002\143\001\216\000\149\002\147\000j\000\252\000\000\000\000\000\000\000k\000\253\000\000\000\000\000l\000\254\001\217\000h\000\000\000\000\000\255\000q\000\163\000\164\000\000\000y\000v\000\000\000\000\000\150\000\000\000>\000h\000\151\000\000\000\000\000q\000\000\000u\000{\000\000\000\178\000\167\002\153\000\170\000\171\000>\000j\000\000\000\000\000w\002\148\000\000\000\000\000\210\002\149\000\211\000\000\000\000\000\000\000\000\000\000\000\000\000j\000\000\002\187\000\000\000\000\000k\000\000\000\000\000\172\000l\000\173\000\000\002\162\000\149\000\000\000j\000\000\000\000\002\162\000\000\000k\002\233\001\233\000\000\000l\000\000\002\163\002\190\000\000\000\000\000\000\000\000\002\163\000u\000\000\000y\001\252\000j\002\143\000\150\000\212\002\147\000\000\000\151\000\213\000\000\000\000\000\000\000u\000{\000\000\000\178\000\000\000\163\000\164\000\000\000\000\000v\000\000\002\193\000\000\000\000\000\000\000h\000\000\000\000\000\000\000q\000\000\000\000\000\226\000\000\000\000\000\167\003>\000\170\000\171\000>\000\000\000\000\000\000\000w\000\000\000\000\002[\002\162\000\000\000\000\002\148\000\000\000\000\000\000\002\149\000\000\000\000\000\000\002\236\000\000\000\000\002\163\000\000\000\000\000\172\002\195\000\173\002\143\000\000\000\149\002\147\000j\000\000\000\163\000\164\000\000\000k\000v\000\000\002\196\000l\000\000\001\200\001\223\000\000\000\000\000\000\000\000\000\163\000\164\000h\000y\000v\000\180\000\193\000\150\000\171\000\000\000\000\000\151\000\000\000w\003b\000\000\000u\000{\000\000\000\178\000\167\003\242\000\170\000\171\000\000\000j\000\227\000\000\000w\002\148\000\000\000\000\000\000\002\149\000\172\000\000\000\173\001\030\001 \000\149\002[\000\000\001\202\002\187\002\195\000\000\001\203\000\000\000j\000\172\000\000\000\173\000\000\000k\000\149\000\000\000h\000l\002\210\002\162\000q\000y\002\189\000\000\000\000\000\150\000\000\000\000\002\190\000\151\000>\000\000\000\000\002\163\000h\000{\000y\000\178\000q\000\000\000\150\000u\000\000\000\000\000\151\000\000\000\000\000\000\000>\003h\000{\000\000\000\178\001\228\000\163\000\164\000\252\000\000\000v\000\000\002\193\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000\000\001\027\000l\000\000\000\210\000h\000\233\000\000\001\"\000q\000\000\000j\000\000\000w\000\000\000\000\000k\002\162\000\000\000>\000l\000\000\002\\\000\000\000\000\000\000\000u\000\000\000\000\000\000\000\000\002\163\001\216\000\000\001(\002\195\000\173\002a\000\000\000\149\000\000\002b\000\000\000\000\000u\000\000\001\217\000\000\000\000\002\196\000j\000j\000\000\000\212\000v\000\000\000k\000\213\000\000\003j\000l\000y\000\000\000h\000\210\000\150\000\211\000q\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\002f\000>\000w\000\000\000\000\000\000\000\000\000\226\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\200\001\201\001\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\000\163\000\164\000\000\000\000\000v\000j\000j\000\000\000\000\000\212\000k\001\233\002\212\000\213\000l\000\000\001\234\000\000\000\163\000\164\001\235\000\000\000v\000\191\000\000\001\236\000\000\000\000\000w\000\000\000\000\000\000\000\000\000\000\000j\000\000\001\202\000\000\000u\000\226\001\203\000\194\000\000\001\200\001\223\000\000\000w\000\000\000\000\001.\000\000\000\173\000\000\000\000\000\149\000\000\000\000\000\000\000\163\000\164\000\000\000\227\000v\002T\004\031\002\143\000\000\000\196\002\166\000\173\000\000\000\000\000\149\000\000\000\000\000\000\000y\000\000\000h\000\000\000\150\000\194\000q\000\000\000\151\000\000\000w\004>\000\000\002[\000{\001\202\000>\000\000\000y\001\203\000\000\000\000\000\150\000>\000\000\000\000\000\151\000\000\000\000\000\000\000\000\0014\000{\000\173\000\251\000j\000\149\000\000\000\000\002\148\000\163\000\164\000h\002\149\000v\000\227\000q\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000\252\000>\000l\000y\001\216\000\253\000\000\000\150\000\191\000\254\000\000\000\151\000\000\000w\000\255\000\000\000\000\000{\001\217\000\000\000\000\000\000\000\000\001Y\000\000\000\000\000u\000\000\000\000\000\000\000\000\001\200\001\223\000j\001:\000\000\000\173\001S\000k\000\149\000\000\000\000\000l\000\000\000\000\000\000\000\000\000\000\000\000\002\\\000\000\002T\003k\000\000\000\000\000\000\000\000\000\000\000\000\001\216\000\252\000y\000\000\000\000\002a\000\150\000u\000\000\002b\000\151\000\000\001\200\001\223\001\217\001\029\000{\000\000\002[\000\000\001\202\000\000\002\162\000\000\001\203\000\000\000\000\002d\001\233\000\000\000\000\000\000\002T\003a\000\000\000\000\002\163\000\000\000\000\000\000\000\000\000\000\001\254\000\000\002f\000\163\000\164\000\000\000\000\000v\000\000\000\000\000\163\001D\001\200\001\223\000\000\000\000\002[\000\000\001\202\000\000\001\232\000\000\001\203\001T\000\000\000\000\001\183\000\000\000\000\000\000\000\000\000w\002T\002U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\233\000\000\000\163\000\164\000\000\001\234\000v\000\000\000\000\001\235\001_\001\185\001e\000\173\001\236\001\\\000\149\002[\001]\001\202\000\173\000\000\000\000\001\203\000\000\001\183\002\\\001\200\001\201\000\000\000w\000\000\000\000\000\000\000\000\000\000\001\216\000\000\000y\000\000\000\000\002a\000\150\000\000\000\000\002b\000\151\001\200\001\223\000\000\001\217\002\012\000{\000\173\000\000\000h\000\149\000\000\000\000\000q\000\000\000\000\000\000\002d\000\000\000\000\002\\\002T\002`\000>\000h\000\000\000\000\000j\000q\001\202\001\216\000\000\000y\001\203\002f\002a\000\150\000\000\000>\002b\000\151\000\000\000\000\000\000\001\217\000\000\000{\002[\000\000\001\202\000\000\000\000\001\232\001\203\000\000\000j\000\000\002d\001\200\001\201\000k\000\000\002\\\000\000\000l\000\000\000\000\000\000\000\000\000\000\000j\000\000\001\216\001\233\002f\000k\000\000\002a\001\234\000l\000\000\002b\001\235\000\000\000\000\000\000\001\217\001\236\000u\000\000\000\000\000\000\001\232\000\000\000\000\000\000\000\000\000\000\000\000\002d\000\000\000\000\000\000\000u\000j\000\210\001\202\000\233\000\000\000\000\001\203\000\000\000\000\001\233\000\000\000\000\002f\000\000\001\234\000\000\000\000\000\000\001\235\000\000\000\000\001\200\001\223\001\236\001\216\000\000\000\000\000\000\000\000\000\000\001\232\000\000\000\000\000\000\002\\\000\000\000\000\000\000\001\217\000\000\000\000\002T\003m\000\000\001\216\000\000\000\000\000j\000\000\002a\000\212\001\233\000\000\002b\000\213\000\000\001\234\000\000\001\217\000\000\001\235\000\000\000\163\000\164\000\000\001\236\000v\002[\000\000\001\202\000\000\002d\000\000\001\203\000\000\000\000\000\000\000\163\000\164\000\000\000\226\000v\000\000\000\000\000\000\002\127\000\000\000\000\002f\000\000\000w\000\000\000\000\000\000\000\000\000\000\000\000\001\200\001\223\000\000\002\127\001\216\000\000\000\000\000\000\000w\001\232\001\233\000\000\000\000\000\000\002\129\000\000\000\173\000\000\001\217\000\149\002T\0044\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\145\001\233\000\173\000\000\000\000\000\149\001\234\000\000\000\000\000\000\001\235\000\000\000y\001\200\001\223\001\236\000\150\002[\000\000\001\202\000\151\000\000\000\000\001\203\000\000\000\000\000{\000y\000\000\001\200\001\223\000\150\002\\\002T\0046\000\151\000\227\002\143\000\000\000\000\002\147\000{\001\216\000\000\000\000\000\000\000\000\002a\000\000\002T\0048\002b\000\000\000\000\000\000\000\000\001\217\000\000\001\233\002[\000\000\001\202\004M\000\000\000\000\001\203\000\000\000\000\000\000\002d\000\000\000\000\002\006\000\000\000\000\002[\000\000\001\202\000\000\000\000\000\000\001\203\000\000\000j\000\000\000\251\002f\002\148\000\000\001\200\001\223\002\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\232\000\000\000\252\000\000\002\\\003d\000\000\000\253\000\000\000\000\000\000\000\254\000\000\000\000\001\216\000\000\000\255\000\000\000\000\002a\000\000\001\233\000\000\002b\000\000\000\000\001\234\000\000\001\217\000\000\001\235\002[\000\000\001\202\000\000\001\236\000\000\001\203\000\000\002\143\000\000\002d\002\147\000\000\000\000\000\000\002\\\000\000\000>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\216\000\000\002f\000\000\000\000\002a\002\\\000\000\000h\002b\000\000\000\000\000q\000\000\001\217\000\000\001\216\000\000\000\000\000\000\001\232\002a\000\000\000\000\002\162\002b\000\000\002d\000\000\002[\001\217\000h\000\000\002\148\000\000\000q\000\000\002\149\002\163\000\000\000\000\001\233\000\000\002d\002f\000\000\001\234\001Y\002\143\000\000\001\235\002\147\000\000\000\000\000j\001\236\000\000\000\000\000\000\000k\002f\001S\001\232\000l\000\000\000\000\002\\\000\000\000\000\000\000\000\000\000h\000\000\002;\000\000\000q\001\216\000j\001\232\000\000\000\000\002a\000k\001\233\000\000\002b\000l\000u\001\234\000\000\001\217\000h\001\235\000\000\002[\000q\002=\001\236\002\148\001\233\000\000\000\000\002\149\002d\001\234\000\000\001\200\001\201\001\235\002\195\000u\000\000\000\000\001\236\002\187\000\000\000\000\000j\000\000\000\000\002f\000\000\000k\002\214\000\000\000\000\000l\000\000\000\000\000\000\002\162\002\223\002\224\002\226\000\000\000\163\001D\000j\001\232\002\190\000\000\000\000\000k\000\000\002\163\000\000\000l\000\000\001T\000\000\000u\000\000\000j\002\143\001\202\000\000\002\147\000\000\001\203\001\233\002\143\000\000\000\000\002\147\001\234\002\229\000\000\000\000\001\235\000v\000u\002\193\000\000\001\236\000\000\000\000\001_\000\000\001\141\002\187\000\000\001\\\000\000\000\000\001]\000\000\000\173\000\000\000\148\000\000\000\000\002|\000v\000w\000\000\002\162\002\223\005_\002\226\002[\000\000\000\000\000\000\002\148\002\190\000\000\002[\002\149\000h\002\163\002\148\000\148\000q\000\000\002\149\002\195\000w\000\000\000\000\000\149\002\143\000\000\003\003\002\147\000\000\000\000\000\000\000\000\000\000\002\196\002\229\000\000\000v\000\000\000\000\002\143\002\193\000\000\002\147\000\000\000\000\000y\000\149\000\000\000h\000\150\000\000\000\000\000\190\000\151\000\000\002\183\000v\001\216\000j\000{\000w\000\000\000\000\000k\000\000\000\000\000\000\000l\000y\000\000\002[\001\217\000\150\000\000\002\148\001\"\000\151\000\000\002\149\000\000\000w\000\000\000{\000h\002\195\000j\000\149\000q\002\187\002\148\000\000\000u\000\000\002\149\000j\002\187\000\000\000\000\002\196\000k\000\000\000\000\000\000\000l\002\162\002\228\000\149\002\226\000y\000\000\000\000\002\162\000\150\002\190\002\230\000h\000\151\000\000\002\163\000q\002\190\000\000\000{\000\000\000\000\002\163\000h\000u\000y\000j\000q\000\000\000\150\000\000\000k\000\000\000\151\000\000\000l\002\229\001\233\000\000\000{\000\000\000\000\002\193\002\232\000h\000\000\000\000\000\000\000q\002\193\000\000\002\008\002\187\000\000\000\000\000\000\000\000\000\000\000j\000u\003\015\000\000\000\000\000k\000\000\000\000\000\000\000l\002\162\000j\000v\002\230\000\000\000\000\000k\000\000\000\000\002\190\000l\000\000\000\000\000\000\002\163\002\162\000\000\000\000\002\195\002\237\000\000\002\183\000j\000u\000\000\002\195\000w\000k\000\000\002\163\000\000\000l\002\196\000\000\000u\002\232\000\000\000\000\000v\002\196\000\000\002\193\000\000\000\000\000\000\000\000\000\000\000h\000\000\000\000\000\000\000q\000\149\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\000w\003\023\000h\000\000\000\000\000h\000q\000\000\000\000\000q\000\000\000v\000y\000\000\000\000\000\000\000\150\002\235\000\000\000\000\000\151\000\000\000\000\002\195\000\000\000\000\000{\000\000\001\200\001\201\002\183\000j\000\000\003$\000\000\000w\000k\002\196\002\195\000\000\000l\000\000\000\000\000v\0033\000\000\000\000\000\000\000j\000\000\000\000\000j\002\216\000k\000v\000\000\000k\000l\000\000\000h\000l\000\149\002\183\000s\000u\003J\000\000\000w\000\000\000\000\000\000\000\000\000\000\002\183\000j\000v\001\202\000\000\000w\000\000\001\203\000u\000\000\000y\000u\000\000\000\000\000\150\000\000\000\000\000\000\000\151\000\000\000\149\002\183\000\000\000\000\000{\000\000\000w\000\000\000\000\000\000\000\000\000\149\000j\000\000\000\000\000\000\000\000\000k\000\000\000\000\000h\000l\000y\000h\000q\000\000\000\150\000q\000\000\000\000\000\151\000\000\000\149\000y\000\000\000h\000{\000\150\000\000\000q\000\000\000\151\000\000\003R\000\000\000u\000\000\000{\000\000\000\000\000\000\000\000\000\000\000v\000y\000h\000\000\000\000\000\150\000q\003\188\000\000\000\151\003\200\000\000\000\000\000j\000\000\000{\000j\000v\000k\002\183\000v\000k\000l\000\000\000w\000l\000\000\000\000\000j\001\216\000\000\000\000\000\000\000k\000\000\000\000\002\183\000l\000\000\002\183\000\000\000w\000\000\001\217\000w\000\000\000u\000\000\000j\000u\000\149\000\000\000\000\000k\000\000\000\000\000\000\000l\000\000\000\000\000\000\000u\000\000\000\000\000\000\000h\000\000\000\149\000\000\000q\000\149\000\000\000y\000\000\000v\000\000\000\150\000\000\000\000\000\000\000\151\000u\000\000\000\000\000\000\000\000\000{\000\000\000\000\000y\000h\000\000\000y\000\150\000q\000\000\000\150\000\151\000w\000\000\000\151\000\000\000\000\000{\000\000\000\000\000{\000\000\000\000\000\000\000h\000j\001\233\000\000\000q\000\000\000k\000\000\003\206\000\000\000l\003\213\000\000\005,\000x\000\000\002\n\000\000\000v\000\000\000\000\000v\000\000\003\222\000\000\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000v\000u\000l\000y\002\183\000\000\000\000\002\183\000\235\000w\003\236\000\000\000w\000j\000\000\000\000\000\000\000{\000k\002\183\000v\000\000\000l\000\000\000w\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000h\000\000\000\149\002\183\000q\000\000\000\000\000\000\000w\000\000\000u\000\000\000\000\005\158\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000h\000y\000\150\000\000\000q\000\150\000\151\000\000\000\000\000\151\000\000\000\149\000{\000y\003\250\000{\000h\000\150\000\000\000\000\000q\000\151\000\000\000j\000v\000\000\000\000\000{\000k\000\000\000\000\000\000\000l\000y\000\000\000\000\000\000\000\150\000\000\004\001\000\000\000\151\000\000\002\183\000\000\000\000\000j\000{\000w\000v\000\000\000k\000\000\000\000\000\000\000l\000u\000\000\000\000\000\000\000h\000h\000j\000\000\000q\000\189\000\000\000k\002\183\000v\000\000\000l\000\000\000w\000\149\000\000\000\000\000\000\000\000\000u\000\000\000h\000\000\000\000\000\000\000q\000\000\000\000\0059\000\000\000\000\000\000\000\000\000w\000\000\000u\000y\000h\000\000\000\149\000\150\000q\000\000\000\000\000\151\000\000\000j\000j\000\000\000\000\000{\000k\000k\000\000\000\000\000l\000l\000\000\000h\000\149\000h\000y\000q\000\000\000q\000\150\000\000\000j\000\000\000\151\000\000\000\000\000k\000\000\000\000\000{\000l\000\000\000v\000u\000u\000y\000\000\000j\000\000\000\150\000\000\000\000\000k\000\151\000\000\000\000\000l\000\000\000\000\000{\000\000\0059\000\000\000\000\000u\000v\000w\000\000\000j\000\000\000j\000\000\000\000\000k\000\000\000k\000\000\000l\000\000\000l\000u\000v\000\000\000\000\000\182\000\000\000\000\000\000\000\000\000w\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000u\000\000\000u\000\000\000w\000\000\000\000\000\000\000h\000\000\000\000\000\000\000q\000y\000\149\000\000\000\000\000\150\000\000\000\000\000\000\000\151\000\000\000\000\000v\000v\000\000\000{\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000h\000y\000h\000\000\000q\000\150\000q\000\000\000\245\000\151\000v\000\000\000\000\000w\000w\000{\000\000\000y\000\000\000j\000\000\000\150\000\000\000\000\000k\000\151\000v\000\000\000l\001$\000\000\000{\000>\000\000\000w\000\000\000\000\000h\000\000\000\149\000\000\000q\000\000\000\000\000\000\001\170\000j\000v\000j\000v\000w\000k\000u\000k\000\000\000l\000\000\000l\000\000\000\000\000\149\000y\000\000\000\000\000\000\000\150\001\174\000\000\001\210\000\151\000\000\000w\000\000\000w\000\000\000{\000\149\000\000\000\000\000u\000\000\000u\000y\000j\000\000\000\000\000\150\001Y\000k\000\000\000\151\000h\000l\000\000\000\000\000q\000{\000\149\000y\000\149\000\000\001S\000\150\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000h\000{\000\000\000h\000q\000u\000\000\000q\000y\000\000\000y\000\000\000\150\000\000\000\150\000h\000\151\000\000\000\151\000q\000\000\000\000\000{\000v\000{\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000\000\000\000\000l\000\000\000\000\000\000\000\000\000\000\000\000\002\017\000\000\000\000\000\000\000j\000w\000\000\000j\000v\000k\000v\000\000\000k\000l\000\000\000\000\000l\000u\000\000\000j\000\000\000\000\000\163\001D\000k\000\000\000\000\002\022\000l\002\026\000\000\000\149\000w\000\000\000w\001T\000\000\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000v\000\000\000\000\000\000\000\000\000\000\000h\000u\000y\000\000\000q\000\000\000\150\000\149\000\000\000\149\000\151\000\000\001_\0021\002q\000\000\000{\001\\\000w\000\000\001]\000\000\000\173\000\000\000\000\000\000\000\000\002\143\000\000\000y\002\147\000y\000\000\000\150\000\000\000\150\000\000\000\151\000h\000\151\000\000\000\000\000q\000{\000\149\000{\000j\000\000\000v\000\000\000\000\000k\000\000\000h\000\000\000l\000\000\000s\000\000\000h\000\000\000\000\000\000\000s\000\000\000\000\000y\002X\000v\000\000\000\150\000v\000w\002[\000\151\000\000\000\000\002\148\000\000\000u\000{\002\149\000\000\000v\000j\000\000\000\000\002\156\000\000\000k\002\171\000\000\000w\000l\000\000\000w\000\000\000\000\000\149\000j\000\000\000\000\002\173\000\000\000k\000j\000\000\000w\000l\000\000\000k\000\000\000\000\000\000\000l\000\000\000\000\000u\000\149\000\000\000y\000\149\000\000\000\000\000\150\000\000\000\000\000h\000\151\000\000\000\000\000s\000u\000\149\000{\000\000\000\000\000\000\000u\000>\000y\000\000\000\000\000y\000\150\000\000\002\143\000\150\000\151\002\147\000\000\000\151\000\000\000\000\000{\000y\000\000\000{\002\187\000\150\000\000\000v\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\000>\000\000\000\000\000j\002\162\000\000\000\000\002\192\000k\000\000\003\176\000\000\000l\002\190\000\000\000w\000\000\000\000\002\163\000\000\000\000\000>\000j\000\000\001Y\000\000\002\148\000\000\000\000\000v\002\149\000\000\000\000\000\000\000\000\000\000\000u\000>\001S\000\000\000\000\000\149\000\000\000\000\000v\002\193\000\000\000\000\004\024\000\000\000v\000\000\000\000\000w\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\150\000w\001S\000\000\000\151\000\000\000\000\000w\000\000\001Y\000{\002\143\000\149\000h\002\147\000\000\000h\000i\000\000\000\000\000i\000\000\002\195\001S\000>\001Y\000\000\000x\000\000\000\000\000\000\000\000\000\000\000x\000y\000>\002\196\000\000\000\150\001S\000\000\000\000\000\151\000\000\000\000\000\163\001D\000\000\000{\000y\000\000\000v\000\000\000\000\000\237\000y\002\162\000j\001T\000j\001\225\002\148\000j\000{\000k\002\149\000\000\000k\000l\000{\002\163\000l\000\000\000\000\000\000\000w\000\163\001D\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\001_\000\000\002\255\001T\001Y\001\\\000u\001S\001]\000u\000\173\000\163\001D\000\000\000\000\000x\000\000\002\143\001S\000\000\002\147\000\000\000\000\000\000\001T\000\000\000\000\000\163\001D\000\000\000\000\001_\000\000\003\n\000h\000\000\001\\\000y\000i\001]\001T\000\173\001\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\001_\000\000\003/\002\195\000\000\001\\\000\000\000\000\001]\000\000\000\173\000j\000\000\000\000\000\000\002\148\001_\002\218\003E\002\149\002\162\001\\\000\000\000\000\001]\000\000\000\173\000\000\000j\000\163\001D\000\000\000\000\000k\002\163\000\000\000v\000l\000\000\000v\000\163\001D\001T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001T\000\000\000\000\000\000\000\000\000\000\000\000\000w\000u\000\000\000w\000\000\000\000\000\000\000\000\000\000\000\000\001_\000\000\003\196\000\000\000\000\001\\\000\000\000\000\001]\000\000\000\173\001_\000\000\003\232\000\000\000\000\001\\\000\000\000\000\001]\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\000\000\000y\000\000\000\000\000y\002\162\000\000\000\000\000\000\000\000\000\000\000\000\002\220\000\000\000\000\000\153\000\000\000\000\000\155\002\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\157"))
+    ((16, "\001\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001#\001r\000\000\001\003\000\195\000\000\000\000\000\000\000\171\000\000\000\002\001\014\000\000\000\000\001D\000\000\002&\000\000\000\000\000\000\002\200\000\000\003\182\000\000\000\000\000\000\000\000\003\188\000\000\004\006\004\020\000\000\000\000\004^\000\000\004\178\000\000\000\000\000\000\005\200\000\000\006\030\000\000\006j\000\000\006\128\007L\000\000\000\000\007V\000\000\007b\000\000\000=\000\000\000\000\000\000\007\150\000\000\007\236\000\000\000\000\008J\000\000\008j\000\000\000\000\000\000\008\144\000\000\003\166\008\244\002@\000\000\000\000\000\000\002H\0009\t\000\000\000\000\000\t\004\000\000\023\178\000\000\005\006\001\029\002L\000\000\000\000\003\150\000\000\0000\000\000\000\025\006L\004\030\0276\004\030\002\162(\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\0276\000\000\000\000\019\146\000\000\022\002\000\000\003\146\000\000\000\000\000\000\000\000\000j\000\000\000\226\000\000\000\000\000\023\000\000\0058\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\190\000\000\013,\000\000\015\014\000\000\022\244\000\000\023z\000\000%D\000\000'\014\000\000.\164\000\0004@\000\0004\190\000\000\004\170\000\000\nP\000\000\000\000\000\000\000\000\000\0005\004\000\0005\008\000\0005N\000\000\007l\000\000\000\000\n\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\t6\000\000\000\000\tT\000\000\t\148\t\188\000\000\000\000\t\242\000\000\n\002\000\000\000\000\000\000\n2\000\000\n4\000\000\000\000\n6\000\000\nj\np\000\000\000\000\nr\000\000\nv\000\000\000\000\000\000\n\136\000\000\n\152\000\000\n\154\000\000\n\176\n\200\000\000\000\000\n\208\000\000\n\222\000\000\000\190\n\232\000\000\n\234\000\000\n\240\000\000\011\000\000\000\000\000\000\000\011\002\000\000\011\004\011\024\000\000\011\022\000\000\000/\024\190\000\000\006\030\000\000\006$\000\000\000\000\008&\000\000\000\000\001\011\001\196\000\000\000\000\000\000\000\000\001`\000\000\002N\000\000\019\188\000\000\019.\000\000\000\000\000\000\000\000\000\000\000\000\019\232\000\000\000\000\000\000\000\000\001\007\000\000\000\000\000\000\000\000\000\000\000\000\000\164\002\150\013\192\000\000\011\024\000\000\011\026\024$\000\000\011*\000\000\000\000\006\134\000\000\000\000\000\000\000\000\000\000$\174\000\0000z\000\000\000\000\000\000\003L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017`\000\000\000\000\000\000\000\000\000\000\000\000\003\236(\014\000\000\007j\000\000\018F \008\000\000\000\000\000\000\003~\000\000\017(\000\000\000\0000\248\000\000\000\000\000\000\003\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\216\000\000\013\200\000\000\000\000\000\000\000\000\000\014\000\000\000\0001\014\000\000\000\000\000\000\000\014\001\212\000\000\000\000\000\000\000\000\000\000\000\000\007\016\000\000\016\144\000\000\018\234\000\000\019|\000\000\027|\000\000\029\016\000\000\030~\000\000\031\140\000\000  \000\000\"&\000\000\020\024\000\000\008V\000\000$4\000\000&\230\000\000*@\000\000\000\000\000\000\000\000\000\000\000R1&\000\000\002\028\000\000\000\000\002(\006\002\000\000\0024\000\000\000\000\000\000\004 \000\000\000\000\000\000(\174\000\000\000\000\000\000\000\000\000\000(\246\000\000\000\000\000\000\000\000\000\000\000\000\000\168\000\000\000\000\000\000\011,\026\166\000\000\011.\000\000\000\000\000\000\000\000\000\000\0112\000\000\000\000\000\008\006\230\000\000\007H\000\000\000\000\000\000\000\198\000\000\012t\000F\011>\000\000\000\000\011D\000\000\011L\011V\000\000\000\000\011f\000\000\011z\000\000\000\000\000\000\011|\000\000\011~\000\000\000\000\011\132\000\000\011\134\011\142\000\000\000\000\011\164\000\000\011\166\000\000\000\000\000\000\011\168\000\000\011\170\000\000\011\176\000\000\011\202\011\204\000\000\000\000\011\210\000\000\011\212\000\000\004L\011\214\000\000\011\218\000\000\011\220\000\000\011\222\000\000\000\000\000\000\011\224\000\000\004\242\000\000\000\000\011\230\"\132\000\000\011\234\000\000\000\000\002$\000\000\000\000\000\000\000\000\004N$ \000\000\011\240\000\000\011\242-\"\000\000\012\024\000\000\000\000\013\024\012(\000\000\000\000\012*\000\000\012,\0120\000\000\000\000\0126\000\000\012:\000\000\000\000\000\000\012D\000\000\012F\000\000\000\000\012H\000\000\012L\012N\000\000\000\000\012R\000\000\012X\000\000\000\000\000\000\012Z\000\000\012h\000\000\012l\000\000\012r\012\130\000\000\000\000\012\134\000\000\012\146\000\000\004t\012\150\000\000\012\166\000\000\012\168\000\000\012\174\000\000\000\000\000\000\012\178\000\000\012\180-\176\000\000\012\184\000\000\000\000\0054/0\000\000\012\192\000\000\012\194/>\000\000\012\196\000\000\000\000\000\000\000\000\000\000\000\000\000\0001L\000\000\021\142\000\0001\204\000\000\000\000\000\128\000\000\007Z\000\000\005j\018z)@\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\164)@\000\000\019\206\000\000\022\128\020\250\000\000\000\000\000\000\005Z\000\000 \236\000\000\000\0002\020\000\000\000\000\000\000\006\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0144\000\000!\154\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\000\000\000\000\002h\000\000\006\200\000\000\008\234\000\000\t\022\000\000\015\244\000\000\017\212\000\000\018,\000\000\023\248\000\000\025&\000\000\028&\000\000\026.\000\000\0028\000\000\028\244\000\000\0294\000\000 \152\000\000)\188\000\000\000\000\000\0002b\000\000\000\000\000\000\000<\000\0002\144\000\000\000\000\000\0002\224\000\000\000\000\000b\000\000\025\016\000!\002\026\000\000\004\154\000\000\013R\0022\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\030\000\000$\200$Z\006\194\000\000\000\000\000\000%\128\000\000(\028\000\000*\132\000\000%\160&x\000K\002\174\006\220\000\000\000\000\000\000\002\208\000\000\000\000\002,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00036\000\000\000\000\000\000\000\000\000\000!\128\000\000&\142\000\000\000\000\000\000\000\000\000\000\000\000\014\004\000\000\005H\000\000\000\000\000\000\000\000\004f\001\136\000\000\000\000\022\212!8\000\000\022\136+\004\000\000\000\000)\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025V)\190\000\000\026\002\000\000\027\n\000\206*\006\000\000\019V\000\000\000\000\000\000\007F\000\000!\254\000\000\000\0003l\000\000\000\000\000\000\007\252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\180\000\0003\186\000\000\000\000\000\000$6\000\000\000\000+\180\000\000\000\000\000\000\000\000\008$\000\000\000\000\000\000$P\000\000\000\000*\204\000\000\000\017\000\000\000\000\000\000\002\136\000\000\005\144\000\000\013\"\000\000\014N\000\000&N\000\000),\000\000,~\000\000,\152\000\0000\134\000\0000\178\000\0002\160\000\0003\234\000\0004\218\000\000\000\000\000\000\000\000\000\000!\206\000\000\n\226\000\000 \212\012\208\000\000*\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\000\000\000\000\000\000\000\000\006\154\000\000\007\192\000\000\000\000\021\136\000\000\000\000\000\000+\202\000\000\000\000\000\000\000\000\000\000\030\186\000\000\000\000\000\000\000\000,\028\000\000\000\000\000\000\000\000\0034\004\022\000\000,J\000\000\000\000\000\000\000\000\025~\000\196\000\000\025\244\000\000\000\000\008b\000\000,P\000\000\000\000\000\000\000\000\000\000\003V\000\000\000\000\014\154\000\000\026\192\000\000\000\000\"\144\000\000\000\000\000\000\006\166\000\000\000\000\008X\000\000\000\000\"~\000\000\000\000\000\000,\156\000\000\000\000\000\000%\186\000\000\000\000\000\000\000\000,\202\000\000\000\000\000\000\000\000\004\178\nl\000\000-\156\000\000\000\000\000\000\000\000\000\000\000\000\015(\000\000\000\000\004\026\000\000\015\230\000\000\006\166\000\000\000\000\004:(\144\000\000\004X\000\000\000\000\000\000\000\000\002X\000\000&\202\000\000\0278\0016\027\176\000\000\003\154\000\000\016p\000\000\017*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0052\028F\004\150\028\190\000\000\000\000\000\000\005|\000\000\017\246\000\000\005x\000\000\000\000\007\194\000P\029\138\000\000\002\140\000\000\018t\030\000\000\000\000\000\019@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\142\008\160\000\000\006b\000\000\000\000\000\000\000\000\005f\000\000\019\254\000\000\000\000\000\000#R44\000\000\000\000\000\000 T\000\000\000\000\000\000\000\000\006\222\t\018\000\000\000\000-\234\000\000\000\000\000B\000\000\tX\000\000\000\0000f\000\000\000\000\000\000.R\000\000\000\000\000\000\000\000.p\000\000\000\000\007\212\t\156\000\000\000\000.v\000\000\000\000\007\152#\186\000\000\t\194\000\000\000\000.\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000#r\000\000\000\000\000\000\002\174\000\000\000\000\t\210\000\000\000\0000\144\000\000\000\000\000\000.\198\000\000\000\000\000\000\000\000/v\000\000\000\000\t`\t\220\000\000\000\000/\142\000\000\000\000\008\222\000\000\000\000\000\000\000\000\002X\004\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\254\000\000\020\140\000\000\000\000\000\0004r\000\000\tF\000\000\000\000\000\000\001x\000\000\000\000\005\216\021\004\000\000\022\018\000\000\000\000\000\000\006\164\000\000\013 \007\028\016\028\000\000\017@\000\000\000\000\000\000\008\176\000\000'\006\008\208'\172\000\000'\244\000\000\000\000\000\000\008\222\000\000\022\190\t\012\000\000\000\000\008\016\008b\t\154\014&\000\000\015J\000\000\000\000\000\000\n\n\000\000\029\166\nP\000\000\000\000\000\000\000C\000\000\000\000\000\000\000|\000\000\000\000\000\000\000\000\000\000\000\000\013z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\184\000\000\000\000\000\020\000\000\000\000\013|\000\000\000\000\000\000\000\000\005$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\132\000\000\000\000\013b\000\000\000\012\000\000\000\000\001\164\000\000\006\160\013\028\001h\000\000\000\000\006\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003D\002\130\000\000\000\000\t\228\000\000\000\000\000\000\003^\000\000\000\000\005\242\006\n\000\000\000\000\000\000\000\000\008\134\008\204\002\018\000\000\t\200\000\000\000\000\000\000\000\000\000\000\000\000\0048\000\000\000\000\002\212\000\000\000\000\012\234\000\000\000\000\0005\000\000\000\000\012&\000\000\006\206\013\160\006\228\000\000\000\000\004\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\n\134\000\000\000\000\000\000\000\000\n\162\000\000\000\000\011,\000\000\000\000\013\020\000\000\000\000\t*\014\030\002\200\000\000\014\194\000\000\000\000\000\000\000\000\013x\000\000\000\000\000\000\000(\000\000\0070\006\206\005\"\000\000\000\000\000\000\000\000\004\154\000\000\000\000\000\000\000\000\000\000\000\000\000h\000\000\000\000\006B\000\000\007\182\013\182\007\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\170\000\000\000\000\015\224\019\002\000\000\000\000\000\000\000\000\000\134\000\000\013z\011\224\000\000\016n\000\000\000\000\000\000\000\000\000\000\004\128\021v\000\000\000\000\022l\000\000\000\000\000\000\000\000\012F\000\000\024H\000\000\000\000\000\000\000\000\004\248\000\000\000\000\000\000\000\151\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\0000:\000\000\000\000\000\000\000\159\000\000\000\000\000\000\000\000\000\000\000X\n^\011~\011\154\000\000\006\154\tB\t\160\t\208\000\000\000\000\000\000\000\000\000\000\000\000\008F\022\138\000\000\030\142\008\206\000\000\000\000\n,\000\000\023V\000\000*P\000\000\000\000\008\210\023\204\000\000\031P\000\000\nb\031\218\000\000\000\000\000\000\005\246\006\154\000\000\000\000\000\000\000\000\008\176\000\000\003\016\000\000\004\168\006\210\000\000\000\000\000\000\001`\000\000\002N\000\000\008^\000\000\000\000\001\236\000\000\000\000\000\000\000\000\t\230\000\000\000\000\011\008\000\000\024\152\000\000\nT\013z\000\000\000\000\000\000\000\000\000\000\001\172\000\000\000\000\000\000\000\000\000\0000b\000\000\000e\000\000\000\000\000\000\000\000\000\000\001\156\000\000\n\140\002\008\0112\000\000\003\"\011\206\000\000\005\186\000\000\003\228\000\000\004\202\000\000\005t\000\000\nT\000\000\000\000\000\000\000\000\000\000\006\016\000\000\n&\000\000\006\186\000\000\nT\013\200\000\000\000\242\000\000\013\188\012\170\000\000\002D\000\000\008\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\\\000\000\n\146\000\000\000\000\000\000\000\000\000\000\000\000\013\196\000\000\000\000\012\210\000\000\000\000\012\188\007\022\013\240\000\000\013\246\000\000\000\000\004\198\nd\000\000\012\236\000\000\000\000\013*\000\000\000\000\000\000\000\000\000\000\000\000\013\246\000\000\000\000\000\000\013\006\012\232\n\200\005`\013\004\013H\000\000\000\000\012\254\n\238\n\248\013\026\013P\000\000\000\000\011\136\000\000\000\000\000\000\000\000\014\024\000\000\000\000"), (16, "\002\175\002\198\006\031\006 \001a\000\132\001\197\000\006\000Y\000\143\001\206\001\007\005-\003\214\000\011\000Y\001(\005\162\001*\003T\004M\0045\006$\001a\000\018\001x\006\135\000D\000D\006\136\006)\000\t\000\n\006*\000D\005\163\000D\005\166\005[\000\n\001a\000a\001x\003\008\003\t\006\026\006\027\005h\004\001\005W\002\177\006.\000\134\000\134\002\178\001c\000\017\002.\000\135\001d\002\175\002\198\000\136\005X\005\209\005i\0023\006S\000\021\005l\005[\000\134\005\162\006T\001c\000Y\004n\006'\001d\006U\006\140\004\000\005\207\005\210\005[\001q\000\145\005`\000\134\005\254\005\163\001c\005\166\005[\005\225\001d\005\\\003\231\0023\004|\004\234\002\203\005L\001\175\001q\001)\006'\001)\004\001\005\225\002\177\001\207\005\226\0011\002\178\005\229\005[\000D\001}\003p\005M\001q\003t\005a\003\253\005P\005[\005\226\005\\\000\132\005\229\005[\005O\000\141\003\254\006'\003/\000b\003C\004x\003\163\001\134\005\\\000E\000Y\001\211\001<\001\180\002\191\001\228\005M\005\\\006W\003H\000\025\005P\005[\003I\004\008\000D\002\192\004~\004[\004\240\001r\000\146\001\230\000\134\0032\0033\0035\003u\004I\006X\005\\\003v\006\226\000\134\004\239\005b\001\182\003\215\000\135\001r\005\\\006\227\000\136\000\147\003M\005\\\005\255\004O\0046\003\162\004U\001\t\001?\0010\003C\004\016\001r\005\178\004l\001\135\004-\002\207\000b\001\136\002\191\003\232\000\145\001\198\000\148\003H\005\\\004\248\000Y\003I\004\008\006Y\002\192\005b\002\175\002\198\001\128\002\208\000\138\005o\006Z\001\138\002\209\005x\006s\000\149\002\210\006\141\001\208\000Y\000\188\002\211\000D\006U\006\142\004\000\001\231\003V\001\138\000\151\003M\001\139\004\169\005k\004\011\006u\001\140\002>\005\184\000Y\001\141\004\016\000D\001\230\006w\001\142\004-\002\207\001\139\003\131\000\245\005i\004\001\001\140\002\177\005l\005[\001\141\002\178\000Y\005\237\003\132\001\142\006\161\003\008\003\t\004\235\002\208\005]\002>\000\024\000\146\002\209\006\127\006\128\006\002\002\210\0020\006\144\002\175\002\198\002\211\002\175\002\176\005p\000\191\000\192\000\194\000\195\006\235\004\237\004\250\000\132\000\147\000Y\001\020\000\141\000\027\003T\004M\0045\000Y\000[\001\219\000_\000Y\002\175\002\176\001\217\001\021\005\144\005[\006\162\000\196\005\\\000\197\006j\004W\000\177\001\207\0022\004\251\003p\006\159\000D\003t\006\132\004\001\003\134\002\177\000\134\001'\002\177\002\178\000a\001a\002\178\001x\000a\000\149\000\134\000D\003C\000\178\004n\000\135\006\186\000\179\005~\000\136\001\137\000b\002\191\000\151\000\134\001A\002\177\003H\001\180\001\204\002\178\003I\004\008\006\163\002\192\001\186\005\127\005[\004\237\005\\\000\134\001\186\006Z\000\145\003u\000Y\006\165\000D\003v\004\\\002\203\006'\001\175\000\134\003\011\001\223\001c\000\197\001\180\003\231\001d\001\181\003M\005s\005\156\003W\004\011\006\167\001\188\002\175\002\198\005\198\005[\004\016\001\187\000Y\006\169\004q\004-\002\207\000\029\003\216\001\135\001}\000Y\004\250\001q\003C\006U\006\147\0045\002\206\005\254\0011\001\022\005\\\001\023\002\191\000\197\002\208\002\191\0023\003H\003/\002\209\004\n\003I\004\008\002\210\002\192\006l\004^\002\192\002\211\006c\003\254\006d\004\001\000\197\002\177\001\"\004I\000\146\002\178\002\191\000\132\003\244\000\132\005~\000\133\005\\\001\203\006j\006\158\001\006\0031\002\192\003M\000D\000\176\003\131\0046\003,\004U\000\147\006\193\005\127\005[\004\016\004O\000Y\004l\003\132\004-\002\207\006\004\0016\002\235\001\t\003.\0010\000!\001\t\000D\0010\001r\002\175\002\198\000b\000\177\001a\004\"\001v\000\134\002\208\000\134\001~\002\208\000\135\002\209\000\135\000Y\000\136\002\210\000\136\006U\006\147\0045\002\211\001\128\000\149\002\211\003-\006\014\000\178\000\132\000\132\000D\000\179\000\141\000\133\002\208\005\130\004;\000\151\005\\\000\145\003C\000\145\003-\000Y\001\138\004\212\003\254\004\001\002\213\002\177\002\191\000\134\003\164\002\178\001c\003H\000Y\003V\001d\003I\004\008\006\153\002\192\006\152\001\139\005\154\003\167\000\197\003\231\001\140\006Z\001\175\000D\001\141\003K\005\153\000\134\000\134\001\142\000Y\001I\000\135\000\135\005\254\001q\000\136\000\136\003\008\003\t\006m\003M\006n\0023\006c\0046\006d\006\155\000\197\000\132\000D\000D\004\016\000\141\005\225\006\157\001f\004-\002\207\004a\000\145\000\145\001\186\003U\000#\002\175\002\198\000(\0011\000\146\000D\000\146\005\226\005\218\002>\005\229\005[\004R\002\208\004D\000Y\001\173\001\175\002\209\006U\006\147\0045\002\210\003C\005\215\001o\000\147\002\211\000\147\004D\001\188\005\133\000\134\002\191\005\172\000Y\004.\000\135\003H\000,\006\006\000\136\003I\004\008\006\153\002\192\000+\004F\004\001\001r\002\177\000\173\005\170\006Z\002\178\000\132\001\183\003K\000\197\000\143\003\008\003\t\004E\000b\006\154\000\145\004\"\000b\005Z\005\\\006\t\006\022\001K\003M\000\146\000\146\005\214\0046\000D\006\155\002\175\002\245\005X\000.\004\016\002\175\002\198\006\157\004\135\004-\002\207\001\177\005\215\003\n\002\025\0028\000\147\000\147\003\254\003p\000Y\000D\003t\000\134\006U\006\147\0045\004\212\000\135\004a\002\208\003\245\000\136\006\213\002n\002\209\001\183\006g\000\197\002\210\000D\000\177\000\132\002&\002\211\0000\000\133\003\249\000\134\005\154\002\177\000\197\005\216\004\001\002\178\002\177\000\145\004c\003C\002\178\006\144\004i\000\149\001\191\000\146\005\157\000\178\000\134\002\191\006\156\000\179\003u\003\218\003H\003\243\003v\000\151\003I\004\008\006\153\002\192\000\176\006\024\002\175\002\198\000Y\000\147\002>\006Z\0061\000\134\000Y\003K\006\012\004k\000\135\004i\005~\000Y\000\136\003P\006\220\006U\006\147\0045\006\150\004\129\000b\003M\005~\006\231\000\177\0046\000\132\006\155\005\127\005[\000\141\003U\004\016\005\216\005r\006\157\000\145\004-\002\207\006h\005\127\005[\004j\002\133\004\001\000\149\002\177\005\228\000\146\000\178\002\178\000D\004\131\000\179\000D\001\183\003C\000\197\002\208\000\151\006\164\002\191\002\180\002\209\001\209\005\226\002\191\002\210\005\229\005[\000\147\003H\002\211\002\192\000\134\003I\004\008\006\153\002\192\000\135\003\131\002\175\002\198\000\136\0066\004f\006Z\005\\\002\175\002\176\003K\006\220\003\132\005\219\005\002\000\148\000Y\0004\003V\005\\\006U\006\147\0045\000D\003V\000D\003M\000\145\000Y\005p\0046\005\004\006\155\003\231\000Y\000\146\000\149\004\016\000Y\003\231\006\157\000\150\004-\002\207\001a\004\129\001b\005\\\001\192\004\001\000\151\002\177\005\169\000D\003C\002\178\000\134\000\147\002\177\005\215\0006\005v\002\178\002\208\002\191\006\168\000D\004\151\002\209\003H\005\170\0062\002\210\003I\004\008\006\153\002\192\002\211\004\130\003\164\000b\002\175\002\198\000b\006Z\006b\005\176\000Y\003K\001a\000\132\001u\000\134\003\169\000\143\001c\000Y\005w\0008\001d\003T\004M\0045\000\149\003M\006V\000\146\003\243\0046\000<\006\155\001\185\005\169\000\197\005\139\004\016\005\005\000\153\006\157\000D\004-\002\207\005\177\001\177\001.\001q\005\137\001\012\000\147\004\001\005\170\002\177\000b\005\004\002\189\002\178\005\222\000\134\000\134\003C\001c\002\208\000b\000\135\001d\003\232\002\209\000\136\000b\002\191\002\210\004\"\006:\000\177\003H\002\211\002\191\0011\003I\004\008\006\153\002\192\003\028\006\210\002\175\002\198\003V\005\221\002\192\006Z\001q\000\145\005\223\003K\000\149\003+\001=\005\012\000\178\000Y\000D\003\231\000\179\003T\004M\0045\003\237\000Y\000\151\003M\004\175\003T\004'\0046\005\014\006\155\003\008\003\t\000Y\004\224\004\016\005\235\003\241\006\157\001r\004-\002\207\001a\004+\001b\000D\000;\004\001\006c\002\177\006d\000>\000\197\002\178\003C\005\031\004\157\000@\004\174\001\186\001\225\002\208\000\197\003x\002\191\000D\002\209\004\226\002\208\003H\002\210\005\173\005\236\003I\004\008\002\211\002\192\004\243\004[\002\175\002\198\003V\002\215\000F\001r\000\146\002\175\002\176\003K\001\028\000\134\000D\001\188\001c\000Y\005~\000D\001d\003T\004M\0045\003\008\003\t\001\021\003M\001\139\006\221\000\147\0046\001\227\004U\000\197\006B\005\127\005[\004\016\002\175\002\176\004\021\001\144\004-\002\207\003\254\001q\000b\000b\000H\004\001\004\"\002\177\005~\005\232\000\148\002\178\000\134\000\134\002\177\003C\002\175\002\176\002\178\002\208\000Y\000[\000\\\000_\002\209\002\191\005\127\005[\002\210\006>\003H\000\149\003\129\002\211\003I\004\008\000\187\002\192\004Y\004[\002\175\002\198\000\134\004\008\002\177\000\151\003\221\004'\002\178\003K\005\\\000K\003\154\000a\005\206\000Y\006\186\0066\006i\003T\004M\0045\000D\004+\000\134\003M\002\177\000M\0011\0046\002\178\004U\005\207\005\210\005[\004\224\004\016\005 \000b\004\021\001r\004-\002\207\000b\004\016\005\\\000Q\004\021\004\001\004-\002\177\001\031\005\015\001+\002\178\003C\001\022\000D\001\023\006L\000\197\004\218\002\208\005\224\0066\002\191\005\022\002\209\004\225\005\014\003H\002\210\002\191\005\025\003I\004\008\002\211\002\192\004\128\004[\002\175\002\198\004\025\005\024\002\192\006\\\001\166\004\002\0066\003K\005\024\000D\005\\\000\132\005~\000Y\001\222\001P\005\028\003T\004M\0045\002\191\004\006\000^\003M\001\139\006h\005\129\0046\000D\004U\005\127\005[\002\192\005\014\004\016\005\150\000D\004\021\001\142\004-\002\207\000D\002\191\006E\005\127\005[\004\001\000\199\002\177\000b\006\144\000\132\002\178\003\254\002\192\000\133\003C\003\008\003\t\000\134\002\208\001\006\000\202\006\187\000\135\002\209\002\191\002\197\000\136\002\210\005\148\003H\0066\000Y\002\211\003I\004\008\0061\002\192\004\247\004[\002\175\002\198\0069\000b\001\t\003V\0010\005%\005\\\003K\006\212\000\145\004\152\000\206\006\166\000Y\002\208\003V\000\134\006U\003\231\004\000\005\\\000\135\005'\003M\005~\000\136\005\170\0046\002\217\004U\000D\000\205\006\186\005\239\004\016\000b\002\208\004\021\005~\004-\002\207\003p\005\127\005[\003t\004\160\004\001\0068\002\177\000\145\002\219\000\132\002\178\003C\000b\000\143\005\127\005[\000\208\006\186\002\208\005(\000b\002\191\006\160\002\209\000\210\000b\003H\002\210\006t\0067\003I\004\008\002\211\002\192\006q\004[\005'\004\176\003\254\002\175\002\198\000Y\000[\001\003\000_\003K\000\146\003B\000\214\000\216\000\219\003u\006Q\005+\000Y\003v\004\185\000\134\006U\005\\\004\000\003M\000\135\005\162\004\203\0046\000\136\004U\000\147\004\219\005\014\005\146\004\016\005\\\000a\004\021\000\223\004-\002\207\000\222\000\225\005\163\000\227\005\166\005[\000b\000\146\004\001\004\"\002\177\000\145\000\231\000Y\002\178\003C\006:\0061\000b\002\208\000\233\000\235\006<\006\230\002\209\002\191\006\145\000Y\002\210\000\147\003H\0061\000\239\002\211\003I\004\008\006\146\002\192\002\175\002\198\006\189\006\243\006\237\000\132\000\238\006Z\006\238\000\143\000\241\006\149\004'\006\244\003\156\000Y\000\175\000\243\0063\006U\000\197\004\000\000\246\000\248\004/\005\\\000\250\003M\004+\006\191\003\131\004\011\006\151\003\199\000\252\001\000\001@\000\149\004\016\003\159\0043\006\157\003\132\004-\002\207\001\005\0015\001;\004\001\005\182\002\177\000\151\000\146\000\134\002\178\001:\001\216\001\215\000\135\001\221\003C\003\201\000\136\005\187\002\208\001\235\006\148\003\162\001\238\002\209\002\191\005\165\001\242\002\210\000\147\003H\006\220\001\241\002\211\003I\004\008\006\146\002\192\002\175\002\198\001\244\000\145\001\006\005\206\005\163\006Z\005\166\005[\006\221\006\149\001\246\001\250\001\252\000Y\000\148\001\255\002\003\003T\003\207\004\000\002\002\005\207\005\210\005[\003\164\003M\001\t\006\221\0010\004\011\006\151\002\005\002\007\002\011\002\013\000\149\004\016\002\015\003\165\006\157\000\190\004-\002\207\006;\003p\005\190\004\001\003t\002\177\000\151\002\019\002\018\002\178\003C\002\021\002\023\002\026\0062\002\028\002\030\002 \002$\002\208\002\191\002-\005\\\002,\002\209\003H\0027\002=\002\210\003I\004\008\006\146\002\192\002\211\0063\004\253\000\197\000\146\005\\\004{\006Z\001a\003p\001x\006\149\003t\002<\000\132\0063\003B\000\197\000\133\002\128\003u\002@\002C\002G\003v\002F\000\147\003M\002I\005\162\002K\004\011\006\151\002\175\002\198\002O\002Q\002T\004\016\002X\002W\006\157\002Z\004-\002\207\002\\\002`\005\163\000Y\005\166\005[\000\148\003T\002b\004\000\002d\000\134\000\134\002h\001c\003C\003u\000\134\001d\002\208\003v\002g\000\135\002j\002\209\002\191\000\136\000\149\002\210\002l\003H\002o\001z\002\211\003I\004\008\004\001\002\192\002\177\002q\002s\000\151\002\178\002u\001q\002y\002\127\000\132\002~\004p\000\145\000\143\002\132\002\138\002\137\003\156\005:\005U\000Y\000[\0013\000_\005|\005\\\005g\003M\006\019\005u\004y\004\011\004r\003\131\004{\005\159\003\202\005\175\004\016\002\175\002\198\004\021\003\159\004-\002\207\003\132\005\205\003R\005\234\006}\006\171\006\175\006\194\000a\000Y\006\198\006\203\000\134\003T\003\251\004\000\006\204\000\135\000\132\002\208\006\209\000\136\000\143\006\208\002\209\003\162\000Y\006\216\002\210\003\131\003T\003p\006\218\002\211\003t\006\224\005~\006\228\006\229\006\232\001r\003\132\004\001\003C\002\177\000\145\000\146\006\233\002\178\006\236\006\239\006\240\006\248\002\191\005\127\005[\000\000\000\000\003H\005\031\003\205\000\000\003I\004\008\005\007\002\192\000\134\003\164\000\147\002\175\002\198\000\135\000\000\000\000\000\000\000\136\000\000\004p\004\013\000\134\000\000\003\165\000\000\003u\000Y\005\193\001\138\003v\003T\004\014\0045\000\000\000\000\003M\000\000\000\000\000\000\004\011\004r\000\145\000\000\000\000\000\000\000\000\004\016\000\000\001\139\004\021\003\164\004-\002\207\001\140\000\000\005\\\000\149\001\141\000\000\004\001\005~\002\177\001\142\000\000\003\171\002\178\000\146\000\000\000\000\000\132\000\155\000\000\002\208\000\133\003C\000\000\000\000\002\209\005\127\005[\001\006\002\210\002\175\002\198\002\191\000\000\002\211\000\000\000\147\003H\000\000\0048\000\000\003I\004\008\000\000\002\192\000Y\000\000\000\000\000\000\003T\004\014\0045\001\t\000\000\0010\000\000\004:\000\000\000\000\004\008\000\000\000\148\000Y\000\000\000\000\000\134\003T\000\000\000\146\003\131\000\135\000\000\003M\000\000\000\136\000\000\004\011\004<\004\001\000\000\002\177\003\132\000\149\004\016\002\178\005\\\004>\001|\004-\002\207\000\147\000\000\000\000\005\"\000\000\005\031\000\151\003C\000\145\000\000\004\016\000\000\000\000\004\021\000\000\004-\000\000\002\191\000\000\002\208\005\202\000\000\003H\000\000\002\209\000\148\003I\004\008\002\210\002\192\000\000\005\225\000\000\002\211\000\000\002\175\002\198\000\000\000\000\000\000\000\000\003K\002\175\002\176\004=\000\000\000\149\000\000\000\000\005\226\000Y\002\200\005\229\005[\003T\004\014\0045\003M\003\164\005\162\000\151\0046\001a\0047\001x\000\000\000\000\000\000\004\016\000\000\000\000\004\021\003\173\004-\002\207\000\000\000\000\005\163\003C\005\166\005[\000\000\000\000\004\001\000\000\002\177\000\000\000\146\002\191\002\178\000\134\000\000\002\177\003H\002\208\000\000\002\178\003I\004\008\002\209\002\192\000\000\005\200\002\210\002\175\002\198\000\000\000\000\002\211\000\147\000\134\005\\\003K\001c\000\000\004\008\000\000\001d\000\000\000Y\001a\000\000\001b\003T\004M\0045\000\000\000\000\003M\005\225\002\175\002\196\0046\000\000\0047\000\000\000\000\000\000\005\\\004\016\000\000\000\000\004\021\001q\004-\002\207\000\000\005\226\000\000\005$\005\229\005[\004\001\000\000\002\177\000\149\004\016\000\000\002\178\004\021\000\000\004-\000\000\000\000\000\000\002\208\000\000\000\000\000\134\000\157\002\209\001c\000\000\003C\002\210\001d\000\000\000\000\000\134\002\211\002\177\000\000\000\000\002\191\002\178\000\000\000\000\000\000\003H\000\000\002\191\000\000\003I\004\008\000\000\002\192\000\132\002\175\002\198\000\000\000\141\001q\002\192\000\000\000\000\000\000\000\000\003K\001a\005\\\001x\000Y\000Y\000\000\000\000\005\242\003T\004M\0045\000\000\000\000\000\000\001r\003M\001a\000\000\001b\0046\000\000\0047\000\000\000\000\000\000\000\000\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\000\003C\005\248\000\134\004\001\005\t\002\177\000\000\000\135\000\000\002\178\002\191\000\136\000\000\000\000\000\134\003H\000\000\001c\002\208\003I\004\008\001d\002\192\002\209\004T\002\208\001\138\002\210\000\000\000\000\000\134\000\000\002\211\001c\003K\000\145\002\191\001d\001r\002\221\002\175\002\176\000\000\000\000\000\000\000\000\001\139\001q\002\192\000\000\003M\001\140\000\000\000\000\0046\001\141\004U\002\175\002\198\000\000\001\142\004\016\000\000\001q\004\021\000\000\004-\002\207\000\000\000\000\000\000\006\000\000Y\000\000\000\000\000\000\003T\004M\0045\000\000\000\000\000\000\000\000\000\000\002\175\002\176\000\000\002\208\000\134\000\000\002\177\000\000\002\209\003C\002\178\000\000\002\210\001a\000\000\001t\000\000\002\211\000\000\002\191\001\139\004\001\000\000\002\177\003H\000\000\000\000\002\178\003I\004\008\000\146\002\192\000\000\004V\001\146\000\000\002\175\002\198\000\000\002\175\002\198\000\000\001r\003K\000\191\001h\000\194\000\195\000\134\000\000\002\177\000Y\000\147\000\000\002\178\003T\004s\0045\001r\003M\000\000\000\134\000\000\0046\001c\004U\005\011\000\000\001d\000\000\004\016\000\000\000\196\004\021\000\197\004-\002\207\000\177\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\000\134\001\138\002\177\002\178\000\000\000\000\002\178\001q\001a\002\208\001b\000\149\000\000\000\000\002\209\000\178\000\000\002\191\002\210\000\179\000\000\001\139\000\000\002\211\003C\000\151\001\140\001A\000\000\002\192\001\141\004u\000\000\000\000\002\191\001\142\000\000\001w\000\000\003H\000\000\000\000\000\000\003I\004\008\000\000\002\192\000\000\004h\005~\000\000\002\175\002\198\002\203\000\000\000\000\000\134\000Y\003K\001c\000\000\002\191\003p\001d\000\000\003t\000Y\005\127\005[\000\000\003T\004s\0045\002\192\003M\000\000\000\000\000\000\0046\000\000\004U\001a\000\000\001b\000\000\004\016\001r\003C\004\021\001q\004-\002\207\000\132\000\000\002\208\000\000\001M\002\191\000\000\004\001\002\191\002\177\003H\000\000\000\000\002\178\003I\004\008\002\223\002\192\000\134\002\208\002\192\001\028\003u\000\000\002\209\000\000\003v\000\000\002\210\003K\002\175\002\195\002\205\002\211\005\\\001\021\000Y\000\134\000\000\000\000\001c\004w\000\000\000\000\001d\003M\002\208\000\000\000\134\0046\000\000\004v\000\000\000\135\002\175\002\198\004\016\000\136\000Y\004\021\002\225\004-\002\207\004\137\000\000\002\207\000\000\000\132\000\000\000Y\001q\000\141\000\000\003T\004\014\0045\001r\000\000\000\134\000\000\002\177\000\145\002\208\000\000\002\178\002\208\000\000\002\209\000\000\000\000\002\209\002\210\001\028\000\000\002\210\000\000\002\211\003C\000\000\002\211\000\000\000\000\004\001\000\000\002\177\000\000\001\021\002\191\002\178\000\000\000\000\000\000\003H\000\000\001\028\000\134\003I\004\008\003\131\002\192\000\135\000\000\000\000\000\000\000\136\002\175\002\198\000\000\001\021\000\000\003\132\003K\000\000\000\000\001\164\000\000\000\000\000\000\000\000\000\000\000Y\005\246\001\139\000\000\003T\001\030\004\000\003M\000\145\001r\001\022\0046\001\023\004v\000\197\000\000\001\148\000\000\004\016\000\000\000\146\004\021\000\000\004-\002\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\000\000\000\000\002\191\002\178\002\175\002\176\000\147\000\000\002\208\002\175\002\198\000\000\000\000\002\209\002\192\000\000\003C\002\210\000\000\000\000\000\000\003\133\002\211\000\000\000Y\000\000\002\191\000\000\003T\004\241\004\000\003H\000\000\004{\000\000\003I\004\008\000\000\002\192\001\139\001\031\000\000\001 \000\000\000\000\001\022\000\000\001\023\000\000\000\197\003K\000\146\000\134\001\150\002\177\000\000\000\000\004\001\002\178\002\177\000\000\000\000\001\031\002\178\001%\000\000\003M\001\022\000\176\001\023\0046\000\197\0047\000\147\000\000\000\000\000\000\004\016\002\175\002\198\004\021\000\000\004-\002\207\000\000\000\000\000\000\003C\000\000\004\255\000Y\000\000\005\225\004{\000\000\000\000\000\000\002\191\000\177\003;\004\252\000\000\003H\002\208\000\000\000\000\003I\004\008\002\209\002\192\005\226\000\000\002\210\005\229\005[\000\000\000\000\002\211\000\000\000\149\000\000\004p\000\000\000\178\000\000\000\000\003B\000\179\002\177\000\000\000\000\000\000\002\178\000\151\000\000\000\000\000\132\003M\000\000\000\000\001L\004\011\004r\000\000\002\175\002\198\001\028\003C\004\016\000\000\000\000\004\021\002\191\004-\002\207\000\000\000\000\002\191\000\000\000Y\001\021\000\000\003H\003T\002\192\004\000\003I\004\008\000\000\002\192\000\000\000\000\005\\\000\000\002\208\000\000\000\000\000\000\000\000\002\209\000\000\004p\000\000\002\210\000\134\000\000\000\000\000\000\002\211\000\135\000\000\000\000\004\001\000\136\002\177\000\000\000\000\003M\002\178\002\175\002\194\004\011\004r\003p\002\175\002\198\003\138\000\000\004\016\000\000\000\000\004\021\000\000\004-\002\207\005\225\003C\000\145\000\000\000Y\000\000\000\000\000\000\003T\005\001\004\000\002\191\000\000\004{\002\193\001a\003H\001x\005\226\002\208\003I\005\229\005[\002\192\002\209\000\000\000\132\000\000\002\210\000\000\000\141\000\000\000\134\002\211\002\177\003K\000\134\004\001\002\178\002\177\003u\000\000\000\132\002\178\003v\000\000\000\133\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\001\031\000\000\003\224\000\000\000\000\001\022\006\007\001\023\000\134\000\197\000\000\001c\003C\002\207\006?\001d\000\000\000\000\004{\000\134\000\000\000\000\002\191\000\000\000\135\005\\\000\146\003H\000\136\000\000\000\000\003I\004\008\002\208\002\192\000\134\002\175\002\198\002\209\000\000\000\135\001q\002\210\000\000\000\136\006G\004p\002\211\000\147\000\000\000\000\000Y\000\145\000\000\000\132\003T\004\014\0045\000\133\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004r\000\145\000\000\000\000\000\000\003C\004\016\000\000\000\000\004\021\002\191\004-\002\207\000\000\003\131\002\191\000\000\004\001\000\000\002\177\003H\000\000\002\192\002\178\003I\004\008\003\132\002\192\002\175\002\198\000Y\000`\002\208\000_\000\000\000\134\000\000\002\209\000\000\004p\000\135\002\210\000\000\000Y\000\136\000\000\002\211\003T\000\000\004\000\002\175\002\176\000\000\001r\000\000\003M\003\211\000\000\000\000\004\011\004r\000\000\006\n\000a\000\146\000\000\004\016\000\000\000\145\004\021\000\000\004-\002\207\000\000\000\000\000\000\004\001\005\027\002\177\000\000\000\146\003\152\002\178\000\000\000\000\000\000\000\147\000Y\000[\0018\000_\000\000\002\208\000\000\000\000\000\000\000\000\002\209\000\134\001\138\002\177\002\210\000\147\000\000\002\178\000\000\002\211\003C\006M\000\000\000\000\000\177\004{\000\000\000\000\000\000\005\225\002\191\000\000\001\139\000a\000\000\003H\000\000\001\140\000\000\003I\004\008\001\141\002\192\002\175\002\198\000\149\001\142\005\226\000\000\000\178\005\229\005[\006v\000\179\003K\000\000\000\000\000\000\000Y\000\151\000\146\000\149\003T\004\014\0045\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\0046\000\159\0047\000Y\001\008\003C\000_\004\016\000\147\000\000\004\021\000\000\004-\002\207\000\000\002\191\000\000\004\001\000\000\002\177\003H\000\000\000\000\002\178\003I\004\008\000\000\002\192\004\132\002\175\002\198\000\000\001\006\002\208\000\000\005\\\000a\002\191\002\209\004p\002\175\002\176\002\210\000\000\000Y\000\000\000\000\002\211\003T\002\192\0045\000\000\000\000\000\000\000\149\003M\001\t\000\000\0010\004\011\004r\000\000\000\000\000\000\003p\000\000\004\016\003\137\000\161\004\021\000\000\004-\002\207\000\000\000\000\000\000\000\000\004\001\000\000\002\177\000\000\000\000\000\000\002\178\002\175\002\198\000\000\000\000\000\134\001\006\002\177\000\000\002\208\000\000\002\178\000\000\0049\002\209\000\000\000Y\000\000\002\210\000\000\003T\000\000\004\000\002\211\003C\000\000\000\000\000\000\000\000\000\134\001\t\002\208\0010\003u\002\191\000\000\000\000\003v\000\000\003H\000\000\000\000\000\000\003I\004\008\002\227\002\192\000\000\000\000\004\001\000\000\002\177\000\000\000\000\000\000\002\178\006\017\000\000\003K\000\000\002\175\002\198\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\003\136\000\000\003\255\000\000\003M\000Y\000\000\000\000\0046\003T\0047\004\000\000\000\001\006\003C\004\016\000\000\000\000\004\021\000\132\004-\002\207\000\000\000\141\002\191\000\000\000\000\000\000\000\000\003H\000\000\000\000\000\000\003I\004\008\002\191\002\192\001\t\004\001\0010\002\177\002\208\000\000\000\000\002\178\000\134\002\209\002\192\004\134\003u\002\210\000\000\000\000\003v\000\000\002\211\000\000\000\000\000\000\003\131\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\134\0046\003C\004\136\003\132\000\135\000\000\000\000\004\016\000\136\000\000\004\021\002\191\004-\002\207\000\000\000\000\003H\000\000\002\233\000\000\003I\004\008\000\000\002\192\002\175\002\198\000Y\000[\001\213\000_\000\000\000\000\000\145\002\208\000\000\004\t\004\015\000\000\002\209\000Y\000\000\000\000\002\210\003T\002\208\004\000\000\000\002\211\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004\012\000\000\002\229\000a\003C\003p\004\016\000\000\003\135\004\021\000\000\004-\002\207\000\000\002\191\000\000\004\001\000\000\002\177\003H\000\000\003\131\002\178\003I\004\008\000\000\002\192\000\132\002\175\002\198\000\000\000\141\002\208\003\132\000\000\000\000\000\000\002\209\004\t\000\000\000\000\002\210\000Y\000Y\000\000\000\000\002\211\003T\000\000\004\000\000\000\000\000\000\000\000\134\003M\000\146\000\000\003u\004\011\004\012\000\000\003v\001a\000\000\001b\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\176\000\000\000\000\000\134\004\001\000\147\002\177\000\000\000\135\000\000\002\178\000\000\000\136\000\000\000\000\000\000\002\175\002\198\000\000\002\208\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\002\210\000\000\000\177\000Y\000\000\002\211\003C\003T\000\145\004\000\000\134\000\000\000\000\001c\000\000\000\000\002\191\001d\000\000\000\000\000\000\003H\000\000\000\149\000\000\003I\004\008\000\178\002\192\000\000\000\000\000\179\000\000\001\006\000\000\000\000\004\001\000\151\002\177\000\000\004\t\000\000\002\178\001q\000\000\000\000\000\000\002\175\002\176\000\000\000\000\000\000\000\000\003\131\000\000\000\000\003M\001\t\000\000\0010\004\011\004\012\000\000\002\175\002\198\003\132\003C\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\000\000\000\002\191\000\000\000Y\000\000\000\000\003H\003T\000\000\004\000\003I\004\008\000\146\002\192\000\000\000\000\000\000\000\000\002\208\004X\000\134\000\000\002\177\002\209\000\000\004Q\002\178\002\210\000\000\001N\000\000\000\000\002\211\000\000\000\147\000\000\004\001\000\000\002\177\000\000\000\000\003M\002\178\000\000\000\000\004\011\004S\001r\002\175\002\198\000\000\003C\004\016\000\000\001\189\004\021\000\197\004-\002\207\000\177\000\000\002\191\000\000\000Y\000\000\000\000\003H\003T\000\000\004\000\003I\004\008\000\000\002\192\000\000\002\175\002\176\000\000\002\208\004P\000\149\000\000\000\000\002\209\000\178\004Q\000\000\002\210\000\179\001a\000\000\001b\002\211\000\000\000\151\000\000\004\001\000\000\002\177\000\000\000\000\003M\002\178\000\000\000\000\004\011\004S\002\175\002\176\000\000\000\000\000\000\004\016\001\139\000\000\004\021\000\000\004-\002\207\000\000\002\191\000\000\000\000\000\134\000\000\002\177\003C\001\152\000\000\002\178\000\000\000\000\002\192\000\000\000\000\000\000\002\191\000\134\002\208\000\000\001c\003H\000\000\002\209\001d\003I\004\008\002\210\002\192\000\000\002\175\002\198\002\211\004d\000\000\000\134\000\000\002\177\000\000\000\000\004e\002\178\000\000\000\000\001a\000Y\001x\000\000\000\000\003T\001q\004\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004g\000\000\000\000\000\000\000\000\003C\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\000\000\000\002\191\002\208\004\001\000\000\002\177\003H\000\000\000\000\002\178\003I\004\008\000\000\002\192\002\175\002\198\002\231\000\134\002\208\004b\001c\000\000\000\000\002\209\001d\004Q\000\000\002\210\002\191\000Y\000\000\000\000\002\211\003T\000\000\004\000\000\000\000\000\000\000\004o\002\192\003M\000\000\000\000\000\000\004\011\004S\000\000\000\000\000\000\001q\000\000\004\016\000\000\001r\004\021\000\000\004-\002\207\000\000\002\191\000\000\004\001\000\000\002\177\000\000\000\000\000\000\002\178\000\000\000\000\000\000\002\192\000\000\000\000\000\000\000\000\001a\002\208\001b\000\000\000\000\000\000\002\209\000\000\002\175\002\198\002\210\000\000\000\000\000\000\000\000\002\211\003C\000\000\000\000\006C\000\000\004t\000\000\000Y\000\000\000\000\002\191\003T\002\208\004\000\000\000\003H\000\000\000\000\000\000\003I\004\008\000\000\002\192\000\000\000\000\000\000\002\237\001\139\000\000\000Y\000\000\000\000\000\134\000\000\004p\001c\001r\000\000\000\000\001d\004\001\001\154\002\177\000\000\002\208\000\000\002\178\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004r\000\000\000\000\002\239\003C\005*\004\016\000\000\000\000\004\021\001q\004-\002\207\000\000\002\191\000\000\000\000\000\000\000\000\003H\000\000\000\000\000\000\003I\004\008\000\000\002\192\001\138\000\000\000\000\001\028\000\000\002\208\000\000\002\175\002\198\000\000\002\209\004p\000\000\000\000\002\210\000\000\000\000\001\021\006O\002\211\001\139\000\000\000Y\000\000\000\000\001\140\003T\003M\004\000\001\141\000\000\004\011\004r\000\000\001\142\000\000\000\000\001a\004\016\001b\000\000\004\021\000\000\004-\002\207\000\000\000\000\000\000\003C\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\002\191\000\000\000\000\002\178\001r\003H\002\208\000\000\000\000\003I\004\008\002\209\002\192\000\000\000\000\002\210\000\000\000\000\002\175\002\198\002\211\000\000\000\000\000\000\006D\000\000\000\000\000\134\000\000\006R\001c\000\000\000\000\000Y\001d\000\000\000\000\003T\000\000\004\000\003M\001a\000\000\001b\004\011\006F\000\000\000\000\000\000\000\000\000\000\004\016\000\000\001a\004\021\001b\004-\002\207\000\000\000\000\001q\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\001\031\001\139\003\234\002\178\000\000\001\022\000\000\001\023\002\208\000\197\002\175\002\198\000\000\002\209\000\000\001\156\000\000\002\210\003C\000\000\000\134\000\000\002\211\001c\000\000\000Y\000\000\001d\002\191\004\150\000\000\000\000\000\134\003H\000\000\001c\000\000\003I\004\008\001d\002\192\000\000\000\000\000\000\002\175\002\176\000\000\000\000\000\000\000\000\004\181\000\000\006D\001q\000\000\000\000\000\000\000\000\004\184\000\000\002\177\000\000\000\000\000\000\002\178\001q\000\000\000\000\003M\000\000\001r\000\000\004\011\006F\003p\000\000\000\000\003t\000\000\004\016\004\190\000\000\004\021\000\000\004-\002\207\000\132\003C\000\000\000\000\000\141\000\000\000\134\000\000\002\177\000\000\000\000\002\191\002\178\000\000\000\000\000Y\003H\000\000\000\000\002\208\003I\004\008\004\227\002\192\002\209\002\203\000\000\001\175\002\210\000\000\000\000\000\000\000\000\002\211\000\000\006D\003B\000\000\003p\000\000\003u\003t\000\000\000\000\003v\000\000\001r\000\000\000\134\000\000\001\139\003M\000\000\000\135\000\000\004\011\006F\000\136\001r\000\000\000\000\000\000\004\016\000\000\001\158\004\021\000\000\004-\002\207\000\000\000\000\000\000\002\191\000\000\000\132\000\000\000\000\000\000\000\141\000\000\000\000\000\145\004\191\000\000\002\192\000\000\003B\000\132\002\208\000Y\003u\000\143\000\000\002\209\003v\000\000\004\229\002\210\000\000\000\000\000\000\000\000\002\211\000\000\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\001s\003p\000\000\000\000\003t\000\000\002\192\000\000\003\156\000\000\000\134\004\194\001\139\000\000\004\230\000\135\004\217\002\207\000\000\000\136\000\000\000\000\000\000\000\134\003\131\000\132\001\160\003\199\000\135\000\141\000\000\000\000\000\136\003\159\000\000\000\000\003\132\002\208\000\000\000\000\000Y\000\000\002\209\000\145\000\000\001a\002\210\001b\000\146\003B\000\000\002\211\000\000\003u\000\000\003\201\000\145\003v\003\156\000\000\000\000\003\162\000\191\002\182\000\194\000\195\000\000\000\000\000\000\000\000\000\147\002\208\000\000\000\134\003\131\003\192\003\209\003\195\000\135\000\000\000\000\000\000\000\136\003\159\000\000\002\241\003\132\000\000\000\000\000\000\000\196\000\000\000\197\000\134\000\000\000\177\001c\003\206\000\132\000\000\001d\000\000\000\141\003\164\000Y\003\198\000\145\000Y\000[\002*\000_\003\162\000\000\000Y\000\000\000\000\000\149\003\165\000\000\000\000\000\178\000\000\000\146\000\000\000\179\000\000\001q\000\000\000\000\000\000\000\151\000\000\001A\003\156\000\000\000\146\000\191\003E\000\194\000\195\000a\000\000\000\000\000\000\000\147\000\000\000\134\000\000\000\000\003\131\003\197\000\135\003\195\003\164\000\000\000\136\000\000\000\147\003\159\000\000\001\028\003\132\000\000\000\000\000\196\000\000\000\197\003\165\000\000\000\177\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\000\000\000\145\003\198\000\000\000\148\000\000\000\000\000\146\003\162\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\002\175\002\198\000\000\000\179\000\191\003z\000\194\000\195\000\149\000\151\001r\001A\000\147\002\202\000\000\000Y\000\132\000\000\000\000\004\150\000\141\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y\000\196\003\164\000\197\000\000\000\000\000\177\000\000\000\000\004\231\000\000\000\000\000\000\000\000\000\000\000\000\003\165\004\184\000\000\002\177\000\000\002\175\002\198\002\178\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\146\000\134\000\000\000\179\000Y\000\000\000\135\004\190\004\150\000\151\000\136\001A\001\006\001\139\000\191\004\018\000\194\000\195\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\001\031\001\162\004\028\004\183\000\000\001\022\000\000\001\023\000\145\000\197\001\t\004\184\0010\002\177\000\000\000\000\000\196\002\178\000\197\000\000\000\000\000\177\000\000\000\000\001a\003p\001b\000\000\003t\000Y\000[\0025\000_\004\190\000\000\000\000\000\000\000\000\003p\000\000\000\000\003t\000\149\002\175\002\198\000\000\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\000\001A\002\191\000\000\000\000\000a\000\000\004A\000\000\000\000\000\000\000\000\004\191\000\000\002\192\000\134\003B\000\000\001c\000\000\003u\000\000\001d\000\000\003v\000\000\004\192\000\000\000\132\003B\000\146\000\000\000\141\003u\003B\000\000\002\177\003v\000\000\000\000\002\178\002\175\002\198\000Y\000\191\004\196\000\194\000\195\001q\000\000\000\000\000\000\000\147\004\194\002\191\000\000\004\199\000\000\004\217\002\207\000\000\000\000\003;\004J\004\191\000\000\002\192\000\000\000\000\000\000\000\000\000\000\000\196\000\000\000\197\000\000\000\134\000\177\004\192\002\208\000\000\000\135\000\000\004G\002\209\000\136\000\000\002\203\002\210\003B\000\000\002\177\000\000\002\211\000\000\002\178\000\000\000\000\000\149\000\000\003\156\000\000\000\178\000\132\000\000\004\194\000\179\000\133\004\199\000\145\004\217\002\207\000\151\003\156\001A\000\000\003\131\003\192\003\193\003\195\000\000\000\000\000\000\000\000\003C\003\159\000\000\001r\003\132\003\131\000\000\002\208\003\158\000\132\002\191\001\006\002\209\000\141\003\159\003H\002\210\003\132\000\000\003I\000\000\002\211\002\192\003\198\000\000\002\175\002\198\000\134\000\000\003\162\000\000\000\000\000\135\000\000\004I\001\t\000\136\0010\000\000\000\000\000\000\000\000\003\162\000\000\000\000\000\000\003;\004@\000\000\000\000\003M\000\000\000\000\000Y\000\000\003C\000\000\000\134\000\000\000\000\000\145\000\000\000\135\000\000\000\146\002\191\000\136\002\207\000\000\001\139\003H\003\164\000\000\003B\003I\002\177\003 \002\192\001C\002\178\000\000\000\195\000\000\001\168\003\164\003\165\000\147\002\208\000\000\003K\000\145\000\000\002\209\000\000\000\000\000\000\002\210\000\000\003\165\000\000\000\000\002\211\000\000\000\000\000\000\003M\000\196\000\000\000\197\001\028\000\000\000\177\003p\000\000\000\000\003t\000\000\000\000\000\000\000\000\000\000\000\000\002\207\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\002\175\002\198\000\000\000\178\000\000\000\000\000\146\000\179\000\000\002\208\000\000\002\175\002\198\000\151\002\209\001A\000\000\000\000\002\210\000\000\000\000\003;\003<\002\211\000\000\000\000\000\000\000\134\000\147\000\000\003C\003u\003;\003G\000\000\003v\000\146\000\000\000\000\000\000\002\191\002\175\002\198\000\000\000\000\003H\000\000\000\000\003B\003I\002\177\000\000\002\192\000\176\002\178\001a\000\000\001b\000\147\003B\000\000\002\177\003;\004L\003K\002\178\000\000\000\000\000\000\000\000\000\000\002\175\002\198\000\000\000\149\000\132\000\000\000\000\000\000\000\133\003M\000\000\000\000\000\177\000\000\000\000\000\000\000\000\000\163\003B\000\000\002\177\003;\005\017\000\000\002\178\000\000\002\207\000\000\000\000\001\031\000\000\004$\000\134\000\149\001\022\001c\001\023\000\178\000\197\001d\000\000\000\179\000\000\000\000\000\000\000\000\002\208\000\151\003B\000\000\002\177\002\209\000\134\000\000\002\178\002\210\003\131\000\135\000\000\000\000\002\211\000\136\000\000\000\000\000\000\001q\000\000\003C\003\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\191\003C\000\000\000\000\000\000\003H\002\175\002\198\000\145\003I\000\000\002\191\002\192\000\000\000\000\000\000\003H\000\000\000\000\000\000\003I\000\000\000\000\002\192\003K\000\000\000\000\003;\005\019\000\000\000\000\003C\000\000\000\000\000\000\003K\000\000\000\000\000\000\000\000\003M\002\191\002\175\002\198\000\000\000\000\003H\000\000\000\000\000\000\003I\003M\000\000\002\192\003B\000\132\002\177\002\207\003\164\000\141\002\178\003C\000\132\003;\005\021\003K\000\141\001r\002\207\000\000\000Y\002\191\003\175\000\000\000\000\000\000\003H\002\208\000\000\000\000\003I\003M\002\209\002\192\000\000\000\000\002\210\000\146\002\208\000\000\003B\002\211\002\177\002\209\000\000\003K\002\178\002\210\002\207\000\000\000\000\000\000\002\211\000\134\000\000\000\000\000\000\000\000\000\135\000\147\000\134\003M\000\136\000\000\000\000\000\135\000\000\000\000\002\208\000\136\002\175\002\198\000\000\002\209\000\000\000\000\000\000\002\210\002\207\003\"\000\000\000\000\002\211\001\139\000\000\000\132\000\145\000\000\000\000\000\141\000\000\004C\000\000\000\145\003C\000\000\000\000\001\170\002\208\000\000\000Y\000\000\000\000\002\209\002\191\000\149\000\000\002\210\000\000\003H\000\000\000\000\002\211\003I\000\000\000\000\002\192\000\000\003B\000\165\002\177\000\132\000\000\000\000\002\178\000\141\000\000\000\000\003K\000\000\003C\000\000\000\000\000\134\000\000\000\000\000Y\000\000\000\135\000\000\002\191\000\000\000\136\000\000\003M\003H\000\000\000\000\003p\003I\000\000\003t\002\192\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\002\207\000\141\000\000\003K\000\146\000\145\000\000\000\000\000\134\000\000\000\000\000\146\000Y\000\135\000\000\000\000\000\000\000\136\000\000\003M\002\208\001Q\000\000\000\000\000\000\002\209\000\147\000\000\000\176\002\210\000\000\000\000\000\000\000\147\002\211\000\134\002\207\000\000\000\000\003u\000\000\000\145\000\000\003v\000\000\000\134\001S\003C\000\197\000\000\000\135\000\177\000\000\000\000\000\136\000\000\002\208\002\191\000\177\000\132\000\132\002\209\003H\000\141\000\141\002\210\003I\000\000\000\000\002\192\002\211\000\000\000\149\000\000\000Y\000Y\000\178\000\000\000\145\000\149\000\179\003K\000\000\000\178\000\146\000\000\000\151\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\000\000\000\000\132\003M\000\000\000\000\000\141\001Q\000\000\000\000\000\000\000\000\000\147\000\134\000\134\000\000\000\000\000Y\000\135\000\135\002\207\000\000\000\136\000\136\000\000\000\000\000\146\000\000\000\000\000\000\000\000\001a\001\195\001b\000\197\000\000\000\000\000\177\000\000\003p\002\208\003\131\003t\001N\000\000\002\209\000\145\000\145\000\147\002\210\000\134\000\000\000\000\003\132\002\211\000\135\000\000\000\000\000\149\000\136\000\000\000\000\000\178\000\146\000\000\000\132\000\179\000\000\001\201\000\141\000\197\000\000\000\151\000\177\000\000\000\000\000\000\000\000\000\000\000\134\002\158\000\000\001c\000\145\000\000\000\147\001d\003B\000\000\000\000\000\000\003u\000\000\000\000\000\149\003v\000\000\000\000\000\178\000\000\000\000\003p\000\179\003p\003t\002\160\003t\000\197\000\151\000\000\000\177\000\000\001q\000\134\000\000\000\000\000\000\000\000\000\135\000\000\003\164\000\000\000\136\000\000\000\000\000\146\000\146\000\000\000\000\000\132\000\000\000\149\003$\000\141\003\177\000\178\000\000\000\000\000\000\000\179\000\000\000\000\002\158\003`\000\000\000\151\000\145\000\147\000\147\003B\000\000\003B\000\000\003u\000\000\003u\000\000\003v\000\000\003v\000\000\000\000\000\146\000\000\000\000\000\000\000\000\002\243\003b\000\197\000\197\003\156\000\177\000\177\000\000\000\000\000\000\000\134\000\000\003`\000\000\000\000\000\135\000\000\000\147\000\000\000\136\003\131\003\192\006I\003\195\001r\000\000\000\149\000\149\000\000\003\159\000\178\000\178\003\132\000\000\000\179\000\179\000\000\003r\000\000\000\197\000\151\000\151\000\177\000\145\000\000\000\000\000\000\000\000\000\000\000\000\000\132\003\198\000\000\000\000\000\141\000\000\000\000\003\162\000\146\000\000\000\000\000\132\000\000\000\149\003]\000\141\003\156\000\178\003\156\000\000\000\000\000\179\000\000\000\000\000\000\000\176\000\000\000\151\000\000\000\000\000\147\000\000\003\131\000\000\003\131\003\161\000\000\003\199\000\000\000\000\001\139\003\159\000\000\003\159\003\132\000\000\003\132\000\000\000\134\003\164\000\000\000\000\000\132\000\135\001\172\000\177\000\141\000\136\000\000\000\134\000\000\000\000\000\000\003\165\000\135\003\201\000\000\000\000\000\136\003\162\000\000\003\162\000\146\000\000\000\000\000\132\000\149\000\000\000\132\000\141\000\178\000\145\000\141\000\000\000\179\000\000\000\000\000\000\000\000\001\177\000\151\000\000\000\145\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\134\003p\000\000\000\000\003t\000\135\000\000\003\204\000\000\000\136\000\000\003\164\000\000\003\164\003p\000\000\000\132\003t\000\000\000\177\000\141\000\000\000\000\000\134\000\000\003\165\000\134\003\165\000\135\000\000\000\000\000\135\000\136\000\145\000\000\000\136\000\000\000\000\000\000\000\132\000\149\000\000\000\000\000\141\000\178\000\000\000\000\000\000\000\179\000\134\000\000\000\000\003\150\003u\000\151\000\000\000\145\003v\000\000\000\145\000\146\000\000\000\134\003\228\000\134\000\000\003u\000\000\000\000\000\135\003v\000\146\000\000\000\136\000\000\000\000\000\000\003\152\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\134\003\152\000\000\000\000\000\000\000\135\000\147\000\000\000\000\000\136\000\145\000Y\000[\002:\000_\000\000\000\000\003\239\000\000\000\000\000\177\000\000\000\000\000\000\000\000\000\146\000\000\000\000\000\000\000\000\000\000\000\177\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\003\247\000\149\003\152\004\004\000a\000\178\000\000\000\147\000\146\000\179\000\000\000\146\000\149\000\000\000\000\000\151\000\178\000\132\000\000\000\000\000\179\000\141\003\131\000\000\000\000\003\152\000\151\000\000\003\152\000\000\000\147\000\000\000\177\000\147\003\132\003\131\000\000\000\000\000\000\000\000\000\000\004 \000Y\000[\002|\000_\000\000\003\132\000\000\000\146\000\000\000\000\000\000\000\149\000\000\000\177\000\132\000\178\000\177\000\000\000\141\000\179\000\000\000\000\004)\000\134\003\152\000\151\000\000\000\000\000\135\000\147\000\146\000\000\000\136\000a\000\149\000\000\000\000\000\149\000\178\000\000\000\000\000\178\000\179\000\000\000\000\000\179\000\000\003\152\000\151\000\000\000\000\000\151\000\147\000\000\000\177\000\000\000\145\000\000\000\000\003\164\000\000\000\000\000\134\000\000\000\000\000\000\000\132\000\135\000\000\000\000\000\141\000\136\003\164\003\179\000\000\000\149\000\000\000\177\000\000\000\178\000\000\000\132\000\000\000\179\000\132\000\141\003\181\000\000\000\141\000\151\000\000\000\000\001\006\000\000\000\000\000\145\000\000\000\132\000\149\000\000\000\000\000\141\000\178\000\000\000\000\000\000\000\179\000\132\000\000\000\000\000\000\000\133\000\151\000\000\000\134\000\000\001\t\000\000\0010\000\135\000\000\000\000\000\000\000\136\000\132\000\000\000\000\0041\000\141\000\134\000\000\000\000\000\134\000\000\000\135\000\146\000\000\000\135\000\136\000\000\000\000\000\136\000\000\000\000\000\000\000\134\000\000\000\145\000\000\000\000\000\135\000\000\003\152\000\000\000\136\000\134\000\000\000\147\000\000\000\000\000\135\000\000\000\145\001\006\000\136\000\145\004\155\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\146\000\000\000\000\000\135\000\145\000\000\000\000\000\136\000\177\000\000\000\000\000\000\000\000\001\t\000\145\0010\000\000\003\152\000Y\000[\002\130\000_\000\147\000\000\000\000\000Y\000[\002\135\000_\000\149\000\000\000\145\000\000\000\178\000\000\000\000\000\000\000\179\000\132\000\000\000\000\000\000\000\141\000\151\004\167\000\000\000\000\000\177\000\000\000\000\000\132\000a\000\146\000\000\000\141\000\000\000\000\000\000\000a\004\172\000\000\000\000\004\179\000\000\000\000\000\000\000\000\000\146\000\149\003\152\000\146\000\000\000\178\000\000\000\147\004\188\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\146\003\152\000\000\000\134\003\152\000\000\000\147\000\000\000\135\000\147\000\146\000\000\000\136\000\000\000\000\000\134\000\177\003\152\000\000\004\210\000\135\000\000\000\147\000\000\000\136\000\000\000\000\000\146\000\000\000\000\000\000\000\177\000\147\000\000\000\177\000\000\000\145\000\149\000\000\000\000\000\000\000\178\000\000\000\000\003\152\000\179\000\000\000\177\000\145\000\147\000\000\000\151\000\149\000\132\000\000\000\149\000\178\000\141\000\000\000\178\000\179\000\000\000\000\000\179\000\000\000\000\000\151\006%\000\149\000\151\000\000\000\000\000\178\000\132\000\177\000\000\000\179\000\141\000\149\000\000\000\000\000\000\000\151\000\000\000\000\000\132\000\000\006\133\000\000\000\141\000Y\003p\000\167\000\000\003t\000\149\000\000\000\000\001\006\000\178\000\000\000\134\000\000\000\179\000\000\001\006\000\135\004\215\000\000\000\151\000\136\000Y\000\000\003p\000\000\000\146\003t\000\000\000\000\004\222\000\000\000\134\001\t\000\000\0010\000\000\000\135\000\146\000\000\001\t\000\136\0010\003\152\000\134\000\145\000\000\000\000\000\147\000\135\000\134\000\000\000\000\000\136\003u\003\152\000\000\001\028\003v\000\132\000\147\000\000\000\000\000\141\000\000\000\145\000\000\000\000\000\000\000\000\000\132\001\021\000\134\000\177\000\141\000\000\003u\000\145\001\028\000\000\003v\000\000\000\132\000\000\000\000\000\177\000\141\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\132\000\179\000\000\000\000\000\141\000\149\000\134\000\151\000\000\000\178\000\000\000\135\000\000\000\179\000\000\000\136\000\000\000\134\000\000\000\151\000\000\000\000\000\135\000\146\000\000\000\000\000\136\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\145\006&\000\000\000\000\000\146\000\000\000\147\000\000\000\000\000\134\003\131\000\145\000\000\000\000\000\135\000\000\000\146\000\000\000\136\000\000\000\000\006&\003\132\000\145\000\000\000\132\000\147\000\000\000\000\000\141\000\000\000\177\003\131\001E\000\000\000\000\000\000\000\000\000\147\000\000\000\000\001\031\000\145\004\163\003\132\000\000\001\022\000\000\001\023\000\000\000\197\000\177\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\000\000\179\000\132\001\031\000\177\004\206\000\141\000\151\001\022\000\000\001\023\000\000\000\197\000\149\000\134\000\000\000\000\000\178\000\000\000\135\000\146\000\179\000\000\000\136\000\000\000\149\000\000\000\151\000\000\000\178\003\164\000\146\000\000\000\179\000\000\000\000\000\000\001k\000\000\000\151\000\000\000\132\000\147\000\146\003\183\000\141\000\000\000\145\001\132\000\000\000\134\000\000\003\164\000\147\000\000\000\135\000\000\000\000\000\000\000\136\001\179\000\000\000\146\000\000\000\132\000\147\003\185\000\177\000\141\000\000\000\000\000\000\003p\000\000\000\000\003t\000\000\000\000\000\177\002\145\000\000\000\000\000\000\000\145\000\147\000\000\000\000\000\000\000\149\000\134\000\177\000\000\000\178\000\000\000\135\000\000\000\179\000\000\000\136\000\149\000\000\000\000\000\151\000\178\000\132\000\000\000\000\000\179\000\141\000\177\000\000\000\149\000\134\000\151\000\000\000\178\000\000\000\135\000\000\000\179\000\134\000\136\000\145\000\000\003u\000\151\000\146\000\000\003v\000\000\000\149\000\000\000\000\000\000\000\178\000\132\000\000\000\000\000\179\000\141\000\000\000\000\000\000\002\149\000\151\000\145\000\000\000\132\000\147\000\000\000\000\000\141\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\132\000\000\000\000\000\000\000\141\002\185\000\000\000\000\000\000\000\134\000\147\000\145\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\000\000\149\000\134\000\000\000\000\000\178\000\000\000\135\000\146\000\179\000\000\000\136\000\000\000\000\000\000\000\151\000\177\000\132\000\000\000\000\000\132\000\141\000\000\000\145\000\141\002\248\000\000\003\131\000\000\000\134\000\147\000\146\000\000\000\000\000\135\000\145\000\000\000\149\000\136\003\132\000\000\000\178\000\000\000\000\003p\000\179\000\000\003t\002\253\000\000\000\000\000\151\000\000\000\147\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\134\000\000\000\000\000\134\000\000\000\135\000\146\000\000\000\135\000\136\000\000\000\149\000\136\000\177\000\000\000\178\000\132\000\000\000\000\000\179\000\141\000\000\000\132\003\001\000\000\000\151\000\133\000\134\000\147\000\000\000\000\003u\000\000\000\145\000\149\003v\000\145\000\146\000\178\000\000\000\000\003\164\000\179\000\000\000\000\000\000\000\000\000\132\000\151\000\146\000\000\000\141\000\000\000\177\003\024\003\187\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\134\000\000\003?\000\000\000\000\000\135\000\134\000\147\000\000\000\136\000\149\000\135\000\146\000\000\000\178\000\136\000\000\000\000\000\179\000\000\000\177\000\132\000\000\000\000\000\151\000\133\000\000\000\000\000\000\003}\000\000\000\134\000\177\000\145\000\147\003p\000\135\000\000\003t\000\145\000\136\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\146\000\179\000\000\000\146\000\000\000\149\000\000\000\151\000\132\000\178\000\132\000\177\000\133\000\179\000\133\003\131\000\145\003\140\000\000\000\151\003\142\000\134\000\147\000\000\000\000\000\147\000\135\003\132\000\000\000\000\000\136\000\000\000\149\000\000\000\000\000\134\000\178\000\000\000\000\003u\000\179\000\000\000\000\003v\000\000\000\132\000\151\000\177\000\000\000\133\000\177\000\000\000\000\000\000\000\145\000\000\000\134\000\000\000\134\000\000\000\000\000\135\000\000\000\135\000\146\000\136\000\000\000\136\000\149\000\000\000\146\000\149\000\178\000\000\000\000\000\178\000\179\000\000\000\000\000\179\000\000\004\143\000\151\000\000\000\000\000\151\000\147\000\000\000\000\000\145\000\000\000\145\000\147\000\134\003\164\000\146\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\000\000\000\000\000\000\000\000\000\003\189\000\000\000\000\000\177\004\245\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\149\000\146\000\000\003\131\000\178\000\000\000\149\000\000\000\179\000\000\000\177\000\000\000\000\000\000\000\151\003\132\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\146\000\000\000\146\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\164\000\171\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147\003\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185"))
   
   let semantic_action =
     [|
@@ -1529,7 +1529,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_aexpr = 
-# 1767 "parser_cocci_menhir.mly"
+# 1780 "parser_cocci_menhir.mly"
       ( Ast0.set_arg_exp _1 )
 # 1535 "parser_cocci_menhir.ml"
          in
@@ -1557,7 +1557,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_aexpr = 
-# 1769 "parser_cocci_menhir.mly"
+# 1782 "parser_cocci_menhir.mly"
       ( let (nm,lenname,pure,clt) = _1 in
       let nm = P.clt2mcode nm clt in
       let lenname =
@@ -1587,7 +1587,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_aexpr = 
-# 1777 "parser_cocci_menhir.mly"
+# 1790 "parser_cocci_menhir.mly"
       ( Ast0.set_arg_exp(Ast0.wrap(Ast0.TypeExp(_1))) )
 # 1593 "parser_cocci_menhir.ml"
          in
@@ -1609,7 +1609,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 1821 "parser_cocci_menhir.mly"
+# 1834 "parser_cocci_menhir.mly"
             ( Ast.WhenAny )
 # 1615 "parser_cocci_menhir.ml"
          in
@@ -1631,7 +1631,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 1822 "parser_cocci_menhir.mly"
+# 1835 "parser_cocci_menhir.mly"
             ( Ast.WhenStrict )
 # 1637 "parser_cocci_menhir.ml"
          in
@@ -1653,7 +1653,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 1823 "parser_cocci_menhir.mly"
+# 1836 "parser_cocci_menhir.mly"
             ( Ast.WhenForall )
 # 1659 "parser_cocci_menhir.ml"
          in
@@ -1675,7 +1675,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 1824 "parser_cocci_menhir.mly"
+# 1837 "parser_cocci_menhir.mly"
             ( Ast.WhenExists )
 # 1681 "parser_cocci_menhir.ml"
          in
@@ -1699,7 +1699,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1264 "parser_cocci_menhir.mly"
+# 1241 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 1705 "parser_cocci_menhir.ml"
          in
@@ -1739,7 +1739,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1266 "parser_cocci_menhir.mly"
+# 1243 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 1745 "parser_cocci_menhir.ml"
          in
@@ -1779,7 +1779,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1268 "parser_cocci_menhir.mly"
+# 1245 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 1785 "parser_cocci_menhir.ml"
          in
@@ -1819,7 +1819,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1270 "parser_cocci_menhir.mly"
+# 1247 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 1825 "parser_cocci_menhir.ml"
          in
@@ -1859,7 +1859,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1272 "parser_cocci_menhir.mly"
+# 1249 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 1865 "parser_cocci_menhir.ml"
          in
@@ -1899,7 +1899,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1274 "parser_cocci_menhir.mly"
+# 1251 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 1905 "parser_cocci_menhir.ml"
          in
@@ -1939,7 +1939,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1276 "parser_cocci_menhir.mly"
+# 1253 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 1945 "parser_cocci_menhir.ml"
          in
@@ -1979,7 +1979,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1278 "parser_cocci_menhir.mly"
+# 1255 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 1985 "parser_cocci_menhir.ml"
          in
@@ -2019,7 +2019,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1280 "parser_cocci_menhir.mly"
+# 1257 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 2025 "parser_cocci_menhir.ml"
          in
@@ -2059,7 +2059,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1282 "parser_cocci_menhir.mly"
+# 1259 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 2065 "parser_cocci_menhir.ml"
          in
@@ -2099,7 +2099,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1284 "parser_cocci_menhir.mly"
+# 1261 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 2105 "parser_cocci_menhir.ml"
          in
@@ -2139,7 +2139,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1286 "parser_cocci_menhir.mly"
+# 1263 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 2145 "parser_cocci_menhir.ml"
          in
@@ -2179,7 +2179,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1288 "parser_cocci_menhir.mly"
+# 1265 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 2185 "parser_cocci_menhir.ml"
          in
@@ -2219,7 +2219,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1290 "parser_cocci_menhir.mly"
+# 1267 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 2225 "parser_cocci_menhir.ml"
          in
@@ -2243,7 +2243,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1264 "parser_cocci_menhir.mly"
+# 1241 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 2249 "parser_cocci_menhir.ml"
          in
@@ -2283,7 +2283,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1266 "parser_cocci_menhir.mly"
+# 1243 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 2289 "parser_cocci_menhir.ml"
          in
@@ -2323,7 +2323,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1268 "parser_cocci_menhir.mly"
+# 1245 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2329 "parser_cocci_menhir.ml"
          in
@@ -2363,7 +2363,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1270 "parser_cocci_menhir.mly"
+# 1247 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 2369 "parser_cocci_menhir.ml"
          in
@@ -2403,7 +2403,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1272 "parser_cocci_menhir.mly"
+# 1249 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 2409 "parser_cocci_menhir.ml"
          in
@@ -2443,7 +2443,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1274 "parser_cocci_menhir.mly"
+# 1251 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2449 "parser_cocci_menhir.ml"
          in
@@ -2483,7 +2483,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1276 "parser_cocci_menhir.mly"
+# 1253 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 2489 "parser_cocci_menhir.ml"
          in
@@ -2523,7 +2523,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1278 "parser_cocci_menhir.mly"
+# 1255 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 2529 "parser_cocci_menhir.ml"
          in
@@ -2563,7 +2563,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1280 "parser_cocci_menhir.mly"
+# 1257 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 2569 "parser_cocci_menhir.ml"
          in
@@ -2603,7 +2603,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1282 "parser_cocci_menhir.mly"
+# 1259 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 2609 "parser_cocci_menhir.ml"
          in
@@ -2643,7 +2643,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1284 "parser_cocci_menhir.mly"
+# 1261 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 2649 "parser_cocci_menhir.ml"
          in
@@ -2683,7 +2683,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1286 "parser_cocci_menhir.mly"
+# 1263 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 2689 "parser_cocci_menhir.ml"
          in
@@ -2723,7 +2723,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1288 "parser_cocci_menhir.mly"
+# 1265 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 2729 "parser_cocci_menhir.ml"
          in
@@ -2763,7 +2763,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1290 "parser_cocci_menhir.mly"
+# 1267 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 2769 "parser_cocci_menhir.ml"
          in
@@ -2787,7 +2787,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1264 "parser_cocci_menhir.mly"
+# 1241 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 2793 "parser_cocci_menhir.ml"
          in
@@ -2827,7 +2827,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1266 "parser_cocci_menhir.mly"
+# 1243 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 2833 "parser_cocci_menhir.ml"
          in
@@ -2867,7 +2867,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1268 "parser_cocci_menhir.mly"
+# 1245 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2873 "parser_cocci_menhir.ml"
          in
@@ -2907,7 +2907,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1270 "parser_cocci_menhir.mly"
+# 1247 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 2913 "parser_cocci_menhir.ml"
          in
@@ -2947,7 +2947,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1272 "parser_cocci_menhir.mly"
+# 1249 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 2953 "parser_cocci_menhir.ml"
          in
@@ -2987,7 +2987,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1274 "parser_cocci_menhir.mly"
+# 1251 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2993 "parser_cocci_menhir.ml"
          in
@@ -3027,7 +3027,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1276 "parser_cocci_menhir.mly"
+# 1253 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 3033 "parser_cocci_menhir.ml"
          in
@@ -3067,7 +3067,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1278 "parser_cocci_menhir.mly"
+# 1255 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 3073 "parser_cocci_menhir.ml"
          in
@@ -3107,7 +3107,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1280 "parser_cocci_menhir.mly"
+# 1257 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 3113 "parser_cocci_menhir.ml"
          in
@@ -3147,7 +3147,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1282 "parser_cocci_menhir.mly"
+# 1259 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 3153 "parser_cocci_menhir.ml"
          in
@@ -3187,7 +3187,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1284 "parser_cocci_menhir.mly"
+# 1261 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 3193 "parser_cocci_menhir.ml"
          in
@@ -3227,7 +3227,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1286 "parser_cocci_menhir.mly"
+# 1263 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 3233 "parser_cocci_menhir.ml"
          in
@@ -3267,7 +3267,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1288 "parser_cocci_menhir.mly"
+# 1265 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 3273 "parser_cocci_menhir.ml"
          in
@@ -3307,7 +3307,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1290 "parser_cocci_menhir.mly"
+# 1267 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 3313 "parser_cocci_menhir.ml"
          in
@@ -3331,7 +3331,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1264 "parser_cocci_menhir.mly"
+# 1241 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 3337 "parser_cocci_menhir.ml"
          in
@@ -3371,7 +3371,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1266 "parser_cocci_menhir.mly"
+# 1243 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 3377 "parser_cocci_menhir.ml"
          in
@@ -3411,7 +3411,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1268 "parser_cocci_menhir.mly"
+# 1245 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 3417 "parser_cocci_menhir.ml"
          in
@@ -3451,7 +3451,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1270 "parser_cocci_menhir.mly"
+# 1247 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 3457 "parser_cocci_menhir.ml"
          in
@@ -3491,7 +3491,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1272 "parser_cocci_menhir.mly"
+# 1249 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 3497 "parser_cocci_menhir.ml"
          in
@@ -3531,7 +3531,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1274 "parser_cocci_menhir.mly"
+# 1251 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 3537 "parser_cocci_menhir.ml"
          in
@@ -3571,7 +3571,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1276 "parser_cocci_menhir.mly"
+# 1253 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 3577 "parser_cocci_menhir.ml"
          in
@@ -3611,7 +3611,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1278 "parser_cocci_menhir.mly"
+# 1255 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 3617 "parser_cocci_menhir.ml"
          in
@@ -3651,7 +3651,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1280 "parser_cocci_menhir.mly"
+# 1257 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 3657 "parser_cocci_menhir.ml"
          in
@@ -3691,7 +3691,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1282 "parser_cocci_menhir.mly"
+# 1259 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 3697 "parser_cocci_menhir.ml"
          in
@@ -3731,7 +3731,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1284 "parser_cocci_menhir.mly"
+# 1261 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 3737 "parser_cocci_menhir.ml"
          in
@@ -3771,7 +3771,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1286 "parser_cocci_menhir.mly"
+# 1263 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 3777 "parser_cocci_menhir.ml"
          in
@@ -3811,7 +3811,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1288 "parser_cocci_menhir.mly"
+# 1265 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 3817 "parser_cocci_menhir.ml"
          in
@@ -3851,7 +3851,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1290 "parser_cocci_menhir.mly"
+# 1267 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 3857 "parser_cocci_menhir.ml"
          in
@@ -3978,7 +3978,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_array_dec = 
-# 1071 "parser_cocci_menhir.mly"
+# 1048 "parser_cocci_menhir.mly"
                                            ( (l,i,r) )
 # 3984 "parser_cocci_menhir.ml"
          in
@@ -4002,7 +4002,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_eexpr_dot_expressions_ = 
-# 1236 "parser_cocci_menhir.mly"
+# 1213 "parser_cocci_menhir.mly"
                                            ( _1 )
 # 4008 "parser_cocci_menhir.ml"
          in
@@ -4042,7 +4042,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_dot_expressions_ = 
-# 1238 "parser_cocci_menhir.mly"
+# 1215 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -4084,7 +4084,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_dot_expressions_ = 
-# 1242 "parser_cocci_menhir.mly"
+# 1219 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -4110,7 +4110,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_eexpr_nest_expressions_ = 
-# 1236 "parser_cocci_menhir.mly"
+# 1213 "parser_cocci_menhir.mly"
                                            ( _1 )
 # 4116 "parser_cocci_menhir.ml"
          in
@@ -4150,7 +4150,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_nest_expressions_ = 
-# 1238 "parser_cocci_menhir.mly"
+# 1215 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -4192,7 +4192,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_nest_expressions_ = 
-# 1242 "parser_cocci_menhir.mly"
+# 1219 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -4218,7 +4218,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_expr_invalid_ = 
-# 1236 "parser_cocci_menhir.mly"
+# 1213 "parser_cocci_menhir.mly"
                                            ( _1 )
 # 4224 "parser_cocci_menhir.ml"
          in
@@ -4258,7 +4258,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_expr_invalid_ = 
-# 1238 "parser_cocci_menhir.mly"
+# 1215 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -4300,7 +4300,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_expr_invalid_ = 
-# 1242 "parser_cocci_menhir.mly"
+# 1219 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -4326,7 +4326,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_bis = 
-# 1247 "parser_cocci_menhir.mly"
+# 1224 "parser_cocci_menhir.mly"
                                                             ( _1 )
 # 4332 "parser_cocci_menhir.ml"
          in
@@ -4366,7 +4366,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_bis = 
-# 1249 "parser_cocci_menhir.mly"
+# 1226 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -4408,7 +4408,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_bis = 
-# 1253 "parser_cocci_menhir.mly"
+# 1230 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -4434,7 +4434,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_basic_expr_eexpr_dot_expressions_ = 
-# 1233 "parser_cocci_menhir.mly"
+# 1210 "parser_cocci_menhir.mly"
                                                              ( _1 )
 # 4440 "parser_cocci_menhir.ml"
          in
@@ -4458,7 +4458,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_basic_expr_eexpr_nest_expressions_ = 
-# 1233 "parser_cocci_menhir.mly"
+# 1210 "parser_cocci_menhir.mly"
                                                              ( _1 )
 # 4464 "parser_cocci_menhir.ml"
          in
@@ -4482,7 +4482,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_basic_expr_expr_invalid_ = 
-# 1233 "parser_cocci_menhir.mly"
+# 1210 "parser_cocci_menhir.mly"
                                                              ( _1 )
 # 4488 "parser_cocci_menhir.ml"
          in
@@ -4526,7 +4526,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_case_line = 
-# 943 "parser_cocci_menhir.mly"
+# 920 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Default(P.clt2mcode "default" _1,P.clt2mcode ":" _2,_3)) )
 # 4532 "parser_cocci_menhir.ml"
          in
@@ -4576,7 +4576,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_case_line = 
-# 945 "parser_cocci_menhir.mly"
+# 922 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Case(P.clt2mcode "case" _1,_2,P.clt2mcode ":" _3,_4)) )
 # 4582 "parser_cocci_menhir.ml"
          in
@@ -4600,7 +4600,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_eexpr_dot_expressions_ = 
-# 1293 "parser_cocci_menhir.mly"
+# 1270 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 4606 "parser_cocci_menhir.ml"
          in
@@ -4650,7 +4650,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_eexpr_dot_expressions_ = 
-# 1295 "parser_cocci_menhir.mly"
+# 1272 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 4657 "parser_cocci_menhir.ml"
@@ -4675,7 +4675,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_eexpr_invalid_ = 
-# 1293 "parser_cocci_menhir.mly"
+# 1270 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 4681 "parser_cocci_menhir.ml"
          in
@@ -4725,7 +4725,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_eexpr_invalid_ = 
-# 1295 "parser_cocci_menhir.mly"
+# 1272 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 4732 "parser_cocci_menhir.ml"
@@ -4750,7 +4750,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_eexpr_nest_expressions_ = 
-# 1293 "parser_cocci_menhir.mly"
+# 1270 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 4756 "parser_cocci_menhir.ml"
          in
@@ -4800,7 +4800,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_eexpr_nest_expressions_ = 
-# 1295 "parser_cocci_menhir.mly"
+# 1272 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 4807 "parser_cocci_menhir.ml"
@@ -4825,7 +4825,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_expr_invalid_ = 
-# 1293 "parser_cocci_menhir.mly"
+# 1270 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 4831 "parser_cocci_menhir.ml"
          in
@@ -4875,7 +4875,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_expr_invalid_ = 
-# 1295 "parser_cocci_menhir.mly"
+# 1272 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 4882 "parser_cocci_menhir.ml"
@@ -4942,7 +4942,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_comma_decls_TEllipsis_decl_ = 
-# 1568 "parser_cocci_menhir.mly"
+# 1575 "parser_cocci_menhir.mly"
     ( function dot_builder ->
       [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1));
        dot_builder _2] )
@@ -4978,7 +4978,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_comma_decls_TEllipsis_decl_ = 
-# 1572 "parser_cocci_menhir.mly"
+# 1579 "parser_cocci_menhir.mly"
     ( function dot_builder ->
       [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); _2] )
 # 4985 "parser_cocci_menhir.ml"
@@ -5017,7 +5017,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_comma_decls_TEllipsis_name_opt_decl_ = 
-# 1568 "parser_cocci_menhir.mly"
+# 1575 "parser_cocci_menhir.mly"
     ( function dot_builder ->
       [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1));
        dot_builder _2] )
@@ -5053,7 +5053,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_comma_decls_TEllipsis_name_opt_decl_ = 
-# 1572 "parser_cocci_menhir.mly"
+# 1579 "parser_cocci_menhir.mly"
     ( function dot_builder ->
       [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); _2] )
 # 5060 "parser_cocci_menhir.ml"
@@ -5071,7 +5071,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = 
-# 1124 "parser_cocci_menhir.mly"
+# 1101 "parser_cocci_menhir.mly"
               ( [] )
 # 5077 "parser_cocci_menhir.ml"
          in
@@ -5101,7 +5101,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = 
-# 1126 "parser_cocci_menhir.mly"
+# 1103 "parser_cocci_menhir.mly"
       ( (function dot_builder -> [dot_builder d])::r )
 # 5107 "parser_cocci_menhir.ml"
          in
@@ -5141,7 +5141,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = 
-# 1128 "parser_cocci_menhir.mly"
+# 1105 "parser_cocci_menhir.mly"
     ( (function dot_builder -> [i; Ast0.wrap(Ast0.IComma(P.clt2mcode "," c))])::
       r )
 # 5148 "parser_cocci_menhir.ml"
@@ -5159,7 +5159,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_comma_initializers2_edots_when_TEllipsis_initialize__ = 
-# 1132 "parser_cocci_menhir.mly"
+# 1109 "parser_cocci_menhir.mly"
               ( [] )
 # 5165 "parser_cocci_menhir.ml"
          in
@@ -5199,7 +5199,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_comma_initializers2_edots_when_TEllipsis_initialize__ = 
-# 1134 "parser_cocci_menhir.mly"
+# 1111 "parser_cocci_menhir.mly"
     ( (function dot_builder -> [i; Ast0.wrap(Ast0.IComma(P.clt2mcode "," c))])::
       r )
 # 5206 "parser_cocci_menhir.ml"
@@ -5224,7 +5224,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_any_strict_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 5230 "parser_cocci_menhir.ml"
          in
@@ -5248,7 +5248,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_ctype_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 5254 "parser_cocci_menhir.ml"
          in
@@ -5272,7 +5272,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_d_ident_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 5278 "parser_cocci_menhir.ml"
          in
@@ -5283,30 +5283,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos;
           MenhirLib.EngineTypes.next = _menhir_stack;
           });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_separated_nonempty_list_TComma_dexpr_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_comma_list_dexpr_ = 
-# 1799 "parser_cocci_menhir.mly"
-                                       ( _1 )
-# 5302 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
@@ -5320,9 +5296,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_ident_or_const_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5326 "parser_cocci_menhir.ml"
+# 5302 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5344,9 +5320,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_meta_ident_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5350 "parser_cocci_menhir.ml"
+# 5326 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5368,9 +5344,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5374 "parser_cocci_menhir.ml"
+# 5350 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5392,9 +5368,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5398 "parser_cocci_menhir.ml"
+# 5374 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5416,9 +5392,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5422 "parser_cocci_menhir.ml"
+# 5398 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5440,9 +5416,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5446 "parser_cocci_menhir.ml"
+# 5422 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5464,9 +5440,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5470 "parser_cocci_menhir.ml"
+# 5446 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5488,9 +5464,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5494 "parser_cocci_menhir.ml"
+# 5470 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5512,9 +5488,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = 
-# 1799 "parser_cocci_menhir.mly"
+# 1812 "parser_cocci_menhir.mly"
                                        ( _1 )
-# 5518 "parser_cocci_menhir.ml"
+# 5494 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5536,9 +5512,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cond_expr_eexpr_dot_expressions_ = 
-# 1258 "parser_cocci_menhir.mly"
+# 1235 "parser_cocci_menhir.mly"
                                              ( _1 )
-# 5542 "parser_cocci_menhir.ml"
+# 5518 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5580,22 +5556,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let dd : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 5584 "parser_cocci_menhir.ml"
+# 5560 "parser_cocci_menhir.ml"
         ) = Obj.magic dd in
         let t : 'tv_option_eexpr_ = Obj.magic t in
         let w : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 5590 "parser_cocci_menhir.ml"
+# 5566 "parser_cocci_menhir.ml"
         ) = Obj.magic w in
         let l : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic l in
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_cond_expr_eexpr_dot_expressions_ = 
-# 1260 "parser_cocci_menhir.mly"
+# 1237 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t,
                                 P.clt2mcode ":" dd, r)) )
-# 5599 "parser_cocci_menhir.ml"
+# 5575 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5617,9 +5593,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cond_expr_eexpr_nest_expressions_ = 
-# 1258 "parser_cocci_menhir.mly"
+# 1235 "parser_cocci_menhir.mly"
                                              ( _1 )
-# 5623 "parser_cocci_menhir.ml"
+# 5599 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5661,22 +5637,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let dd : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 5665 "parser_cocci_menhir.ml"
+# 5641 "parser_cocci_menhir.ml"
         ) = Obj.magic dd in
         let t : 'tv_option_eexpr_ = Obj.magic t in
         let w : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 5671 "parser_cocci_menhir.ml"
+# 5647 "parser_cocci_menhir.ml"
         ) = Obj.magic w in
         let l : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic l in
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_cond_expr_eexpr_nest_expressions_ = 
-# 1260 "parser_cocci_menhir.mly"
+# 1237 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t,
                                 P.clt2mcode ":" dd, r)) )
-# 5680 "parser_cocci_menhir.ml"
+# 5656 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5698,9 +5674,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cond_expr_expr_invalid_ = 
-# 1258 "parser_cocci_menhir.mly"
+# 1235 "parser_cocci_menhir.mly"
                                              ( _1 )
-# 5704 "parser_cocci_menhir.ml"
+# 5680 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5742,22 +5718,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let dd : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 5746 "parser_cocci_menhir.ml"
+# 5722 "parser_cocci_menhir.ml"
         ) = Obj.magic dd in
         let t : 'tv_option_eexpr_ = Obj.magic t in
         let w : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 5752 "parser_cocci_menhir.ml"
+# 5728 "parser_cocci_menhir.ml"
         ) = Obj.magic w in
         let l : 'tv_arith_expr_expr_invalid_ = Obj.magic l in
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_cond_expr_expr_invalid_ = 
-# 1260 "parser_cocci_menhir.mly"
+# 1237 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t,
                                 P.clt2mcode ":" dd, r)) )
-# 5761 "parser_cocci_menhir.ml"
+# 5737 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5778,14 +5754,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 54 "parser_cocci_menhir.mly"
       (Data.clt)
-# 5782 "parser_cocci_menhir.ml"
+# 5758 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_const_vol = 
-# 852 "parser_cocci_menhir.mly"
+# 829 "parser_cocci_menhir.mly"
                    ( P.clt2mcode Ast.Const _1 )
-# 5789 "parser_cocci_menhir.ml"
+# 5765 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5806,14 +5782,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 54 "parser_cocci_menhir.mly"
       (Data.clt)
-# 5810 "parser_cocci_menhir.ml"
+# 5786 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_const_vol = 
-# 853 "parser_cocci_menhir.mly"
+# 830 "parser_cocci_menhir.mly"
                    ( P.clt2mcode Ast.Volatile _1 )
-# 5817 "parser_cocci_menhir.ml"
+# 5793 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5828,9 +5804,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_continue_struct_decl_list = 
-# 549 "parser_cocci_menhir.mly"
+# 583 "parser_cocci_menhir.mly"
                                      ( [] )
-# 5834 "parser_cocci_menhir.ml"
+# 5810 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5858,9 +5834,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_struct_decl_list = 
-# 550 "parser_cocci_menhir.mly"
+# 584 "parser_cocci_menhir.mly"
                                      ( _1@_2 )
-# 5864 "parser_cocci_menhir.ml"
+# 5840 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5882,9 +5858,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_struct_decl_list = 
-# 551 "parser_cocci_menhir.mly"
+# 585 "parser_cocci_menhir.mly"
                                      ( _1 )
-# 5888 "parser_cocci_menhir.ml"
+# 5864 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5900,28 +5876,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
         let m : 'tv_list_TMul_ = Obj.magic m in
-        let ty : 'tv_generic_ctype = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 5896 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 5901 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype = let cv =
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 5913 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 5919 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           
 # 39 "standard.mly"
     ( None )
-# 5919 "parser_cocci_menhir.ml"
+# 5926 "parser_cocci_menhir.ml"
           
         in
         
-# 555 "parser_cocci_menhir.mly"
-  ( P.pointerify (P.make_cv cv ty) m )
-# 5925 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 5932 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5937,35 +5944,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x0;
-              MenhirLib.EngineTypes.startp = _startpos_x0_;
-              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
         let m : 'tv_list_TMul_ = Obj.magic m in
-        let ty : 'tv_generic_ctype = Obj.magic ty in
-        let x0 : 'tv_const_vol = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 5964 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 5969 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype = let cv =
-          let x = x0 in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 5981 "parser_cocci_menhir.ml"
+            
+          in
           
-# 41 "standard.mly"
-    ( Some x )
-# 5963 "parser_cocci_menhir.ml"
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 5987 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 5994 "parser_cocci_menhir.ml"
           
         in
         
-# 555 "parser_cocci_menhir.mly"
-  ( P.pointerify (P.make_cv cv ty) m )
-# 5969 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6000 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5981,34 +6012,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let m : 'tv_nonempty_list_TMul_ = Obj.magic m in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 5996 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let _startpos = _startpos_t_ in
+# 6032 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6037 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype = let cv =
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 6049 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 6055 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           
 # 39 "standard.mly"
     ( None )
-# 6004 "parser_cocci_menhir.ml"
+# 6062 "parser_cocci_menhir.ml"
           
         in
         
-# 557 "parser_cocci_menhir.mly"
-         ( let ty =
-            Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          P.pointerify (P.make_cv cv ty) m )
-# 6012 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6068 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6024,42 +6080,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x0;
-              MenhirLib.EngineTypes.startp = _startpos_x0_;
-              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let m : 'tv_nonempty_list_TMul_ = Obj.magic m in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 6100 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
       (Data.clt)
-# 6044 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let x0 : 'tv_const_vol = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
+# 6105 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype = let cv =
-          let x = x0 in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 6118 "parser_cocci_menhir.ml"
+            
+          in
           
-# 41 "standard.mly"
-    ( Some x )
-# 6054 "parser_cocci_menhir.ml"
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 6124 "parser_cocci_menhir.ml"
           
         in
-        
-# 557 "parser_cocci_menhir.mly"
-         ( let ty =
-            Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          P.pointerify (P.make_cv cv ty) m )
-# 6062 "parser_cocci_menhir.ml"
-         in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6131 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6137 "parser_cocci_menhir.ml"
+         in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
           MenhirLib.EngineTypes.semv = Obj.repr _v;
@@ -6070,41 +6145,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = rp;
-          MenhirLib.EngineTypes.startp = _startpos_rp_;
-          MenhirLib.EngineTypes.endp = _endpos_rp_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = lp;
-              MenhirLib.EngineTypes.startp = _startpos_lp_;
-              MenhirLib.EngineTypes.endp = _endpos_lp_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
               };
             };
           } = _menhir_stack in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6093 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6099 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let _startpos = _startpos_lp_ in
-        let _endpos = _endpos_rp_ in
-        let _v : 'tv_ctype = 
-# 562 "parser_cocci_menhir.mly"
-    ( let (mids,code) = t in
-      Ast0.wrap
-       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
-# 6108 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 6178 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 6183 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6188 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
+        let _startpos = _startpos_r1_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 6207 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 6213 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6220 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6226 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6120,28 +6238,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
         let m : 'tv_list_TMul_ = Obj.magic m in
-        let ty : 'tv_generic_ctype_full = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6258 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6263 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype_full = let cv =
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 6275 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 6281 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           
 # 39 "standard.mly"
     ( None )
-# 6139 "parser_cocci_menhir.ml"
+# 6288 "parser_cocci_menhir.ml"
           
         in
         
-# 568 "parser_cocci_menhir.mly"
-  ( P.pointerify (P.make_cv cv ty) m )
-# 6145 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6294 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6157,35 +6306,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x0;
-              MenhirLib.EngineTypes.startp = _startpos_x0_;
-              MenhirLib.EngineTypes.endp = _endpos_x0_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
         let m : 'tv_list_TMul_ = Obj.magic m in
-        let ty : 'tv_generic_ctype_full = Obj.magic ty in
-        let x0 : 'tv_const_vol = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6331 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6336 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6341 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype_full = let cv =
-          let x = x0 in
+        let _v : 'tv_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 6358 "parser_cocci_menhir.ml"
+            
+          in
           
-# 41 "standard.mly"
-    ( Some x )
-# 6183 "parser_cocci_menhir.ml"
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 6364 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6371 "parser_cocci_menhir.ml"
           
         in
         
-# 568 "parser_cocci_menhir.mly"
-  ( P.pointerify (P.make_cv cv ty) m )
-# 6189 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6377 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6201,34 +6389,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let m : 'tv_nonempty_list_TMul_ = Obj.magic m in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 6216 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let _startpos = _startpos_t_ in
+# 6409 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6414 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype_full = let cv =
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 6426 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 6432 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           
 # 39 "standard.mly"
     ( None )
-# 6224 "parser_cocci_menhir.ml"
+# 6439 "parser_cocci_menhir.ml"
           
         in
         
-# 570 "parser_cocci_menhir.mly"
-         ( let ty =
-            Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          P.pointerify (P.make_cv cv ty) m )
-# 6232 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6445 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6244,41 +6457,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos_m_;
           MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x0;
-              MenhirLib.EngineTypes.startp = _startpos_x0_;
-              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let m : 'tv_nonempty_list_TMul_ = Obj.magic m in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 6264 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let x0 : 'tv_const_vol = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
+# 6477 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6482 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
         let _endpos = _endpos_m_ in
-        let _v : 'tv_ctype_full = let cv =
-          let x = x0 in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 6494 "parser_cocci_menhir.ml"
+            
+          in
           
-# 41 "standard.mly"
-    ( Some x )
-# 6274 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 6500 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6507 "parser_cocci_menhir.ml"
           
         in
         
-# 570 "parser_cocci_menhir.mly"
-         ( let ty =
-            Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          P.pointerify (P.make_cv cv ty) m )
-# 6282 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6513 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6290,41 +6521,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = rp;
-          MenhirLib.EngineTypes.startp = _startpos_rp_;
-          MenhirLib.EngineTypes.endp = _endpos_rp_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = lp;
-              MenhirLib.EngineTypes.startp = _startpos_lp_;
-              MenhirLib.EngineTypes.endp = _endpos_lp_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6313 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6319 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let _startpos = _startpos_lp_ in
-        let _endpos = _endpos_rp_ in
-        let _v : 'tv_ctype_full = 
-# 575 "parser_cocci_menhir.mly"
-    ( let (mids,code) = t in
-      Ast0.wrap
-       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
-# 6328 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6545 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6550 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 6562 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 6568 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6575 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6581 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6336,32 +6589,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_list_array_dec_ = Obj.magic _2 in
-        let _1 : 'tv_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_d_ident = 
-# 1062 "parser_cocci_menhir.mly"
-      ( (_1,
-        function t ->
-          List.fold_right
-            (function (l,i,r) ->
-              function rest ->
-                Ast0.wrap
-                  (Ast0.Array(rest,P.clt2mcode "[" l,i,P.clt2mcode "]" r)))
-            _2 t) )
-# 6365 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 6613 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6618 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 6631 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 6637 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6644 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6650 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6373,25 +6658,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let i : 'tv_ident = Obj.magic i in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_decl = 
-# 822 "parser_cocci_menhir.mly"
- ( Ast0.wrap(Ast0.Param(t, Some i)) )
-# 6395 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 6691 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 6696 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6701 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
+        let _startpos = _startpos_r1_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 6720 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 6726 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6733 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6739 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6403,86 +6747,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = rp1;
-          MenhirLib.EngineTypes.startp = _startpos_rp1_;
-          MenhirLib.EngineTypes.endp = _endpos_rp1_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = lp1;
-              MenhirLib.EngineTypes.startp = _startpos_lp1_;
-              MenhirLib.EngineTypes.endp = _endpos_lp1_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = rp;
-                MenhirLib.EngineTypes.startp = _startpos_rp_;
-                MenhirLib.EngineTypes.endp = _endpos_rp_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = s;
-                    MenhirLib.EngineTypes.startp = _startpos_s_;
-                    MenhirLib.EngineTypes.endp = _endpos_s_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = lp;
-                      MenhirLib.EngineTypes.startp = _startpos_lp_;
-                      MenhirLib.EngineTypes.endp = _endpos_lp_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.state = _menhir_s;
-                        MenhirLib.EngineTypes.semv = t;
-                        MenhirLib.EngineTypes.startp = _startpos_t_;
-                        MenhirLib.EngineTypes.endp = _endpos_t_;
-                        MenhirLib.EngineTypes.next = _menhir_stack;
-                        };
-                      };
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6451 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6457 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6462 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let i : 'tv_ident = Obj.magic i in
-        let s : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6468 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6473 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_rp1_ in
-        let _v : 'tv_decl = 
-# 825 "parser_cocci_menhir.mly"
-        ( let fnptr =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp,
-               P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in
-       Ast0.wrap(Ast0.Param(fnptr, Some i)) )
-# 6486 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6771 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6776 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 6788 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 6794 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6801 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6807 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6494,25 +6815,78 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 6507 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_decl = 
-# 832 "parser_cocci_menhir.mly"
- ( let ty =
-         Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          Ast0.wrap(Ast0.VoidParam(ty)) )
-# 6516 "parser_cocci_menhir.ml"
+# 6844 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6849 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6854 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 6871 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 6877 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6884 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6890 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6524,24 +6898,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 6537 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl = 
-# 836 "parser_cocci_menhir.mly"
- ( let (nm,pure,clt) = _1 in
-       Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) )
-# 6545 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6917 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 6928 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 6934 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6941 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 6947 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6553,23 +6955,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 59 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 6566 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_ident = 
-# 1517 "parser_cocci_menhir.mly"
-         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
-# 6573 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 6974 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 6985 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 6991 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 6998 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7004 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6581,24 +7012,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 62 "parser_cocci_menhir.mly"
-       (Parse_aux.idinfo)
-# 6594 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_ident = 
-# 1519 "parser_cocci_menhir.mly"
-         ( let (nm,constraints,pure,clt) = _1 in
-         Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
-# 6602 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7031 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 7042 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 7048 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7055 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7061 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6609,13 +7068,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_decl_list_decl_ = 
-# 1539 "parser_cocci_menhir.mly"
-              ( Ast0.wrap(Ast0.DOTS([])) )
-# 6619 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 7088 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let _startpos = _startpos_p00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 7100 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 7106 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7113 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7119 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6627,23 +7127,73 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_decl_list_start_decl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_list_decl_ = 
-# 1541 "parser_cocci_menhir.mly"
-     (let circle x =
-       match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in
-     if List.exists circle _1
-     then Ast0.wrap(Ast0.CIRCLES(_1))
-     else Ast0.wrap(Ast0.DOTS(_1)) )
-# 6647 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 7155 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 7160 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let _startpos = _startpos_r00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 7178 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 7184 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7191 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7197 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6654,13 +7204,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_decl_list_name_opt_decl_ = 
-# 1539 "parser_cocci_menhir.mly"
-              ( Ast0.wrap(Ast0.DOTS([])) )
-# 6664 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7224 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 7235 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 7241 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7248 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7254 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6672,23 +7262,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_list_name_opt_decl_ = 
-# 1541 "parser_cocci_menhir.mly"
-     (let circle x =
-       match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in
-     if List.exists circle _1
-     then Ast0.wrap(Ast0.CIRCLES(_1))
-     else Ast0.wrap(Ast0.DOTS(_1)) )
-# 6692 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7286 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7291 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let _startpos = _startpos_ty100_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 7307 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 7313 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7320 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7326 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6700,19 +7334,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_list_start_decl_ = 
-# 1548 "parser_cocci_menhir.mly"
-                 ( [_1] )
-# 6716 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7353 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 495 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) )
+# 7364 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7370 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7377 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7383 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6724,35 +7391,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _3 : 'tv_decl_list_start_decl_ = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6748 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_decl_list_start_decl_ = 
-# 1550 "parser_cocci_menhir.mly"
-    ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 )
-# 6756 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7410 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 497 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) )
+# 7421 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7427 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7434 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7440 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6764,30 +7448,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic _2 in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6783 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_decl_list_start_decl_ = 
-# 1552 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1))::
-      (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) )
-# 6791 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7467 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 499 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) )
+# 7478 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7484 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7491 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7497 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6799,19 +7505,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_list_start_name_opt_decl_ = 
-# 1548 "parser_cocci_menhir.mly"
-                 ( [_1] )
-# 6815 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 7530 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 501 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) )
+# 7543 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7549 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7556 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7562 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6823,35 +7570,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 6847 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_decl_list_start_name_opt_decl_ = 
-# 1550 "parser_cocci_menhir.mly"
-    ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 )
-# 6855 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 503 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) )
+# 7604 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7610 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7617 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7623 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6863,30 +7631,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic _2 in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 6882 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_decl_list_start_name_opt_decl_ = 
-# 1552 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1))::
-      (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) )
-# 6890 "parser_cocci_menhir.ml"
+# 7665 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 7671 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            let i =
+              
+# 39 "standard.mly"
+    ( None )
+# 7690 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 7700 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7706 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7713 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7719 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6898,24 +7727,100 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 6911 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_statement = 
-# 1140 "parser_cocci_menhir.mly"
-      ( let (nm,pure,clt) = _1 in
-      [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] )
-# 6919 "parser_cocci_menhir.ml"
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = x000;
+                  MenhirLib.EngineTypes.startp = _startpos_x000_;
+                  MenhirLib.EngineTypes.endp = _endpos_x000_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = s00;
+                    MenhirLib.EngineTypes.startp = _startpos_s00_;
+                    MenhirLib.EngineTypes.endp = _endpos_s00_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 7766 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 7772 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let x000 : 'tv_ident = Obj.magic x000 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let x00 = x000 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let x0 = x00 in
+            let s = s0 in
+            let i =
+              let x = x0 in
+              
+# 41 "standard.mly"
+    ( Some x )
+# 7795 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 7805 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7811 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7818 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7824 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6927,23 +7832,86 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_decl_var = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_statement = 
-# 1143 "parser_cocci_menhir.mly"
-      ( List.map
-         (function x ->
-           Ast0.wrap
-             (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x)))
-         _1 )
-# 6947 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 7866 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 7872 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 7877 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            
+# 512 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = s in
+    let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
+    Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) )
+# 7896 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7902 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7909 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7915 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6955,19 +7923,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_statement = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_statement = 
-# 1148 "parser_cocci_menhir.mly"
-              ( [_1] )
-# 6971 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 7942 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let _startpos = _startpos_p00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 516 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) )
+# 7953 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 7959 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 7966 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 7972 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6979,47 +7980,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7002 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7008 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_decl_statement = 
-# 1157 "parser_cocci_menhir.mly"
-      ( let (mids,code) = t in
-       if List.for_all
-           (function x ->
-             match Ast0.unwrap x with Ast0.DOTS([]) -> true | _ -> false)
-           code
-      then []
-      else
-         [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, code, mids,
-                              P.clt2mcode ")" _3))] )
-# 7023 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8009 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8014 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 8027 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 8033 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 8041 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8047 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7031,161 +8055,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 7044 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_statement_expr = 
-# 1170 "parser_cocci_menhir.mly"
-      ( let (nm,pure,clt) = _1 in
-      [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] )
-# 7052 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_decl_var = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_statement_expr = 
-# 1173 "parser_cocci_menhir.mly"
-      ( List.map
-         (function x ->
-           Ast0.wrap
-             (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x)))
-         _1 )
-# 7080 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_statement = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_decl_statement_expr = 
-# 1178 "parser_cocci_menhir.mly"
-              ( [_1] )
-# 7104 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7135 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let t : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = Obj.magic t in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7141 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_decl_statement_expr = 
-# 1187 "parser_cocci_menhir.mly"
-      ( let (mids,code) = t in
-       if List.for_all (function [] -> true | _ -> false) code
-      then []
-      else
-         let dot_code =
-           List.map (function x -> Ast0.wrap(Ast0.DOTS x)) code in
-         [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, dot_code, mids,
-                              P.clt2mcode ")" _3))] )
-# 7155 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7181 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = 
-# 953 "parser_cocci_menhir.mly"
-      ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] )
-# 7189 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8084 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8089 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 8102 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 8108 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 8116 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8122 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7197,45 +8130,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = t;
-              MenhirLib.EngineTypes.startp = _startpos_t_;
-              MenhirLib.EngineTypes.endp = _endpos_t_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7220 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8159 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8164 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 8177 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 7230 "parser_cocci_menhir.ml"
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 8183 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 8191 "parser_cocci_menhir.ml"
           
         in
         
-# 955 "parser_cocci_menhir.mly"
-      ( List.map
-         (function (id,fn) ->
-           Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)))
-         d )
-# 7239 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8197 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7247,17 +8205,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = t;
-              MenhirLib.EngineTypes.startp = _startpos_t_;
-              MenhirLib.EngineTypes.endp = _endpos_t_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
                 MenhirLib.EngineTypes.semv = x0;
@@ -7268,31 +8226,50 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7275 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 8234 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8239 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 8253 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 8259 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 7287 "parser_cocci_menhir.ml"
+# 8267 "parser_cocci_menhir.ml"
           
         in
         
-# 955 "parser_cocci_menhir.mly"
-      ( List.map
-         (function (id,fn) ->
-           Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)))
-         d )
-# 7296 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8273 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7304,83 +8281,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = f;
-          MenhirLib.EngineTypes.startp = _startpos_f_;
-          MenhirLib.EngineTypes.endp = _endpos_f_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let f : 'tv_funproto = Obj.magic f in
-        let _startpos = _startpos_f_ in
-        let _endpos = _endpos_f_ in
-        let _v : 'tv_decl_var = 
-# 959 "parser_cocci_menhir.mly"
-               ( [f] )
-# 7320 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = t;
-                  MenhirLib.EngineTypes.startp = _startpos_t_;
-                  MenhirLib.EngineTypes.endp = _endpos_t_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7361 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7367 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 8319 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 8324 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8329 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 8349 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 7377 "parser_cocci_menhir.ml"
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 8355 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 8363 "parser_cocci_menhir.ml"
           
         in
         
-# 961 "parser_cocci_menhir.mly"
-      (let (id,fn) = d in
-      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
-# 7384 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8369 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7392,66 +8377,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = t;
-                  MenhirLib.EngineTypes.startp = _startpos_t_;
-                  MenhirLib.EngineTypes.endp = _endpos_t_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = x0;
-                    MenhirLib.EngineTypes.startp = _startpos_x0_;
-                    MenhirLib.EngineTypes.endp = _endpos_x0_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7430 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7436 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8406 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8411 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 8424 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 8430 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 7448 "parser_cocci_menhir.ml"
+# 8438 "parser_cocci_menhir.ml"
           
         in
         
-# 961 "parser_cocci_menhir.mly"
-      (let (id,fn) = d in
-      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
-# 7455 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8444 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7463,54 +8452,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7486 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8486 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8491 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8496 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 8514 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 7496 "parser_cocci_menhir.ml"
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 8520 "parser_cocci_menhir.ml"
           
         in
-        let s =
+        let cv =
+          let x = x0 in
           
-# 39 "standard.mly"
-    ( None )
-# 7503 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 8528 "parser_cocci_menhir.ml"
           
         in
         
-# 966 "parser_cocci_menhir.mly"
-      ( List.map
-         (function (id,fn) ->
-           let idtype =
-             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
-         d )
-# 7514 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8534 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7522,17 +8542,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
                 MenhirLib.EngineTypes.semv = x0;
@@ -7543,40 +8563,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7550 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8571 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8576 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
         let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 8589 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 8595 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 7562 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 7569 "parser_cocci_menhir.ml"
+# 8603 "parser_cocci_menhir.ml"
           
         in
         
-# 966 "parser_cocci_menhir.mly"
-      ( List.map
-         (function (id,fn) ->
-           let idtype =
-             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
-         d )
-# 7580 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8609 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7588,17 +8617,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
                 MenhirLib.EngineTypes.semv = x0;
@@ -7609,40 +8638,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7616 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8646 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8651 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 8664 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 7627 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 8670 "parser_cocci_menhir.ml"
           
         in
-        let s =
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 7635 "parser_cocci_menhir.ml"
+# 8678 "parser_cocci_menhir.ml"
           
         in
         
-# 966 "parser_cocci_menhir.mly"
-      ( List.map
-         (function (id,fn) ->
-           let idtype =
-             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
-         d )
-# 7646 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8684 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7654,68 +8692,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = x1;
-                MenhirLib.EngineTypes.startp = _startpos_x1_;
-                MenhirLib.EngineTypes.endp = _endpos_x1_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = x0;
-                  MenhirLib.EngineTypes.startp = _startpos_x0_;
-                  MenhirLib.EngineTypes.endp = _endpos_x0_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7687 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x1 : 'tv_const_vol = Obj.magic x1 in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8721 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8726 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
-          let x = x1 in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 8739 "parser_cocci_menhir.ml"
+            
+          in
           
-# 41 "standard.mly"
-    ( Some x )
-# 7700 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 8745 "parser_cocci_menhir.ml"
           
         in
-        let s =
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 7708 "parser_cocci_menhir.ml"
+# 8753 "parser_cocci_menhir.ml"
           
         in
         
-# 966 "parser_cocci_menhir.mly"
-      ( List.map
-         (function (id,fn) ->
-           let idtype =
-             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
-         d )
-# 7719 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8759 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7727,69 +8767,71 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7760 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7766 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 8796 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8801 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 8815 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 7776 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 8821 "parser_cocci_menhir.ml"
           
         in
-        let s =
+        let cv =
+          let x = x0 in
           
-# 39 "standard.mly"
-    ( None )
-# 7783 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 8829 "parser_cocci_menhir.ml"
           
         in
         
-# 974 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv))] )
-# 7793 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8835 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7801,25 +8843,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
                   MenhirLib.EngineTypes.next = {
                     MenhirLib.EngineTypes.state = _menhir_s;
                     MenhirLib.EngineTypes.semv = x0;
@@ -7832,45 +8873,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7839 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7845 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 8881 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 8886 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8891 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
         let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
-          let x = x0 in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 8911 "parser_cocci_menhir.ml"
+            
+          in
           
-# 41 "standard.mly"
-    ( Some x )
-# 7857 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 8917 "parser_cocci_menhir.ml"
           
         in
-        let s =
+        let cv =
+          let x = x0 in
           
-# 39 "standard.mly"
-    ( None )
-# 7864 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 8925 "parser_cocci_menhir.ml"
           
         in
         
-# 974 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv))] )
-# 7874 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 8931 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7882,76 +8939,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = x0;
-                    MenhirLib.EngineTypes.startp = _startpos_x0_;
-                    MenhirLib.EngineTypes.endp = _endpos_x0_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7920 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 7926 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8968 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 8973 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 8986 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 7937 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 8992 "parser_cocci_menhir.ml"
           
         in
-        let s =
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 7945 "parser_cocci_menhir.ml"
+# 9000 "parser_cocci_menhir.ml"
           
         in
         
-# 974 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv))] )
-# 7955 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9006 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7963,83 +9014,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = x1;
-                    MenhirLib.EngineTypes.startp = _startpos_x1_;
-                    MenhirLib.EngineTypes.endp = _endpos_x1_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = x0;
-                      MenhirLib.EngineTypes.startp = _startpos_x0_;
-                      MenhirLib.EngineTypes.endp = _endpos_x0_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8006 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8012 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x1 : 'tv_const_vol = Obj.magic x1 in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9048 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9053 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9058 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let cv =
-          let x = x1 in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 9076 "parser_cocci_menhir.ml"
+            
+          in
           
-# 41 "standard.mly"
-    ( Some x )
-# 8025 "parser_cocci_menhir.ml"
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 9082 "parser_cocci_menhir.ml"
           
         in
-        let s =
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 8033 "parser_cocci_menhir.ml"
+# 9090 "parser_cocci_menhir.ml"
           
         in
         
-# 974 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv))] )
-# 8043 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9096 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8051,104 +9104,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp2;
-            MenhirLib.EngineTypes.startp = _startpos_rp2_;
-            MenhirLib.EngineTypes.endp = _endpos_rp2_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = p;
-              MenhirLib.EngineTypes.startp = _startpos_p_;
-              MenhirLib.EngineTypes.endp = _endpos_p_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp2;
-                MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = rp1;
-                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = d;
-                    MenhirLib.EngineTypes.startp = _startpos_d_;
-                    MenhirLib.EngineTypes.endp = _endpos_d_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = st;
-                      MenhirLib.EngineTypes.startp = _startpos_st_;
-                      MenhirLib.EngineTypes.endp = _endpos_st_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = lp1;
-                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.state = _menhir_s;
-                          MenhirLib.EngineTypes.semv = t;
-                          MenhirLib.EngineTypes.startp = _startpos_t_;
-                          MenhirLib.EngineTypes.endp = _endpos_t_;
-                          MenhirLib.EngineTypes.next = _menhir_stack;
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8104 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8109 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8115 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8120 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8126 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8131 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9128 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 9140 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 8140 "parser_cocci_menhir.ml"
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 9146 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9154 "parser_cocci_menhir.ml"
           
         in
         
-# 984 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-        [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] )
-# 8152 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9160 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8160,111 +9168,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp2;
-            MenhirLib.EngineTypes.startp = _startpos_rp2_;
-            MenhirLib.EngineTypes.endp = _endpos_rp2_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = p;
-              MenhirLib.EngineTypes.startp = _startpos_p_;
-              MenhirLib.EngineTypes.endp = _endpos_p_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp2;
-                MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = rp1;
-                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = d;
-                    MenhirLib.EngineTypes.startp = _startpos_d_;
-                    MenhirLib.EngineTypes.endp = _endpos_d_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = st;
-                      MenhirLib.EngineTypes.startp = _startpos_st_;
-                      MenhirLib.EngineTypes.endp = _endpos_st_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = lp1;
-                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.semv = t;
-                          MenhirLib.EngineTypes.startp = _startpos_t_;
-                          MenhirLib.EngineTypes.endp = _endpos_t_;
-                          MenhirLib.EngineTypes.next = {
-                            MenhirLib.EngineTypes.state = _menhir_s;
-                            MenhirLib.EngineTypes.semv = x0;
-                            MenhirLib.EngineTypes.startp = _startpos_x0_;
-                            MenhirLib.EngineTypes.endp = _endpos_x0_;
-                            MenhirLib.EngineTypes.next = _menhir_stack;
-                            };
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8218 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8223 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8229 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8234 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8240 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8245 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9192 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 9204 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 9210 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 8256 "parser_cocci_menhir.ml"
+# 9218 "parser_cocci_menhir.ml"
           
         in
         
-# 984 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-        [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] )
-# 8268 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9224 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8276,56 +9232,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _5;
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _4;
-            MenhirLib.EngineTypes.startp = _startpos__4_;
-            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _3;
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _2;
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = _1;
-                  MenhirLib.EngineTypes.startp = _startpos__1_;
-                  MenhirLib.EngineTypes.endp = _endpos__1_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _5 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8309 "parser_cocci_menhir.ml"
-        ) = Obj.magic _5 in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8314 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8320 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_decl_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_decl_var = 
-# 992 "parser_cocci_menhir.mly"
-      ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3,
-                                 P.clt2mcode ")" _4,P.clt2mcode ";" _5))] )
-# 8329 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9256 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 9268 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 9274 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9282 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9288 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8337,120 +9296,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = rp2;
-                MenhirLib.EngineTypes.startp = _startpos_rp2_;
-                MenhirLib.EngineTypes.endp = _endpos_rp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = p;
-                  MenhirLib.EngineTypes.startp = _startpos_p_;
-                  MenhirLib.EngineTypes.endp = _endpos_p_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = lp2;
-                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = rp1;
-                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = d;
-                        MenhirLib.EngineTypes.startp = _startpos_d_;
-                        MenhirLib.EngineTypes.endp = _endpos_d_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.semv = st;
-                          MenhirLib.EngineTypes.startp = _startpos_st_;
-                          MenhirLib.EngineTypes.endp = _endpos_st_;
-                          MenhirLib.EngineTypes.next = {
-                            MenhirLib.EngineTypes.semv = lp1;
-                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                            MenhirLib.EngineTypes.next = {
-                              MenhirLib.EngineTypes.state = _menhir_s;
-                              MenhirLib.EngineTypes.semv = t;
-                              MenhirLib.EngineTypes.startp = _startpos_t_;
-                              MenhirLib.EngineTypes.endp = _endpos_t_;
-                              MenhirLib.EngineTypes.next = _menhir_stack;
-                              };
-                            };
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8400 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8406 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8411 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8417 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8422 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8428 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8433 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 9320 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 9333 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 8442 "parser_cocci_menhir.ml"
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 9339 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9347 "parser_cocci_menhir.ml"
           
         in
         
-# 998 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
-# 8454 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9353 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8462,127 +9361,80 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = rp2;
-                MenhirLib.EngineTypes.startp = _startpos_rp2_;
-                MenhirLib.EngineTypes.endp = _endpos_rp2_;
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = p;
-                  MenhirLib.EngineTypes.startp = _startpos_p_;
-                  MenhirLib.EngineTypes.endp = _endpos_p_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = lp2;
-                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = rp1;
-                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = d;
-                        MenhirLib.EngineTypes.startp = _startpos_d_;
-                        MenhirLib.EngineTypes.endp = _endpos_d_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.semv = st;
-                          MenhirLib.EngineTypes.startp = _startpos_st_;
-                          MenhirLib.EngineTypes.endp = _endpos_st_;
-                          MenhirLib.EngineTypes.next = {
-                            MenhirLib.EngineTypes.semv = lp1;
-                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                            MenhirLib.EngineTypes.next = {
-                              MenhirLib.EngineTypes.semv = t;
-                              MenhirLib.EngineTypes.startp = _startpos_t_;
-                              MenhirLib.EngineTypes.endp = _endpos_t_;
-                              MenhirLib.EngineTypes.next = {
-                                MenhirLib.EngineTypes.state = _menhir_s;
-                                MenhirLib.EngineTypes.semv = x0;
-                                MenhirLib.EngineTypes.startp = _startpos_x0_;
-                                MenhirLib.EngineTypes.endp = _endpos_x0_;
-                                MenhirLib.EngineTypes.next = _menhir_stack;
-                                };
-                              };
-                            };
-                          };
-                        };
-                      };
-                    };
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8530 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8536 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8541 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8547 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8552 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8558 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8563 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 9394 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 9399 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = let s =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 9418 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 9424 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 8574 "parser_cocci_menhir.ml"
+# 9432 "parser_cocci_menhir.ml"
           
         in
         
-# 998 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
-# 8586 "parser_cocci_menhir.ml"
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9438 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8594,46 +9446,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = id;
-            MenhirLib.EngineTypes.startp = _startpos_id_;
-            MenhirLib.EngineTypes.endp = _endpos_id_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = t;
-              MenhirLib.EngineTypes.startp = _startpos_t_;
-              MenhirLib.EngineTypes.endp = _endpos_t_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = s;
-                MenhirLib.EngineTypes.startp = _startpos_s_;
-                MenhirLib.EngineTypes.endp = _endpos_s_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8622 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let id : 'tv_typedef_ident = Obj.magic id in
-        let t : 'tv_ctype_full = Obj.magic t in
-        let s : (
-# 53 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 8629 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_decl_var = 
-# 1006 "parser_cocci_menhir.mly"
-      ( let s = P.clt2mcode "typedef" s in
-        [Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))] )
-# 8637 "parser_cocci_menhir.ml"
+# 9470 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 9482 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 9488 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9496 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9502 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8645,64 +9510,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_define_param_list_start = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_define_param_list = 
-# 714 "parser_cocci_menhir.mly"
-     (let circle x =
-       match Ast0.unwrap x with Ast0.DPcircles(_) -> true | _ -> false in
-     if List.exists circle _1
-     then Ast0.wrap(Ast0.CIRCLES(_1))
-     else Ast0.wrap(Ast0.DOTS(_1)) )
-# 8665 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_define_param_list = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_define_param_list_option = 
-# 738 "parser_cocci_menhir.mly"
-                                            ( _1 )
-# 8689 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_define_param_list_option = 
-# 739 "parser_cocci_menhir.mly"
-                           ( Ast0.wrap(Ast0.DOTS([])) )
-# 8706 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9539 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9544 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 9561 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 9567 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9575 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9581 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8714,19 +9589,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_define_param_list_start = 
-# 721 "parser_cocci_menhir.mly"
-          ( [Ast0.wrap(Ast0.DParam _1)] )
-# 8730 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9613 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 495 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) )
+# 9625 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 9631 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9639 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9645 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8738,36 +9653,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : 'tv_define_param_list_start = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8762 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_define_param_list_start = 
-# 723 "parser_cocci_menhir.mly"
-      ( Ast0.wrap(Ast0.DParam _1)::
-       Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _2))::_3 )
-# 8771 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9677 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 497 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) )
+# 9689 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 9695 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9703 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9709 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8779,30 +9717,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let r : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic r in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8798 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_define_param_list_start = 
-# 726 "parser_cocci_menhir.mly"
-      ( (P.mkdpdots "..." d)::
-       (List.concat (List.map (function x -> x (P.mkdpdots "...")) r)) )
-# 8806 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9741 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 499 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) )
+# 9753 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 9759 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9767 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9773 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8814,38 +9781,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 81 "parser_cocci_menhir.mly"
-       (Data.clt * token)
-# 8827 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_defineop = 
-# 673 "parser_cocci_menhir.mly"
-    ( let (clt,ident) = _1 in
-      function body ->
-       Ast0.wrap
-         (Ast0.Define
-            (P.clt2mcode "#define" clt,
-             (match ident with
-               TMetaId((nm,constraints,pure,clt)) ->
-                 Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure))
-             | TIdent(nm_pure) ->
-                 Ast0.wrap(Ast0.Id(P.id2mcode nm_pure))
-             | _ ->
-                 raise
-                   (Semantic_cocci.Semantic
-                      "unexpected name for a #define")),
-             Ast0.wrap Ast0.NoParams,
-             body)) )
-# 8849 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 9811 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 501 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) )
+# 9825 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 9831 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9839 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9845 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8857,58 +9853,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 8880 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_define_param_list_option = Obj.magic _2 in
-        let _1 : (
-# 82 "parser_cocci_menhir.mly"
-       (Data.clt * token * int * int)
-# 8886 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_defineop = 
-# 690 "parser_cocci_menhir.mly"
-    ( let (clt,ident,parenoff,parencol) = _1 in
-      (* clt is the start of the #define itself *)
-      let (arity,line,lline,offset,col,strbef,straft,pos) = clt in
-      let lp =
-       P.clt2mcode "("
-         (arity,line,lline,parenoff,parencol,[],[],Ast0.NoMetaPos) in
-      function body ->
-       Ast0.wrap
-         (Ast0.Define
-            (P.clt2mcode "#define" clt,
-             (match ident with
-               TMetaId((nm,constraints,pure,clt)) ->
-                 Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure))
-             | TIdent(nm_pure) ->
-                 Ast0.wrap(Ast0.Id(P.id2mcode nm_pure))
-             | _ ->
-                 raise
-                   (Semantic_cocci.Semantic
-                      "unexpected name for a #define")),
-             Ast0.wrap (Ast0.DParams (lp,_2,P.clt2mcode ")" _3)),body)) )
-# 8912 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 503 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) )
+# 9893 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 9899 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 9907 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 9913 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8920,19 +9921,98 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_pnrule = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_dep = 
-# 225 "parser_cocci_menhir.mly"
-                   ( _1 )
-# 8936 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 9960 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 9966 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            let i =
+              
+# 39 "standard.mly"
+    ( None )
+# 9986 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 9996 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 10002 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 10010 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 10016 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8944,29 +10024,107 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = x000;
+                  MenhirLib.EngineTypes.startp = _startpos_x000_;
+                  MenhirLib.EngineTypes.endp = _endpos_x000_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = s00;
+                    MenhirLib.EngineTypes.startp = _startpos_s00_;
+                    MenhirLib.EngineTypes.endp = _endpos_s00_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = x0;
+                      MenhirLib.EngineTypes.startp = _startpos_x0_;
+                      MenhirLib.EngineTypes.endp = _endpos_x0_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : 'tv_dep = Obj.magic _3 in
-        let _1 : 'tv_dep = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_dep = 
-# 226 "parser_cocci_menhir.mly"
-                   ( Ast.AndDep(_1, _3) )
-# 8970 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10068 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10074 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let x000 : 'tv_ident = Obj.magic x000 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let x00 = x000 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let x0 = x00 in
+            let s = s0 in
+            let i =
+              let x = x0 in
+              
+# 41 "standard.mly"
+    ( Some x )
+# 10098 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 10108 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 10114 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 10122 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 10128 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8978,46 +10136,93 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : 'tv_dep = Obj.magic _3 in
-        let _1 : 'tv_dep = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_dep = 
-# 227 "parser_cocci_menhir.mly"
-                   ( Ast.OrDep (_1, _3) )
-# 9004 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_depends = 
-# 221 "parser_cocci_menhir.mly"
-                           ( Ast.NoDep )
-# 9021 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10175 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10181 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 10186 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            
+# 512 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = s in
+    let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
+    Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) )
+# 10206 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 10212 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 10220 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 10226 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9029,27 +10234,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = parents;
-          MenhirLib.EngineTypes.startp = _startpos_parents_;
-          MenhirLib.EngineTypes.endp = _endpos_parents_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let parents : 'tv_dep = Obj.magic parents in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_parents_ in
-        let _v : 'tv_depends = 
-# 222 "parser_cocci_menhir.mly"
-                           ( parents )
-# 9053 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 10258 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 516 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) )
+# 10270 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 10276 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 10284 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 529 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 10290 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9061,29 +10298,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = r;
+          MenhirLib.EngineTypes.startp = _startpos_r_;
+          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_ident = Obj.magic _2 in
-        let _1 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9080 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_designator = 
-# 1104 "parser_cocci_menhir.mly"
-     ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) )
-# 9087 "parser_cocci_menhir.ml"
+        let r : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 10311 "parser_cocci_menhir.ml"
+        ) = Obj.magic r in
+        let _startpos = _startpos_r_ in
+        let _endpos = _endpos_r_ in
+        let _v : 'tv_ctype = 
+# 531 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) )
+# 10318 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9095,39 +10326,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = r;
+          MenhirLib.EngineTypes.startp = _startpos_r_;
+          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9118 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
-        let _1 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9124 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_designator = 
-# 1106 "parser_cocci_menhir.mly"
-     ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) )
-# 9131 "parser_cocci_menhir.ml"
+        let r : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 10339 "parser_cocci_menhir.ml"
+        ) = Obj.magic r in
+        let _startpos = _startpos_r_ in
+        let _endpos = _endpos_r_ in
+        let _v : 'tv_ctype = 
+# 533 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) )
+# 10346 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9139,80 +10354,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _5;
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = rp;
+          MenhirLib.EngineTypes.startp = _startpos_rp_;
+          MenhirLib.EngineTypes.endp = _endpos_rp_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _4;
-            MenhirLib.EngineTypes.startp = _startpos__4_;
-            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _3;
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _2;
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = _1;
-                  MenhirLib.EngineTypes.startp = _startpos__1_;
-                  MenhirLib.EngineTypes.endp = _endpos__1_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = lp;
+              MenhirLib.EngineTypes.startp = _startpos_lp_;
+              MenhirLib.EngineTypes.endp = _endpos_lp_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _5 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9172 "parser_cocci_menhir.ml"
-        ) = Obj.magic _5 in
-        let _4 : 'tv_eexpr = Obj.magic _4 in
-        let _3 : (
-# 73 "parser_cocci_menhir.mly"
+        let rp : (
+# 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 9178 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
-        let _1 : (
-# 102 "parser_cocci_menhir.mly"
+# 10377 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp in
+        let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in
+        let lp : (
+# 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 9184 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_designator = 
-# 1108 "parser_cocci_menhir.mly"
-     ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3,
-                            _4,P.clt2mcode "]" _5) )
-# 9192 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_dexpr = 
-# 1207 "parser_cocci_menhir.mly"
-                                          ( _1 )
-# 9216 "parser_cocci_menhir.ml"
+# 10383 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp in
+        let _startpos = _startpos_lp_ in
+        let _endpos = _endpos_rp_ in
+        let _v : 'tv_ctype = 
+# 535 "parser_cocci_menhir.mly"
+    ( let (mids,code) = t in
+      Ast0.wrap
+       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
+# 10392 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9229,18 +10405,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
             MenhirLib.EngineTypes.startp = _startpos__1_;
             MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic _2 in
+        let _2 : 'tv_list_array_dec_ = Obj.magic _2 in
+        let _1 : 'tv_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_disable = 
-# 240 "parser_cocci_menhir.mly"
-                                                      ( List.map P.id2name _2 )
-# 9244 "parser_cocci_menhir.ml"
+        let _v : 'tv_d_ident = 
+# 1039 "parser_cocci_menhir.mly"
+      ( (_1,
+        function t ->
+          List.fold_right
+            (function (l,i,r) ->
+              function rest ->
+                Ast0.wrap
+                  (Ast0.Array(rest,P.clt2mcode "[" l,i,P.clt2mcode "]" r)))
+            _2 t) )
+# 10429 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9252,23 +10437,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = i;
+          MenhirLib.EngineTypes.startp = _startpos_i_;
+          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9265 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_dot_expressions = 
-# 1216 "parser_cocci_menhir.mly"
-            ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) )
-# 9272 "parser_cocci_menhir.ml"
+        let i : 'tv_ident = Obj.magic i in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_i_ in
+        let _v : 'tv_decl = 
+# 803 "parser_cocci_menhir.mly"
+ ( Ast0.wrap(Ast0.Param(t, Some i)) )
+# 10459 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9281,18 +10468,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_nest_expressions = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_dot_expressions = 
-# 1217 "parser_cocci_menhir.mly"
-                   ( _1 )
-# 9296 "parser_cocci_menhir.ml"
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_decl = 
+# 804 "parser_cocci_menhir.mly"
+              ( (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) )
+# 10483 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9304,34 +10491,86 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = d;
-          MenhirLib.EngineTypes.startp = _startpos_d_;
-          MenhirLib.EngineTypes.endp = _endpos_d_;
+          MenhirLib.EngineTypes.semv = rp1;
+          MenhirLib.EngineTypes.startp = _startpos_rp1_;
+          MenhirLib.EngineTypes.endp = _endpos_rp1_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = c;
-            MenhirLib.EngineTypes.startp = _startpos_c_;
-            MenhirLib.EngineTypes.endp = _endpos_c_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = lp1;
+              MenhirLib.EngineTypes.startp = _startpos_lp1_;
+              MenhirLib.EngineTypes.endp = _endpos_lp1_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = rp;
+                MenhirLib.EngineTypes.startp = _startpos_rp_;
+                MenhirLib.EngineTypes.endp = _endpos_rp_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = s;
+                    MenhirLib.EngineTypes.startp = _startpos_s_;
+                    MenhirLib.EngineTypes.endp = _endpos_s_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = lp;
+                      MenhirLib.EngineTypes.startp = _startpos_lp_;
+                      MenhirLib.EngineTypes.endp = _endpos_lp_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.state = _menhir_s;
+                        MenhirLib.EngineTypes.semv = t;
+                        MenhirLib.EngineTypes.startp = _startpos_t_;
+                        MenhirLib.EngineTypes.endp = _endpos_t_;
+                        MenhirLib.EngineTypes.next = _menhir_stack;
+                        };
+                      };
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 9322 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let c : (
-# 107 "parser_cocci_menhir.mly"
+# 10539 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 9327 "parser_cocci_menhir.ml"
-        ) = Obj.magic c in
-        let _startpos = _startpos_c_ in
-        let _endpos = _endpos_d_ in
-        let _v : 'tv_dp_comma_args_TEllipsis_ = 
-# 731 "parser_cocci_menhir.mly"
-    ( function dot_builder ->
-      [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," c)); dot_builder d] )
-# 9335 "parser_cocci_menhir.ml"
+# 10545 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let rp : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10550 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp in
+        let i : 'tv_ident = Obj.magic i in
+        let s : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10556 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let lp : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10561 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_rp1_ in
+        let _v : 'tv_decl = 
+# 807 "parser_cocci_menhir.mly"
+        ( let fnptr =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp,
+               P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in
+       Ast0.wrap(Ast0.Param(fnptr, Some i)) )
+# 10574 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9343,31 +10582,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_ident = Obj.magic _2 in
         let _1 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9362 "parser_cocci_menhir.ml"
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 10595 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_dp_comma_args_TEllipsis_ = 
-# 734 "parser_cocci_menhir.mly"
-    ( function dot_builder ->
-      [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _1));
-       Ast0.wrap(Ast0.DParam _2)] )
-# 9371 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_decl = 
+# 814 "parser_cocci_menhir.mly"
+ ( let (nm,pure,clt) = _1 in
+       Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) )
+# 10603 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9380,22 +10612,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = d;
-          MenhirLib.EngineTypes.startp = _startpos_d_;
-          MenhirLib.EngineTypes.endp = _endpos_d_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9392 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos_d_ in
-        let _v : 'tv_edots_when_TEllipsis_eexpr_ = 
-# 1809 "parser_cocci_menhir.mly"
-                                                  ( (d,None) )
-# 9399 "parser_cocci_menhir.ml"
+        let _1 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 10624 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_decl_ident = 
+# 1524 "parser_cocci_menhir.mly"
+         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
+# 10631 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9407,41 +10639,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = w;
-            MenhirLib.EngineTypes.startp = _startpos_w_;
-            MenhirLib.EngineTypes.endp = _endpos_w_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = d;
-                  MenhirLib.EngineTypes.startp = _startpos_d_;
-                  MenhirLib.EngineTypes.endp = _endpos_d_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let w : 'tv_eexpr = Obj.magic w in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9438 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_edots_when_TEllipsis_eexpr_ = 
-# 1810 "parser_cocci_menhir.mly"
-                                                  ( (d,Some w) )
-# 9445 "parser_cocci_menhir.ml"
+        let _1 : (
+# 62 "parser_cocci_menhir.mly"
+       (Parse_aux.idinfo)
+# 10652 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_decl_ident = 
+# 1526 "parser_cocci_menhir.mly"
+         ( let (nm,constraints,pure,clt) = _1 in
+         Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
+# 10660 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_decl_list_decl_ = 
+# 1546 "parser_cocci_menhir.mly"
+              ( Ast0.wrap(Ast0.DOTS([])) )
+# 10677 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9454,142 +10686,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = d;
-          MenhirLib.EngineTypes.startp = _startpos_d_;
-          MenhirLib.EngineTypes.endp = _endpos_d_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9466 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos_d_ in
-        let _v : 'tv_edots_when_TEllipsis_initialize_ = 
-# 1809 "parser_cocci_menhir.mly"
-                                                  ( (d,None) )
-# 9473 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = w;
-            MenhirLib.EngineTypes.startp = _startpos_w_;
-            MenhirLib.EngineTypes.endp = _endpos_w_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = d;
-                  MenhirLib.EngineTypes.startp = _startpos_d_;
-                  MenhirLib.EngineTypes.endp = _endpos_d_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
-          } = _menhir_stack in
-        let w : 'tv_initialize = Obj.magic w in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9512 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_edots_when_TEllipsis_initialize_ = 
-# 1810 "parser_cocci_menhir.mly"
-                                                  ( (d,Some w) )
-# 9519 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = d;
-          MenhirLib.EngineTypes.startp = _startpos_d_;
-          MenhirLib.EngineTypes.endp = _endpos_d_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9540 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos_d_ in
-        let _v : 'tv_edots_when_TEllipsis_struct_decl_ = 
-# 1809 "parser_cocci_menhir.mly"
-                                                  ( (d,None) )
-# 9547 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = w;
-            MenhirLib.EngineTypes.startp = _startpos_w_;
-            MenhirLib.EngineTypes.endp = _endpos_w_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = d;
-                  MenhirLib.EngineTypes.startp = _startpos_d_;
-                  MenhirLib.EngineTypes.endp = _endpos_d_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
-          } = _menhir_stack in
-        let w : 'tv_struct_decl = Obj.magic w in
-        let d : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 9586 "parser_cocci_menhir.ml"
-        ) = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_edots_when_TEllipsis_struct_decl_ = 
-# 1810 "parser_cocci_menhir.mly"
-                                                  ( (d,Some w) )
-# 9593 "parser_cocci_menhir.ml"
+        let _1 : 'tv_decl_list_start_decl_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_decl_list_decl_ = 
+# 1548 "parser_cocci_menhir.mly"
+     (let circle x =
+       match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in
+     if List.exists circle _1
+     then Ast0.wrap(Ast0.CIRCLES(_1))
+     else Ast0.wrap(Ast0.DOTS(_1)) )
+# 10705 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_decl_list_name_opt_decl_ = 
+# 1546 "parser_cocci_menhir.mly"
+              ( Ast0.wrap(Ast0.DOTS([])) )
+# 10722 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9607,13 +10736,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _1 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_eexpr = 
-# 1205 "parser_cocci_menhir.mly"
-                                         ( _1 )
-# 9617 "parser_cocci_menhir.ml"
+        let _v : 'tv_decl_list_name_opt_decl_ = 
+# 1548 "parser_cocci_menhir.mly"
+     (let circle x =
+       match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in
+     if List.exists circle _1
+     then Ast0.wrap(Ast0.CIRCLES(_1))
+     else Ast0.wrap(Ast0.DOTS(_1)) )
+# 10750 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9631,22 +10764,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_eexpr_list_start = Obj.magic _1 in
+        let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_eexpr_list = 
-# 1753 "parser_cocci_menhir.mly"
-     (let circle x =
-       match Ast0.unwrap x with Ast0.Ecircles(_) -> true | _ -> false in
-     let star x =
-       match Ast0.unwrap x with Ast0.Estars(_) -> true | _ -> false in
-     if List.exists circle _1
-     then Ast0.wrap(Ast0.CIRCLES(_1))
-     else
-       if List.exists star _1
-       then Ast0.wrap(Ast0.STARS(_1))
-       else Ast0.wrap(Ast0.DOTS(_1)) )
-# 9650 "parser_cocci_menhir.ml"
+        let _v : 'tv_decl_list_start_decl_ = 
+# 1555 "parser_cocci_menhir.mly"
+                 ( [_1] )
+# 10774 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9658,19 +10782,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_eexpr_list = Obj.magic _1 in
+        let _3 : 'tv_decl_list_start_decl_ = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10806 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_eexpr_list_option = 
-# 1792 "parser_cocci_menhir.mly"
-                              ( _1 )
-# 9674 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_decl_list_start_decl_ = 
+# 1557 "parser_cocci_menhir.mly"
+    ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 )
+# 10814 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9681,13 +10821,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_eexpr_list_option = 
-# 1793 "parser_cocci_menhir.mly"
-                           ( Ast0.wrap(Ast0.DOTS([])) )
-# 9691 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic _2 in
+        let _1 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10841 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_decl_list_start_decl_ = 
+# 1559 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1))::
+      (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) )
+# 10849 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9705,13 +10863,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_aexpr = Obj.magic _1 in
+        let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_eexpr_list_start = 
-# 1780 "parser_cocci_menhir.mly"
-          ( [_1] )
-# 9715 "parser_cocci_menhir.ml"
+        let _v : 'tv_decl_list_start_name_opt_decl_ = 
+# 1555 "parser_cocci_menhir.mly"
+                 ( [_1] )
+# 10873 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9739,19 +10897,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let _3 : 'tv_eexpr_list_start = Obj.magic _3 in
+        let _3 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _3 in
         let _2 : (
 # 107 "parser_cocci_menhir.mly"
        (Data.clt)
-# 9747 "parser_cocci_menhir.ml"
+# 10905 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
-        let _1 : 'tv_aexpr = Obj.magic _1 in
+        let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
-        let _v : 'tv_eexpr_list_start = 
-# 1782 "parser_cocci_menhir.mly"
-      ( _1::Ast0.wrap(Ast0.EComma(P.clt2mcode "," _2))::_3 )
-# 9755 "parser_cocci_menhir.ml"
+        let _v : 'tv_decl_list_start_name_opt_decl_ = 
+# 1557 "parser_cocci_menhir.mly"
+    ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 )
+# 10913 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9763,39 +10921,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = cl;
-            MenhirLib.EngineTypes.startp = _startpos_cl_;
-            MenhirLib.EngineTypes.endp = _endpos_cl_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.startp = _startpos__2_;
-                  MenhirLib.EngineTypes.endp = _endpos__2_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.startp = _startpos__1_;
-                    MenhirLib.EngineTypes.endp = _endpos__1_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let cl : 'tv_comma_list_dexpr_ = Obj.magic cl in
+        let _2 : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic _2 in
+        let _1 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 10940 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_error_words = 
-# 1579 "parser_cocci_menhir.mly"
-      ( [Ast0.wrap(Ast0.ERRORWORDS(cl))] )
-# 9799 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_decl_list_start_name_opt_decl_ = 
+# 1559 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1))::
+      (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) )
+# 10948 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9808,16 +10957,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
           MenhirLib.EngineTypes.startp = _startpos__1_;
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
+        let _1 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 10969 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_exists = 
-# 243 "parser_cocci_menhir.mly"
-          ( Ast.Exists )
-# 9821 "parser_cocci_menhir.ml"
+        let _v : 'tv_decl_statement = 
+# 1117 "parser_cocci_menhir.mly"
+      ( let (nm,pure,clt) = _1 in
+      [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] )
+# 10977 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9830,16 +10986,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
           MenhirLib.EngineTypes.startp = _startpos__1_;
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
+        let _1 : 'tv_decl_var = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_exists = 
-# 244 "parser_cocci_menhir.mly"
-          ( Ast.Forall )
-# 9843 "parser_cocci_menhir.ml"
+        let _v : 'tv_decl_statement = 
+# 1120 "parser_cocci_menhir.mly"
+      ( List.map
+         (function x ->
+           Ast0.wrap
+             (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x)))
+         _1 )
+# 11005 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9851,21 +11013,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
+        let _1 : 'tv_statement = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_exists = 
-# 245 "parser_cocci_menhir.mly"
-                   ( Ast.ReverseForall )
-# 9869 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_decl_statement = 
+# 1125 "parser_cocci_menhir.mly"
+              ( [_1] )
+# 11029 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9876,13 +11036,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_exists = 
-# 246 "parser_cocci_menhir.mly"
-          ( Ast.Undetermined )
-# 9886 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11060 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11066 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_decl_statement = 
+# 1134 "parser_cocci_menhir.mly"
+      ( let (mids,code) = t in
+       if List.for_all
+           (function x ->
+             match Ast0.unwrap x with Ast0.DOTS([]) -> true | _ -> false)
+           code
+      then []
+      else
+         [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, code, mids,
+                              P.clt2mcode ")" _3))] )
+# 11081 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9900,13 +11095,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_basic_expr_expr_invalid_ = Obj.magic _1 in
+        let _1 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 11102 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_expr = 
-# 1203 "parser_cocci_menhir.mly"
-                                ( _1 )
-# 9910 "parser_cocci_menhir.ml"
+        let _v : 'tv_decl_statement_expr = 
+# 1147 "parser_cocci_menhir.mly"
+      ( let (nm,pure,clt) = _1 in
+      [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] )
+# 11110 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9919,18 +11119,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let r : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = Obj.magic r in
-        let _startpos = _startpos_r_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_expr_dots_TEllipsis_ = 
-# 1385 "parser_cocci_menhir.mly"
-                                                       ( r )
-# 9934 "parser_cocci_menhir.ml"
+        let _1 : 'tv_decl_var = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_decl_statement_expr = 
+# 1150 "parser_cocci_menhir.mly"
+      ( List.map
+         (function x ->
+           Ast0.wrap
+             (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x)))
+         _1 )
+# 11138 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9941,13 +11145,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_extends = 
-# 216 "parser_cocci_menhir.mly"
-                                                  ( () )
-# 9951 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_statement = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_decl_statement_expr = 
+# 1155 "parser_cocci_menhir.mly"
+              ( [_1] )
+# 11162 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9959,27 +11170,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = parent;
-          MenhirLib.EngineTypes.startp = _startpos_parent_;
-          MenhirLib.EngineTypes.endp = _endpos_parent_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let parent : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 9976 "parser_cocci_menhir.ml"
-        ) = Obj.magic parent in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11193 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let t : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = Obj.magic t in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11199 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_parent_ in
-        let _v : 'tv_extends = 
-# 218 "parser_cocci_menhir.mly"
-    ( !Data.install_bindings (parent) )
-# 9983 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_decl_statement_expr = 
+# 1164 "parser_cocci_menhir.mly"
+      ( let (mids,code) = t in
+       if List.for_all (function [] -> true | _ -> false) code
+      then []
+      else
+         let dot_code =
+           List.map (function x -> Ast0.wrap(Ast0.DOTS x)) code in
+         [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, dot_code, mids,
+                              P.clt2mcode ")" _3))] )
+# 11213 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9991,35 +11221,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 83 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 10009 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 83 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 10014 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_filespec = 
-# 632 "parser_cocci_menhir.mly"
-    ( [Ast0.wrap
-         (Ast0.FILEINFO(P.id2mcode _1,
-                        P.id2mcode _2))] )
-# 10023 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11239 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = 
+# 930 "parser_cocci_menhir.mly"
+      ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] )
+# 11247 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10031,25 +11255,45 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = m;
-          MenhirLib.EngineTypes.startp = _startpos_m_;
-          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = t;
+              MenhirLib.EngineTypes.startp = _startpos_t_;
+              MenhirLib.EngineTypes.endp = _endpos_t_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let m : 'tv_list_TMul_ = Obj.magic m in
-        let ty : 'tv_generic_ctype = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
-        let _endpos = _endpos_m_ in
-        let _v : 'tv_fn_ctype = 
-# 581 "parser_cocci_menhir.mly"
-                                     ( P.pointerify ty m )
-# 10053 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11278 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 11288 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 932 "parser_cocci_menhir.mly"
+      ( List.map
+         (function (id,fn) ->
+           Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)))
+         d )
+# 11297 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10061,31 +11305,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = m;
-          MenhirLib.EngineTypes.startp = _startpos_m_;
-          MenhirLib.EngineTypes.endp = _endpos_m_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = t;
+              MenhirLib.EngineTypes.startp = _startpos_t_;
+              MenhirLib.EngineTypes.endp = _endpos_t_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let m : 'tv_list_TMul_ = Obj.magic m in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 10080 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_m_ in
-        let _v : 'tv_fn_ctype = 
-# 583 "parser_cocci_menhir.mly"
-         ( P.pointerify
-            (Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])))
-            m )
-# 10089 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11333 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 11345 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 932 "parser_cocci_menhir.mly"
+      ( List.map
+         (function (id,fn) ->
+           Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)))
+         d )
+# 11354 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10096,47 +11361,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_fninfo = 
-# 777 "parser_cocci_menhir.mly"
-                ( [] )
-# 10106 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
+        let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.semv = f;
+          MenhirLib.EngineTypes.startp = _startpos_f_;
+          MenhirLib.EngineTypes.endp = _endpos_f_;
           MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
           } = _menhir_stack in
-        let _2 : 'tv_fninfo = Obj.magic _2 in
-        let _1 : 'tv_storage = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fninfo = 
-# 779 "parser_cocci_menhir.mly"
-      ( try
-       let _ =
-         List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in
-       raise (Semantic_cocci.Semantic "duplicate storage")
-      with Not_found -> (Ast0.FStorage(_1))::_2 )
-# 10140 "parser_cocci_menhir.ml"
+        let f : 'tv_funproto = Obj.magic f in
+        let _startpos = _startpos_f_ in
+        let _endpos = _endpos_f_ in
+        let _v : 'tv_decl_var = 
+# 936 "parser_cocci_menhir.mly"
+               ( [f] )
+# 11378 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10148,25 +11386,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = t;
+                  MenhirLib.EngineTypes.startp = _startpos_t_;
+                  MenhirLib.EngineTypes.endp = _endpos_t_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let r : 'tv_fninfo_nt = Obj.magic r in
-        let t : 'tv_fn_ctype = Obj.magic t in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11419 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11425 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos_t_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_fninfo = 
-# 784 "parser_cocci_menhir.mly"
-                           ( (Ast0.FType(t))::r )
-# 10170 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 11435 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 938 "parser_cocci_menhir.mly"
+      (let (id,fn) = d in
+      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
+# 11442 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10178,32 +11450,66 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = t;
+                  MenhirLib.EngineTypes.startp = _startpos_t_;
+                  MenhirLib.EngineTypes.endp = _endpos_t_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fninfo = Obj.magic _2 in
-        let _1 : (
-# 53 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 10197 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fninfo = 
-# 786 "parser_cocci_menhir.mly"
-      ( try
-       let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in
-       raise (Semantic_cocci.Semantic "duplicate inline")
-      with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 )
-# 10207 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11488 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11494 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 11506 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 938 "parser_cocci_menhir.mly"
+      (let (id,fn) = d in
+      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
+# 11513 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10215,49 +11521,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fninfo = Obj.magic _2 in
-        let _1 : (
-# 55 "parser_cocci_menhir.mly"
-      (string * Data.clt)
-# 10234 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fninfo = 
-# 791 "parser_cocci_menhir.mly"
-      ( try
-       let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in
-       raise (Semantic_cocci.Semantic "multiple attributes")
-      with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 )
-# 10244 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_fninfo_nt = 
-# 797 "parser_cocci_menhir.mly"
-                ( [] )
-# 10261 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11544 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 11554 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 11561 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 943 "parser_cocci_menhir.mly"
+      ( List.map
+         (function (id,fn) ->
+           let idtype =
+             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
+         d )
+# 11572 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10269,29 +11580,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fninfo_nt = Obj.magic _2 in
-        let _1 : 'tv_storage = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fninfo_nt = 
-# 799 "parser_cocci_menhir.mly"
-      ( try
-       let _ =
-         List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in
-       raise (Semantic_cocci.Semantic "duplicate storage")
-      with Not_found -> (Ast0.FStorage(_1))::_2 )
-# 10295 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11608 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 11620 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 11627 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 943 "parser_cocci_menhir.mly"
+      ( List.map
+         (function (id,fn) ->
+           let idtype =
+             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
+         d )
+# 11638 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10303,32 +11646,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fninfo_nt = Obj.magic _2 in
-        let _1 : (
-# 53 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 10322 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fninfo_nt = 
-# 805 "parser_cocci_menhir.mly"
-      ( try
-       let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in
-       raise (Semantic_cocci.Semantic "duplicate inline")
-      with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 )
-# 10332 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11674 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 11685 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 11693 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 943 "parser_cocci_menhir.mly"
+      ( List.map
+         (function (id,fn) ->
+           let idtype =
+             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
+         d )
+# 11704 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10340,49 +11712,68 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = x1;
+                MenhirLib.EngineTypes.startp = _startpos_x1_;
+                MenhirLib.EngineTypes.endp = _endpos_x1_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fninfo_nt = Obj.magic _2 in
-        let _1 : (
-# 55 "parser_cocci_menhir.mly"
-      (string * Data.clt)
-# 10359 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fninfo_nt = 
-# 810 "parser_cocci_menhir.mly"
-      ( try
-       let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in
-       raise (Semantic_cocci.Semantic "duplicate init")
-      with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 )
-# 10369 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_fun_after_dots = 
-# 1701 "parser_cocci_menhir.mly"
-                               ([])
-# 10386 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11745 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_comma_list_d_ident_ = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x1 : 'tv_const_vol = Obj.magic x1 in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          let x = x1 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 11758 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 11766 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 943 "parser_cocci_menhir.mly"
+      ( List.map
+         (function (id,fn) ->
+           let idtype =
+             P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+           Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)))
+         d )
+# 11777 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10394,23 +11785,69 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_exp = Obj.magic _2 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_dots = 
-# 1702 "parser_cocci_menhir.mly"
-                               (_2)
-# 10414 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11818 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11824 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 11834 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 11841 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 951 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv))] )
+# 11851 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10422,25 +11859,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_dots = 
-# 1703 "parser_cocci_menhir.mly"
-                               (Ast0.wrap(Ast0.Exp(_1))::_2)
-# 10444 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11897 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11903 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 11915 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 11922 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 951 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv))] )
+# 11932 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10452,42 +11940,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_dots = 
-# 1704 "parser_cocci_menhir.mly"
-                                    (_1@_2)
-# 10474 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_fun_after_dots_or = 
-# 1711 "parser_cocci_menhir.mly"
-                               ([])
-# 10491 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11978 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 11984 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 11995 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 12003 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 951 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv))] )
+# 12013 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10499,23 +12021,3646 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = x1;
+                    MenhirLib.EngineTypes.startp = _startpos_x1_;
+                    MenhirLib.EngineTypes.endp = _endpos_x1_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = x0;
+                      MenhirLib.EngineTypes.startp = _startpos_x0_;
+                      MenhirLib.EngineTypes.endp = _endpos_x0_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12064 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12070 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x1 : 'tv_const_vol = Obj.magic x1 in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let cv =
+          let x = x1 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 12083 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 12091 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 951 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv))] )
+# 12101 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = rp2;
+            MenhirLib.EngineTypes.startp = _startpos_rp2_;
+            MenhirLib.EngineTypes.endp = _endpos_rp2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = p;
+              MenhirLib.EngineTypes.startp = _startpos_p_;
+              MenhirLib.EngineTypes.endp = _endpos_p_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = lp2;
+                MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                MenhirLib.EngineTypes.endp = _endpos_lp2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = rp1;
+                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = d;
+                    MenhirLib.EngineTypes.startp = _startpos_d_;
+                    MenhirLib.EngineTypes.endp = _endpos_d_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = st;
+                      MenhirLib.EngineTypes.startp = _startpos_st_;
+                      MenhirLib.EngineTypes.endp = _endpos_st_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = lp1;
+                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.state = _menhir_s;
+                          MenhirLib.EngineTypes.semv = t;
+                          MenhirLib.EngineTypes.startp = _startpos_t_;
+                          MenhirLib.EngineTypes.endp = _endpos_t_;
+                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12162 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12167 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12173 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12178 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12184 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12189 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 12198 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 961 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+        [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] )
+# 12210 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = rp2;
+            MenhirLib.EngineTypes.startp = _startpos_rp2_;
+            MenhirLib.EngineTypes.endp = _endpos_rp2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = p;
+              MenhirLib.EngineTypes.startp = _startpos_p_;
+              MenhirLib.EngineTypes.endp = _endpos_p_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = lp2;
+                MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                MenhirLib.EngineTypes.endp = _endpos_lp2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = rp1;
+                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = d;
+                    MenhirLib.EngineTypes.startp = _startpos_d_;
+                    MenhirLib.EngineTypes.endp = _endpos_d_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = st;
+                      MenhirLib.EngineTypes.startp = _startpos_st_;
+                      MenhirLib.EngineTypes.endp = _endpos_st_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = lp1;
+                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.semv = t;
+                          MenhirLib.EngineTypes.startp = _startpos_t_;
+                          MenhirLib.EngineTypes.endp = _endpos_t_;
+                          MenhirLib.EngineTypes.next = {
+                            MenhirLib.EngineTypes.state = _menhir_s;
+                            MenhirLib.EngineTypes.semv = x0;
+                            MenhirLib.EngineTypes.startp = _startpos_x0_;
+                            MenhirLib.EngineTypes.endp = _endpos_x0_;
+                            MenhirLib.EngineTypes.next = _menhir_stack;
+                            };
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12276 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12281 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12287 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12292 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12298 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12303 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 12314 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 961 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+        [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] )
+# 12326 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _5;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _4;
+            MenhirLib.EngineTypes.startp = _startpos__4_;
+            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _3;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _2;
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = _1;
+                  MenhirLib.EngineTypes.startp = _startpos__1_;
+                  MenhirLib.EngineTypes.endp = _endpos__1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let _5 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12367 "parser_cocci_menhir.ml"
+        ) = Obj.magic _5 in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12372 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12378 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_decl_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_decl_var = 
+# 969 "parser_cocci_menhir.mly"
+      ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3,
+                                 P.clt2mcode ")" _4,P.clt2mcode ";" _5))] )
+# 12387 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = rp2;
+                MenhirLib.EngineTypes.startp = _startpos_rp2_;
+                MenhirLib.EngineTypes.endp = _endpos_rp2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = p;
+                  MenhirLib.EngineTypes.startp = _startpos_p_;
+                  MenhirLib.EngineTypes.endp = _endpos_p_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = lp2;
+                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = rp1;
+                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = d;
+                        MenhirLib.EngineTypes.startp = _startpos_d_;
+                        MenhirLib.EngineTypes.endp = _endpos_d_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.semv = st;
+                          MenhirLib.EngineTypes.startp = _startpos_st_;
+                          MenhirLib.EngineTypes.endp = _endpos_st_;
+                          MenhirLib.EngineTypes.next = {
+                            MenhirLib.EngineTypes.semv = lp1;
+                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                            MenhirLib.EngineTypes.next = {
+                              MenhirLib.EngineTypes.state = _menhir_s;
+                              MenhirLib.EngineTypes.semv = t;
+                              MenhirLib.EngineTypes.startp = _startpos_t_;
+                              MenhirLib.EngineTypes.endp = _endpos_t_;
+                              MenhirLib.EngineTypes.next = _menhir_stack;
+                              };
+                            };
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12458 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12464 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12469 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12475 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12480 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12486 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12491 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 12500 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 975 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
+# 12512 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = rp2;
+                MenhirLib.EngineTypes.startp = _startpos_rp2_;
+                MenhirLib.EngineTypes.endp = _endpos_rp2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = p;
+                  MenhirLib.EngineTypes.startp = _startpos_p_;
+                  MenhirLib.EngineTypes.endp = _endpos_p_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = lp2;
+                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = rp1;
+                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = d;
+                        MenhirLib.EngineTypes.startp = _startpos_d_;
+                        MenhirLib.EngineTypes.endp = _endpos_d_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.semv = st;
+                          MenhirLib.EngineTypes.startp = _startpos_st_;
+                          MenhirLib.EngineTypes.endp = _endpos_st_;
+                          MenhirLib.EngineTypes.next = {
+                            MenhirLib.EngineTypes.semv = lp1;
+                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                            MenhirLib.EngineTypes.next = {
+                              MenhirLib.EngineTypes.semv = t;
+                              MenhirLib.EngineTypes.startp = _startpos_t_;
+                              MenhirLib.EngineTypes.endp = _endpos_t_;
+                              MenhirLib.EngineTypes.next = {
+                                MenhirLib.EngineTypes.state = _menhir_s;
+                                MenhirLib.EngineTypes.semv = x0;
+                                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                                MenhirLib.EngineTypes.next = _menhir_stack;
+                                };
+                              };
+                            };
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12588 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12594 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12599 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12605 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12610 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12616 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12621 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 12632 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 975 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+      [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
+# 12644 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = id;
+            MenhirLib.EngineTypes.startp = _startpos_id_;
+            MenhirLib.EngineTypes.endp = _endpos_id_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = t;
+              MenhirLib.EngineTypes.startp = _startpos_t_;
+              MenhirLib.EngineTypes.endp = _endpos_t_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = s;
+                MenhirLib.EngineTypes.startp = _startpos_s_;
+                MenhirLib.EngineTypes.endp = _endpos_s_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12680 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let id : 'tv_typedef_ident = Obj.magic id in
+        let t : 'tv_typedef_ctype = Obj.magic t in
+        let s : (
+# 53 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 12687 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let _startpos = _startpos_s_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_decl_var = 
+# 983 "parser_cocci_menhir.mly"
+      ( let s = P.clt2mcode "typedef" s in
+        [Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))] )
+# 12695 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_define_param_list_start = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_define_param_list = 
+# 705 "parser_cocci_menhir.mly"
+     (let circle x =
+       match Ast0.unwrap x with Ast0.DPcircles(_) -> true | _ -> false in
+     if List.exists circle _1
+     then Ast0.wrap(Ast0.CIRCLES(_1))
+     else Ast0.wrap(Ast0.DOTS(_1)) )
+# 12723 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_define_param_list = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_define_param_list_option = 
+# 729 "parser_cocci_menhir.mly"
+                                            ( _1 )
+# 12747 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_define_param_list_option = 
+# 730 "parser_cocci_menhir.mly"
+                           ( Ast0.wrap(Ast0.DOTS([])) )
+# 12764 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_define_param_list_start = 
+# 712 "parser_cocci_menhir.mly"
+          ( [Ast0.wrap(Ast0.DParam _1)] )
+# 12788 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_define_param_list_start = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12820 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_define_param_list_start = 
+# 714 "parser_cocci_menhir.mly"
+      ( Ast0.wrap(Ast0.DParam _1)::
+       Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _2))::_3 )
+# 12829 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = r;
+          MenhirLib.EngineTypes.startp = _startpos_r_;
+          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let r : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic r in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12856 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos_r_ in
+        let _v : 'tv_define_param_list_start = 
+# 717 "parser_cocci_menhir.mly"
+      ( (P.mkdpdots "..." d)::
+       (List.concat (List.map (function x -> x (P.mkdpdots "...")) r)) )
+# 12864 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 81 "parser_cocci_menhir.mly"
+       (Data.clt * token)
+# 12885 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_defineop = 
+# 664 "parser_cocci_menhir.mly"
+    ( let (clt,ident) = _1 in
+      function body ->
+       Ast0.wrap
+         (Ast0.Define
+            (P.clt2mcode "#define" clt,
+             (match ident with
+               TMetaId((nm,constraints,pure,clt)) ->
+                 Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure))
+             | TIdent(nm_pure) ->
+                 Ast0.wrap(Ast0.Id(P.id2mcode nm_pure))
+             | _ ->
+                 raise
+                   (Semantic_cocci.Semantic
+                      "unexpected name for a #define")),
+             Ast0.wrap Ast0.NoParams,
+             body)) )
+# 12907 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 12938 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_define_param_list_option = Obj.magic _2 in
+        let _1 : (
+# 82 "parser_cocci_menhir.mly"
+       (Data.clt * token * int * int)
+# 12944 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_defineop = 
+# 681 "parser_cocci_menhir.mly"
+    ( let (clt,ident,parenoff,parencol) = _1 in
+      (* clt is the start of the #define itself *)
+      let (arity,line,lline,offset,col,strbef,straft,pos) = clt in
+      let lp =
+       P.clt2mcode "("
+         (arity,line,lline,parenoff,parencol,[],[],Ast0.NoMetaPos) in
+      function body ->
+       Ast0.wrap
+         (Ast0.Define
+            (P.clt2mcode "#define" clt,
+             (match ident with
+               TMetaId((nm,constraints,pure,clt)) ->
+                 Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure))
+             | TIdent(nm_pure) ->
+                 Ast0.wrap(Ast0.Id(P.id2mcode nm_pure))
+             | _ ->
+                 raise
+                   (Semantic_cocci.Semantic
+                      "unexpected name for a #define")),
+             Ast0.wrap (Ast0.DParams (lp,_2,P.clt2mcode ")" _3)),body)) )
+# 12970 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_pnrule = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_dep = 
+# 225 "parser_cocci_menhir.mly"
+                   ( _1 )
+# 12994 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_dep = Obj.magic _3 in
+        let _1 : 'tv_dep = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_dep = 
+# 226 "parser_cocci_menhir.mly"
+                   ( Ast.AndDep(_1, _3) )
+# 13028 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_dep = Obj.magic _3 in
+        let _1 : 'tv_dep = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_dep = 
+# 227 "parser_cocci_menhir.mly"
+                   ( Ast.OrDep (_1, _3) )
+# 13062 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_depends = 
+# 221 "parser_cocci_menhir.mly"
+                           ( Ast.NoDep )
+# 13079 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = parents;
+          MenhirLib.EngineTypes.startp = _startpos_parents_;
+          MenhirLib.EngineTypes.endp = _endpos_parents_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let parents : 'tv_dep = Obj.magic parents in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_parents_ in
+        let _v : 'tv_depends = 
+# 222 "parser_cocci_menhir.mly"
+                           ( parents )
+# 13111 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_ident = Obj.magic _2 in
+        let _1 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13138 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_designator = 
+# 1081 "parser_cocci_menhir.mly"
+     ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) )
+# 13145 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13176 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _1 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13182 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_designator = 
+# 1083 "parser_cocci_menhir.mly"
+     ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) )
+# 13189 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _5;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _4;
+            MenhirLib.EngineTypes.startp = _startpos__4_;
+            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _3;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _2;
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = _1;
+                  MenhirLib.EngineTypes.startp = _startpos__1_;
+                  MenhirLib.EngineTypes.endp = _endpos__1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let _5 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13230 "parser_cocci_menhir.ml"
+        ) = Obj.magic _5 in
+        let _4 : 'tv_eexpr = Obj.magic _4 in
+        let _3 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13236 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _1 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13242 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_designator = 
+# 1085 "parser_cocci_menhir.mly"
+     ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3,
+                            _4,P.clt2mcode "]" _5) )
+# 13250 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_dexpr = 
+# 1184 "parser_cocci_menhir.mly"
+                                          ( _1 )
+# 13274 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_disable = 
+# 240 "parser_cocci_menhir.mly"
+                                                      ( List.map P.id2name _2 )
+# 13302 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13323 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_dot_expressions = 
+# 1193 "parser_cocci_menhir.mly"
+            ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) )
+# 13330 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_nest_expressions = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_dot_expressions = 
+# 1194 "parser_cocci_menhir.mly"
+                   ( _1 )
+# 13354 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = d;
+          MenhirLib.EngineTypes.startp = _startpos_d_;
+          MenhirLib.EngineTypes.endp = _endpos_d_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = c;
+            MenhirLib.EngineTypes.startp = _startpos_c_;
+            MenhirLib.EngineTypes.endp = _endpos_c_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13380 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let c : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13385 "parser_cocci_menhir.ml"
+        ) = Obj.magic c in
+        let _startpos = _startpos_c_ in
+        let _endpos = _endpos_d_ in
+        let _v : 'tv_dp_comma_args_TEllipsis_ = 
+# 722 "parser_cocci_menhir.mly"
+    ( function dot_builder ->
+      [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," c)); dot_builder d] )
+# 13393 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_ident = Obj.magic _2 in
+        let _1 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13420 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_dp_comma_args_TEllipsis_ = 
+# 725 "parser_cocci_menhir.mly"
+    ( function dot_builder ->
+      [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _1));
+       Ast0.wrap(Ast0.DParam _2)] )
+# 13429 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = d;
+          MenhirLib.EngineTypes.startp = _startpos_d_;
+          MenhirLib.EngineTypes.endp = _endpos_d_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13450 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos_d_ in
+        let _v : 'tv_edots_when_TEllipsis_eexpr_ = 
+# 1822 "parser_cocci_menhir.mly"
+                                                  ( (d,None) )
+# 13457 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = w;
+            MenhirLib.EngineTypes.startp = _startpos_w_;
+            MenhirLib.EngineTypes.endp = _endpos_w_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = d;
+                  MenhirLib.EngineTypes.startp = _startpos_d_;
+                  MenhirLib.EngineTypes.endp = _endpos_d_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let w : 'tv_eexpr = Obj.magic w in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13496 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_edots_when_TEllipsis_eexpr_ = 
+# 1823 "parser_cocci_menhir.mly"
+                                                  ( (d,Some w) )
+# 13503 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = d;
+          MenhirLib.EngineTypes.startp = _startpos_d_;
+          MenhirLib.EngineTypes.endp = _endpos_d_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13524 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos_d_ in
+        let _v : 'tv_edots_when_TEllipsis_initialize_ = 
+# 1822 "parser_cocci_menhir.mly"
+                                                  ( (d,None) )
+# 13531 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = w;
+            MenhirLib.EngineTypes.startp = _startpos_w_;
+            MenhirLib.EngineTypes.endp = _endpos_w_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = d;
+                  MenhirLib.EngineTypes.startp = _startpos_d_;
+                  MenhirLib.EngineTypes.endp = _endpos_d_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let w : 'tv_initialize = Obj.magic w in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13570 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_edots_when_TEllipsis_initialize_ = 
+# 1823 "parser_cocci_menhir.mly"
+                                                  ( (d,Some w) )
+# 13577 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = d;
+          MenhirLib.EngineTypes.startp = _startpos_d_;
+          MenhirLib.EngineTypes.endp = _endpos_d_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13598 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos_d_ in
+        let _v : 'tv_edots_when_TEllipsis_struct_decl_ = 
+# 1822 "parser_cocci_menhir.mly"
+                                                  ( (d,None) )
+# 13605 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = w;
+            MenhirLib.EngineTypes.startp = _startpos_w_;
+            MenhirLib.EngineTypes.endp = _endpos_w_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = d;
+                  MenhirLib.EngineTypes.startp = _startpos_d_;
+                  MenhirLib.EngineTypes.endp = _endpos_d_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let w : 'tv_struct_decl = Obj.magic w in
+        let d : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13644 "parser_cocci_menhir.ml"
+        ) = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_edots_when_TEllipsis_struct_decl_ = 
+# 1823 "parser_cocci_menhir.mly"
+                                                  ( (d,Some w) )
+# 13651 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_eexpr = 
+# 1182 "parser_cocci_menhir.mly"
+                                         ( _1 )
+# 13675 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_eexpr_list_start = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_eexpr_list = 
+# 1766 "parser_cocci_menhir.mly"
+     (let circle x =
+       match Ast0.unwrap x with Ast0.Ecircles(_) -> true | _ -> false in
+     let star x =
+       match Ast0.unwrap x with Ast0.Estars(_) -> true | _ -> false in
+     if List.exists circle _1
+     then Ast0.wrap(Ast0.CIRCLES(_1))
+     else
+       if List.exists star _1
+       then Ast0.wrap(Ast0.STARS(_1))
+       else Ast0.wrap(Ast0.DOTS(_1)) )
+# 13708 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_eexpr_list = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_eexpr_list_option = 
+# 1805 "parser_cocci_menhir.mly"
+                              ( _1 )
+# 13732 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_eexpr_list_option = 
+# 1806 "parser_cocci_menhir.mly"
+                           ( Ast0.wrap(Ast0.DOTS([])) )
+# 13749 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_aexpr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_eexpr_list_start = 
+# 1793 "parser_cocci_menhir.mly"
+          ( [_1] )
+# 13773 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_eexpr_list_start = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 13805 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_aexpr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_eexpr_list_start = 
+# 1795 "parser_cocci_menhir.mly"
+      ( _1::Ast0.wrap(Ast0.EComma(P.clt2mcode "," _2))::_3 )
+# 13813 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_exists = 
+# 243 "parser_cocci_menhir.mly"
+          ( Ast.Exists )
+# 13835 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_exists = 
+# 244 "parser_cocci_menhir.mly"
+          ( Ast.Forall )
+# 13857 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_exists = 
+# 245 "parser_cocci_menhir.mly"
+          ( Ast.Undetermined )
+# 13874 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_basic_expr_expr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_expr = 
+# 1180 "parser_cocci_menhir.mly"
+                                ( _1 )
+# 13898 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = r;
+          MenhirLib.EngineTypes.startp = _startpos_r_;
+          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let r : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = Obj.magic r in
+        let _startpos = _startpos_r_ in
+        let _endpos = _endpos_r_ in
+        let _v : 'tv_expr_dots_TEllipsis_ = 
+# 1362 "parser_cocci_menhir.mly"
+                                                       ( r )
+# 13922 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_extends = 
+# 216 "parser_cocci_menhir.mly"
+                                                  ( () )
+# 13939 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = parent;
+          MenhirLib.EngineTypes.startp = _startpos_parent_;
+          MenhirLib.EngineTypes.endp = _endpos_parent_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let parent : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 13964 "parser_cocci_menhir.ml"
+        ) = Obj.magic parent in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_parent_ in
+        let _v : 'tv_extends = 
+# 218 "parser_cocci_menhir.mly"
+    ( !Data.install_bindings (parent) )
+# 13971 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : (
+# 83 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 13997 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 83 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 14002 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_filespec = 
+# 623 "parser_cocci_menhir.mly"
+    ( [Ast0.wrap
+         (Ast0.FILEINFO(P.id2mcode _1,
+                        P.id2mcode _2))] )
+# 14011 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_fninfo = 
+# 758 "parser_cocci_menhir.mly"
+                ( [] )
+# 14028 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fninfo = Obj.magic _2 in
+        let _1 : 'tv_storage = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fninfo = 
+# 760 "parser_cocci_menhir.mly"
+      ( try
+       let _ =
+         List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in
+       raise (Semantic_cocci.Semantic "duplicate storage")
+      with Not_found -> (Ast0.FStorage(_1))::_2 )
+# 14062 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = r;
+          MenhirLib.EngineTypes.startp = _startpos_r_;
+          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let r : 'tv_fninfo_nt = Obj.magic r in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_r_ in
+        let _v : 'tv_fninfo = 
+# 765 "parser_cocci_menhir.mly"
+                        ( (Ast0.FType(t))::r )
+# 14092 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fninfo = Obj.magic _2 in
+        let _1 : (
+# 53 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 14119 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fninfo = 
+# 767 "parser_cocci_menhir.mly"
+      ( try
+       let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in
+       raise (Semantic_cocci.Semantic "duplicate inline")
+      with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 )
+# 14129 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fninfo = Obj.magic _2 in
+        let _1 : (
+# 55 "parser_cocci_menhir.mly"
+      (string * Data.clt)
+# 14156 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fninfo = 
+# 772 "parser_cocci_menhir.mly"
+      ( try
+       let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in
+       raise (Semantic_cocci.Semantic "multiple attributes")
+      with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 )
+# 14166 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_fninfo_nt = 
+# 778 "parser_cocci_menhir.mly"
+                ( [] )
+# 14183 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fninfo_nt = Obj.magic _2 in
+        let _1 : 'tv_storage = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fninfo_nt = 
+# 780 "parser_cocci_menhir.mly"
+      ( try
+       let _ =
+         List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in
+       raise (Semantic_cocci.Semantic "duplicate storage")
+      with Not_found -> (Ast0.FStorage(_1))::_2 )
+# 14217 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fninfo_nt = Obj.magic _2 in
+        let _1 : (
+# 53 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 14244 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fninfo_nt = 
+# 786 "parser_cocci_menhir.mly"
+      ( try
+       let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in
+       raise (Semantic_cocci.Semantic "duplicate inline")
+      with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 )
+# 14254 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fninfo_nt = Obj.magic _2 in
+        let _1 : (
+# 55 "parser_cocci_menhir.mly"
+      (string * Data.clt)
+# 14281 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fninfo_nt = 
+# 791 "parser_cocci_menhir.mly"
+      ( try
+       let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in
+       raise (Semantic_cocci.Semantic "duplicate init")
+      with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 )
+# 14291 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_fun_after_dots = 
+# 1714 "parser_cocci_menhir.mly"
+                               ([])
+# 14308 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_exp = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_dots = 
+# 1715 "parser_cocci_menhir.mly"
+                               (_2)
+# 14336 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_dots = 
+# 1716 "parser_cocci_menhir.mly"
+                               (Ast0.wrap(Ast0.Exp(_1))::_2)
+# 14366 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_dots = 
+# 1717 "parser_cocci_menhir.mly"
+                                    (_1@_2)
+# 14396 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_fun_after_dots_or = 
+# 1724 "parser_cocci_menhir.mly"
+                               ([])
+# 14413 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_dots_or = 
+# 1725 "parser_cocci_menhir.mly"
+                               (_2)
+# 14441 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_dots_or = 
+# 1726 "parser_cocci_menhir.mly"
+                               (Ast0.wrap(Ast0.Exp(_1))::_2)
+# 14471 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_dots_or = 
+# 1727 "parser_cocci_menhir.mly"
+                                    (_1@_2)
+# 14501 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_exp = 
+# 1720 "parser_cocci_menhir.mly"
+                               (_1::_2)
+# 14531 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_fun_after_exp_or = 
+# 1730 "parser_cocci_menhir.mly"
+                               ([])
+# 14548 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_exp_or = 
+# 1731 "parser_cocci_menhir.mly"
+                               (_1::_2)
+# 14578 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_fun_after_stm = 
+# 1709 "parser_cocci_menhir.mly"
+                               ([])
+# 14595 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_stm = 
+# 1710 "parser_cocci_menhir.mly"
+                               (_1::_2)
+# 14625 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_fun_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_fun_after_stm = 
+# 1711 "parser_cocci_menhir.mly"
+                               (_1@_2)
+# 14655 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_fun_after_stm = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_fun_start = 
+# 1706 "parser_cocci_menhir.mly"
+                 ( Ast0.wrap(Ast0.DOTS(_1)) )
+# 14679 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_pure_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_func_ident = 
+# 1504 "parser_cocci_menhir.mly"
+         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
+# 14703 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 61 "parser_cocci_menhir.mly"
+       (Parse_aux.idinfo)
+# 14724 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_func_ident = 
+# 1506 "parser_cocci_menhir.mly"
+         ( let (nm,constraints,pure,clt) = _1 in
+        Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
+# 14732 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 61 "parser_cocci_menhir.mly"
+       (Parse_aux.idinfo)
+# 14753 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_func_ident = 
+# 1509 "parser_cocci_menhir.mly"
+         ( let (nm,constraints,pure,clt) = _1 in
+        Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) )
+# 14761 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 61 "parser_cocci_menhir.mly"
+       (Parse_aux.idinfo)
+# 14782 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_func_ident = 
+# 1512 "parser_cocci_menhir.mly"
+  ( let (nm,constraints,pure,clt) = _1 in
+        Ast0.wrap
+          (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) )
+# 14791 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = rb;
+          MenhirLib.EngineTypes.startp = _startpos_rb_;
+          MenhirLib.EngineTypes.endp = _endpos_rb_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = b;
+            MenhirLib.EngineTypes.startp = _startpos_b_;
+            MenhirLib.EngineTypes.endp = _endpos_b_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = lb;
+              MenhirLib.EngineTypes.startp = _startpos_lb_;
+              MenhirLib.EngineTypes.endp = _endpos_lb_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = rp;
+                MenhirLib.EngineTypes.startp = _startpos_rp_;
+                MenhirLib.EngineTypes.endp = _endpos_rp_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = d;
+                  MenhirLib.EngineTypes.startp = _startpos_d_;
+                  MenhirLib.EngineTypes.endp = _endpos_d_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = lp;
+                    MenhirLib.EngineTypes.startp = _startpos_lp_;
+                    MenhirLib.EngineTypes.endp = _endpos_lp_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = i;
+                      MenhirLib.EngineTypes.startp = _startpos_i_;
+                      MenhirLib.EngineTypes.endp = _endpos_i_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.startp = _startpos__2_;
+                        MenhirLib.EngineTypes.endp = _endpos__2_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.state = _menhir_s;
+                          MenhirLib.EngineTypes.semv = f;
+                          MenhirLib.EngineTypes.startp = _startpos_f_;
+                          MenhirLib.EngineTypes.endp = _endpos_f_;
+                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let rb : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 14851 "parser_cocci_menhir.ml"
+        ) = Obj.magic rb in
+        let b : 'tv_fun_start = Obj.magic b in
+        let lb : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 14857 "parser_cocci_menhir.ml"
+        ) = Obj.magic lb in
+        let rp : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 14862 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp in
+        let d : 'tv_decl_list_decl_ = Obj.magic d in
+        let lp : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 14868 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp in
+        let i : 'tv_func_ident = Obj.magic i in
+        let f : 'tv_fninfo = Obj.magic f in
+        let _startpos = _startpos_f_ in
+        let _endpos = _endpos_rb_ in
+        let _v : 'tv_fundecl = 
+# 749 "parser_cocci_menhir.mly"
+      ( P.verify_parameter_declarations (Ast0.undots d);
+       Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()),
+                              f, i,
+                              P.clt2mcode "(" lp, d,
+                              P.clt2mcode ")" rp,
+                              P.clt2mcode "{" lb, b,
+                              P.clt2mcode "}" rb)) )
+# 14883 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pt;
+          MenhirLib.EngineTypes.startp = _startpos_pt_;
+          MenhirLib.EngineTypes.endp = _endpos_pt_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = rp;
+            MenhirLib.EngineTypes.startp = _startpos_rp_;
+            MenhirLib.EngineTypes.endp = _endpos_rp_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d;
+              MenhirLib.EngineTypes.startp = _startpos_d_;
+              MenhirLib.EngineTypes.endp = _endpos_d_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = lp;
+                MenhirLib.EngineTypes.startp = _startpos_lp_;
+                MenhirLib.EngineTypes.endp = _endpos_lp_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = id;
+                  MenhirLib.EngineTypes.startp = _startpos_id_;
+                  MenhirLib.EngineTypes.endp = _endpos_id_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = t;
+                    MenhirLib.EngineTypes.startp = _startpos_t_;
+                    MenhirLib.EngineTypes.endp = _endpos_t_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pt : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 14929 "parser_cocci_menhir.ml"
+        ) = Obj.magic pt in
+        let rp : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 14934 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp in
+        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
+        let lp : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 14940 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp in
+        let id : 'tv_func_ident = Obj.magic id in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pt_ in
+        let _v : 'tv_funproto = let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 14950 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 737 "parser_cocci_menhir.mly"
+      ( Ast0.wrap
+         (Ast0.UnInit
+            (s,
+             Ast0.wrap
+               (Ast0.FunctionType(Some t,
+                                  P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
+             id, P.clt2mcode ";" pt)) )
+# 14962 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pt;
+          MenhirLib.EngineTypes.startp = _startpos_pt_;
+          MenhirLib.EngineTypes.endp = _endpos_pt_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = rp;
+            MenhirLib.EngineTypes.startp = _startpos_rp_;
+            MenhirLib.EngineTypes.endp = _endpos_rp_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d;
+              MenhirLib.EngineTypes.startp = _startpos_d_;
+              MenhirLib.EngineTypes.endp = _endpos_d_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = lp;
+                MenhirLib.EngineTypes.startp = _startpos_lp_;
+                MenhirLib.EngineTypes.endp = _endpos_lp_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = id;
+                  MenhirLib.EngineTypes.startp = _startpos_id_;
+                  MenhirLib.EngineTypes.endp = _endpos_id_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = t;
+                    MenhirLib.EngineTypes.startp = _startpos_t_;
+                    MenhirLib.EngineTypes.endp = _endpos_t_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = x0;
+                      MenhirLib.EngineTypes.startp = _startpos_x0_;
+                      MenhirLib.EngineTypes.endp = _endpos_x0_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pt : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15013 "parser_cocci_menhir.ml"
+        ) = Obj.magic pt in
+        let rp : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15018 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp in
+        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
+        let lp : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15024 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp in
+        let id : 'tv_func_ident = Obj.magic id in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pt_ in
+        let _v : 'tv_funproto = let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 15036 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 737 "parser_cocci_menhir.mly"
+      ( Ast0.wrap
+         (Ast0.UnInit
+            (s,
+             Ast0.wrap
+               (Ast0.FunctionType(Some t,
+                                  P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
+             id, P.clt2mcode ";" pt)) )
+# 15048 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_pure_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_ident = 
+# 1517 "parser_cocci_menhir.mly"
+         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
+# 15072 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 61 "parser_cocci_menhir.mly"
+       (Parse_aux.idinfo)
+# 15093 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_ident = 
+# 1519 "parser_cocci_menhir.mly"
+         ( let (nm,constraints,pure,clt) = _1 in
+         Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
+# 15101 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = i;
+          MenhirLib.EngineTypes.startp = _startpos_i_;
+          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_i_ in
+        let _v : 'tv_ident_or_const = 
+# 1471 "parser_cocci_menhir.mly"
+                    ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) )
+# 15125 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 15146 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_ident_or_const = 
+# 1473 "parser_cocci_menhir.mly"
+  ( let (x,clt) = _1 in
+        Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
+# 15154 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 80 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 15175 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_incl = 
+# 256 "parser_cocci_menhir.mly"
+                      ( let (x,_) = _1 in Data.Include(x) )
+# 15182 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 15207 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_incl = 
+# 257 "parser_cocci_menhir.mly"
+                      ( Data.Iso(Common.Left(P.id2name _2)) )
+# 15214 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : (
+# 79 "parser_cocci_menhir.mly"
+       (string)
+# 15239 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_incl = 
+# 258 "parser_cocci_menhir.mly"
+                      ( Data.Iso(Common.Right _2) )
+# 15246 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _1 : 'tv_list_incl_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 146 "parser_cocci_menhir.mly"
+      (Data.incl_iso list)
+# 15274 "parser_cocci_menhir.ml"
+        ) = 
+# 252 "parser_cocci_menhir.mly"
+                       ( _1 )
+# 15278 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _1 : 'tv_list_incl_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 146 "parser_cocci_menhir.mly"
+      (Data.incl_iso list)
+# 15306 "parser_cocci_menhir.ml"
+        ) = 
+# 253 "parser_cocci_menhir.mly"
+                       ( _1 )
+# 15310 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 80 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 15331 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_includes = 
+# 629 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+             (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)),
+                           let (arity,ln,lln,offset,col,strbef,straft,pos) =
+                             P.id2clt _1 in
+                           let clt =
+                             (arity,ln,lln,offset,0,strbef,straft,pos) in
+                           P.clt2mcode
+                             (Ast.Local (Parse_aux.str2inc (P.id2name _1)))
+                             (P.drop_bef clt))) )
+# 15346 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 80 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 15367 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_includes = 
+# 639 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+             (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)),
+                           let (arity,ln,lln,offset,col,strbef,straft,pos) =
+                             P.id2clt _1 in
+                           let clt =
+                             (arity,ln,lln,offset,0,strbef,straft,pos) in
+                           P.clt2mcode
+                             (Ast.NonLocal (Parse_aux.str2inc (P.id2name _1)))
+                             (P.drop_bef clt))) )
+# 15382 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = d;
+              MenhirLib.EngineTypes.startp = _startpos_d_;
+              MenhirLib.EngineTypes.endp = _endpos_d_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let t : 'tv_ctype = Obj.magic t in
+        let d : 'tv_defineop = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_includes = 
+# 649 "parser_cocci_menhir.mly"
+    ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in
+      d (Ast0.wrap(Ast0.DOTS([ty]))) )
+# 15417 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = b;
+            MenhirLib.EngineTypes.startp = _startpos_b_;
+            MenhirLib.EngineTypes.endp = _endpos_b_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let b : 'tv_toplevel_seq_start_toplevel_after_dots_ = Obj.magic b in
+        let _1 : 'tv_defineop = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_includes = 
+# 652 "parser_cocci_menhir.mly"
+    ( let body =
+       match b with
+         [e] ->
+           (match Ast0.unwrap e with
+             Ast0.Exp(e1) ->
+               [Ast0.rewrap e (Ast0.TopExp(Ast0.set_arg_exp (e1)))]
+           | _ -> b)
+       | _ -> b in
+      _1 (Ast0.wrap(Ast0.DOTS(body))) )
+# 15459 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_eexpr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_initialize = 
+# 1052 "parser_cocci_menhir.mly"
+      ( Ast0.wrap(Ast0.InitExpr(_1)) )
+# 15483 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15514 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_initialize_list = Obj.magic _2 in
+        let _1 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15520 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_initialize = 
+# 1054 "parser_cocci_menhir.mly"
+      ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) )
+# 15527 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in
+        let _2 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15553 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15558 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_dots_or = 
-# 1712 "parser_cocci_menhir.mly"
-                               (_2)
-# 10519 "parser_cocci_menhir.ml"
+        let _v : 'tv_initialize = 
+# 1056 "parser_cocci_menhir.mly"
+      ( Ast0.wrap
+         (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []),
+                        P.clt2mcode "}" _2)) )
+# 15567 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 65 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 15588 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_initialize = 
+# 1060 "parser_cocci_menhir.mly"
+      (let (nm,pure,clt) = _1 in
+      Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) )
+# 15596 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_initialize2 = 
+# 1066 "parser_cocci_menhir.mly"
+                            ( Ast0.wrap(Ast0.InitExpr(_1)) )
+# 15620 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15651 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_initialize_list = Obj.magic _2 in
+        let _1 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15657 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_initialize2 = 
+# 1068 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) )
+# 15664 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10538,14 +15683,128 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
+        let _2 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15690 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15695 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_dots_or = 
-# 1713 "parser_cocci_menhir.mly"
-                               (Ast0.wrap(Ast0.Exp(_1))::_2)
-# 10549 "parser_cocci_menhir.ml"
+        let _v : 'tv_initialize2 = 
+# 1070 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []),
+                      P.clt2mcode "}" _2)) )
+# 15704 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_initialize2 = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15736 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_list_designator_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_initialize2 = 
+# 1075 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) )
+# 15744 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_initialize2 = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15776 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_initialize2 = 
+# 1077 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) )
+# 15784 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_initialize_list_start = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_initialize_list = 
+# 1089 "parser_cocci_menhir.mly"
+                         ( Ast0.wrap(Ast0.DOTS(_1)) )
+# 15808 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10568,14 +15827,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15834 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_initialize2 = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_dots_or = 
-# 1714 "parser_cocci_menhir.mly"
-                                    (_1@_2)
-# 10579 "parser_cocci_menhir.ml"
+        let _v : 'tv_initialize_list_start = 
+# 1092 "parser_cocci_menhir.mly"
+                     ( [_1;Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))] )
+# 15842 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10587,25 +15850,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _3 : 'tv_initialize_list_start = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 15874 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_initialize2 = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_exp = 
-# 1707 "parser_cocci_menhir.mly"
-                               (_1::_2)
-# 10609 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_initialize_list_start = 
+# 1094 "parser_cocci_menhir.mly"
+    ( _1::Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))::_3 )
+# 15882 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10616,13 +15889,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_fun_after_exp_or = 
-# 1717 "parser_cocci_menhir.mly"
-                               ([])
-# 10626 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = r;
+          MenhirLib.EngineTypes.startp = _startpos_r_;
+          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let r : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = Obj.magic r in
+        let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos_r_ in
+        let _v : 'tv_initialize_list_start = 
+# 1097 "parser_cocci_menhir.mly"
+    ( (P.mkidots "..." d)::
+      (List.concat(List.map (function x -> x (P.mkidots "...")) r)) )
+# 15913 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10634,25 +15921,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_exp_or = 
-# 1718 "parser_cocci_menhir.mly"
-                               (_1::_2)
-# 10656 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_invalid = 
+# 1190 "parser_cocci_menhir.mly"
+           ( raise (Semantic_cocci.Semantic "not matchable") )
+# 15935 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10666,10 +15945,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
-        let _v : 'tv_fun_after_stm = 
-# 1696 "parser_cocci_menhir.mly"
-                               ([])
-# 10673 "parser_cocci_menhir.ml"
+        let _v : 'tv_is_expression = 
+# 248 "parser_cocci_menhir.mly"
+              ( false )
+# 15952 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10681,25 +15960,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_stm = 
-# 1697 "parser_cocci_menhir.mly"
-                               (_1::_2)
-# 10703 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_is_expression = 
+# 249 "parser_cocci_menhir.mly"
+              ( true )
+# 15974 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10711,25 +15982,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
             MenhirLib.EngineTypes.startp = _startpos__1_;
             MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_fun_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement = Obj.magic _1 in
+        let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_fun_after_stm = 
-# 1698 "parser_cocci_menhir.mly"
-                               (_1@_2)
-# 10733 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_ctype_ = 
+# 1874 "parser_cocci_menhir.mly"
+                ( Common.Left t )
+# 16002 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10741,19 +16010,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_fun_after_stm = Obj.magic _1 in
+        let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_fun_start = 
-# 1693 "parser_cocci_menhir.mly"
-                 ( Ast0.wrap(Ast0.DOTS(_1)) )
-# 10757 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_ctype_ = 
+# 1875 "parser_cocci_menhir.mly"
+                     ( Common.Right t )
+# 16030 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10765,19 +16038,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_pure_ident = Obj.magic _1 in
+        let t : 'tv_decl_var = Obj.magic t in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_func_ident = 
-# 1497 "parser_cocci_menhir.mly"
-         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
-# 10781 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_decl_var_ = 
+# 1874 "parser_cocci_menhir.mly"
+                ( Common.Left t )
+# 16058 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10789,24 +16066,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 61 "parser_cocci_menhir.mly"
-       (Parse_aux.idinfo)
-# 10802 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let t : 'tv_decl_var = Obj.magic t in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_func_ident = 
-# 1499 "parser_cocci_menhir.mly"
-         ( let (nm,constraints,pure,clt) = _1 in
-        Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
-# 10810 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_decl_var_ = 
+# 1875 "parser_cocci_menhir.mly"
+                     ( Common.Right t )
+# 16086 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10818,24 +16094,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 61 "parser_cocci_menhir.mly"
-       (Parse_aux.idinfo)
-# 10831 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let t : 'tv_dexpr = Obj.magic t in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_func_ident = 
-# 1502 "parser_cocci_menhir.mly"
-         ( let (nm,constraints,pure,clt) = _1 in
-        Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) )
-# 10839 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_dexpr_ = 
+# 1874 "parser_cocci_menhir.mly"
+                ( Common.Left t )
+# 16114 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10847,25 +16122,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 61 "parser_cocci_menhir.mly"
-       (Parse_aux.idinfo)
-# 10860 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let t : 'tv_dexpr = Obj.magic t in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_func_ident = 
-# 1505 "parser_cocci_menhir.mly"
-  ( let (nm,constraints,pure,clt) = _1 in
-        Ast0.wrap
-          (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) )
-# 10869 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_dexpr_ = 
+# 1875 "parser_cocci_menhir.mly"
+                     ( Common.Right t )
+# 16142 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10877,86 +16150,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = rb;
-          MenhirLib.EngineTypes.startp = _startpos_rb_;
-          MenhirLib.EngineTypes.endp = _endpos_rb_;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = lb;
-              MenhirLib.EngineTypes.startp = _startpos_lb_;
-              MenhirLib.EngineTypes.endp = _endpos_lb_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = rp;
-                MenhirLib.EngineTypes.startp = _startpos_rp_;
-                MenhirLib.EngineTypes.endp = _endpos_rp_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = d;
-                  MenhirLib.EngineTypes.startp = _startpos_d_;
-                  MenhirLib.EngineTypes.endp = _endpos_d_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = lp;
-                    MenhirLib.EngineTypes.startp = _startpos_lp_;
-                    MenhirLib.EngineTypes.endp = _endpos_lp_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = i;
-                      MenhirLib.EngineTypes.startp = _startpos_i_;
-                      MenhirLib.EngineTypes.endp = _endpos_i_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.startp = _startpos__2_;
-                        MenhirLib.EngineTypes.endp = _endpos__2_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.state = _menhir_s;
-                          MenhirLib.EngineTypes.semv = f;
-                          MenhirLib.EngineTypes.startp = _startpos_f_;
-                          MenhirLib.EngineTypes.endp = _endpos_f_;
-                          MenhirLib.EngineTypes.next = _menhir_stack;
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let rb : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 10929 "parser_cocci_menhir.ml"
-        ) = Obj.magic rb in
-        let b : 'tv_fun_start = Obj.magic b in
-        let lb : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 10935 "parser_cocci_menhir.ml"
-        ) = Obj.magic lb in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 10940 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let d : 'tv_decl_list_decl_ = Obj.magic d in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 10946 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let i : 'tv_func_ident = Obj.magic i in
-        let f : 'tv_fninfo = Obj.magic f in
-        let _startpos = _startpos_f_ in
-        let _endpos = _endpos_rb_ in
-        let _v : 'tv_fundecl = 
-# 769 "parser_cocci_menhir.mly"
-      ( Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()),
-                              f, i,
-                              P.clt2mcode "(" lp, d,
-                              P.clt2mcode ")" rp,
-                              P.clt2mcode "{" lb, b,
-                              P.clt2mcode "}" rb)) )
-# 10960 "parser_cocci_menhir.ml"
+        let t : 'tv_nest_start = Obj.magic t in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_nest_start_ = 
+# 1874 "parser_cocci_menhir.mly"
+                ( Common.Left t )
+# 16170 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10968,74 +16178,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pt;
-          MenhirLib.EngineTypes.startp = _startpos_pt_;
-          MenhirLib.EngineTypes.endp = _endpos_pt_;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp;
-            MenhirLib.EngineTypes.startp = _startpos_rp_;
-            MenhirLib.EngineTypes.endp = _endpos_rp_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = d;
-              MenhirLib.EngineTypes.startp = _startpos_d_;
-              MenhirLib.EngineTypes.endp = _endpos_d_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp;
-                MenhirLib.EngineTypes.startp = _startpos_lp_;
-                MenhirLib.EngineTypes.endp = _endpos_lp_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = id;
-                  MenhirLib.EngineTypes.startp = _startpos_id_;
-                  MenhirLib.EngineTypes.endp = _endpos_id_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = t;
-                    MenhirLib.EngineTypes.startp = _startpos_t_;
-                    MenhirLib.EngineTypes.endp = _endpos_t_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let pt : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11006 "parser_cocci_menhir.ml"
-        ) = Obj.magic pt in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11011 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11017 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let id : 'tv_func_ident = Obj.magic id in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pt_ in
-        let _v : 'tv_funproto = let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 11027 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 746 "parser_cocci_menhir.mly"
-      ( Ast0.wrap
-         (Ast0.UnInit
-            (s,
-             Ast0.wrap
-               (Ast0.FunctionType(Some t,
-                                  P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
-             id, P.clt2mcode ";" pt)) )
-# 11039 "parser_cocci_menhir.ml"
+        let t : 'tv_nest_start = Obj.magic t in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_nest_start_ = 
+# 1875 "parser_cocci_menhir.mly"
+                     ( Common.Right t )
+# 16198 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11047,81 +16206,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pt;
-          MenhirLib.EngineTypes.startp = _startpos_pt_;
-          MenhirLib.EngineTypes.endp = _endpos_pt_;
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp;
-            MenhirLib.EngineTypes.startp = _startpos_rp_;
-            MenhirLib.EngineTypes.endp = _endpos_rp_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = d;
-              MenhirLib.EngineTypes.startp = _startpos_d_;
-              MenhirLib.EngineTypes.endp = _endpos_d_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp;
-                MenhirLib.EngineTypes.startp = _startpos_lp_;
-                MenhirLib.EngineTypes.endp = _endpos_lp_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = id;
-                  MenhirLib.EngineTypes.startp = _startpos_id_;
-                  MenhirLib.EngineTypes.endp = _endpos_id_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = t;
-                    MenhirLib.EngineTypes.startp = _startpos_t_;
-                    MenhirLib.EngineTypes.endp = _endpos_t_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = x0;
-                      MenhirLib.EngineTypes.startp = _startpos_x0_;
-                      MenhirLib.EngineTypes.endp = _endpos_x0_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let pt : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11090 "parser_cocci_menhir.ml"
-        ) = Obj.magic pt in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11095 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11101 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let id : 'tv_func_ident = Obj.magic id in
-        let t : 'tv_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pt_ in
-        let _v : 'tv_funproto = let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 11113 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 746 "parser_cocci_menhir.mly"
-      ( Ast0.wrap
-         (Ast0.UnInit
-            (s,
-             Ast0.wrap
-               (Ast0.FunctionType(Some t,
-                                  P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
-             id, P.clt2mcode ";" pt)) )
-# 11125 "parser_cocci_menhir.ml"
+        let t : 'tv_single_statement = Obj.magic t in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_single_statement_ = 
+# 1874 "parser_cocci_menhir.mly"
+                ( Common.Left t )
+# 16226 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = t;
+          MenhirLib.EngineTypes.startp = _startpos_t_;
+          MenhirLib.EngineTypes.endp = _endpos_t_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let t : 'tv_single_statement = Obj.magic t in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_t_ in
+        let _v : 'tv_iso_single_statement_ = 
+# 1875 "parser_cocci_menhir.mly"
+                     ( Common.Right t )
+# 16254 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11133,79 +16262,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pt;
-          MenhirLib.EngineTypes.startp = _startpos_pt_;
-          MenhirLib.EngineTypes.endp = _endpos_pt_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp;
-            MenhirLib.EngineTypes.startp = _startpos_rp_;
-            MenhirLib.EngineTypes.endp = _endpos_rp_;
+            MenhirLib.EngineTypes.semv = el;
+            MenhirLib.EngineTypes.startp = _startpos_el_;
+            MenhirLib.EngineTypes.endp = _endpos_el_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = d;
-              MenhirLib.EngineTypes.startp = _startpos_d_;
-              MenhirLib.EngineTypes.endp = _endpos_d_;
+              MenhirLib.EngineTypes.semv = e1;
+              MenhirLib.EngineTypes.startp = _startpos_e1_;
+              MenhirLib.EngineTypes.endp = _endpos_e1_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp;
-                MenhirLib.EngineTypes.startp = _startpos_lp_;
-                MenhirLib.EngineTypes.endp = _endpos_lp_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = id;
-                  MenhirLib.EngineTypes.startp = _startpos_id_;
-                  MenhirLib.EngineTypes.endp = _endpos_id_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = t;
-                    MenhirLib.EngineTypes.startp = _startpos_t_;
-                    MenhirLib.EngineTypes.endp = _endpos_t_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pt : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11171 "parser_cocci_menhir.ml"
-        ) = Obj.magic pt in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11176 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11182 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let id : 'tv_func_ident = Obj.magic id in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11188 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pt_ in
-        let _v : 'tv_funproto = let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 11196 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 755 "parser_cocci_menhir.mly"
-    ( let t = Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-      Ast0.wrap
-        (Ast0.UnInit
-          (s,
-           Ast0.wrap
-             (Ast0.FunctionType(Some t,
-                                P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
-           id, P.clt2mcode ";" pt)) )
-# 11209 "parser_cocci_menhir.ml"
+        let el : 'tv_list_iso_dexpr__ = Obj.magic el in
+        let e1 : 'tv_dexpr = Obj.magic e1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 162 "parser_cocci_menhir.mly"
+      (Ast0_cocci.anything list list)
+# 16292 "parser_cocci_menhir.ml"
+        ) = 
+# 1846 "parser_cocci_menhir.mly"
+    ( P.iso_adjust (function x -> Ast0.ExprTag x) e1 el )
+# 16296 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11217,86 +16304,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pt;
-          MenhirLib.EngineTypes.startp = _startpos_pt_;
-          MenhirLib.EngineTypes.endp = _endpos_pt_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp;
-            MenhirLib.EngineTypes.startp = _startpos_rp_;
-            MenhirLib.EngineTypes.endp = _endpos_rp_;
+            MenhirLib.EngineTypes.semv = el;
+            MenhirLib.EngineTypes.startp = _startpos_el_;
+            MenhirLib.EngineTypes.endp = _endpos_el_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = d;
-              MenhirLib.EngineTypes.startp = _startpos_d_;
-              MenhirLib.EngineTypes.endp = _endpos_d_;
+              MenhirLib.EngineTypes.semv = e1;
+              MenhirLib.EngineTypes.startp = _startpos_e1_;
+              MenhirLib.EngineTypes.endp = _endpos_e1_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp;
-                MenhirLib.EngineTypes.startp = _startpos_lp_;
-                MenhirLib.EngineTypes.endp = _endpos_lp_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = id;
-                  MenhirLib.EngineTypes.startp = _startpos_id_;
-                  MenhirLib.EngineTypes.endp = _endpos_id_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = t;
-                    MenhirLib.EngineTypes.startp = _startpos_t_;
-                    MenhirLib.EngineTypes.endp = _endpos_t_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = x0;
-                      MenhirLib.EngineTypes.startp = _startpos_x0_;
-                      MenhirLib.EngineTypes.endp = _endpos_x0_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pt : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11260 "parser_cocci_menhir.ml"
-        ) = Obj.magic pt in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11265 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 11271 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let id : 'tv_func_ident = Obj.magic id in
-        let t : (
-# 50 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11277 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pt_ in
-        let _v : 'tv_funproto = let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 11287 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 755 "parser_cocci_menhir.mly"
-    ( let t = Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-      Ast0.wrap
-        (Ast0.UnInit
-          (s,
-           Ast0.wrap
-             (Ast0.FunctionType(Some t,
-                                P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
-           id, P.clt2mcode ";" pt)) )
-# 11300 "parser_cocci_menhir.ml"
+        let el : 'tv_list_iso_dexpr__ = Obj.magic el in
+        let e1 : 'tv_dexpr = Obj.magic e1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 162 "parser_cocci_menhir.mly"
+      (Ast0_cocci.anything list list)
+# 16334 "parser_cocci_menhir.ml"
+        ) = 
+# 1848 "parser_cocci_menhir.mly"
+    ( P.iso_adjust (function x -> Ast0.ArgExprTag x) e1 el )
+# 16338 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11308,31 +16346,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = r0;
-          MenhirLib.EngineTypes.startp = _startpos_r0_;
-          MenhirLib.EngineTypes.endp = _endpos_r0_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = el;
+            MenhirLib.EngineTypes.startp = _startpos_el_;
+            MenhirLib.EngineTypes.endp = _endpos_el_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = e1;
+              MenhirLib.EngineTypes.startp = _startpos_e1_;
+              MenhirLib.EngineTypes.endp = _endpos_e1_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let r0 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11321 "parser_cocci_menhir.ml"
-        ) = Obj.magic r0 in
-        let _startpos = _startpos_r0_ in
-        let _endpos = _endpos_r0_ in
-        let _v : 'tv_generic_ctype = let q =
-          let r = r0 in
-          
-# 589 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) )
-# 11330 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 513 "parser_cocci_menhir.mly"
-                          ( q None )
-# 11336 "parser_cocci_menhir.ml"
+        let el : 'tv_list_iso_dexpr__ = Obj.magic el in
+        let e1 : 'tv_dexpr = Obj.magic e1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 162 "parser_cocci_menhir.mly"
+      (Ast0_cocci.anything list list)
+# 16376 "parser_cocci_menhir.ml"
+        ) = 
+# 1850 "parser_cocci_menhir.mly"
+    ( P.iso_adjust (function x -> Ast0.TestExprTag x) e1 el )
+# 16380 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11344,31 +16388,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = r0;
-          MenhirLib.EngineTypes.startp = _startpos_r0_;
-          MenhirLib.EngineTypes.endp = _endpos_r0_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = sl;
+            MenhirLib.EngineTypes.startp = _startpos_sl_;
+            MenhirLib.EngineTypes.endp = _endpos_sl_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = s1;
+              MenhirLib.EngineTypes.startp = _startpos_s1_;
+              MenhirLib.EngineTypes.endp = _endpos_s1_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let r0 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11357 "parser_cocci_menhir.ml"
-        ) = Obj.magic r0 in
-        let _startpos = _startpos_r0_ in
-        let _endpos = _endpos_r0_ in
-        let _v : 'tv_generic_ctype = let q =
-          let r = r0 in
-          
-# 591 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) )
-# 11366 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 513 "parser_cocci_menhir.mly"
-                          ( q None )
-# 11372 "parser_cocci_menhir.ml"
+        let sl : 'tv_list_iso_single_statement__ = Obj.magic sl in
+        let s1 : 'tv_single_statement = Obj.magic s1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 162 "parser_cocci_menhir.mly"
+      (Ast0_cocci.anything list list)
+# 16418 "parser_cocci_menhir.ml"
+        ) = 
+# 1852 "parser_cocci_menhir.mly"
+    ( P.iso_adjust (function x -> Ast0.StmtTag x) s1 sl )
+# 16422 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11380,19 +16430,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = tl;
+            MenhirLib.EngineTypes.startp = _startpos_tl_;
+            MenhirLib.EngineTypes.endp = _endpos_tl_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = t1;
+              MenhirLib.EngineTypes.startp = _startpos_t1_;
+              MenhirLib.EngineTypes.endp = _endpos_t1_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_generic_ctype_full = Obj.magic _1 in
+        let tl : 'tv_list_iso_ctype__ = Obj.magic tl in
+        let t1 : 'tv_ctype = Obj.magic t1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_generic_ctype = 
-# 514 "parser_cocci_menhir.mly"
-                          ( _1 )
-# 11396 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 162 "parser_cocci_menhir.mly"
+      (Ast0_cocci.anything list list)
+# 16460 "parser_cocci_menhir.ml"
+        ) = 
+# 1854 "parser_cocci_menhir.mly"
+    ( P.iso_adjust (function x -> Ast0.TypeCTag x) t1 tl )
+# 16464 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11404,49 +16472,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = el;
+            MenhirLib.EngineTypes.startp = _startpos_el_;
+            MenhirLib.EngineTypes.endp = _endpos_el_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = e1;
+              MenhirLib.EngineTypes.startp = _startpos_e1_;
+              MenhirLib.EngineTypes.endp = _endpos_e1_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11422 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11427 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 589 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) )
-# 11438 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11444 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 466 "parser_cocci_menhir.mly"
-        ( q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) )
-# 11450 "parser_cocci_menhir.ml"
+        let el : 'tv_list_iso_nest_start__ = Obj.magic el in
+        let e1 : 'tv_nest_start = Obj.magic e1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 162 "parser_cocci_menhir.mly"
+      (Ast0_cocci.anything list list)
+# 16502 "parser_cocci_menhir.ml"
+        ) = 
+# 1856 "parser_cocci_menhir.mly"
+    ( P.iso_adjust (function x -> Ast0.DotsStmtTag x) e1 el )
+# 16506 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11458,49 +16514,50 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = dl;
+            MenhirLib.EngineTypes.startp = _startpos_dl_;
+            MenhirLib.EngineTypes.endp = _endpos_dl_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d1;
+              MenhirLib.EngineTypes.startp = _startpos_d1_;
+              MenhirLib.EngineTypes.endp = _endpos_d1_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11476 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11481 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 591 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) )
-# 11492 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11498 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 466 "parser_cocci_menhir.mly"
-        ( q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) )
-# 11504 "parser_cocci_menhir.ml"
+        let dl : 'tv_list_iso_decl_var__ = Obj.magic dl in
+        let d1 : 'tv_decl_var = Obj.magic d1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 162 "parser_cocci_menhir.mly"
+      (Ast0_cocci.anything list list)
+# 16544 "parser_cocci_menhir.ml"
+        ) = 
+# 1858 "parser_cocci_menhir.mly"
+    ( let check_one = function
+       [x] -> x
+      | _ ->
+         raise
+           (Semantic_cocci.Semantic
+              "only one variable per declaration in an isomorphism rule") in
+    let d1 = check_one d1 in
+    let dl =
+      List.map
+       (function
+           Common.Left x -> Common.Left(check_one x)
+         | Common.Right x -> Common.Right(check_one x))
+       dl in
+    P.iso_adjust (function x -> Ast0.DeclTag x) d1 dl )
+# 16561 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11513,29 +16570,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11525 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          
-# 595 "parser_cocci_menhir.mly"
-                ( function x -> x )
-# 11533 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 466 "parser_cocci_menhir.mly"
-        ( q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) )
-# 11539 "parser_cocci_menhir.ml"
+        let m : 'tv_metadec = Obj.magic m in
+        let _startpos = _startpos_m_ in
+        let _endpos = _endpos_m_ in
+        let _v : (
+# 165 "parser_cocci_menhir.mly"
+      ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
+# 16585 "parser_cocci_menhir.ml"
+        ) = 
+# 182 "parser_cocci_menhir.mly"
+                         ( m "" )
+# 16589 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11547,49 +16597,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.semv = nm;
+            MenhirLib.EngineTypes.startp = _startpos_nm_;
+            MenhirLib.EngineTypes.endp = _endpos_nm_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11565 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11570 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 589 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) )
-# 11581 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11587 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 468 "parser_cocci_menhir.mly"
-        ( q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty]))))
-# 11593 "parser_cocci_menhir.ml"
+        let nm : 'tv_pure_ident = Obj.magic nm in
+        let _startpos = _startpos_nm_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 149 "parser_cocci_menhir.mly"
+      (Ast_cocci.rulename)
+# 16617 "parser_cocci_menhir.ml"
+        ) = 
+# 197 "parser_cocci_menhir.mly"
+                      ( P.make_iso_rule_name_result (P.id2name nm) )
+# 16621 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11601,49 +16629,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11619 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11624 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 591 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) )
-# 11635 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11641 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 468 "parser_cocci_menhir.mly"
-        ( q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty]))))
-# 11647 "parser_cocci_menhir.ml"
+        let _1 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 16642 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_iter_ident = 
+# 1531 "parser_cocci_menhir.mly"
+         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
+# 16649 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11656,29 +16658,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11668 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          
-# 595 "parser_cocci_menhir.mly"
-                ( function x -> x )
-# 11676 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 468 "parser_cocci_menhir.mly"
-        ( q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty]))))
-# 11682 "parser_cocci_menhir.ml"
+        let _1 : (
+# 62 "parser_cocci_menhir.mly"
+       (Parse_aux.idinfo)
+# 16670 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_iter_ident = 
+# 1533 "parser_cocci_menhir.mly"
+         ( let (nm,constraints,pure,clt) = _1 in
+         Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
+# 16678 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11687,52 +16683,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos;
           MenhirLib.EngineTypes.next = _menhir_stack;
           });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11708 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11713 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 589 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) )
-# 11724 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11730 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 470 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) )
-# 11736 "parser_cocci_menhir.ml"
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_TMul_ = 
+# 114 "standard.mly"
+    ( [] )
+# 16695 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11744,49 +16703,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11762 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11767 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 591 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) )
-# 11778 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11784 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 470 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) )
-# 11790 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_TMul_ = Obj.magic xs in
+        let x : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 16722 "parser_cocci_menhir.ml"
+        ) = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_TMul_ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 16729 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11797,31 +16736,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11811 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          
-# 595 "parser_cocci_menhir.mly"
-                ( function x -> x )
-# 11819 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 470 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) )
-# 11825 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_array_dec_ = 
+# 114 "standard.mly"
+    ( [] )
+# 16746 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11833,23 +16754,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let t : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11846 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_generic_ctype_full = 
-# 472 "parser_cocci_menhir.mly"
-         ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" t])) )
-# 11853 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_array_dec_ = Obj.magic xs in
+        let x : 'tv_array_dec = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_array_dec_ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 16776 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11860,24 +16783,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let t : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11874 "parser_cocci_menhir.ml"
-        ) = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_generic_ctype_full = 
-# 474 "parser_cocci_menhir.mly"
-         ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" t])) )
-# 11881 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_case_line_ = 
+# 114 "standard.mly"
+    ( [] )
+# 16793 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11889,49 +16801,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11907 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11912 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 589 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) )
-# 11923 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11929 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 476 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) )
-# 11935 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_case_line_ = Obj.magic xs in
+        let x : 'tv_case_line = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_case_line_ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 16823 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11942,50 +16830,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11961 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 11966 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 591 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) )
-# 11977 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 11983 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 476 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) )
-# 11989 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_comma_decls_TEllipsis_decl__ = 
+# 114 "standard.mly"
+    ( [] )
+# 16840 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11997,30 +16848,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = ty;
-          MenhirLib.EngineTypes.startp = _startpos_ty_;
-          MenhirLib.EngineTypes.endp = _endpos_ty_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12010 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
-        let _endpos = _endpos_ty_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          
-# 595 "parser_cocci_menhir.mly"
-                ( function x -> x )
-# 12018 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 476 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) )
-# 12024 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic xs in
+        let x : 'tv_comma_decls_TEllipsis_decl_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_comma_decls_TEllipsis_decl__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 16870 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12031,63 +16877,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = ty1;
-          MenhirLib.EngineTypes.startp = _startpos_ty1_;
-          MenhirLib.EngineTypes.endp = _endpos_ty1_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = r00;
-              MenhirLib.EngineTypes.startp = _startpos_r00_;
-              MenhirLib.EngineTypes.endp = _endpos_r00_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let ty1 : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12055 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty1 in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12060 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12065 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty1_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 589 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) )
-# 12076 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 12082 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 478 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap
-               (Ast0.BaseType
-                  (Ast.LongLongType,
-                     [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) )
-# 12091 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = 
+# 114 "standard.mly"
+    ( [] )
+# 16887 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12099,62 +16895,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ty1;
-          MenhirLib.EngineTypes.startp = _startpos_ty1_;
-          MenhirLib.EngineTypes.endp = _endpos_ty1_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = r00;
-              MenhirLib.EngineTypes.startp = _startpos_r00_;
-              MenhirLib.EngineTypes.endp = _endpos_r00_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ty1 : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12122 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty1 in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12127 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12132 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_ty1_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 591 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) )
-# 12143 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 12149 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 478 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap
-               (Ast0.BaseType
-                  (Ast.LongLongType,
-                     [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) )
-# 12158 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic xs in
+        let x : 'tv_comma_decls_TEllipsis_name_opt_decl_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 16917 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12165,44 +16924,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = ty1;
-          MenhirLib.EngineTypes.startp = _startpos_ty1_;
-          MenhirLib.EngineTypes.endp = _endpos_ty1_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = ty;
-            MenhirLib.EngineTypes.startp = _startpos_ty_;
-            MenhirLib.EngineTypes.endp = _endpos_ty_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let ty1 : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12184 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty1 in
-        let ty : (
-# 49 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12189 "parser_cocci_menhir.ml"
-        ) = Obj.magic ty in
-        let _startpos = _startpos_ty_ in
-        let _endpos = _endpos_ty1_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          
-# 595 "parser_cocci_menhir.mly"
-                ( function x -> x )
-# 12197 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 478 "parser_cocci_menhir.mly"
-         ( q (Ast0.wrap
-               (Ast0.BaseType
-                  (Ast.LongLongType,
-                     [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) )
-# 12206 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_designator_ = 
+# 114 "standard.mly"
+    ( [] )
+# 16934 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12214,29 +16942,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = s;
-            MenhirLib.EngineTypes.startp = _startpos_s_;
-            MenhirLib.EngineTypes.endp = _endpos_s_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let i : 'tv_ident = Obj.magic i in
-        let s : (
-# 50 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12233 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_generic_ctype_full = 
-# 483 "parser_cocci_menhir.mly"
-  ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) )
-# 12240 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_designator_ = Obj.magic xs in
+        let x : 'tv_designator = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_designator_ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 16964 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_dp_comma_args_TEllipsis__ = 
+# 114 "standard.mly"
+    ( [] )
+# 16981 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12248,25 +16989,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = s;
-            MenhirLib.EngineTypes.startp = _startpos_s_;
-            MenhirLib.EngineTypes.endp = _endpos_s_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let i : 'tv_ident = Obj.magic i in
-        let s : 'tv_struct_or_union = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_generic_ctype_full = 
-# 485 "parser_cocci_menhir.mly"
-  ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) )
-# 12270 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic xs in
+        let x : 'tv_dp_comma_args_TEllipsis_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_dp_comma_args_TEllipsis__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17011 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12277,57 +17018,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = l;
-              MenhirLib.EngineTypes.startp = _startpos_l_;
-              MenhirLib.EngineTypes.endp = _endpos_l_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = s;
-                MenhirLib.EngineTypes.startp = _startpos_s_;
-                MenhirLib.EngineTypes.endp = _endpos_s_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
-          } = _menhir_stack in
-        let r : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 12306 "parser_cocci_menhir.ml"
-        ) = Obj.magic r in
-        let d : 'tv_struct_decl_list = Obj.magic d in
-        let l : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 12312 "parser_cocci_menhir.ml"
-        ) = Obj.magic l in
-        let s : 'tv_struct_or_union = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_generic_ctype_full = let i =
-          
-# 39 "standard.mly"
-    ( None )
-# 12321 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 488 "parser_cocci_menhir.mly"
-  ( (if i = None && !Data.in_iso
-          then failwith "structures must be named in the iso file");
-           Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
-                                        P.clt2mcode "{" l,
-                                        d, P.clt2mcode "}" r)) )
-# 12331 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_incl_ = 
+# 114 "standard.mly"
+    ( [] )
+# 17028 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12339,63 +17036,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = l;
-              MenhirLib.EngineTypes.startp = _startpos_l_;
-              MenhirLib.EngineTypes.endp = _endpos_l_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = x0;
-                MenhirLib.EngineTypes.startp = _startpos_x0_;
-                MenhirLib.EngineTypes.endp = _endpos_x0_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = s;
-                  MenhirLib.EngineTypes.startp = _startpos_s_;
-                  MenhirLib.EngineTypes.endp = _endpos_s_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let r : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 12372 "parser_cocci_menhir.ml"
-        ) = Obj.magic r in
-        let d : 'tv_struct_decl_list = Obj.magic d in
-        let l : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 12378 "parser_cocci_menhir.ml"
-        ) = Obj.magic l in
-        let x0 : 'tv_ident = Obj.magic x0 in
-        let s : 'tv_struct_or_union = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_generic_ctype_full = let i =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 12389 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 488 "parser_cocci_menhir.mly"
-  ( (if i = None && !Data.in_iso
-          then failwith "structures must be named in the iso file");
-           Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
-                                        P.clt2mcode "{" l,
-                                        d, P.clt2mcode "}" r)) )
-# 12399 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_incl_ = Obj.magic xs in
+        let x : 'tv_incl = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_incl_ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17058 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12406,54 +17065,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = l;
-              MenhirLib.EngineTypes.startp = _startpos_l_;
-              MenhirLib.EngineTypes.endp = _endpos_l_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = s;
-                MenhirLib.EngineTypes.startp = _startpos_s_;
-                MenhirLib.EngineTypes.endp = _endpos_s_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
-          } = _menhir_stack in
-        let r : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 12435 "parser_cocci_menhir.ml"
-        ) = Obj.magic r in
-        let d : 'tv_struct_decl_list = Obj.magic d in
-        let l : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 12441 "parser_cocci_menhir.ml"
-        ) = Obj.magic l in
-        let s : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 12446 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_generic_ctype_full = 
-# 494 "parser_cocci_menhir.mly"
-  ( let (nm,pure,clt) = s in
-        let ty =
-          Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
-        Ast0.wrap
-          (Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) )
-# 12457 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_iso_ctype__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17075 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12465,42 +17083,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = p;
-          MenhirLib.EngineTypes.startp = _startpos_p_;
-          MenhirLib.EngineTypes.endp = _endpos_p_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = r;
-              MenhirLib.EngineTypes.startp = _startpos_r_;
-              MenhirLib.EngineTypes.endp = _endpos_r_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let p : (
-# 59 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 12487 "parser_cocci_menhir.ml"
-        ) = Obj.magic p in
-        let r : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 12492 "parser_cocci_menhir.ml"
-        ) = Obj.magic r in
-        let _startpos = _startpos_r_ in
-        let _endpos = _endpos_p_ in
-        let _v : 'tv_generic_ctype_full = 
-# 500 "parser_cocci_menhir.mly"
-  ( let nm = (r,P.id2name p) in
-        (* this is only possible when we are in a metavar decl.  Otherwise,
-           it will be represented already as a MetaType *)
-        let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
-        Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
-                                Ast0.Impure (*will be ignored*))) )
-# 12504 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_iso_ctype__ = Obj.magic xs in
+        let x : 'tv_iso_ctype_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_iso_ctype__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17105 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12511,24 +17112,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = p;
-          MenhirLib.EngineTypes.startp = _startpos_p_;
-          MenhirLib.EngineTypes.endp = _endpos_p_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let p : (
-# 59 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 12525 "parser_cocci_menhir.ml"
-        ) = Obj.magic p in
-        let _startpos = _startpos_p_ in
-        let _endpos = _endpos_p_ in
-        let _v : 'tv_generic_ctype_full = 
-# 507 "parser_cocci_menhir.mly"
-  ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) )
-# 12532 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_iso_decl_var__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17122 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12540,50 +17130,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = p;
-          MenhirLib.EngineTypes.startp = _startpos_p_;
-          MenhirLib.EngineTypes.endp = _endpos_p_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let p : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 12558 "parser_cocci_menhir.ml"
-        ) = Obj.magic p in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12563 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_p_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 589 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) )
-# 12574 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 12580 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 509 "parser_cocci_menhir.mly"
-  ( let (nm,pure,clt) = p in
-        q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) )
-# 12587 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_iso_decl_var__ = Obj.magic xs in
+        let x : 'tv_iso_decl_var_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_iso_decl_var__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17152 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12594,51 +17159,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = p;
-          MenhirLib.EngineTypes.startp = _startpos_p_;
-          MenhirLib.EngineTypes.endp = _endpos_p_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = r00;
-            MenhirLib.EngineTypes.startp = _startpos_r00_;
-            MenhirLib.EngineTypes.endp = _endpos_r00_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let p : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 12613 "parser_cocci_menhir.ml"
-        ) = Obj.magic p in
-        let r00 : (
-# 51 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 12618 "parser_cocci_menhir.ml"
-        ) = Obj.magic r00 in
-        let _startpos = _startpos_r00_ in
-        let _endpos = _endpos_p_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          let r0 = r00 in
-          let s =
-            let r = r0 in
-            
-# 591 "parser_cocci_menhir.mly"
-   ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) )
-# 12629 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 594 "parser_cocci_menhir.mly"
-                  ( function x -> s (Some x) )
-# 12635 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 509 "parser_cocci_menhir.mly"
-  ( let (nm,pure,clt) = p in
-        q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) )
-# 12642 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_iso_dexpr__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17169 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12650,31 +17177,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = p;
-          MenhirLib.EngineTypes.startp = _startpos_p_;
-          MenhirLib.EngineTypes.endp = _endpos_p_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let p : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 12663 "parser_cocci_menhir.ml"
-        ) = Obj.magic p in
-        let _startpos = _startpos_p_ in
-        let _endpos = _endpos_p_ in
-        let _v : 'tv_generic_ctype_full = let q =
-          
-# 595 "parser_cocci_menhir.mly"
-                ( function x -> x )
-# 12671 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 509 "parser_cocci_menhir.mly"
-  ( let (nm,pure,clt) = p in
-        q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) )
-# 12678 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_iso_dexpr__ = Obj.magic xs in
+        let x : 'tv_iso_dexpr_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_iso_dexpr__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17199 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12685,20 +17206,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_pure_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_ident = 
-# 1510 "parser_cocci_menhir.mly"
-         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
-# 12702 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_iso_nest_start__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17216 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12710,24 +17224,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 61 "parser_cocci_menhir.mly"
-       (Parse_aux.idinfo)
-# 12723 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_ident = 
-# 1512 "parser_cocci_menhir.mly"
-         ( let (nm,constraints,pure,clt) = _1 in
-         Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
-# 12731 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_iso_nest_start__ = Obj.magic xs in
+        let x : 'tv_iso_nest_start_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_iso_nest_start__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17246 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12738,20 +17253,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_ident_or_const = 
-# 1464 "parser_cocci_menhir.mly"
-                    ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) )
-# 12755 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_iso_single_statement__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17263 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12763,24 +17271,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 12776 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_ident_or_const = 
-# 1466 "parser_cocci_menhir.mly"
-  ( let (x,clt) = _1 in
-        Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 12784 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_iso_single_statement__ = Obj.magic xs in
+        let x : 'tv_iso_single_statement_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_iso_single_statement__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17293 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12791,28 +17300,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let _2 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 12809 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_incl = 
-# 257 "parser_cocci_menhir.mly"
-                      ( Common.Left(P.id2name _2) )
-# 12816 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_mzl_ctype__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17310 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12824,27 +17318,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 79 "parser_cocci_menhir.mly"
-       (string)
-# 12841 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_incl = 
-# 258 "parser_cocci_menhir.mly"
-                      ( Common.Right _2 )
-# 12848 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_mzl_ctype__ = Obj.magic xs in
+        let x : 'tv_mzl_ctype_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_mzl_ctype__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17340 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12855,28 +17347,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let _1 : 'tv_list_incl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 146 "parser_cocci_menhir.mly"
-      ((string,string) Common.either list)
-# 12876 "parser_cocci_menhir.ml"
-        ) = 
-# 253 "parser_cocci_menhir.mly"
-                       ( _1 )
-# 12880 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_mzl_eexpr__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17357 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12888,27 +17365,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _1 : 'tv_list_incl_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 146 "parser_cocci_menhir.mly"
-      ((string,string) Common.either list)
-# 12908 "parser_cocci_menhir.ml"
-        ) = 
-# 254 "parser_cocci_menhir.mly"
-                       ( _1 )
-# 12912 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_mzl_eexpr__ = Obj.magic xs in
+        let x : 'tv_mzl_eexpr_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_mzl_eexpr__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17387 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12919,32 +17394,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : (
-# 80 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 12933 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_includes = 
-# 638 "parser_cocci_menhir.mly"
-    ( Ast0.wrap
-             (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)),
-                           let (arity,ln,lln,offset,col,strbef,straft,pos) =
-                             P.id2clt _1 in
-                           let clt =
-                             (arity,ln,lln,offset,0,strbef,straft,pos) in
-                           P.clt2mcode
-                             (Ast.Local (Parse_aux.str2inc (P.id2name _1)))
-                             (P.drop_bef clt))) )
-# 12948 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_mzl_fun_after_dots_or__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17404 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12956,31 +17412,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 80 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 12969 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_includes = 
-# 648 "parser_cocci_menhir.mly"
-    ( Ast0.wrap
-             (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)),
-                           let (arity,ln,lln,offset,col,strbef,straft,pos) =
-                             P.id2clt _1 in
-                           let clt =
-                             (arity,ln,lln,offset,0,strbef,straft,pos) in
-                           P.clt2mcode
-                             (Ast.NonLocal (Parse_aux.str2inc (P.id2name _1)))
-                             (P.drop_bef clt))) )
-# 12984 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic xs in
+        let x : 'tv_mzl_fun_after_dots_or_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_mzl_fun_after_dots_or__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17434 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12991,31 +17441,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = d;
-              MenhirLib.EngineTypes.startp = _startpos_d_;
-              MenhirLib.EngineTypes.endp = _endpos_d_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let t : 'tv_ctype = Obj.magic t in
-        let d : 'tv_defineop = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_includes = 
-# 658 "parser_cocci_menhir.mly"
-    ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in
-      d (Ast0.wrap(Ast0.DOTS([ty]))) )
-# 13019 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_mzl_fun_start__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17451 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13027,37 +17459,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let b : 'tv_toplevel_seq_start_toplevel_after_dots_ = Obj.magic b in
-        let _1 : 'tv_defineop = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_includes = 
-# 661 "parser_cocci_menhir.mly"
-    ( let body =
-       match b with
-         [e] ->
-           (match Ast0.unwrap e with
-             Ast0.Exp(e1) ->
-               [Ast0.rewrap e (Ast0.TopExp(Ast0.set_arg_exp (e1)))]
-           | _ -> b)
-       | _ -> b in
-      _1 (Ast0.wrap(Ast0.DOTS(body))) )
-# 13061 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_mzl_fun_start__ = Obj.magic xs in
+        let x : 'tv_mzl_fun_start_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_mzl_fun_start__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17481 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13068,20 +17488,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_eexpr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_initialize = 
-# 1075 "parser_cocci_menhir.mly"
-      ( Ast0.wrap(Ast0.InitExpr(_1)) )
-# 13085 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_mzl_rule_elem_statement__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17498 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13093,39 +17506,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _3 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13116 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_initialize_list = Obj.magic _2 in
-        let _1 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13122 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_initialize = 
-# 1077 "parser_cocci_menhir.mly"
-      ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) )
-# 13129 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_mzl_rule_elem_statement__ = Obj.magic xs in
+        let x : 'tv_mzl_rule_elem_statement_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_mzl_rule_elem_statement__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17528 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_mzl_statement__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17545 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13137,35 +17553,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13155 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13160 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_initialize = 
-# 1079 "parser_cocci_menhir.mly"
-      ( Ast0.wrap
-         (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []),
-                        P.clt2mcode "}" _2)) )
-# 13169 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_mzl_statement__ = Obj.magic xs in
+        let x : 'tv_mzl_statement_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_mzl_statement__ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17575 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13176,25 +17582,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : (
-# 65 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 13190 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_initialize = 
-# 1083 "parser_cocci_menhir.mly"
-      (let (nm,pure,clt) = _1 in
-      Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) )
-# 13198 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = 
+# 114 "standard.mly"
+    ( [] )
+# 17592 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13206,19 +17600,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = y0;
+            MenhirLib.EngineTypes.startp = _startpos_y0_;
+            MenhirLib.EngineTypes.endp = _endpos_y0_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_initialize2 = 
-# 1089 "parser_cocci_menhir.mly"
-                            ( Ast0.wrap(Ast0.InitExpr(_1)) )
-# 13222 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic xs in
+        let y0 : 'tv_dexpr = Obj.magic y0 in
+        let x0 : 'tv_edots_when_TEllipsis_eexpr_ = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = let x =
+          let y = y0 in
+          let x = x0 in
+          
+# 70 "standard.mly"
+    ( (x, y) )
+# 17631 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 116 "standard.mly"
+    ( x :: xs )
+# 17637 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13229,40 +17644,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let _3 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13253 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_initialize_list = Obj.magic _2 in
-        let _1 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13259 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_initialize2 = 
-# 1091 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) )
-# 13266 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_list_whenppdecs_ = 
+# 114 "standard.mly"
+    ( [] )
+# 17654 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13274,35 +17662,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13292 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13297 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_initialize2 = 
-# 1093 "parser_cocci_menhir.mly"
-    ( Ast0.wrap
-       (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []),
-                      P.clt2mcode "}" _2)) )
-# 13306 "parser_cocci_menhir.ml"
+        let xs : 'tv_list_whenppdecs_ = Obj.magic xs in
+        let x : 'tv_whenppdecs = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_list_whenppdecs_ = 
+# 116 "standard.mly"
+    ( x :: xs )
+# 17684 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13313,36 +17691,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let _3 : 'tv_initialize2 = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13338 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_list_designator_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_initialize2 = 
-# 1098 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) )
-# 13346 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_choose_iso_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17701 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13354,35 +17709,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_initialize2 = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13378 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_initialize2 = 
-# 1100 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) )
-# 13386 "parser_cocci_menhir.ml"
+        let x : 'tv_choose_iso = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_choose_iso_ = 
+# 59 "standard.mly"
+    ( x )
+# 17725 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_disable_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17742 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13395,18 +17751,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_initialize_list_start = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_initialize_list = 
-# 1112 "parser_cocci_menhir.mly"
-                         ( Ast0.wrap(Ast0.DOTS(_1)) )
-# 13410 "parser_cocci_menhir.ml"
+        let x : 'tv_disable = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_disable_ = 
+# 59 "standard.mly"
+    ( x )
+# 17766 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13417,30 +17773,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13436 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_initialize2 = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_initialize_list_start = 
-# 1115 "parser_cocci_menhir.mly"
-                     ( [_1;Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))] )
-# 13444 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_filespec_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17783 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13452,35 +17791,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_initialize_list_start = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 13476 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_initialize2 = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_initialize_list_start = 
-# 1117 "parser_cocci_menhir.mly"
-    ( _1::Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))::_3 )
-# 13484 "parser_cocci_menhir.ml"
+        let x : 'tv_filespec = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_filespec_ = 
+# 59 "standard.mly"
+    ( x )
+# 17807 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13491,27 +17814,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let r : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = Obj.magic r in
-        let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_initialize_list_start = 
-# 1120 "parser_cocci_menhir.mly"
-    ( (P.mkidots "..." d)::
-      (List.concat(List.map (function x -> x (P.mkidots "...")) r)) )
-# 13515 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_minus_start_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17824 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13524,16 +17833,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_invalid = 
-# 1213 "parser_cocci_menhir.mly"
-           ( raise (Semantic_cocci.Semantic "not matchable") )
-# 13537 "parser_cocci_menhir.ml"
+        let x : 'tv_minus_start = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_minus_start_ = 
+# 59 "standard.mly"
+    ( x )
+# 17848 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13547,10 +17858,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
-        let _v : 'tv_is_expression = 
-# 249 "parser_cocci_menhir.mly"
-              ( false )
-# 13554 "parser_cocci_menhir.ml"
+        let _v : 'tv_loption_not_ceq_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17865 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13563,16 +17874,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_is_expression = 
-# 250 "parser_cocci_menhir.mly"
-              ( true )
-# 13576 "parser_cocci_menhir.ml"
+        let x : 'tv_not_ceq = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_not_ceq_ = 
+# 59 "standard.mly"
+    ( x )
+# 17889 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13583,24 +17896,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_ctype_ = 
-# 1866 "parser_cocci_menhir.mly"
-                ( Common.Left t )
-# 13604 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_not_eq_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17906 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13612,51 +17914,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_ctype_ = 
-# 1867 "parser_cocci_menhir.mly"
-                     ( Common.Right t )
-# 13632 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
           } = _menhir_stack in
-        let t : 'tv_decl_var = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_decl_var_ = 
-# 1866 "parser_cocci_menhir.mly"
-                ( Common.Left t )
-# 13660 "parser_cocci_menhir.ml"
+        let x : 'tv_not_eq = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_not_eq_ = 
+# 59 "standard.mly"
+    ( x )
+# 17930 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13667,24 +17937,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let t : 'tv_decl_var = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_decl_var_ = 
-# 1867 "parser_cocci_menhir.mly"
-                     ( Common.Right t )
-# 13688 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_not_eqe_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17947 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13696,23 +17955,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let t : 'tv_dexpr = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_dexpr_ = 
-# 1866 "parser_cocci_menhir.mly"
-                ( Common.Left t )
-# 13716 "parser_cocci_menhir.ml"
+        let x : 'tv_not_eqe = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_not_eqe_ = 
+# 59 "standard.mly"
+    ( x )
+# 17971 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13723,24 +17978,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let t : 'tv_dexpr = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_dexpr_ = 
-# 1867 "parser_cocci_menhir.mly"
-                     ( Common.Right t )
-# 13744 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_not_pos_ = 
+# 57 "standard.mly"
+    ( [] )
+# 17988 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13752,23 +17996,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let t : 'tv_nest_start = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_nest_start_ = 
-# 1866 "parser_cocci_menhir.mly"
-                ( Common.Left t )
-# 13772 "parser_cocci_menhir.ml"
+        let x : 'tv_not_pos = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_not_pos_ = 
+# 59 "standard.mly"
+    ( x )
+# 18012 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13779,24 +18019,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let t : 'tv_nest_start = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_nest_start_ = 
-# 1867 "parser_cocci_menhir.mly"
-                     ( Common.Right t )
-# 13800 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_loption_plus_start_ = 
+# 57 "standard.mly"
+    ( [] )
+# 18029 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13808,23 +18037,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let t : 'tv_single_statement = Obj.magic t in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_single_statement_ = 
-# 1866 "parser_cocci_menhir.mly"
-                ( Common.Left t )
-# 13828 "parser_cocci_menhir.ml"
+        let x : 'tv_plus_start = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_loption_plus_start_ = 
+# 59 "standard.mly"
+    ( x )
+# 18053 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13836,23 +18061,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.state = _menhir_s;
           MenhirLib.EngineTypes.semv = t;
           MenhirLib.EngineTypes.startp = _startpos_t_;
           MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let t : 'tv_single_statement = Obj.magic t in
-        let _startpos = _startpos__1_ in
+        let t : 'tv_typedef_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
         let _endpos = _endpos_t_ in
-        let _v : 'tv_iso_single_statement_ = 
-# 1867 "parser_cocci_menhir.mly"
-                     ( Common.Right t )
-# 13856 "parser_cocci_menhir.ml"
+        let _v : 'tv_meta_exp_type = 
+# 453 "parser_cocci_menhir.mly"
+    ( [Ast0_cocci.ast0_type_to_type t] )
+# 18077 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13864,16 +18085,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = el;
-            MenhirLib.EngineTypes.startp = _startpos_el_;
-            MenhirLib.EngineTypes.endp = _endpos_el_;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = e1;
-              MenhirLib.EngineTypes.startp = _startpos_e1_;
-              MenhirLib.EngineTypes.endp = _endpos_e1_;
+              MenhirLib.EngineTypes.semv = t;
+              MenhirLib.EngineTypes.startp = _startpos_t_;
+              MenhirLib.EngineTypes.endp = _endpos_t_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
                 MenhirLib.EngineTypes.startp = _startpos__1_;
@@ -13883,18 +18104,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let el : 'tv_list_iso_dexpr__ = Obj.magic el in
-        let e1 : 'tv_dexpr = Obj.magic e1 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let t : 'tv_comma_list_ctype_ = Obj.magic t in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 162 "parser_cocci_menhir.mly"
-      (Ast0_cocci.anything list list)
-# 13894 "parser_cocci_menhir.ml"
-        ) = 
-# 1838 "parser_cocci_menhir.mly"
-    ( P.iso_adjust (function x -> Ast0.ExprTag x) e1 el )
-# 13898 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_meta_exp_type = 
+# 455 "parser_cocci_menhir.mly"
+    ( List.map
+       (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m)
+       t )
+# 18117 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13906,37 +18125,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = el;
-            MenhirLib.EngineTypes.startp = _startpos_el_;
-            MenhirLib.EngineTypes.endp = _endpos_el_;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = e1;
-              MenhirLib.EngineTypes.startp = _startpos_e1_;
-              MenhirLib.EngineTypes.endp = _endpos_e1_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let el : 'tv_list_iso_dexpr__ = Obj.magic el in
-        let e1 : 'tv_dexpr = Obj.magic e1 in
+        let _3 : 'tv_pure_ident = Obj.magic _3 in
+        let _1 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 18148 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_meta_ident = 
+# 1376 "parser_cocci_menhir.mly"
+                                 ( (Some _1,P.id2name _3) )
+# 18155 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let m : 'tv_metadec = Obj.magic m in
+        let _startpos = _startpos_m_ in
+        let _endpos = _endpos_m_ in
         let _v : (
-# 162 "parser_cocci_menhir.mly"
-      (Ast0_cocci.anything list list)
-# 13936 "parser_cocci_menhir.ml"
+# 157 "parser_cocci_menhir.mly"
+      ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
+# 18179 "parser_cocci_menhir.ml"
         ) = 
-# 1840 "parser_cocci_menhir.mly"
-    ( P.iso_adjust (function x -> Ast0.ArgExprTag x) e1 el )
-# 13940 "parser_cocci_menhir.ml"
+# 181 "parser_cocci_menhir.mly"
+                       ( m (!Ast0.rule_name) )
+# 18183 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13948,37 +18191,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = el;
-            MenhirLib.EngineTypes.startp = _startpos_el_;
-            MenhirLib.EngineTypes.endp = _endpos_el_;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = e1;
-              MenhirLib.EngineTypes.startp = _startpos_e1_;
-              MenhirLib.EngineTypes.endp = _endpos_e1_;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let el : 'tv_list_iso_dexpr__ = Obj.magic el in
-        let e1 : 'tv_dexpr = Obj.magic e1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 162 "parser_cocci_menhir.mly"
-      (Ast0_cocci.anything list list)
-# 13978 "parser_cocci_menhir.ml"
-        ) = 
-# 1842 "parser_cocci_menhir.mly"
-    ( P.iso_adjust (function x -> Ast0.TestExprTag x) e1 el )
-# 13982 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 318 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta ->
+      let tok = check_meta(Ast.MetaParamDecl(arity,name)) in
+      !Data.add_param_meta name pure; tok) )
+# 18230 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18236 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13990,37 +18244,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = sl;
-            MenhirLib.EngineTypes.startp = _startpos_sl_;
-            MenhirLib.EngineTypes.endp = _endpos_sl_;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = s1;
-              MenhirLib.EngineTypes.startp = _startpos_s1_;
-              MenhirLib.EngineTypes.endp = _endpos_s1_;
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let sl : 'tv_list_iso_single_statement__ = Obj.magic sl in
-        let s1 : 'tv_single_statement = Obj.magic s1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 162 "parser_cocci_menhir.mly"
-      (Ast0_cocci.anything list list)
-# 14020 "parser_cocci_menhir.ml"
-        ) = 
-# 1844 "parser_cocci_menhir.mly"
-    ( P.iso_adjust (function x -> Ast0.StmtTag x) s1 sl )
-# 14024 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 322 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta ->
+      let tok = check_meta(Ast.MetaParamListDecl(arity,name,None)) in
+      !Data.add_paramlist_meta name None pure; tok) )
+# 18287 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18293 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14032,37 +18301,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = tl;
-            MenhirLib.EngineTypes.startp = _startpos_tl_;
-            MenhirLib.EngineTypes.endp = _endpos_tl_;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = t1;
-              MenhirLib.EngineTypes.startp = _startpos_t1_;
-              MenhirLib.EngineTypes.endp = _endpos_t1_;
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let tl : 'tv_list_iso_ctype__ = Obj.magic tl in
-        let t1 : 'tv_ctype = Obj.magic t1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 162 "parser_cocci_menhir.mly"
-      (Ast0_cocci.anything list list)
-# 14062 "parser_cocci_menhir.ml"
-        ) = 
-# 1846 "parser_cocci_menhir.mly"
-    ( P.iso_adjust (function x -> Ast0.TypeCTag x) t1 tl )
-# 14066 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 326 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta ->
+      let tok = check_meta(Ast.MetaExpListDecl(arity,name,None)) in
+      !Data.add_explist_meta name None pure; tok) )
+# 18344 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18350 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14074,37 +18358,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = el;
-            MenhirLib.EngineTypes.startp = _startpos_el_;
-            MenhirLib.EngineTypes.endp = _endpos_el_;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = e1;
-              MenhirLib.EngineTypes.startp = _startpos_e1_;
-              MenhirLib.EngineTypes.endp = _endpos_e1_;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let el : 'tv_list_iso_nest_start__ = Obj.magic el in
-        let e1 : 'tv_nest_start = Obj.magic e1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 162 "parser_cocci_menhir.mly"
-      (Ast0_cocci.anything list list)
-# 14104 "parser_cocci_menhir.ml"
-        ) = 
-# 1848 "parser_cocci_menhir.mly"
-    ( P.iso_adjust (function x -> Ast0.DotsStmtTag x) e1 el )
-# 14108 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 330 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta ->
+      let tok = check_meta(Ast.MetaTypeDecl(arity,name)) in
+      !Data.add_type_meta name pure; tok) )
+# 18397 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18403 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14116,50 +18411,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = dl;
-            MenhirLib.EngineTypes.startp = _startpos_dl_;
-            MenhirLib.EngineTypes.endp = _endpos_dl_;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = d1;
-              MenhirLib.EngineTypes.startp = _startpos_d1_;
-              MenhirLib.EngineTypes.endp = _endpos_d1_;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let dl : 'tv_list_iso_decl_var__ = Obj.magic dl in
-        let d1 : 'tv_decl_var = Obj.magic d1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 162 "parser_cocci_menhir.mly"
-      (Ast0_cocci.anything list list)
-# 14146 "parser_cocci_menhir.ml"
-        ) = 
-# 1850 "parser_cocci_menhir.mly"
-    ( let check_one = function
-       [x] -> x
-      | _ ->
-         raise
-           (Semantic_cocci.Semantic
-              "only one variable per declaration in an isomorphism rule") in
-    let d1 = check_one d1 in
-    let dl =
-      List.map
-       (function
-           Common.Left x -> Common.Left(check_one x)
-         | Common.Right x -> Common.Right(check_one x))
-       dl in
-    P.iso_adjust (function x -> Ast0.DeclTag x) d1 dl )
-# 14163 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 334 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta ->
+      let tok = check_meta(Ast.MetaInitDecl(arity,name)) in
+      !Data.add_init_meta name pure; tok) )
+# 18450 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18456 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14171,23 +18464,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = m;
-          MenhirLib.EngineTypes.startp = _startpos_m_;
-          MenhirLib.EngineTypes.endp = _endpos_m_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let m : 'tv_metadec = Obj.magic m in
-        let _startpos = _startpos_m_ in
-        let _endpos = _endpos_m_ in
-        let _v : (
-# 165 "parser_cocci_menhir.mly"
-      ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
-# 14187 "parser_cocci_menhir.ml"
-        ) = 
-# 182 "parser_cocci_menhir.mly"
-                         ( m "" )
-# 14191 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 338 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta ->
+      let tok = check_meta(Ast.MetaStmDecl(arity,name)) in
+      !Data.add_stm_meta name pure; tok) )
+# 18503 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18509 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14199,27 +18517,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = nm;
-            MenhirLib.EngineTypes.startp = _startpos_nm_;
-            MenhirLib.EngineTypes.endp = _endpos_nm_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let nm : 'tv_pure_ident = Obj.magic nm in
-        let _startpos = _startpos_nm_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 149 "parser_cocci_menhir.mly"
-      (Ast_cocci.rulename)
-# 14219 "parser_cocci_menhir.ml"
-        ) = 
-# 197 "parser_cocci_menhir.mly"
-                      ( P.make_iso_rule_name_result (P.id2name nm) )
-# 14223 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 342 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta ->
+      let tok = check_meta(Ast.MetaStmListDecl(arity,name)) in
+      !Data.add_stmlist_meta name pure; tok) )
+# 18560 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18566 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14231,23 +18574,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 59 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 14244 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_iter_ident = 
-# 1524 "parser_cocci_menhir.mly"
-         ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
-# 14251 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 346 "parser_cocci_menhir.mly"
+    ( (fun arity (_,name) pure check_meta ->
+      if arity = Ast.NONE && pure = Ast0.Impure
+      then (!Data.add_type_name name; [])
+      else raise (Semantic_cocci.Semantic "bad typedef")) )
+# 18614 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18620 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14259,24 +18628,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 62 "parser_cocci_menhir.mly"
-       (Parse_aux.idinfo)
-# 14272 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_iter_ident = 
-# 1526 "parser_cocci_menhir.mly"
-         ( let (nm,constraints,pure,clt) = _1 in
-         Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) )
-# 14280 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 351 "parser_cocci_menhir.mly"
+    ( (fun arity (_,name) pure check_meta ->
+      if arity = Ast.NONE && pure = Ast0.Impure
+      then (!Data.add_declarer_name name; [])
+      else raise (Semantic_cocci.Semantic "bad declarer")) )
+# 18672 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18678 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14287,13 +18685,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_TMul_ = 
-# 114 "standard.mly"
-    ( [] )
-# 14297 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 356 "parser_cocci_menhir.mly"
+    ( (fun arity (_,name) pure check_meta ->
+      if arity = Ast.NONE && pure = Ast0.Impure
+      then (!Data.add_iterator_name name; [])
+      else raise (Semantic_cocci.Semantic "bad iterator")) )
+# 18730 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 263 "parser_cocci_menhir.mly"
+    ( P.create_metadec ar ispure kindfn ids )
+# 18736 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14305,46 +18744,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_TMul_ = Obj.magic xs in
-        let x : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 14324 "parser_cocci_menhir.ml"
-        ) = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_TMul_ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14331 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_array_dec_ = 
-# 114 "standard.mly"
-    ( [] )
-# 14348 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = Obj.magic ids in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 312 "parser_cocci_menhir.mly"
+    ( (fun name check_meta seed ->
+      let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in
+      !Data.add_fresh_id_meta name; tok) )
+# 18775 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 266 "parser_cocci_menhir.mly"
+    ( P.create_fresh_metadec kindfn ids )
+# 18781 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14356,25 +18789,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_array_dec_ = Obj.magic xs in
-        let x : 'tv_array_dec = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_array_dec_ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14378 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 364 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaIdDecl(arity,name)) in
+      !Data.add_id_meta name constraints pure; tok) )
+# 18828 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 270 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 18834 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14385,13 +18841,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_case_line_ = 
-# 114 "standard.mly"
-    ( [] )
-# 14395 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 368 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaFuncDecl(arity,name)) in
+      !Data.add_func_meta name constraints pure; tok) )
+# 18881 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 270 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 18887 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14403,25 +18895,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_case_line_ = Obj.magic xs in
-        let x : 'tv_case_line = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_case_line_ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14425 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 372 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaLocalFuncDecl(arity,name)) in
+      !Data.add_local_func_meta name constraints pure;
+      tok) )
+# 18939 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 270 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 18945 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14432,13 +18952,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_comma_decls_TEllipsis_decl__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14442 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 377 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaDeclarerDecl(arity,name)) in
+      !Data.add_declarer_meta name constraints pure; tok) )
+# 18992 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 270 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 18998 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14450,25 +19006,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic xs in
-        let x : 'tv_comma_decls_TEllipsis_decl_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_comma_decls_TEllipsis_decl__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14472 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 381 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaIteratorDecl(arity,name)) in
+      !Data.add_iterator_meta name constraints pure; tok) )
+# 19045 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 270 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19051 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14479,13 +19058,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14489 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 387 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaErrDecl(arity,name)) in
+      !Data.add_err_meta name constraints pure; tok) )
+# 19098 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19104 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14497,25 +19112,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l0;
+                MenhirLib.EngineTypes.startp = _startpos_l0_;
+                MenhirLib.EngineTypes.endp = _endpos_l0_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic xs in
-        let x : 'tv_comma_decls_TEllipsis_name_opt_decl_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14519 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let l0 : 'tv_option_TLocal_ = Obj.magic l0 in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          let l = l0 in
+          let ty =
+            
+# 39 "standard.mly"
+    ( None )
+# 19157 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 391 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      match l with
+       None ->
+         !Data.add_idexp_meta ty name constraints pure;
+         check_meta(Ast.MetaIdExpDecl(arity,name,ty))
+      | Some _ ->
+         !Data.add_local_idexp_meta ty name constraints pure;
+         check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
+# 19170 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19176 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14526,13 +19183,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_designator_ = 
-# 114 "standard.mly"
-    ( [] )
-# 14536 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__7_;
+          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = x00;
+              MenhirLib.EngineTypes.startp = _startpos_x00_;
+              MenhirLib.EngineTypes.endp = _endpos_x00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__4_;
+                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = l0;
+                  MenhirLib.EngineTypes.startp = _startpos_l0_;
+                  MenhirLib.EngineTypes.endp = _endpos_l0_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = ispure;
+                    MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                    MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = ar;
+                      MenhirLib.EngineTypes.startp = _startpos_ar_;
+                      MenhirLib.EngineTypes.endp = _endpos_ar_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let x00 : 'tv_meta_exp_type = Obj.magic x00 in
+        let l0 : 'tv_option_TLocal_ = Obj.magic l0 in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__7_ in
+        let _v : 'tv_metadec = let kindfn =
+          let x0 = x00 in
+          let l = l0 in
+          let ty =
+            let x = x0 in
+            
+# 41 "standard.mly"
+    ( Some x )
+# 19237 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 391 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      match l with
+       None ->
+         !Data.add_idexp_meta ty name constraints pure;
+         check_meta(Ast.MetaIdExpDecl(arity,name,ty))
+      | Some _ ->
+         !Data.add_local_idexp_meta ty name constraints pure;
+         check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
+# 19250 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19256 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14544,42 +19264,68 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__7_;
+          MenhirLib.EngineTypes.endp = _endpos__7_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = m0;
+              MenhirLib.EngineTypes.startp = _startpos_m0_;
+              MenhirLib.EngineTypes.endp = _endpos_m0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__4_;
+                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = l0;
+                  MenhirLib.EngineTypes.startp = _startpos_l0_;
+                  MenhirLib.EngineTypes.endp = _endpos_l0_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = ispure;
+                    MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                    MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = ar;
+                      MenhirLib.EngineTypes.startp = _startpos_ar_;
+                      MenhirLib.EngineTypes.endp = _endpos_ar_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_designator_ = Obj.magic xs in
-        let x : 'tv_designator = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_designator_ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14566 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_dp_comma_args_TEllipsis__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14583 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in
+        let l0 : 'tv_option_TLocal_ = Obj.magic l0 in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__7_ in
+        let _v : 'tv_metadec = let kindfn =
+          let m = m0 in
+          let l = l0 in
+          
+# 400 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in
+      match l with
+       None ->
+         !Data.add_idexp_meta ty name constraints pure;
+         check_meta(Ast.MetaIdExpDecl(arity,name,ty))
+      | Some _ ->
+         !Data.add_local_idexp_meta ty name constraints pure;
+         check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
+# 19323 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19329 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14591,42 +19337,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = m0;
+              MenhirLib.EngineTypes.startp = _startpos_m0_;
+              MenhirLib.EngineTypes.endp = _endpos_m0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic xs in
-        let x : 'tv_dp_comma_args_TEllipsis_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_dp_comma_args_TEllipsis__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14613 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_incl_ = 
-# 114 "standard.mly"
-    ( [] )
-# 14630 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          let m = m0 in
+          
+# 410 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in
+      let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
+      !Data.add_exp_meta ty name constraints pure; tok) )
+# 19384 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19390 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14638,42 +19398,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__7_;
+          MenhirLib.EngineTypes.endp = _endpos__7_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__5_;
+              MenhirLib.EngineTypes.endp = _endpos__5_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__4_;
+                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = vl0;
+                  MenhirLib.EngineTypes.startp = _startpos_vl0_;
+                  MenhirLib.EngineTypes.endp = _endpos_vl0_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = ispure;
+                    MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                    MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = ar;
+                      MenhirLib.EngineTypes.startp = _startpos_ar_;
+                      MenhirLib.EngineTypes.endp = _endpos_ar_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_incl_ = Obj.magic xs in
-        let x : 'tv_incl = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_incl_ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14660 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_iso_ctype__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14677 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__7_ in
+        let _v : 'tv_metadec = let kindfn =
+          let vl = vl0 in
+          
+# 415 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let ty = Some (List.map (function x -> Type_cocci.Array x) vl) in
+      let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
+      !Data.add_exp_meta ty name constraints pure; tok) )
+# 19449 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19455 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14685,42 +19463,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_iso_ctype__ = Obj.magic xs in
-        let x : 'tv_iso_ctype_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_iso_ctype__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14707 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_iso_decl_var__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14724 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          let ty =
+            
+# 39 "standard.mly"
+    ( None )
+# 19501 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 420 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in
+      !Data.add_const_meta ty name constraints pure; tok) )
+# 19509 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19515 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14732,42 +19523,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = x00;
+              MenhirLib.EngineTypes.startp = _startpos_x00_;
+              MenhirLib.EngineTypes.endp = _endpos_x00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = ispure;
+                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = ar;
+                    MenhirLib.EngineTypes.startp = _startpos_ar_;
+                    MenhirLib.EngineTypes.endp = _endpos_ar_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_iso_decl_var__ = Obj.magic xs in
-        let x : 'tv_iso_decl_var_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_iso_decl_var__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14754 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_iso_dexpr__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14771 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
+        let x00 : 'tv_meta_exp_type = Obj.magic x00 in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__6_ in
+        let _v : 'tv_metadec = let kindfn =
+          let x0 = x00 in
+          let ty =
+            let x = x0 in
+            
+# 41 "standard.mly"
+    ( Some x )
+# 19569 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 420 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in
+      !Data.add_const_meta ty name constraints pure; tok) )
+# 19577 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 274 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19583 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14779,25 +19591,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_iso_dexpr__ = Obj.magic xs in
-        let x : 'tv_iso_dexpr_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_iso_dexpr__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14801 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          
+# 426 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in
+      !Data.add_exp_meta None name constraints pure; tok) )
+# 19630 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 278 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19636 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14808,13 +19643,68 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_iso_nest_start__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14818 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = vl0;
+              MenhirLib.EngineTypes.startp = _startpos_vl0_;
+              MenhirLib.EngineTypes.endp = _endpos_vl0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = ispure;
+                MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in
+        let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = let kindfn =
+          let vl = vl0 in
+          
+# 430 "parser_cocci_menhir.mly"
+    ( (fun arity name pure check_meta constraints ->
+      let ty = Some vl in
+      List.iter
+       (function c ->
+         match Ast0.unwrap c with
+           Ast0.Constant(_) ->
+             if not
+                 (List.exists
+                    (function
+                        Type_cocci.BaseType(Type_cocci.IntType) -> true
+                      | Type_cocci.BaseType(Type_cocci.ShortType) -> true
+                      | Type_cocci.BaseType(Type_cocci.LongType) -> true
+                      | _ -> false)
+                    vl)
+             then failwith "metavariable with int constraint must be an int"
+         | _ -> ())
+       constraints;
+      let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
+      !Data.add_exp_meta ty name constraints pure; tok) )
+# 19702 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 278 "parser_cocci_menhir.mly"
+    ( P.create_metadec_ne ar ispure kindfn ids )
+# 19708 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14826,42 +19716,45 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = a;
+              MenhirLib.EngineTypes.startp = _startpos_a_;
+              MenhirLib.EngineTypes.endp = _endpos_a_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = ar;
+                  MenhirLib.EngineTypes.startp = _startpos_ar_;
+                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_iso_nest_start__ = Obj.magic xs in
-        let x : 'tv_iso_nest_start_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_iso_nest_start__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14848 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_iso_single_statement__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14865 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic ids in
+        let a : 'tv_option_TPosAny_ = Obj.magic a in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_metadec = 
+# 284 "parser_cocci_menhir.mly"
+    ( (if !Data.in_generating
+      then failwith "position variables not allowed in a generated rule file");
+      let kindfn arity name pure check_meta constraints =
+      let tok = check_meta(Ast.MetaPosDecl(arity,name)) in
+      let any = match a with None -> Ast.PER | Some _ -> Ast.ALL in
+      !Data.add_pos_meta name constraints any; tok in
+    P.create_metadec_ne ar false kindfn ids )
+# 19758 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14873,42 +19766,62 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__9_;
+          MenhirLib.EngineTypes.endp = _endpos__9_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__7_;
+              MenhirLib.EngineTypes.endp = _endpos__7_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = id;
+                MenhirLib.EngineTypes.startp = _startpos_id_;
+                MenhirLib.EngineTypes.endp = _endpos_id_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.startp = _startpos__5_;
+                  MenhirLib.EngineTypes.endp = _endpos__5_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.startp = _startpos__4_;
+                    MenhirLib.EngineTypes.endp = _endpos__4_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.startp = _startpos__3_;
+                      MenhirLib.EngineTypes.endp = _endpos__3_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = ispure;
+                        MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                        MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.state = _menhir_s;
+                          MenhirLib.EngineTypes.semv = ar;
+                          MenhirLib.EngineTypes.startp = _startpos_ar_;
+                          MenhirLib.EngineTypes.endp = _endpos_ar_;
+                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_iso_single_statement__ = Obj.magic xs in
-        let x : 'tv_iso_single_statement_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_iso_single_statement__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14895 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_mzl_ctype__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14912 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__9_ in
+        let _v : 'tv_metadec = 
+# 294 "parser_cocci_menhir.mly"
+    ( P.create_len_metadec ar ispure
+       (fun lenname arity name pure check_meta ->
+         let tok =
+           check_meta(Ast.MetaParamListDecl(arity,name,Some lenname)) in
+         !Data.add_paramlist_meta name (Some lenname) pure; tok)
+       id ids )
+# 19825 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14920,25 +19833,62 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__9_;
+          MenhirLib.EngineTypes.endp = _endpos__9_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ids;
+            MenhirLib.EngineTypes.startp = _startpos_ids_;
+            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__7_;
+              MenhirLib.EngineTypes.endp = _endpos__7_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = id;
+                MenhirLib.EngineTypes.startp = _startpos_id_;
+                MenhirLib.EngineTypes.endp = _endpos_id_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.startp = _startpos__5_;
+                  MenhirLib.EngineTypes.endp = _endpos__5_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.startp = _startpos__4_;
+                    MenhirLib.EngineTypes.endp = _endpos__4_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.startp = _startpos__3_;
+                      MenhirLib.EngineTypes.endp = _endpos__3_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = ispure;
+                        MenhirLib.EngineTypes.startp = _startpos_ispure_;
+                        MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.state = _menhir_s;
+                          MenhirLib.EngineTypes.semv = ar;
+                          MenhirLib.EngineTypes.startp = _startpos_ar_;
+                          MenhirLib.EngineTypes.endp = _endpos_ar_;
+                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let xs : 'tv_list_mzl_ctype__ = Obj.magic xs in
-        let x : 'tv_mzl_ctype_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_mzl_ctype__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14942 "parser_cocci_menhir.ml"
+        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
+        let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in
+        let ispure : 'tv_pure = Obj.magic ispure in
+        let ar : 'tv_arity = Obj.magic ar in
+        let _startpos = _startpos_ar_ in
+        let _endpos = _endpos__9_ in
+        let _v : 'tv_metadec = 
+# 303 "parser_cocci_menhir.mly"
+    ( P.create_len_metadec ar ispure
+       (fun lenname arity name pure check_meta ->
+         let tok =
+           check_meta(Ast.MetaExpListDecl(arity,name,Some lenname)) in
+         !Data.add_explist_meta name (Some lenname) pure; tok)
+       id ids )
+# 19892 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14949,13 +19899,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_mzl_eexpr__ = 
-# 114 "standard.mly"
-    ( [] )
-# 14959 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_list_mzl_ctype__ = Obj.magic b in
+        let a : 'tv_ctype = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_midzero_list_ctype_ctype_ = 
+# 1816 "parser_cocci_menhir.mly"
+     ( let (mids,code) = List.split b in (mids,(a::code)) )
+# 19922 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14967,25 +19930,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_list_mzl_eexpr__ = Obj.magic xs in
-        let x : 'tv_mzl_eexpr_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_mzl_eexpr__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 14989 "parser_cocci_menhir.ml"
+        let b : 'tv_list_mzl_eexpr__ = Obj.magic b in
+        let a : 'tv_eexpr = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_midzero_list_eexpr_eexpr_ = 
+# 1816 "parser_cocci_menhir.mly"
+     ( let (mids,code) = List.split b in (mids,(a::code)) )
+# 19952 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14996,13 +19959,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_mzl_fun_after_dots_or__ = 
-# 114 "standard.mly"
-    ( [] )
-# 15006 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_list_mzl_eexpr__ = Obj.magic b in
+        let a : 'tv_expr = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_midzero_list_expr_eexpr_ = 
+# 1816 "parser_cocci_menhir.mly"
+     ( let (mids,code) = List.split b in (mids,(a::code)) )
+# 19982 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15014,25 +19990,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic xs in
-        let x : 'tv_mzl_fun_after_dots_or_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_mzl_fun_after_dots_or__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 15036 "parser_cocci_menhir.ml"
+        let b : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic b in
+        let a : 'tv_fun_after_stm = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = 
+# 1816 "parser_cocci_menhir.mly"
+     ( let (mids,code) = List.split b in (mids,(a::code)) )
+# 20012 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15043,13 +20019,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_mzl_fun_start__ = 
-# 114 "standard.mly"
-    ( [] )
-# 15053 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_list_mzl_fun_start__ = Obj.magic b in
+        let a : 'tv_fun_start = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_midzero_list_fun_start_fun_start_ = 
+# 1816 "parser_cocci_menhir.mly"
+     ( let (mids,code) = List.split b in (mids,(a::code)) )
+# 20042 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15061,25 +20050,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_list_mzl_fun_start__ = Obj.magic xs in
-        let x : 'tv_mzl_fun_start_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_mzl_fun_start__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 15083 "parser_cocci_menhir.ml"
+        let b : 'tv_list_mzl_rule_elem_statement__ = Obj.magic b in
+        let a : 'tv_rule_elem_statement = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = 
+# 1816 "parser_cocci_menhir.mly"
+     ( let (mids,code) = List.split b in (mids,(a::code)) )
+# 20072 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15090,13 +20079,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_mzl_rule_elem_statement__ = 
-# 114 "standard.mly"
-    ( [] )
-# 15100 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_list_mzl_statement__ = Obj.magic b in
+        let a : 'tv_statement = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_midzero_list_statement_statement_ = 
+# 1816 "parser_cocci_menhir.mly"
+     ( let (mids,code) = List.split b in (mids,(a::code)) )
+# 20102 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15108,25 +20110,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.semv = f;
+            MenhirLib.EngineTypes.startp = _startpos_f_;
+            MenhirLib.EngineTypes.endp = _endpos_f_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_list_mzl_rule_elem_statement__ = Obj.magic xs in
-        let x : 'tv_mzl_rule_elem_statement_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_mzl_rule_elem_statement__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 15130 "parser_cocci_menhir.ml"
+        let b : 'tv_loption_minus_start_ = Obj.magic b in
+        let f : 'tv_loption_filespec_ = Obj.magic f in
+        let _startpos = _startpos_f_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_minus_body = 
+# 597 "parser_cocci_menhir.mly"
+    ( match f@b(*@ew*) with
+      [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
+    | code -> Top_level.top_level code )
+# 20134 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15137,13 +20141,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_mzl_statement__ = 
-# 114 "standard.mly"
-    ( [] )
-# 15147 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = f;
+            MenhirLib.EngineTypes.startp = _startpos_f_;
+            MenhirLib.EngineTypes.endp = _endpos_f_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_top_eexpr = Obj.magic b in
+        let f : 'tv_loption_filespec_ = Obj.magic f in
+        let _startpos = _startpos_f_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_minus_exp_body = 
+# 611 "parser_cocci_menhir.mly"
+    ( match f@[b](*@ew*) with
+      [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
+    | code -> Top_level.top_level code )
+# 20166 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15155,25 +20174,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_list_mzl_statement__ = Obj.magic xs in
-        let x : 'tv_mzl_statement_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_mzl_statement__ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 15177 "parser_cocci_menhir.ml"
+        let _1 : 'tv_minus_exp_body = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 137 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 20194 "parser_cocci_menhir.ml"
+        ) = 
+# 177 "parser_cocci_menhir.mly"
+                                   ( _1 )
+# 20198 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15184,13 +20205,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = 
-# 114 "standard.mly"
-    ( [] )
-# 15194 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = m;
+            MenhirLib.EngineTypes.startp = _startpos_m_;
+            MenhirLib.EngineTypes.endp = _endpos_m_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let m : 'tv_minus_exp_body = Obj.magic m in
+        let _startpos = _startpos_m_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 137 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 20226 "parser_cocci_menhir.ml"
+        ) = 
+# 177 "parser_cocci_menhir.mly"
+                                                                       ( m )
+# 20230 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15202,40 +20238,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = y0;
-            MenhirLib.EngineTypes.startp = _startpos_y0_;
-            MenhirLib.EngineTypes.endp = _endpos_y0_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x0;
-              MenhirLib.EngineTypes.startp = _startpos_x0_;
-              MenhirLib.EngineTypes.endp = _endpos_x0_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = m;
+            MenhirLib.EngineTypes.startp = _startpos_m_;
+            MenhirLib.EngineTypes.endp = _endpos_m_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic xs in
-        let y0 : 'tv_dexpr = Obj.magic y0 in
-        let x0 : 'tv_edots_when_TEllipsis_eexpr_ = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = let x =
-          let y = y0 in
-          let x = x0 in
-          
-# 70 "standard.mly"
-    ( (x, y) )
-# 15233 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 116 "standard.mly"
-    ( x :: xs )
-# 15239 "parser_cocci_menhir.ml"
+        let m : 'tv_minus_exp_body = Obj.magic m in
+        let _startpos = _startpos_m_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 137 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 20258 "parser_cocci_menhir.ml"
+        ) = 
+# 178 "parser_cocci_menhir.mly"
+                         ( m )
+# 20262 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15246,13 +20269,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_list_whenppdecs_ = 
-# 114 "standard.mly"
-    ( [] )
-# 15256 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _1 : 'tv_minus_body = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 134 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 20290 "parser_cocci_menhir.ml"
+        ) = 
+# 173 "parser_cocci_menhir.mly"
+                           ( _1 )
+# 20294 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15264,25 +20302,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.semv = m;
+            MenhirLib.EngineTypes.startp = _startpos_m_;
+            MenhirLib.EngineTypes.endp = _endpos_m_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_list_whenppdecs_ = Obj.magic xs in
-        let x : 'tv_whenppdecs = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_list_whenppdecs_ = 
-# 116 "standard.mly"
-    ( x :: xs )
-# 15286 "parser_cocci_menhir.ml"
+        let m : 'tv_minus_body = Obj.magic m in
+        let _startpos = _startpos_m_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 134 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 20322 "parser_cocci_menhir.ml"
+        ) = 
+# 173 "parser_cocci_menhir.mly"
+                                                           ( m )
+# 20326 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15293,13 +20333,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_choose_iso_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15303 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = m;
+            MenhirLib.EngineTypes.startp = _startpos_m_;
+            MenhirLib.EngineTypes.endp = _endpos_m_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let m : 'tv_minus_body = Obj.magic m in
+        let _startpos = _startpos_m_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 134 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 20354 "parser_cocci_menhir.ml"
+        ) = 
+# 174 "parser_cocci_menhir.mly"
+                     ( m )
+# 20358 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15312,18 +20367,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let x : 'tv_choose_iso = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_choose_iso_ = 
-# 59 "standard.mly"
-    ( x )
-# 15327 "parser_cocci_menhir.ml"
+        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_minus_start = 
+# 1625 "parser_cocci_menhir.mly"
+                         ( [Ast0.wrap(Ast0.DECL(_1))] )
+# 20382 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15334,13 +20389,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_disable_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15344 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_ctype = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_minus_start = 
+# 1626 "parser_cocci_menhir.mly"
+                         ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] )
+# 20406 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15353,18 +20415,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let x : 'tv_disable = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_disable_ = 
-# 59 "standard.mly"
-    ( x )
-# 15368 "parser_cocci_menhir.ml"
+        let _1 : 'tv_top_init = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_minus_start = 
+# 1627 "parser_cocci_menhir.mly"
+                    ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] )
+# 20430 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15375,13 +20437,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_error_words_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15385 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_minus_start = 
+# 1629 "parser_cocci_menhir.mly"
+    ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 )
+# 20454 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15393,19 +20462,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_error_words = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_error_words_ = 
-# 59 "standard.mly"
-    ( x )
-# 15409 "parser_cocci_menhir.ml"
+        let b : 'tv_ctype = Obj.magic b in
+        let a : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20481 "parser_cocci_menhir.ml"
+        ) = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_mzl_ctype_ = 
+# 1819 "parser_cocci_menhir.mly"
+                 ( (P.clt2mcode "|" a, b) )
+# 20488 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15416,13 +20495,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_filespec_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15426 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_eexpr = Obj.magic b in
+        let a : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20515 "parser_cocci_menhir.ml"
+        ) = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_mzl_eexpr_ = 
+# 1819 "parser_cocci_menhir.mly"
+                 ( (P.clt2mcode "|" a, b) )
+# 20522 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15434,19 +20530,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_filespec = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_filespec_ = 
-# 59 "standard.mly"
-    ( x )
-# 15450 "parser_cocci_menhir.ml"
+        let b : 'tv_fun_after_dots_or = Obj.magic b in
+        let a : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20549 "parser_cocci_menhir.ml"
+        ) = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_mzl_fun_after_dots_or_ = 
+# 1819 "parser_cocci_menhir.mly"
+                 ( (P.clt2mcode "|" a, b) )
+# 20556 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15457,13 +20563,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_minus_start_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15467 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_fun_start = Obj.magic b in
+        let a : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20583 "parser_cocci_menhir.ml"
+        ) = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_mzl_fun_start_ = 
+# 1819 "parser_cocci_menhir.mly"
+                 ( (P.clt2mcode "|" a, b) )
+# 20590 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15475,19 +20598,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_minus_start = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_minus_start_ = 
-# 59 "standard.mly"
-    ( x )
-# 15491 "parser_cocci_menhir.ml"
+        let b : 'tv_rule_elem_statement = Obj.magic b in
+        let a : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20617 "parser_cocci_menhir.ml"
+        ) = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_mzl_rule_elem_statement_ = 
+# 1819 "parser_cocci_menhir.mly"
+                 ( (P.clt2mcode "|" a, b) )
+# 20624 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15498,13 +20631,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_not_ceq_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15508 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let b : 'tv_statement = Obj.magic b in
+        let a : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20651 "parser_cocci_menhir.ml"
+        ) = Obj.magic a in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_mzl_statement_ = 
+# 1819 "parser_cocci_menhir.mly"
+                 ( (P.clt2mcode "|" a, b) )
+# 20658 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15517,18 +20667,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let x : 'tv_not_ceq = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_not_ceq_ = 
-# 59 "standard.mly"
-    ( x )
-# 15532 "parser_cocci_menhir.ml"
+        let _1 : 'tv_decl = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_name_opt_decl = 
+# 818 "parser_cocci_menhir.mly"
+            ( _1 )
+# 20682 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15539,13 +20689,81 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_not_eq_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15549 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = rp1;
+          MenhirLib.EngineTypes.startp = _startpos_rp1_;
+          MenhirLib.EngineTypes.endp = _endpos_rp1_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = lp1;
+              MenhirLib.EngineTypes.startp = _startpos_lp1_;
+              MenhirLib.EngineTypes.endp = _endpos_lp1_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = rp;
+                MenhirLib.EngineTypes.startp = _startpos_rp_;
+                MenhirLib.EngineTypes.endp = _endpos_rp_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = s;
+                  MenhirLib.EngineTypes.startp = _startpos_s_;
+                  MenhirLib.EngineTypes.endp = _endpos_s_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = lp;
+                    MenhirLib.EngineTypes.startp = _startpos_lp_;
+                    MenhirLib.EngineTypes.endp = _endpos_lp_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = t;
+                      MenhirLib.EngineTypes.startp = _startpos_t_;
+                      MenhirLib.EngineTypes.endp = _endpos_t_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20733 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20739 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let rp : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20744 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp in
+        let s : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20749 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let lp : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 20754 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_rp1_ in
+        let _v : 'tv_name_opt_decl = 
+# 821 "parser_cocci_menhir.mly"
+        ( let fnptr =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp,
+               P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in
+       Ast0.wrap(Ast0.Param(fnptr, None)) )
+# 20767 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15557,19 +20775,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_not_eq = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_not_eq_ = 
-# 59 "standard.mly"
-    ( x )
-# 15573 "parser_cocci_menhir.ml"
+        let _2 : 'tv_nest_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_nest_after_dots = 
+# 1740 "parser_cocci_menhir.mly"
+                                     (_1@_2)
+# 20797 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15580,13 +20804,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_loption_not_eqe_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15590 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_nest_after_exp = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_nest_after_dots = 
+# 1741 "parser_cocci_menhir.mly"
+                                (_2)
+# 20825 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15598,19 +20833,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_not_eqe = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_not_eqe_ = 
-# 59 "standard.mly"
-    ( x )
-# 15614 "parser_cocci_menhir.ml"
+        let _2 : 'tv_nest_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_nest_after_dots = 
+# 1742 "parser_cocci_menhir.mly"
+                                ((Ast0.wrap(Ast0.Exp(_1)))::_2)
+# 20855 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15624,10 +20865,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
-        let _v : 'tv_loption_not_pos_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15631 "parser_cocci_menhir.ml"
+        let _v : 'tv_nest_after_exp = 
+# 1750 "parser_cocci_menhir.mly"
+                                ([])
+# 20872 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15639,19 +20880,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_not_pos = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_not_pos_ = 
-# 59 "standard.mly"
-    ( x )
-# 15655 "parser_cocci_menhir.ml"
+        let _2 : 'tv_nest_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_nest_after_exp = 
+# 1751 "parser_cocci_menhir.mly"
+                                (_1::_2)
+# 20902 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15665,10 +20912,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
-        let _v : 'tv_loption_plus_start_ = 
-# 57 "standard.mly"
-    ( [] )
-# 15672 "parser_cocci_menhir.ml"
+        let _v : 'tv_nest_after_stm = 
+# 1745 "parser_cocci_menhir.mly"
+                                ([])
+# 20919 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15680,19 +20927,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_plus_start = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_loption_plus_start_ = 
-# 59 "standard.mly"
-    ( x )
-# 15696 "parser_cocci_menhir.ml"
+        let _2 : 'tv_nest_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_nest_after_stm = 
+# 1746 "parser_cocci_menhir.mly"
+                                (_1::_2)
+# 20949 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15704,19 +20957,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_meta_exp_type = 
-# 453 "parser_cocci_menhir.mly"
-    ( [Ast0_cocci.ast0_type_to_type t] )
-# 15720 "parser_cocci_menhir.ml"
+        let _2 : 'tv_nest_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_nest_after_stm = 
+# 1747 "parser_cocci_menhir.mly"
+                                (_1@_2)
+# 20979 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15728,35 +20987,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = m;
-          MenhirLib.EngineTypes.startp = _startpos_m_;
-          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.semv = c;
+          MenhirLib.EngineTypes.startp = _startpos_c_;
+          MenhirLib.EngineTypes.endp = _endpos_c_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = t;
-              MenhirLib.EngineTypes.startp = _startpos_t_;
-              MenhirLib.EngineTypes.endp = _endpos_t_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let m : 'tv_list_TMul_ = Obj.magic m in
-        let t : 'tv_comma_list_ctype_ = Obj.magic t in
+        let c : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21010 "parser_cocci_menhir.ml"
+        ) = Obj.magic c in
+        let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
+        let _1 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21016 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_m_ in
-        let _v : 'tv_meta_exp_type = 
-# 455 "parser_cocci_menhir.mly"
-    ( List.map
-       (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m)
-       t )
-# 15760 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_c_ in
+        let _v : 'tv_nest_expressions = 
+# 1199 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1,
+                             Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
+                             P.clt2mcode "...>" c, None, false)) )
+# 21025 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15768,12 +21033,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = c;
+          MenhirLib.EngineTypes.startp = _startpos_c_;
+          MenhirLib.EngineTypes.endp = _endpos_c_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
               MenhirLib.EngineTypes.semv = _1;
@@ -15783,18 +21049,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let _3 : 'tv_pure_ident = Obj.magic _3 in
+        let c : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21056 "parser_cocci_menhir.ml"
+        ) = Obj.magic c in
+        let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
         let _1 : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 15791 "parser_cocci_menhir.ml"
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21062 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_meta_ident = 
-# 1399 "parser_cocci_menhir.mly"
-                                 ( (Some _1,P.id2name _3) )
-# 15798 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_c_ in
+        let _v : 'tv_nest_expressions = 
+# 1203 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1,
+                             Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
+                             P.clt2mcode "...+>" c, None, true)) )
+# 21071 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15807,22 +21080,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = m;
-          MenhirLib.EngineTypes.startp = _startpos_m_;
-          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_nest_after_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_nest_start = 
+# 1737 "parser_cocci_menhir.mly"
+                   ( Ast0.wrap(Ast0.DOTS(_1)) )
+# 21095 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : (
+# 168 "parser_cocci_menhir.mly"
+      (unit)
+# 21117 "parser_cocci_menhir.ml"
+        ) = 
+# 1882 "parser_cocci_menhir.mly"
+                    ( () )
+# 21121 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
           MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let m : 'tv_metadec = Obj.magic m in
-        let _startpos = _startpos_m_ in
-        let _endpos = _endpos_m_ in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
         let _v : (
-# 157 "parser_cocci_menhir.mly"
-      ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
-# 15822 "parser_cocci_menhir.ml"
+# 168 "parser_cocci_menhir.mly"
+      (unit)
+# 21147 "parser_cocci_menhir.ml"
         ) = 
-# 181 "parser_cocci_menhir.mly"
-                       ( m (!Ast0.rule_name) )
-# 15826 "parser_cocci_menhir.ml"
+# 1883 "parser_cocci_menhir.mly"
+                    ( () )
+# 21151 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15834,48 +21159,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 318 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta ->
-      let tok = check_meta(Ast.MetaParamDecl(arity,name)) in
-      !Data.add_param_meta name pure; tok) )
-# 15873 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 15879 "parser_cocci_menhir.ml"
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : (
+# 168 "parser_cocci_menhir.mly"
+      (unit)
+# 21173 "parser_cocci_menhir.ml"
+        ) = 
+# 1884 "parser_cocci_menhir.mly"
+                    ( () )
+# 21177 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15887,52 +21185,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = dg;
+          MenhirLib.EngineTypes.startp = _startpos_dg_;
+          MenhirLib.EngineTypes.endp = _endpos_dg_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = g;
+            MenhirLib.EngineTypes.startp = _startpos_g_;
+            MenhirLib.EngineTypes.endp = _endpos_g_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 322 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta ->
-      let tok = check_meta(Ast.MetaParamListDecl(arity,name,None)) in
-      !Data.add_paramlist_meta name None pure; tok) )
-# 15930 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 15936 "parser_cocci_menhir.ml"
+        let dg : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic dg in
+        let g : 'tv_dexpr = Obj.magic g in
+        let _startpos = _startpos_g_ in
+        let _endpos = _endpos_dg_ in
+        let _v : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = 
+# 1367 "parser_cocci_menhir.mly"
+  ( function dot_builder ->
+      g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) )
+# 21208 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15944,52 +21216,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 326 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta ->
-      let tok = check_meta(Ast.MetaExpListDecl(arity,name,None)) in
-      !Data.add_explist_meta name None pure; tok) )
-# 15987 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 15993 "parser_cocci_menhir.ml"
+        let x : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21229 "parser_cocci_menhir.ml"
+        ) = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_nonempty_list_TMul_ = 
+# 124 "standard.mly"
+    ( [ x ] )
+# 21236 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16001,48 +21244,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = x;
+            MenhirLib.EngineTypes.startp = _startpos_x_;
+            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 330 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta ->
-      let tok = check_meta(Ast.MetaTypeDecl(arity,name)) in
-      !Data.add_type_meta name pure; tok) )
-# 16040 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 16046 "parser_cocci_menhir.ml"
+        let xs : 'tv_nonempty_list_TMul_ = Obj.magic xs in
+        let x : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21263 "parser_cocci_menhir.ml"
+        ) = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_nonempty_list_TMul_ = 
+# 126 "standard.mly"
+    ( x :: xs )
+# 21270 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16053,49 +21277,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
+        let {
+          MenhirLib.EngineTypes.semv = i;
+          MenhirLib.EngineTypes.startp = _startpos_i_;
+          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 334 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta ->
-      let tok = check_meta(Ast.MetaInitDecl(arity,name)) in
-      !Data.add_init_meta name pure; tok) )
-# 16093 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 16099 "parser_cocci_menhir.ml"
+        let i : 'tv_ident_or_const = Obj.magic i in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_i_ in
+        let _v : 'tv_not_ceq = 
+# 1458 "parser_cocci_menhir.mly"
+         ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+          then failwith "constraints not allowed in a generated rule file");
+          [i] )
+# 21302 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16107,48 +21310,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = l;
+            MenhirLib.EngineTypes.startp = _startpos_l_;
+            MenhirLib.EngineTypes.endp = _endpos_l_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 338 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta ->
-      let tok = check_meta(Ast.MetaStmDecl(arity,name)) in
-      !Data.add_stm_meta name pure; tok) )
-# 16146 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 16152 "parser_cocci_menhir.ml"
+        let l : 'tv_comma_list_ident_or_const_ = Obj.magic l in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_not_ceq = 
+# 1464 "parser_cocci_menhir.mly"
+  ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+          then failwith "constraints not allowed in a generated rule file");
+          l )
+# 21342 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16160,52 +21350,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = i;
+          MenhirLib.EngineTypes.startp = _startpos_i_;
+          MenhirLib.EngineTypes.endp = _endpos_i_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 342 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta ->
-      let tok = check_meta(Ast.MetaStmListDecl(arity,name)) in
-      !Data.add_stmlist_meta name pure; tok) )
-# 16203 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 16209 "parser_cocci_menhir.ml"
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_i_ in
+        let _v : 'tv_not_eq = 
+# 1425 "parser_cocci_menhir.mly"
+         ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+           (* pb: constraints not stored with metavars; too lazy to search for
+             them in the pattern *)
+          then failwith "constraints not allowed in a generated rule file");
+          [Ast0.wrap(Ast0.Id(P.id2mcode i))] )
+# 21376 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16217,49 +21384,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = l;
+            MenhirLib.EngineTypes.startp = _startpos_l_;
+            MenhirLib.EngineTypes.endp = _endpos_l_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 346 "parser_cocci_menhir.mly"
-    ( (fun arity (_,name) pure check_meta ->
-      if arity = Ast.NONE && pure = Ast0.Impure
-      then (!Data.add_type_name name; [])
-      else raise (Semantic_cocci.Semantic "bad typedef")) )
-# 16257 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 16263 "parser_cocci_menhir.ml"
+        let l : 'tv_comma_list_pure_ident_ = Obj.magic l in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_not_eq = 
+# 1433 "parser_cocci_menhir.mly"
+  ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+          then failwith "constraints not allowed in a generated rule file");
+          List.map (function i -> Ast0.wrap(Ast0.Id(P.id2mcode i))) l )
+# 21416 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16271,53 +21424,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = i;
+          MenhirLib.EngineTypes.startp = _startpos_i_;
+          MenhirLib.EngineTypes.endp = _endpos_i_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 351 "parser_cocci_menhir.mly"
-    ( (fun arity (_,name) pure check_meta ->
-      if arity = Ast.NONE && pure = Ast0.Impure
-      then (!Data.add_declarer_name name; [])
-      else raise (Semantic_cocci.Semantic "bad declarer")) )
-# 16315 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 16321 "parser_cocci_menhir.ml"
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_i_ in
+        let _v : 'tv_not_eqe = 
+# 1441 "parser_cocci_menhir.mly"
+         ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+          then failwith "constraints not allowed in a generated rule file");
+          [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] )
+# 21448 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16329,53 +21456,75 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = l;
+            MenhirLib.EngineTypes.startp = _startpos_l_;
+            MenhirLib.EngineTypes.endp = _endpos_l_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 356 "parser_cocci_menhir.mly"
-    ( (fun arity (_,name) pure check_meta ->
-      if arity = Ast.NONE && pure = Ast0.Impure
-      then (!Data.add_iterator_name name; [])
-      else raise (Semantic_cocci.Semantic "bad iterator")) )
-# 16373 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 263 "parser_cocci_menhir.mly"
-    ( P.create_metadec ar ispure kindfn ids )
-# 16379 "parser_cocci_menhir.ml"
+        let l : 'tv_comma_list_pure_ident_ = Obj.magic l in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_not_eqe = 
+# 1447 "parser_cocci_menhir.mly"
+  ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+          then failwith "constraints not allowed in a generated rule file");
+          List.map
+            (function i ->
+              Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))))
+            l )
+# 21491 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = i;
+          MenhirLib.EngineTypes.startp = _startpos_i_;
+          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let i : 'tv_meta_ident = Obj.magic i in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos_i_ in
+        let _v : 'tv_not_pos = 
+# 1478 "parser_cocci_menhir.mly"
+         ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+          then failwith "constraints not allowed in a generated rule file");
+          match i with
+            (None,_) -> failwith "constraint must be an inherited variable"
+          | (Some rule,name) ->
+              let i = (rule,name) in
+              P.check_meta(Ast.MetaPosDecl(Ast.NONE,i));
+              [i] )
+# 21528 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16390,9 +21539,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos__4_;
           MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = l;
+            MenhirLib.EngineTypes.startp = _startpos_l_;
+            MenhirLib.EngineTypes.endp = _endpos_l_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.startp = _startpos__2_;
               MenhirLib.EngineTypes.endp = _endpos__2_;
@@ -16405,22 +21554,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = Obj.magic ids in
+        let l : 'tv_comma_list_meta_ident_ = Obj.magic l in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 312 "parser_cocci_menhir.mly"
-    ( (fun name check_meta seed ->
-      let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in
-      !Data.add_fresh_id_meta name; tok) )
-# 16418 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 266 "parser_cocci_menhir.mly"
-    ( P.create_fresh_metadec kindfn ids )
-# 16424 "parser_cocci_menhir.ml"
+        let _v : 'tv_not_pos = 
+# 1489 "parser_cocci_menhir.mly"
+  ( (if !Data.in_iso
+          then failwith "constraints not allowed in iso file");
+          (if !Data.in_generating
+          then failwith "constraints not allowed in a generated rule file");
+          List.map
+            (function
+                (None,_) ->
+                  failwith "constraint must be an inherited variable"
+              | (Some rule,name) ->
+                  let i = (rule,name) in
+                  P.check_meta(Ast.MetaPosDecl(Ast.NONE,i));
+                  i)
+            l )
+# 21576 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16432,48 +21584,111 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 364 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaIdDecl(arity,name)) in
-      !Data.add_id_meta name constraints pure; tok) )
-# 16471 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 270 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16477 "parser_cocci_menhir.ml"
+        let _1 : 'tv_decl = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_one_dec_decl_ = 
+# 1563 "parser_cocci_menhir.mly"
+        ( _1 )
+# 21600 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 66 "parser_cocci_menhir.mly"
+       (Parse_aux.list_info)
+# 21621 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_one_dec_decl_ = 
+# 1565 "parser_cocci_menhir.mly"
+    ( let (nm,lenname,pure,clt) = _1 in
+    let nm = P.clt2mcode nm clt in
+    let lenname =
+      match lenname with
+       Some nm -> Some(P.clt2mcode nm clt)
+      | None -> None in
+    Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) )
+# 21634 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_name_opt_decl = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_one_dec_name_opt_decl_ = 
+# 1563 "parser_cocci_menhir.mly"
+        ( _1 )
+# 21658 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 66 "parser_cocci_menhir.mly"
+       (Parse_aux.list_info)
+# 21679 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_one_dec_name_opt_decl_ = 
+# 1565 "parser_cocci_menhir.mly"
+    ( let (nm,lenname,pure,clt) = _1 in
+    let nm = P.clt2mcode nm clt in
+    let lenname =
+      match lenname with
+       Some nm -> Some(P.clt2mcode nm clt)
+      | None -> None in
+    Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) )
+# 21692 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16485,48 +21700,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          
-# 368 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaFuncDecl(arity,name)) in
-      !Data.add_func_meta name constraints pure; tok) )
-# 16524 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 270 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16530 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21718 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = 
+# 988 "parser_cocci_menhir.mly"
+      ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) )
+# 21726 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16538,53 +21734,43 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = t;
+              MenhirLib.EngineTypes.startp = _startpos_t_;
+              MenhirLib.EngineTypes.endp = _endpos_t_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21757 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
           
-# 372 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaLocalFuncDecl(arity,name)) in
-      !Data.add_local_func_meta name constraints pure;
-      tok) )
-# 16582 "parser_cocci_menhir.ml"
+# 39 "standard.mly"
+    ( None )
+# 21767 "parser_cocci_menhir.ml"
           
         in
         
-# 270 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16588 "parser_cocci_menhir.ml"
+# 990 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
+# 21774 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16596,48 +21782,50 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.semv = t;
+              MenhirLib.EngineTypes.startp = _startpos_t_;
+              MenhirLib.EngineTypes.endp = _endpos_t_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21810 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
+          let x = x0 in
           
-# 377 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaDeclarerDecl(arity,name)) in
-      !Data.add_declarer_meta name constraints pure; tok) )
-# 16635 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 21822 "parser_cocci_menhir.ml"
           
         in
         
-# 270 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16641 "parser_cocci_menhir.ml"
+# 990 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
+# 21829 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16649,48 +21837,83 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = f;
+          MenhirLib.EngineTypes.startp = _startpos_f_;
+          MenhirLib.EngineTypes.endp = _endpos_f_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let f : 'tv_funproto = Obj.magic f in
+        let _startpos = _startpos_f_ in
+        let _endpos = _endpos_f_ in
+        let _v : 'tv_one_decl_var = 
+# 992 "parser_cocci_menhir.mly"
+               ( f )
+# 21853 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
                 MenhirLib.EngineTypes.next = {
                   MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.semv = t;
+                  MenhirLib.EngineTypes.startp = _startpos_t_;
+                  MenhirLib.EngineTypes.endp = _endpos_t_;
                   MenhirLib.EngineTypes.next = _menhir_stack;
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21894 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21900 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
           
-# 381 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaIteratorDecl(arity,name)) in
-      !Data.add_iterator_meta name constraints pure; tok) )
-# 16688 "parser_cocci_menhir.ml"
+# 39 "standard.mly"
+    ( None )
+# 21910 "parser_cocci_menhir.ml"
           
         in
         
-# 270 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16694 "parser_cocci_menhir.ml"
+# 994 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) )
+# 21917 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16702,48 +21925,66 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  MenhirLib.EngineTypes.semv = t;
+                  MenhirLib.EngineTypes.startp = _startpos_t_;
+                  MenhirLib.EngineTypes.endp = _endpos_t_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21963 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 21969 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
+          let x = x0 in
           
-# 387 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaErrDecl(arity,name)) in
-      !Data.add_err_meta name constraints pure; tok) )
-# 16741 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 21981 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16747 "parser_cocci_menhir.ml"
+# 994 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) )
+# 21988 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16755,67 +21996,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = l0;
-                MenhirLib.EngineTypes.startp = _startpos_l0_;
-                MenhirLib.EngineTypes.endp = _endpos_l0_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let l0 : 'tv_option_TLocal_ = Obj.magic l0 in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          let l = l0 in
-          let ty =
-            
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22019 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
+          
 # 39 "standard.mly"
     ( None )
-# 16800 "parser_cocci_menhir.ml"
-            
-          in
+# 22029 "parser_cocci_menhir.ml"
           
-# 391 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      match l with
-       None ->
-         !Data.add_idexp_meta ty name constraints pure;
-         check_meta(Ast.MetaIdExpDecl(arity,name,ty))
-      | Some _ ->
-         !Data.add_local_idexp_meta ty name constraints pure;
-         check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
-# 16813 "parser_cocci_menhir.ml"
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 22036 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16819 "parser_cocci_menhir.ml"
+# 999 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
+# 22044 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16827,75 +22052,121 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__7_;
-          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = x00;
-              MenhirLib.EngineTypes.startp = _startpos_x00_;
-              MenhirLib.EngineTypes.endp = _endpos_x00_;
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__4_;
-                MenhirLib.EngineTypes.endp = _endpos__4_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = l0;
-                  MenhirLib.EngineTypes.startp = _startpos_l0_;
-                  MenhirLib.EngineTypes.endp = _endpos_l0_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = ispure;
-                    MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                    MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = ar;
-                      MenhirLib.EngineTypes.startp = _startpos_ar_;
-                      MenhirLib.EngineTypes.endp = _endpos_ar_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let x00 : 'tv_meta_exp_type = Obj.magic x00 in
-        let l0 : 'tv_option_TLocal_ = Obj.magic l0 in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__7_ in
-        let _v : 'tv_metadec = let kindfn =
-          let x0 = x00 in
-          let l = l0 in
-          let ty =
-            let x = x0 in
-            
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22080 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 22092 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 22099 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 999 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
+# 22107 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22143 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 22154 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          let x = x0 in
+          
 # 41 "standard.mly"
     ( Some x )
-# 16880 "parser_cocci_menhir.ml"
-            
-          in
-          
-# 391 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      match l with
-       None ->
-         !Data.add_idexp_meta ty name constraints pure;
-         check_meta(Ast.MetaIdExpDecl(arity,name,ty))
-      | Some _ ->
-         !Data.add_local_idexp_meta ty name constraints pure;
-         check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
-# 16893 "parser_cocci_menhir.ml"
+# 22162 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16899 "parser_cocci_menhir.ml"
+# 999 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
+# 22170 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16907,68 +22178,65 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__7_;
-          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = m0;
-              MenhirLib.EngineTypes.startp = _startpos_m0_;
-              MenhirLib.EngineTypes.endp = _endpos_m0_;
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__4_;
-                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.semv = x1;
+                MenhirLib.EngineTypes.startp = _startpos_x1_;
+                MenhirLib.EngineTypes.endp = _endpos_x1_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = l0;
-                  MenhirLib.EngineTypes.startp = _startpos_l0_;
-                  MenhirLib.EngineTypes.endp = _endpos_l0_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = ispure;
-                    MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                    MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = ar;
-                      MenhirLib.EngineTypes.startp = _startpos_ar_;
-                      MenhirLib.EngineTypes.endp = _endpos_ar_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in
-        let l0 : 'tv_option_TLocal_ = Obj.magic l0 in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__7_ in
-        let _v : 'tv_metadec = let kindfn =
-          let m = m0 in
-          let l = l0 in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22211 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x1 : 'tv_const_vol = Obj.magic x1 in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
+          let x = x1 in
           
-# 400 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in
-      match l with
-       None ->
-         !Data.add_idexp_meta ty name constraints pure;
-         check_meta(Ast.MetaIdExpDecl(arity,name,ty))
-      | Some _ ->
-         !Data.add_local_idexp_meta ty name constraints pure;
-         check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
-# 16966 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 22224 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 22232 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 16972 "parser_cocci_menhir.ml"
+# 999 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
+# 22240 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16980,56 +22248,69 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = m0;
-              MenhirLib.EngineTypes.startp = _startpos_m0_;
-              MenhirLib.EngineTypes.endp = _endpos_m0_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          let m = m0 in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22281 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22287 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
           
-# 410 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in
-      let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
-      !Data.add_exp_meta ty name constraints pure; tok) )
-# 17027 "parser_cocci_menhir.ml"
+# 39 "standard.mly"
+    ( None )
+# 22297 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 22304 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 17033 "parser_cocci_menhir.ml"
+# 1004 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv)) )
+# 22314 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17041,60 +22322,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__7_;
-          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__5_;
-              MenhirLib.EngineTypes.endp = _endpos__5_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__4_;
-                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = vl0;
-                  MenhirLib.EngineTypes.startp = _startpos_vl0_;
-                  MenhirLib.EngineTypes.endp = _endpos_vl0_;
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
                   MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = ispure;
-                    MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                    MenhirLib.EngineTypes.endp = _endpos_ispure_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = ar;
-                      MenhirLib.EngineTypes.startp = _startpos_ar_;
-                      MenhirLib.EngineTypes.endp = _endpos_ar_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
                     };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__7_ in
-        let _v : 'tv_metadec = let kindfn =
-          let vl = vl0 in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22360 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22366 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
+          let x = x0 in
           
-# 415 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let ty = Some (List.map (function x -> Type_cocci.Array x) vl) in
-      let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
-      !Data.add_exp_meta ty name constraints pure; tok) )
-# 17092 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 22378 "parser_cocci_menhir.ml"
+          
+        in
+        let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 22385 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 17098 "parser_cocci_menhir.ml"
+# 1004 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv)) )
+# 22395 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17106,55 +22403,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          let ty =
-            
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22441 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22447 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
+          
 # 39 "standard.mly"
     ( None )
-# 17144 "parser_cocci_menhir.ml"
-            
-          in
+# 22458 "parser_cocci_menhir.ml"
           
-# 420 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in
-      !Data.add_const_meta ty name constraints pure; tok) )
-# 17152 "parser_cocci_menhir.ml"
+        in
+        let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 22466 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 17158 "parser_cocci_menhir.ml"
+# 1004 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv)) )
+# 22476 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17166,63 +22484,83 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = x00;
-              MenhirLib.EngineTypes.startp = _startpos_x00_;
-              MenhirLib.EngineTypes.endp = _endpos_x00_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.semv = d;
+                MenhirLib.EngineTypes.startp = _startpos_d_;
+                MenhirLib.EngineTypes.endp = _endpos_d_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = ispure;
-                  MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                  MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
                   MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = ar;
-                    MenhirLib.EngineTypes.startp = _startpos_ar_;
-                    MenhirLib.EngineTypes.endp = _endpos_ar_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    MenhirLib.EngineTypes.semv = x1;
+                    MenhirLib.EngineTypes.startp = _startpos_x1_;
+                    MenhirLib.EngineTypes.endp = _endpos_x1_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = x0;
+                      MenhirLib.EngineTypes.startp = _startpos_x0_;
+                      MenhirLib.EngineTypes.endp = _endpos_x0_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
                     };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in
-        let x00 : 'tv_meta_exp_type = Obj.magic x00 in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__6_ in
-        let _v : 'tv_metadec = let kindfn =
-          let x0 = x00 in
-          let ty =
-            let x = x0 in
-            
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22527 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22533 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x1 : 'tv_const_vol = Obj.magic x1 in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let cv =
+          let x = x1 in
+          
 # 41 "standard.mly"
     ( Some x )
-# 17212 "parser_cocci_menhir.ml"
-            
-          in
+# 22546 "parser_cocci_menhir.ml"
           
-# 420 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in
-      !Data.add_const_meta ty name constraints pure; tok) )
-# 17220 "parser_cocci_menhir.ml"
+        in
+        let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 22554 "parser_cocci_menhir.ml"
           
         in
         
-# 274 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 17226 "parser_cocci_menhir.ml"
+# 1004 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+      !Data.add_type_name (P.id2name i);
+      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
+                          P.clt2mcode ";" pv)) )
+# 22564 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17234,48 +22572,104 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = rp2;
+            MenhirLib.EngineTypes.startp = _startpos_rp2_;
+            MenhirLib.EngineTypes.endp = _endpos_rp2_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.semv = p;
+              MenhirLib.EngineTypes.startp = _startpos_p_;
+              MenhirLib.EngineTypes.endp = _endpos_p_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.semv = lp2;
+                MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                MenhirLib.EngineTypes.endp = _endpos_lp2_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  MenhirLib.EngineTypes.semv = rp1;
+                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = d;
+                    MenhirLib.EngineTypes.startp = _startpos_d_;
+                    MenhirLib.EngineTypes.endp = _endpos_d_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = st;
+                      MenhirLib.EngineTypes.startp = _startpos_st_;
+                      MenhirLib.EngineTypes.endp = _endpos_st_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = lp1;
+                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.state = _menhir_s;
+                          MenhirLib.EngineTypes.semv = t;
+                          MenhirLib.EngineTypes.startp = _startpos_t_;
+                          MenhirLib.EngineTypes.endp = _endpos_t_;
+                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          };
+                        };
+                      };
+                    };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22625 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22630 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22636 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22641 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22647 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22652 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
           
-# 426 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in
-      !Data.add_exp_meta None name constraints pure; tok) )
-# 17273 "parser_cocci_menhir.ml"
+# 39 "standard.mly"
+    ( None )
+# 22661 "parser_cocci_menhir.ml"
           
         in
         
-# 278 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 17279 "parser_cocci_menhir.ml"
+# 1014 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
+# 22673 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17287,67 +22681,111 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = rp2;
+            MenhirLib.EngineTypes.startp = _startpos_rp2_;
+            MenhirLib.EngineTypes.endp = _endpos_rp2_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = vl0;
-              MenhirLib.EngineTypes.startp = _startpos_vl0_;
-              MenhirLib.EngineTypes.endp = _endpos_vl0_;
+              MenhirLib.EngineTypes.semv = p;
+              MenhirLib.EngineTypes.startp = _startpos_p_;
+              MenhirLib.EngineTypes.endp = _endpos_p_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = ispure;
-                MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                MenhirLib.EngineTypes.semv = lp2;
+                MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                MenhirLib.EngineTypes.endp = _endpos_lp2_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  MenhirLib.EngineTypes.semv = rp1;
+                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = d;
+                    MenhirLib.EngineTypes.startp = _startpos_d_;
+                    MenhirLib.EngineTypes.endp = _endpos_d_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = st;
+                      MenhirLib.EngineTypes.startp = _startpos_st_;
+                      MenhirLib.EngineTypes.endp = _endpos_st_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = lp1;
+                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.semv = t;
+                          MenhirLib.EngineTypes.startp = _startpos_t_;
+                          MenhirLib.EngineTypes.endp = _endpos_t_;
+                          MenhirLib.EngineTypes.next = {
+                            MenhirLib.EngineTypes.state = _menhir_s;
+                            MenhirLib.EngineTypes.semv = x0;
+                            MenhirLib.EngineTypes.startp = _startpos_x0_;
+                            MenhirLib.EngineTypes.endp = _endpos_x0_;
+                            MenhirLib.EngineTypes.next = _menhir_stack;
+                            };
+                          };
+                        };
+                      };
+                    };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in
-        let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = let kindfn =
-          let vl = vl0 in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22739 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22744 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22750 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22755 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22761 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22766 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
+          let x = x0 in
           
-# 430 "parser_cocci_menhir.mly"
-    ( (fun arity name pure check_meta constraints ->
-      let ty = Some vl in
-      List.iter
-       (function c ->
-         match Ast0.unwrap c with
-           Ast0.Constant(_) ->
-             if not
-                 (List.exists
-                    (function
-                        Type_cocci.BaseType(Type_cocci.IntType) -> true
-                      | Type_cocci.BaseType(Type_cocci.ShortType) -> true
-                      | Type_cocci.BaseType(Type_cocci.LongType) -> true
-                      | _ -> false)
-                    vl)
-             then failwith "metavariable with int constraint must be an int"
-         | _ -> ())
-       constraints;
-      let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
-      !Data.add_exp_meta ty name constraints pure; tok) )
-# 17345 "parser_cocci_menhir.ml"
+# 41 "standard.mly"
+    ( Some x )
+# 22777 "parser_cocci_menhir.ml"
           
         in
         
-# 278 "parser_cocci_menhir.mly"
-    ( P.create_metadec_ne ar ispure kindfn ids )
-# 17351 "parser_cocci_menhir.ml"
+# 1014 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
+# 22789 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17359,45 +22797,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _5;
           MenhirLib.EngineTypes.startp = _startpos__5_;
           MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = _4;
+            MenhirLib.EngineTypes.startp = _startpos__4_;
+            MenhirLib.EngineTypes.endp = _endpos__4_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = a;
-              MenhirLib.EngineTypes.startp = _startpos_a_;
-              MenhirLib.EngineTypes.endp = _endpos_a_;
+              MenhirLib.EngineTypes.semv = _3;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
               MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _2;
                 MenhirLib.EngineTypes.startp = _startpos__2_;
                 MenhirLib.EngineTypes.endp = _endpos__2_;
                 MenhirLib.EngineTypes.next = {
                   MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = ar;
-                  MenhirLib.EngineTypes.startp = _startpos_ar_;
-                  MenhirLib.EngineTypes.endp = _endpos_ar_;
+                  MenhirLib.EngineTypes.semv = _1;
+                  MenhirLib.EngineTypes.startp = _startpos__1_;
+                  MenhirLib.EngineTypes.endp = _endpos__1_;
                   MenhirLib.EngineTypes.next = _menhir_stack;
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic ids in
-        let a : 'tv_option_TPosAny_ = Obj.magic a in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
+        let _5 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22830 "parser_cocci_menhir.ml"
+        ) = Obj.magic _5 in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22835 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22841 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_decl_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
-        let _v : 'tv_metadec = 
-# 284 "parser_cocci_menhir.mly"
-    ( (if !Data.in_generating
-      then failwith "position variables not allowed in a generated rule file");
-      let kindfn arity name pure check_meta constraints =
-      let tok = check_meta(Ast.MetaPosDecl(arity,name)) in
-      let any = match a with None -> Ast.PER | Some _ -> Ast.ALL in
-      !Data.add_pos_meta name constraints any; tok in
-    P.create_metadec_ne ar false kindfn ids )
-# 17401 "parser_cocci_menhir.ml"
+        let _v : 'tv_one_decl_var = 
+# 1022 "parser_cocci_menhir.mly"
+      ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3,
+                                 P.clt2mcode ")" _4,P.clt2mcode ";" _5)) )
+# 22850 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17409,38 +22858,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__9_;
-          MenhirLib.EngineTypes.endp = _endpos__9_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__7_;
-              MenhirLib.EngineTypes.endp = _endpos__7_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = id;
-                MenhirLib.EngineTypes.startp = _startpos_id_;
-                MenhirLib.EngineTypes.endp = _endpos_id_;
+                MenhirLib.EngineTypes.semv = rp2;
+                MenhirLib.EngineTypes.startp = _startpos_rp2_;
+                MenhirLib.EngineTypes.endp = _endpos_rp2_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.startp = _startpos__5_;
-                  MenhirLib.EngineTypes.endp = _endpos__5_;
+                  MenhirLib.EngineTypes.semv = p;
+                  MenhirLib.EngineTypes.startp = _startpos_p_;
+                  MenhirLib.EngineTypes.endp = _endpos_p_;
                   MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.startp = _startpos__4_;
-                    MenhirLib.EngineTypes.endp = _endpos__4_;
+                    MenhirLib.EngineTypes.semv = lp2;
+                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
                     MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.startp = _startpos__3_;
-                      MenhirLib.EngineTypes.endp = _endpos__3_;
+                      MenhirLib.EngineTypes.semv = rp1;
+                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
                       MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = ispure;
-                        MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                        MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                        MenhirLib.EngineTypes.semv = d;
+                        MenhirLib.EngineTypes.startp = _startpos_d_;
+                        MenhirLib.EngineTypes.endp = _endpos_d_;
                         MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.state = _menhir_s;
-                          MenhirLib.EngineTypes.semv = ar;
-                          MenhirLib.EngineTypes.startp = _startpos_ar_;
-                          MenhirLib.EngineTypes.endp = _endpos_ar_;
-                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          MenhirLib.EngineTypes.semv = st;
+                          MenhirLib.EngineTypes.startp = _startpos_st_;
+                          MenhirLib.EngineTypes.endp = _endpos_st_;
+                          MenhirLib.EngineTypes.next = {
+                            MenhirLib.EngineTypes.semv = lp1;
+                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                            MenhirLib.EngineTypes.next = {
+                              MenhirLib.EngineTypes.state = _menhir_s;
+                              MenhirLib.EngineTypes.semv = t;
+                              MenhirLib.EngineTypes.startp = _startpos_t_;
+                              MenhirLib.EngineTypes.endp = _endpos_t_;
+                              MenhirLib.EngineTypes.next = _menhir_stack;
+                              };
+                            };
                           };
                         };
                       };
@@ -17450,21 +22914,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__9_ in
-        let _v : 'tv_metadec = 
-# 294 "parser_cocci_menhir.mly"
-    ( P.create_len_metadec ar ispure
-       (fun lenname arity name pure check_meta ->
-         let tok =
-           check_meta(Ast.MetaParamListDecl(arity,name,Some lenname)) in
-         !Data.add_paramlist_meta name (Some lenname) pure; tok)
-       id ids )
-# 17468 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22921 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22927 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22932 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22938 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22943 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22949 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 22954 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
+          
+# 39 "standard.mly"
+    ( None )
+# 22963 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 1028 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)))
+# 22975 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17476,38 +22983,58 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__9_;
-          MenhirLib.EngineTypes.endp = _endpos__9_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ids;
-            MenhirLib.EngineTypes.startp = _startpos_ids_;
-            MenhirLib.EngineTypes.endp = _endpos_ids_;
+            MenhirLib.EngineTypes.semv = e;
+            MenhirLib.EngineTypes.startp = _startpos_e_;
+            MenhirLib.EngineTypes.endp = _endpos_e_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__7_;
-              MenhirLib.EngineTypes.endp = _endpos__7_;
+              MenhirLib.EngineTypes.semv = q;
+              MenhirLib.EngineTypes.startp = _startpos_q_;
+              MenhirLib.EngineTypes.endp = _endpos_q_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = id;
-                MenhirLib.EngineTypes.startp = _startpos_id_;
-                MenhirLib.EngineTypes.endp = _endpos_id_;
+                MenhirLib.EngineTypes.semv = rp2;
+                MenhirLib.EngineTypes.startp = _startpos_rp2_;
+                MenhirLib.EngineTypes.endp = _endpos_rp2_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.startp = _startpos__5_;
-                  MenhirLib.EngineTypes.endp = _endpos__5_;
+                  MenhirLib.EngineTypes.semv = p;
+                  MenhirLib.EngineTypes.startp = _startpos_p_;
+                  MenhirLib.EngineTypes.endp = _endpos_p_;
                   MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.startp = _startpos__4_;
-                    MenhirLib.EngineTypes.endp = _endpos__4_;
+                    MenhirLib.EngineTypes.semv = lp2;
+                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
                     MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.startp = _startpos__3_;
-                      MenhirLib.EngineTypes.endp = _endpos__3_;
+                      MenhirLib.EngineTypes.semv = rp1;
+                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
                       MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = ispure;
-                        MenhirLib.EngineTypes.startp = _startpos_ispure_;
-                        MenhirLib.EngineTypes.endp = _endpos_ispure_;
+                        MenhirLib.EngineTypes.semv = d;
+                        MenhirLib.EngineTypes.startp = _startpos_d_;
+                        MenhirLib.EngineTypes.endp = _endpos_d_;
                         MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.state = _menhir_s;
-                          MenhirLib.EngineTypes.semv = ar;
-                          MenhirLib.EngineTypes.startp = _startpos_ar_;
-                          MenhirLib.EngineTypes.endp = _endpos_ar_;
-                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          MenhirLib.EngineTypes.semv = st;
+                          MenhirLib.EngineTypes.startp = _startpos_st_;
+                          MenhirLib.EngineTypes.endp = _endpos_st_;
+                          MenhirLib.EngineTypes.next = {
+                            MenhirLib.EngineTypes.semv = lp1;
+                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                            MenhirLib.EngineTypes.next = {
+                              MenhirLib.EngineTypes.semv = t;
+                              MenhirLib.EngineTypes.startp = _startpos_t_;
+                              MenhirLib.EngineTypes.endp = _endpos_t_;
+                              MenhirLib.EngineTypes.next = {
+                                MenhirLib.EngineTypes.state = _menhir_s;
+                                MenhirLib.EngineTypes.semv = x0;
+                                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                                MenhirLib.EngineTypes.next = _menhir_stack;
+                                };
+                              };
+                            };
                           };
                         };
                       };
@@ -17517,51 +23044,66 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in
-        let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in
-        let ispure : 'tv_pure = Obj.magic ispure in
-        let ar : 'tv_arity = Obj.magic ar in
-        let _startpos = _startpos_ar_ in
-        let _endpos = _endpos__9_ in
-        let _v : 'tv_metadec = 
-# 303 "parser_cocci_menhir.mly"
-    ( P.create_len_metadec ar ispure
-       (fun lenname arity name pure check_meta ->
-         let tok =
-           check_meta(Ast.MetaExpListDecl(arity,name,Some lenname)) in
-         !Data.add_explist_meta name (Some lenname) pure; tok)
-       id ids )
-# 17535 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let b : 'tv_list_mzl_ctype__ = Obj.magic b in
-        let a : 'tv_ctype = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_midzero_list_ctype_ctype_ = 
-# 1803 "parser_cocci_menhir.mly"
-     ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 17565 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 23051 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let e : 'tv_initialize = Obj.magic e in
+        let q : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 23057 "parser_cocci_menhir.ml"
+        ) = Obj.magic q in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 23062 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 23068 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 23073 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 23079 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 23084 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let x0 : 'tv_storage = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_one_decl_var = let s =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 23095 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 1028 "parser_cocci_menhir.mly"
+      ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)))
+# 23107 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17572,26 +23114,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let b : 'tv_list_mzl_eexpr__ = Obj.magic b in
-        let a : 'tv_eexpr = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_midzero_list_eexpr_eexpr_ = 
-# 1803 "parser_cocci_menhir.mly"
-     ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 17595 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_option_TLocal_ = 
+# 29 "standard.mly"
+    ( None )
+# 23124 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17603,25 +23132,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let b : 'tv_list_mzl_eexpr__ = Obj.magic b in
-        let a : 'tv_expr = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_midzero_list_expr_eexpr_ = 
-# 1803 "parser_cocci_menhir.mly"
-     ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 17625 "parser_cocci_menhir.ml"
+        let x : unit = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_option_TLocal_ = 
+# 31 "standard.mly"
+    ( Some x )
+# 23148 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17632,26 +23155,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let b : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic b in
-        let a : 'tv_fun_after_stm = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = 
-# 1803 "parser_cocci_menhir.mly"
-     ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 17655 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_option_TPosAny_ = 
+# 29 "standard.mly"
+    ( None )
+# 23165 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17663,25 +23173,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let b : 'tv_list_mzl_fun_start__ = Obj.magic b in
-        let a : 'tv_fun_start = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_midzero_list_fun_start_fun_start_ = 
-# 1803 "parser_cocci_menhir.mly"
-     ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 17685 "parser_cocci_menhir.ml"
+        let x : unit = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_option_TPosAny_ = 
+# 31 "standard.mly"
+    ( Some x )
+# 23189 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17692,26 +23196,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let b : 'tv_list_mzl_rule_elem_statement__ = Obj.magic b in
-        let a : 'tv_rule_elem_statement = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = 
-# 1803 "parser_cocci_menhir.mly"
-     ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 17715 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_option_eexpr_ = 
+# 29 "standard.mly"
+    ( None )
+# 23206 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17723,25 +23214,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let b : 'tv_list_mzl_statement__ = Obj.magic b in
-        let a : 'tv_statement = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_midzero_list_statement_statement_ = 
-# 1803 "parser_cocci_menhir.mly"
-     ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 17745 "parser_cocci_menhir.ml"
+        let x : 'tv_eexpr = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_option_eexpr_ = 
+# 31 "standard.mly"
+    ( Some x )
+# 23230 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17752,34 +23237,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = ew;
-          MenhirLib.EngineTypes.startp = _startpos_ew_;
-          MenhirLib.EngineTypes.endp = _endpos_ew_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = f;
-              MenhirLib.EngineTypes.startp = _startpos_f_;
-              MenhirLib.EngineTypes.endp = _endpos_f_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let ew : 'tv_loption_error_words_ = Obj.magic ew in
-        let b : 'tv_loption_minus_start_ = Obj.magic b in
-        let f : 'tv_loption_filespec_ = Obj.magic f in
-        let _startpos = _startpos_f_ in
-        let _endpos = _endpos_ew_ in
-        let _v : 'tv_minus_body = 
-# 606 "parser_cocci_menhir.mly"
-    ( match f@b@ew with
-      [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
-    | code -> Top_level.top_level code )
-# 17783 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_plus_after_dots = 
+# 1687 "parser_cocci_menhir.mly"
+                                                                         ([])
+# 23247 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17791,33 +23255,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ew;
-          MenhirLib.EngineTypes.startp = _startpos_ew_;
-          MenhirLib.EngineTypes.endp = _endpos_ew_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = f;
-              MenhirLib.EngineTypes.startp = _startpos_f_;
-              MenhirLib.EngineTypes.endp = _endpos_f_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let ew : 'tv_loption_error_words_ = Obj.magic ew in
-        let b : 'tv_top_eexpr = Obj.magic b in
-        let f : 'tv_loption_filespec_ = Obj.magic f in
-        let _startpos = _startpos_f_ in
-        let _endpos = _endpos_ew_ in
-        let _v : 'tv_minus_exp_body = 
-# 620 "parser_cocci_menhir.mly"
-    ( match f@[b]@ew with
-      [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
-    | code -> Top_level.top_level code )
-# 17821 "parser_cocci_menhir.ml"
+        let _2 : 'tv_plus_after_exp = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_plus_after_dots = 
+# 1688 "parser_cocci_menhir.mly"
+                                                                         (_2)
+# 23275 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17829,6 +23283,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
@@ -17839,17 +23294,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _1 : 'tv_minus_exp_body = Obj.magic _1 in
+        let _2 : 'tv_plus_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : (
-# 137 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 17849 "parser_cocci_menhir.ml"
-        ) = 
-# 177 "parser_cocci_menhir.mly"
-                                   ( _1 )
-# 17853 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_after_dots = 
+# 1690 "parser_cocci_menhir.mly"
+                     ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 )
+# 23305 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17861,27 +23313,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = m;
-            MenhirLib.EngineTypes.startp = _startpos_m_;
-            MenhirLib.EngineTypes.endp = _endpos_m_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let m : 'tv_minus_exp_body = Obj.magic m in
-        let _startpos = _startpos_m_ in
+        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
+        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : (
-# 137 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 17881 "parser_cocci_menhir.ml"
-        ) = 
-# 177 "parser_cocci_menhir.mly"
-                                                                       ( m )
-# 17885 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_after_dots = 
+# 1691 "parser_cocci_menhir.mly"
+                                             ( Ast0.wrap(Ast0.DECL(_1))::_2 )
+# 23335 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17893,27 +23343,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = m;
-            MenhirLib.EngineTypes.startp = _startpos_m_;
-            MenhirLib.EngineTypes.endp = _endpos_m_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let m : 'tv_minus_exp_body = Obj.magic m in
-        let _startpos = _startpos_m_ in
+        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : (
-# 137 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 17913 "parser_cocci_menhir.ml"
-        ) = 
-# 178 "parser_cocci_menhir.mly"
-                         ( m )
-# 17917 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_after_dots = 
+# 1693 "parser_cocci_menhir.mly"
+                ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
+# 23365 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_plus_after_exp = 
+# 1683 "parser_cocci_menhir.mly"
+                                                                         ([])
+# 23382 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17925,6 +23390,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
@@ -17935,17 +23401,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _1 : 'tv_minus_body = Obj.magic _1 in
+        let _2 : 'tv_plus_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : (
-# 134 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 17945 "parser_cocci_menhir.ml"
-        ) = 
-# 173 "parser_cocci_menhir.mly"
-                           ( _1 )
-# 17949 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_after_exp = 
+# 1684 "parser_cocci_menhir.mly"
+                                          ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
+# 23412 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_plus_after_stm = 
+# 1696 "parser_cocci_menhir.mly"
+                                                                         ([])
+# 23429 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17957,27 +23437,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = m;
-            MenhirLib.EngineTypes.startp = _startpos_m_;
-            MenhirLib.EngineTypes.endp = _endpos_m_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let m : 'tv_minus_body = Obj.magic m in
-        let _startpos = _startpos_m_ in
+        let _2 : 'tv_plus_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : (
-# 134 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 17977 "parser_cocci_menhir.ml"
-        ) = 
-# 173 "parser_cocci_menhir.mly"
-                                                           ( m )
-# 17981 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_after_stm = 
+# 1697 "parser_cocci_menhir.mly"
+                                          ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
+# 23459 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17989,27 +23467,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = m;
-            MenhirLib.EngineTypes.startp = _startpos_m_;
-            MenhirLib.EngineTypes.endp = _endpos_m_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let m : 'tv_minus_body = Obj.magic m in
-        let _startpos = _startpos_m_ in
+        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
+        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : (
-# 134 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 18009 "parser_cocci_menhir.ml"
-        ) = 
-# 174 "parser_cocci_menhir.mly"
-                     ( m )
-# 18013 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_after_stm = 
+# 1698 "parser_cocci_menhir.mly"
+                                             ( Ast0.wrap(Ast0.DECL(_1))::_2 )
+# 23489 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18021,19 +23497,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_minus_start = 
-# 1612 "parser_cocci_menhir.mly"
-                         ( [Ast0.wrap(Ast0.DECL(_1))] )
-# 18037 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_plus_after_stm = 
+# 1700 "parser_cocci_menhir.mly"
+                ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
+# 23519 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18045,19 +23527,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = f;
+            MenhirLib.EngineTypes.startp = _startpos_f_;
+            MenhirLib.EngineTypes.endp = _endpos_f_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_ctype = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_minus_start = 
-# 1613 "parser_cocci_menhir.mly"
-                         ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] )
-# 18061 "parser_cocci_menhir.ml"
+        let b : 'tv_loption_plus_start_ = Obj.magic b in
+        let f : 'tv_loption_filespec_ = Obj.magic f in
+        let _startpos = _startpos_f_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_plus_body = 
+# 605 "parser_cocci_menhir.mly"
+    ( Top_level.top_level (f@b(*@ew*)) )
+# 23549 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18069,19 +23557,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = f;
+            MenhirLib.EngineTypes.startp = _startpos_f_;
+            MenhirLib.EngineTypes.endp = _endpos_f_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_top_init = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_minus_start = 
-# 1614 "parser_cocci_menhir.mly"
-                    ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] )
-# 18085 "parser_cocci_menhir.ml"
+        let b : 'tv_top_eexpr = Obj.magic b in
+        let f : 'tv_loption_filespec_ = Obj.magic f in
+        let _startpos = _startpos_f_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_plus_exp_body = 
+# 619 "parser_cocci_menhir.mly"
+    ( Top_level.top_level (f@[b](*@ew*)) )
+# 23579 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18093,19 +23587,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = Obj.magic _1 in
+        let _1 : 'tv_plus_exp_body = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_minus_start = 
-# 1616 "parser_cocci_menhir.mly"
-    ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 )
-# 18109 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 143 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 23607 "parser_cocci_menhir.ml"
+        ) = 
+# 179 "parser_cocci_menhir.mly"
+                                 ( _1 )
+# 23611 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18117,29 +23619,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.semv = p;
+            MenhirLib.EngineTypes.startp = _startpos_p_;
+            MenhirLib.EngineTypes.endp = _endpos_p_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let b : 'tv_ctype = Obj.magic b in
-        let a : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18136 "parser_cocci_menhir.ml"
-        ) = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_mzl_ctype_ = 
-# 1806 "parser_cocci_menhir.mly"
-                 ( (P.clt2mcode "|" a, b) )
-# 18143 "parser_cocci_menhir.ml"
+        let p : 'tv_plus_exp_body = Obj.magic p in
+        let _startpos = _startpos_p_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 143 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 23639 "parser_cocci_menhir.ml"
+        ) = 
+# 179 "parser_cocci_menhir.mly"
+                                                                    ( p )
+# 23643 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18151,29 +23651,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.semv = p;
+            MenhirLib.EngineTypes.startp = _startpos_p_;
+            MenhirLib.EngineTypes.endp = _endpos_p_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let b : 'tv_eexpr = Obj.magic b in
-        let a : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18170 "parser_cocci_menhir.ml"
-        ) = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_mzl_eexpr_ = 
-# 1806 "parser_cocci_menhir.mly"
-                 ( (P.clt2mcode "|" a, b) )
-# 18177 "parser_cocci_menhir.ml"
+        let p : 'tv_plus_exp_body = Obj.magic p in
+        let _startpos = _startpos_p_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 143 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 23671 "parser_cocci_menhir.ml"
+        ) = 
+# 180 "parser_cocci_menhir.mly"
+                        ( p )
+# 23675 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18185,29 +23683,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let b : 'tv_fun_after_dots_or = Obj.magic b in
-        let a : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18204 "parser_cocci_menhir.ml"
-        ) = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_mzl_fun_after_dots_or_ = 
-# 1806 "parser_cocci_menhir.mly"
-                 ( (P.clt2mcode "|" a, b) )
-# 18211 "parser_cocci_menhir.ml"
+        let _1 : 'tv_plus_body = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 140 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 23703 "parser_cocci_menhir.ml"
+        ) = 
+# 175 "parser_cocci_menhir.mly"
+                         ( _1 )
+# 23707 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18219,29 +23715,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.semv = p;
+            MenhirLib.EngineTypes.startp = _startpos_p_;
+            MenhirLib.EngineTypes.endp = _endpos_p_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let b : 'tv_fun_start = Obj.magic b in
-        let a : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18238 "parser_cocci_menhir.ml"
-        ) = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_mzl_fun_start_ = 
-# 1806 "parser_cocci_menhir.mly"
-                 ( (P.clt2mcode "|" a, b) )
-# 18245 "parser_cocci_menhir.ml"
+        let p : 'tv_plus_body = Obj.magic p in
+        let _startpos = _startpos_p_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 140 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 23735 "parser_cocci_menhir.ml"
+        ) = 
+# 175 "parser_cocci_menhir.mly"
+                                                        ( p )
+# 23739 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18253,29 +23747,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.semv = p;
+            MenhirLib.EngineTypes.startp = _startpos_p_;
+            MenhirLib.EngineTypes.endp = _endpos_p_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let b : 'tv_rule_elem_statement = Obj.magic b in
-        let a : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18272 "parser_cocci_menhir.ml"
-        ) = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_mzl_rule_elem_statement_ = 
-# 1806 "parser_cocci_menhir.mly"
-                 ( (P.clt2mcode "|" a, b) )
-# 18279 "parser_cocci_menhir.ml"
+        let p : 'tv_plus_body = Obj.magic p in
+        let _startpos = _startpos_p_ in
+        let _endpos = _endpos__2_ in
+        let _v : (
+# 140 "parser_cocci_menhir.mly"
+      (Ast0_cocci.rule)
+# 23767 "parser_cocci_menhir.ml"
+        ) = 
+# 176 "parser_cocci_menhir.mly"
+                    ( p )
+# 23771 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18287,29 +23779,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let b : 'tv_statement = Obj.magic b in
-        let a : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18306 "parser_cocci_menhir.ml"
-        ) = Obj.magic a in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_mzl_statement_ = 
-# 1806 "parser_cocci_menhir.mly"
-                 ( (P.clt2mcode "|" a, b) )
-# 18313 "parser_cocci_menhir.ml"
+        let _1 : 'tv_ctype = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_plus_start = 
+# 1672 "parser_cocci_menhir.mly"
+                          ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] )
+# 23795 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18327,13 +23809,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_decl = Obj.magic _1 in
+        let _1 : 'tv_top_init = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_name_opt_decl = 
-# 840 "parser_cocci_menhir.mly"
-            ( _1 )
-# 18337 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_start = 
+# 1673 "parser_cocci_menhir.mly"
+                     ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] )
+# 23819 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18345,19 +23827,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : 'tv_plus_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_plus_start = 
+# 1675 "parser_cocci_menhir.mly"
+                                          ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
+# 23849 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = t;
-          MenhirLib.EngineTypes.startp = _startpos_t_;
-          MenhirLib.EngineTypes.endp = _endpos_t_;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
           MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_t_ in
-        let _v : 'tv_name_opt_decl = 
-# 841 "parser_cocci_menhir.mly"
-              ( Ast0.wrap(Ast0.Param(t, None)) )
-# 18361 "parser_cocci_menhir.ml"
+        let _2 : 'tv_plus_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_plus_start = 
+# 1677 "parser_cocci_menhir.mly"
+                     ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 )
+# 23879 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18369,80 +23887,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = rp1;
-          MenhirLib.EngineTypes.startp = _startpos_rp1_;
-          MenhirLib.EngineTypes.endp = _endpos_rp1_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = lp1;
-              MenhirLib.EngineTypes.startp = _startpos_lp1_;
-              MenhirLib.EngineTypes.endp = _endpos_lp1_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = rp;
-                MenhirLib.EngineTypes.startp = _startpos_rp_;
-                MenhirLib.EngineTypes.endp = _endpos_rp_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = s;
-                  MenhirLib.EngineTypes.startp = _startpos_s_;
-                  MenhirLib.EngineTypes.endp = _endpos_s_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = lp;
-                    MenhirLib.EngineTypes.startp = _startpos_lp_;
-                    MenhirLib.EngineTypes.endp = _endpos_lp_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = t;
-                      MenhirLib.EngineTypes.startp = _startpos_t_;
-                      MenhirLib.EngineTypes.endp = _endpos_t_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18412 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18418 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let rp : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18423 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp in
-        let s : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18428 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let lp : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18433 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_rp1_ in
-        let _v : 'tv_name_opt_decl = 
-# 844 "parser_cocci_menhir.mly"
-        ( let fnptr =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp,
-               P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in
-       Ast0.wrap(Ast0.Param(fnptr, None)) )
-# 18446 "parser_cocci_menhir.ml"
+        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
+        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_plus_start = 
+# 1678 "parser_cocci_menhir.mly"
+                                             ( Ast0.wrap(Ast0.DECL(_1))::_2 )
+# 23909 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18465,14 +23928,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_nest_after_stm = Obj.magic _2 in
+        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
         let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_nest_after_dots = 
-# 1727 "parser_cocci_menhir.mly"
-                                     (_1@_2)
-# 18476 "parser_cocci_menhir.ml"
+        let _v : 'tv_plus_start = 
+# 1680 "parser_cocci_menhir.mly"
+                ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
+# 23939 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 23960 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pnrule = 
+# 230 "parser_cocci_menhir.mly"
+                   ( Ast.Dep      _1 )
+# 23967 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18494,13 +23985,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_nest_after_exp = Obj.magic _2 in
+        let _2 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 23992 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_nest_after_dots = 
-# 1728 "parser_cocci_menhir.mly"
-                                (_2)
-# 18504 "parser_cocci_menhir.ml"
+        let _v : 'tv_pnrule = 
+# 231 "parser_cocci_menhir.mly"
+                   ( Ast.AntiDep  _2 )
+# 23999 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18517,20 +24012,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
             MenhirLib.EngineTypes.startp = _startpos__1_;
             MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_nest_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
+        let _2 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 24024 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_nest_after_dots = 
-# 1729 "parser_cocci_menhir.mly"
-                                ((Ast0.wrap(Ast0.Exp(_1)))::_2)
-# 18534 "parser_cocci_menhir.ml"
+        let _v : 'tv_pnrule = 
+# 232 "parser_cocci_menhir.mly"
+                   ( Ast.EverDep  _2 )
+# 24031 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18541,13 +24038,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_nest_after_exp = 
-# 1737 "parser_cocci_menhir.mly"
-                                ([])
-# 18551 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let _2 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 24056 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_pnrule = 
+# 233 "parser_cocci_menhir.mly"
+                   ( Ast.NeverDep _2 )
+# 24063 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18559,25 +24071,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_nest_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _2 : 'tv_dep = Obj.magic _2 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_nest_after_exp = 
-# 1738 "parser_cocci_menhir.mly"
-                                (_1::_2)
-# 18581 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_pnrule = 
+# 234 "parser_cocci_menhir.mly"
+                   ( _2 )
+# 24095 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18588,13 +24102,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_nest_after_stm = 
-# 1732 "parser_cocci_menhir.mly"
-                                ([])
-# 18598 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_primary_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
+# 1300 "parser_cocci_menhir.mly"
+                                                 ( _1 )
+# 24119 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18606,25 +24127,127 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _4;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _2;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_nest_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _4 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24155 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24161 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_nest_after_stm = 
-# 1733 "parser_cocci_menhir.mly"
-                                (_1::_2)
-# 18628 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
+# 1302 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
+                                      P.clt2mcode "]" _4)) )
+# 24170 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24202 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
+# 1305 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
+# 24210 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 104 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24242 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
+# 1307 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
+                                    _3)) )
+# 24251 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18647,14 +24270,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : 'tv_nest_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement = Obj.magic _1 in
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24277 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_nest_after_stm = 
-# 1734 "parser_cocci_menhir.mly"
-                                (_1@_2)
-# 18658 "parser_cocci_menhir.ml"
+        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
+# 1310 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
+# 24285 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18666,41 +24293,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = c;
-          MenhirLib.EngineTypes.startp = _startpos_c_;
-          MenhirLib.EngineTypes.endp = _endpos_c_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let c : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 18689 "parser_cocci_menhir.ml"
-        ) = Obj.magic c in
-        let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 18695 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+# 24311 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_c_ in
-        let _v : 'tv_nest_expressions = 
-# 1222 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1,
-                             Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
-                             P.clt2mcode "...>" c, None, false)) )
-# 18704 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
+# 1312 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
+# 24319 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18712,41 +24327,47 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = c;
-          MenhirLib.EngineTypes.startp = _startpos_c_;
-          MenhirLib.EngineTypes.endp = _endpos_c_;
+          MenhirLib.EngineTypes.semv = _4;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = _2;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let c : (
-# 73 "parser_cocci_menhir.mly"
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 18735 "parser_cocci_menhir.ml"
-        ) = Obj.magic c in
-        let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
+# 24355 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 18741 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+# 24361 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_c_ in
-        let _v : 'tv_nest_expressions = 
-# 1226 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1,
-                             Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
-                             P.clt2mcode "...+>" c, None, true)) )
-# 18750 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
+# 1314 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
+                             _3,
+                             P.clt2mcode ")" _4)) )
+# 24371 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18764,39 +24385,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_nest_after_dots = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_nest_start = 
-# 1724 "parser_cocci_menhir.mly"
-                   ( Ast0.wrap(Ast0.DOTS(_1)) )
-# 18774 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
+        let _1 : 'tv_primary_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : (
-# 168 "parser_cocci_menhir.mly"
-      (unit)
-# 18796 "parser_cocci_menhir.ml"
-        ) = 
-# 1874 "parser_cocci_menhir.mly"
-                    ( () )
-# 18800 "parser_cocci_menhir.ml"
+        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
+# 1300 "parser_cocci_menhir.mly"
+                                                 ( _1 )
+# 24395 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18808,51 +24403,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _4;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _2;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
+        let _4 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24431 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24437 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 168 "parser_cocci_menhir.mly"
-      (unit)
-# 18826 "parser_cocci_menhir.ml"
-        ) = 
-# 1875 "parser_cocci_menhir.mly"
-                    ( () )
-# 18830 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : (
-# 168 "parser_cocci_menhir.mly"
-      (unit)
-# 18852 "parser_cocci_menhir.ml"
-        ) = 
-# 1876 "parser_cocci_menhir.mly"
-                    ( () )
-# 18856 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
+# 1302 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
+                                      P.clt2mcode "]" _4)) )
+# 24446 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18864,26 +24454,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = dg;
-          MenhirLib.EngineTypes.startp = _startpos_dg_;
-          MenhirLib.EngineTypes.endp = _endpos_dg_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = g;
-            MenhirLib.EngineTypes.startp = _startpos_g_;
-            MenhirLib.EngineTypes.endp = _endpos_g_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let dg : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic dg in
-        let g : 'tv_dexpr = Obj.magic g in
-        let _startpos = _startpos_g_ in
-        let _endpos = _endpos_dg_ in
-        let _v : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = 
-# 1390 "parser_cocci_menhir.mly"
-  ( function dot_builder ->
-      g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) )
-# 18887 "parser_cocci_menhir.ml"
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24478 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
+# 1305 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
+# 24486 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18894,24 +24493,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let x : (
-# 99 "parser_cocci_menhir.mly"
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 104 "parser_cocci_menhir.mly"
        (Data.clt)
-# 18908 "parser_cocci_menhir.ml"
-        ) = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_nonempty_list_TMul_ = 
-# 124 "standard.mly"
-    ( [ x ] )
-# 18915 "parser_cocci_menhir.ml"
+# 24518 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
+# 1307 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
+                                    _3)) )
+# 24527 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18923,29 +24535,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = x;
-            MenhirLib.EngineTypes.startp = _startpos_x_;
-            MenhirLib.EngineTypes.endp = _endpos_x_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_nonempty_list_TMul_ = Obj.magic xs in
-        let x : (
-# 99 "parser_cocci_menhir.mly"
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 18942 "parser_cocci_menhir.ml"
-        ) = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_nonempty_list_TMul_ = 
-# 126 "standard.mly"
-    ( x :: xs )
-# 18949 "parser_cocci_menhir.ml"
+# 24553 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
+# 1310 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
+# 24561 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18957,27 +24569,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
             MenhirLib.EngineTypes.startp = _startpos__1_;
             MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let i : 'tv_ident_or_const = Obj.magic i in
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24587 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_not_ceq = 
-# 1451 "parser_cocci_menhir.mly"
-         ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-          then failwith "constraints not allowed in a generated rule file");
-          [i] )
-# 18981 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
+# 1312 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
+# 24595 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18989,17 +24603,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _4;
           MenhirLib.EngineTypes.startp = _startpos__4_;
           MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = l;
-            MenhirLib.EngineTypes.startp = _startpos_l_;
-            MenhirLib.EngineTypes.endp = _endpos_l_;
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
             MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _2;
               MenhirLib.EngineTypes.startp = _startpos__2_;
               MenhirLib.EngineTypes.endp = _endpos__2_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
                 MenhirLib.EngineTypes.startp = _startpos__1_;
                 MenhirLib.EngineTypes.endp = _endpos__1_;
                 MenhirLib.EngineTypes.next = _menhir_stack;
@@ -19007,17 +24624,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let l : 'tv_comma_list_ident_or_const_ = Obj.magic l in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24631 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24637 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
-        let _v : 'tv_not_ceq = 
-# 1457 "parser_cocci_menhir.mly"
-  ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-          then failwith "constraints not allowed in a generated rule file");
-          l )
-# 19021 "parser_cocci_menhir.ml"
+        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
+# 1314 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
+                             _3,
+                             P.clt2mcode ")" _4)) )
+# 24647 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19029,29 +24655,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let i : 'tv_pure_ident = Obj.magic i in
+        let _1 : 'tv_primary_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_not_eq = 
-# 1418 "parser_cocci_menhir.mly"
-         ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-           (* pb: constraints not stored with metavars; too lazy to search for
-             them in the pattern *)
-          then failwith "constraints not allowed in a generated rule file");
-          [Ast0.wrap(Ast0.Id(P.id2mcode i))] )
-# 19055 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
+# 1300 "parser_cocci_menhir.mly"
+                                                 ( _1 )
+# 24671 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19063,17 +24679,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _4;
           MenhirLib.EngineTypes.startp = _startpos__4_;
           MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = l;
-            MenhirLib.EngineTypes.startp = _startpos_l_;
-            MenhirLib.EngineTypes.endp = _endpos_l_;
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
             MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _2;
               MenhirLib.EngineTypes.startp = _startpos__2_;
               MenhirLib.EngineTypes.endp = _endpos__2_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
                 MenhirLib.EngineTypes.startp = _startpos__1_;
                 MenhirLib.EngineTypes.endp = _endpos__1_;
                 MenhirLib.EngineTypes.next = _menhir_stack;
@@ -19081,17 +24700,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let l : 'tv_comma_list_pure_ident_ = Obj.magic l in
+        let _4 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24707 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24713 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
-        let _v : 'tv_not_eq = 
-# 1426 "parser_cocci_menhir.mly"
-  ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-          then failwith "constraints not allowed in a generated rule file");
-          List.map (function i -> Ast0.wrap(Ast0.Id(P.id2mcode i))) l )
-# 19095 "parser_cocci_menhir.ml"
+        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
+# 1302 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
+                                      P.clt2mcode "]" _4)) )
+# 24722 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19103,27 +24730,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let i : 'tv_pure_ident = Obj.magic i in
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24754 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_not_eqe = 
-# 1434 "parser_cocci_menhir.mly"
-         ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-          then failwith "constraints not allowed in a generated rule file");
-          [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] )
-# 19127 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
+# 1305 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
+# 24762 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19135,38 +24770,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 104 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24794 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
+# 1307 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
+                                    _3)) )
+# 24803 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = l;
-            MenhirLib.EngineTypes.startp = _startpos_l_;
-            MenhirLib.EngineTypes.endp = _endpos_l_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let l : 'tv_comma_list_pure_ident_ = Obj.magic l in
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24829 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_not_eqe = 
-# 1440 "parser_cocci_menhir.mly"
-  ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-          then failwith "constraints not allowed in a generated rule file");
-          List.map
-            (function i ->
-              Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))))
-            l )
-# 19170 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
+# 1310 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
+# 24837 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19178,32 +24845,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = i;
-          MenhirLib.EngineTypes.startp = _startpos_i_;
-          MenhirLib.EngineTypes.endp = _endpos_i_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
             MenhirLib.EngineTypes.startp = _startpos__1_;
             MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let i : 'tv_meta_ident = Obj.magic i in
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24863 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_i_ in
-        let _v : 'tv_not_pos = 
-# 1471 "parser_cocci_menhir.mly"
-         ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-          then failwith "constraints not allowed in a generated rule file");
-          match i with
-            (None,_) -> failwith "constraint must be an inherited variable"
-          | (Some rule,name) ->
-              let i = (rule,name) in
-              P.check_meta(Ast.MetaPosDecl(Ast.NONE,i));
-              [i] )
-# 19207 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
+# 1312 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
+# 24871 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19215,17 +24879,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _4;
           MenhirLib.EngineTypes.startp = _startpos__4_;
           MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = l;
-            MenhirLib.EngineTypes.startp = _startpos_l_;
-            MenhirLib.EngineTypes.endp = _endpos_l_;
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
             MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _2;
               MenhirLib.EngineTypes.startp = _startpos__2_;
               MenhirLib.EngineTypes.endp = _endpos__2_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
                 MenhirLib.EngineTypes.startp = _startpos__1_;
                 MenhirLib.EngineTypes.endp = _endpos__1_;
                 MenhirLib.EngineTypes.next = _menhir_stack;
@@ -19233,25 +24900,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let l : 'tv_comma_list_meta_ident_ = Obj.magic l in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24907 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24913 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
-        let _v : 'tv_not_pos = 
-# 1482 "parser_cocci_menhir.mly"
-  ( (if !Data.in_iso
-          then failwith "constraints not allowed in iso file");
-          (if !Data.in_generating
-          then failwith "constraints not allowed in a generated rule file");
-          List.map
-            (function
-                (None,_) ->
-                  failwith "constraint must be an inherited variable"
-              | (Some rule,name) ->
-                  let i = (rule,name) in
-                  P.check_meta(Ast.MetaPosDecl(Ast.NONE,i));
-                  i)
-            l )
-# 19255 "parser_cocci_menhir.ml"
+        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
+# 1314 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
+                             _3,
+                             P.clt2mcode ")" _4)) )
+# 24923 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19269,13 +24937,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_decl = Obj.magic _1 in
+        let _1 : 'tv_primary_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_one_dec_decl_ = 
-# 1556 "parser_cocci_menhir.mly"
-        ( _1 )
-# 19279 "parser_cocci_menhir.ml"
+        let _v : 'tv_postfix_expr_expr_invalid_ = 
+# 1300 "parser_cocci_menhir.mly"
+                                                 ( _1 )
+# 24947 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19287,29 +24955,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _4;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _2;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 66 "parser_cocci_menhir.mly"
-       (Parse_aux.list_info)
-# 19300 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let _4 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24983 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 102 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 24989 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_one_dec_decl_ = 
-# 1558 "parser_cocci_menhir.mly"
-    ( let (nm,lenname,pure,clt) = _1 in
-    let nm = P.clt2mcode nm clt in
-    let lenname =
-      match lenname with
-       Some nm -> Some(P.clt2mcode nm clt)
-      | None -> None in
-    Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) )
-# 19313 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_postfix_expr_expr_invalid_ = 
+# 1302 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
+                                      P.clt2mcode "]" _4)) )
+# 24998 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19321,19 +25006,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_name_opt_decl = Obj.magic _1 in
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 25030 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_one_dec_name_opt_decl_ = 
-# 1556 "parser_cocci_menhir.mly"
-        ( _1 )
-# 19337 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_expr_invalid_ = 
+# 1305 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
+# 25038 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19345,29 +25046,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 66 "parser_cocci_menhir.mly"
-       (Parse_aux.list_info)
-# 19358 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let _3 : 'tv_ident = Obj.magic _3 in
+        let _2 : (
+# 104 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 25070 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_one_dec_name_opt_decl_ = 
-# 1558 "parser_cocci_menhir.mly"
-    ( let (nm,lenname,pure,clt) = _1 in
-    let nm = P.clt2mcode nm clt in
-    let lenname =
-      match lenname with
-       Some nm -> Some(P.clt2mcode nm clt)
-      | None -> None in
-    Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) )
-# 19371 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_postfix_expr_expr_invalid_ = 
+# 1307 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
+                                    _3)) )
+# 25079 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19379,29 +25087,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = t;
-            MenhirLib.EngineTypes.startp = _startpos_t_;
-            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19397 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = 
-# 1011 "parser_cocci_menhir.mly"
-      ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) )
-# 19405 "parser_cocci_menhir.ml"
+# 25105 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_postfix_expr_expr_invalid_ = 
+# 1310 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
+# 25113 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19413,43 +25121,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = t;
-              MenhirLib.EngineTypes.startp = _startpos_t_;
-              MenhirLib.EngineTypes.endp = _endpos_t_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
+        let _2 : (
+# 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19436 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 19446 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1013 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 19453 "parser_cocci_menhir.ml"
+# 25139 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_postfix_expr_expr_invalid_ = 
+# 1312 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
+# 25147 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19461,50 +25155,47 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = _4;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = _3;
+            MenhirLib.EngineTypes.startp = _startpos__3_;
+            MenhirLib.EngineTypes.endp = _endpos__3_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = t;
-              MenhirLib.EngineTypes.startp = _startpos_t_;
-              MenhirLib.EngineTypes.endp = _endpos_t_;
+              MenhirLib.EngineTypes.semv = _2;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = x0;
-                MenhirLib.EngineTypes.startp = _startpos_x0_;
-                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.semv = _1;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
                 MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19489 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 19501 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1013 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 19508 "parser_cocci_menhir.ml"
+# 25183 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 25189 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__4_ in
+        let _v : 'tv_postfix_expr_expr_invalid_ = 
+# 1314 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
+                             _3,
+                             P.clt2mcode ")" _4)) )
+# 25199 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19517,82 +25208,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = f;
-          MenhirLib.EngineTypes.startp = _startpos_f_;
-          MenhirLib.EngineTypes.endp = _endpos_f_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let f : 'tv_funproto = Obj.magic f in
-        let _startpos = _startpos_f_ in
-        let _endpos = _endpos_f_ in
-        let _v : 'tv_one_decl_var = 
-# 1015 "parser_cocci_menhir.mly"
-               ( f )
-# 19532 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = t;
-                  MenhirLib.EngineTypes.startp = _startpos_t_;
-                  MenhirLib.EngineTypes.endp = _endpos_t_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19573 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19579 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 19589 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1017 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) )
-# 19596 "parser_cocci_menhir.ml"
+        let _1 : 'tv_func_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1319 "parser_cocci_menhir.mly"
+                ( Ast0.wrap(Ast0.Ident(_1)) )
+# 25223 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19604,66 +25231,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = t;
-                  MenhirLib.EngineTypes.startp = _startpos_t_;
-                  MenhirLib.EngineTypes.endp = _endpos_t_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = x0;
-                    MenhirLib.EngineTypes.startp = _startpos_x0_;
-                    MenhirLib.EngineTypes.endp = _endpos_x0_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
-            };
-          } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19642 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19648 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 19660 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1017 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) )
-# 19667 "parser_cocci_menhir.ml"
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25244 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1321 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
+# 25252 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19675,51 +25260,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19698 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          
-# 39 "standard.mly"
-    ( None )
-# 19708 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 19715 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1022 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 19723 "parser_cocci_menhir.ml"
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25273 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1324 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
+# 25281 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19731,58 +25289,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = x0;
-                MenhirLib.EngineTypes.startp = _startpos_x0_;
-                MenhirLib.EngineTypes.endp = _endpos_x0_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19759 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x0 : 'tv_const_vol = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 19771 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 19778 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1022 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 19786 "parser_cocci_menhir.ml"
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25302 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1327 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
+# 25310 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19794,58 +25318,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = x0;
-                MenhirLib.EngineTypes.startp = _startpos_x0_;
-                MenhirLib.EngineTypes.endp = _endpos_x0_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19822 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          
-# 39 "standard.mly"
-    ( None )
-# 19833 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 19841 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1022 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 19849 "parser_cocci_menhir.ml"
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25331 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1330 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
+# 25339 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19857,65 +25347,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = x1;
-                MenhirLib.EngineTypes.startp = _startpos_x1_;
-                MenhirLib.EngineTypes.endp = _endpos_x1_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = x0;
-                  MenhirLib.EngineTypes.startp = _startpos_x0_;
-                  MenhirLib.EngineTypes.endp = _endpos_x0_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19890 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x1 : 'tv_const_vol = Obj.magic x1 in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          let x = x1 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 19903 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 19911 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1022 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-       Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 19919 "parser_cocci_menhir.ml"
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25360 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1333 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
+# 25369 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19927,69 +25377,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19960 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 19966 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          
-# 39 "standard.mly"
-    ( None )
-# 19976 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 19983 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1027 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv)) )
-# 19993 "parser_cocci_menhir.ml"
+        let _1 : (
+# 63 "parser_cocci_menhir.mly"
+       (Parse_aux.expinfo)
+# 25390 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1337 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,clt) = _1 in
+     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
+# 25398 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20001,76 +25406,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = x0;
-                    MenhirLib.EngineTypes.startp = _startpos_x0_;
-                    MenhirLib.EngineTypes.endp = _endpos_x0_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20039 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20045 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x0 : 'tv_const_vol = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 20057 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 20064 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1027 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv)) )
-# 20074 "parser_cocci_menhir.ml"
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25419 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1340 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
+# 25428 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20082,76 +25436,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = x0;
-                    MenhirLib.EngineTypes.startp = _startpos_x0_;
-                    MenhirLib.EngineTypes.endp = _endpos_x0_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20120 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20126 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          
-# 39 "standard.mly"
-    ( None )
-# 20137 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 20145 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1027 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv)) )
-# 20155 "parser_cocci_menhir.ml"
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25449 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1344 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
+# 25458 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25479 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1348 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
+# 25488 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20163,83 +25496,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = d;
-                MenhirLib.EngineTypes.startp = _startpos_d_;
-                MenhirLib.EngineTypes.endp = _endpos_d_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = x1;
-                    MenhirLib.EngineTypes.startp = _startpos_x1_;
-                    MenhirLib.EngineTypes.endp = _endpos_x1_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = x0;
-                      MenhirLib.EngineTypes.startp = _startpos_x0_;
-                      MenhirLib.EngineTypes.endp = _endpos_x0_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20206 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
+# 25519 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20212 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let x1 : 'tv_const_vol = Obj.magic x1 in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let cv =
-          let x = x1 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 20225 "parser_cocci_menhir.ml"
-          
-        in
-        let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 20233 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1027 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-      !Data.add_type_name (P.id2name i);
-      let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-      Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
-                          P.clt2mcode ";" pv)) )
-# 20243 "parser_cocci_menhir.ml"
+# 25525 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1352 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
+                           P.clt2mcode ")" _3)) )
+# 25533 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20251,104 +25541,119 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp2;
-            MenhirLib.EngineTypes.startp = _startpos_rp2_;
-            MenhirLib.EngineTypes.endp = _endpos_rp2_;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = p;
-              MenhirLib.EngineTypes.startp = _startpos_p_;
-              MenhirLib.EngineTypes.endp = _endpos_p_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp2;
-                MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = rp1;
-                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = d;
-                    MenhirLib.EngineTypes.startp = _startpos_d_;
-                    MenhirLib.EngineTypes.endp = _endpos_d_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = st;
-                      MenhirLib.EngineTypes.startp = _startpos_st_;
-                      MenhirLib.EngineTypes.endp = _endpos_st_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = lp1;
-                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.state = _menhir_s;
-                          MenhirLib.EngineTypes.semv = t;
-                          MenhirLib.EngineTypes.startp = _startpos_t_;
-                          MenhirLib.EngineTypes.endp = _endpos_t_;
-                          MenhirLib.EngineTypes.next = _menhir_stack;
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20304 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20309 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20315 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
+        let _3 : (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20320 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20326 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
+# 25564 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
+        let _1 : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20331 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 20340 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1037 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 20352 "parser_cocci_menhir.ml"
+# 25570 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1355 "parser_cocci_menhir.mly"
+     ( let (mids,code) = _2 in
+       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
+                              code, mids,
+                              P.clt2mcode ")" _3)) )
+# 25580 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_dot_expressions = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
+# 1359 "parser_cocci_menhir.mly"
+                 ( _1 )
+# 25604 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_func_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1319 "parser_cocci_menhir.mly"
+                ( Ast0.wrap(Ast0.Ident(_1)) )
+# 25628 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25649 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1321 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
+# 25657 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20360,111 +25665,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp2;
-            MenhirLib.EngineTypes.startp = _startpos_rp2_;
-            MenhirLib.EngineTypes.endp = _endpos_rp2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = p;
-              MenhirLib.EngineTypes.startp = _startpos_p_;
-              MenhirLib.EngineTypes.endp = _endpos_p_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp2;
-                MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = rp1;
-                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = d;
-                    MenhirLib.EngineTypes.startp = _startpos_d_;
-                    MenhirLib.EngineTypes.endp = _endpos_d_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = st;
-                      MenhirLib.EngineTypes.startp = _startpos_st_;
-                      MenhirLib.EngineTypes.endp = _endpos_st_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = lp1;
-                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.semv = t;
-                          MenhirLib.EngineTypes.startp = _startpos_t_;
-                          MenhirLib.EngineTypes.endp = _endpos_t_;
-                          MenhirLib.EngineTypes.next = {
-                            MenhirLib.EngineTypes.state = _menhir_s;
-                            MenhirLib.EngineTypes.semv = x0;
-                            MenhirLib.EngineTypes.startp = _startpos_x0_;
-                            MenhirLib.EngineTypes.endp = _endpos_x0_;
-                            MenhirLib.EngineTypes.next = _menhir_stack;
-                            };
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20418 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20423 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20429 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20434 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20440 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20445 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 20456 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1037 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-        Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 20468 "parser_cocci_menhir.ml"
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25678 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1324 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
+# 25686 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20476,56 +25694,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _5;
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _4;
-            MenhirLib.EngineTypes.startp = _startpos__4_;
-            MenhirLib.EngineTypes.endp = _endpos__4_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _3;
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _2;
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = _1;
-                  MenhirLib.EngineTypes.startp = _startpos__1_;
-                  MenhirLib.EngineTypes.endp = _endpos__1_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _5 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20509 "parser_cocci_menhir.ml"
-        ) = Obj.magic _5 in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20514 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20520 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_decl_ident = Obj.magic _1 in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25707 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_one_decl_var = 
-# 1045 "parser_cocci_menhir.mly"
-      ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3,
-                                 P.clt2mcode ")" _4,P.clt2mcode ";" _5)) )
-# 20529 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1327 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
+# 25715 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20537,120 +25723,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = rp2;
-                MenhirLib.EngineTypes.startp = _startpos_rp2_;
-                MenhirLib.EngineTypes.endp = _endpos_rp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = p;
-                  MenhirLib.EngineTypes.startp = _startpos_p_;
-                  MenhirLib.EngineTypes.endp = _endpos_p_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = lp2;
-                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = rp1;
-                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = d;
-                        MenhirLib.EngineTypes.startp = _startpos_d_;
-                        MenhirLib.EngineTypes.endp = _endpos_d_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.semv = st;
-                          MenhirLib.EngineTypes.startp = _startpos_st_;
-                          MenhirLib.EngineTypes.endp = _endpos_st_;
-                          MenhirLib.EngineTypes.next = {
-                            MenhirLib.EngineTypes.semv = lp1;
-                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                            MenhirLib.EngineTypes.next = {
-                              MenhirLib.EngineTypes.state = _menhir_s;
-                              MenhirLib.EngineTypes.semv = t;
-                              MenhirLib.EngineTypes.startp = _startpos_t_;
-                              MenhirLib.EngineTypes.endp = _endpos_t_;
-                              MenhirLib.EngineTypes.next = _menhir_stack;
-                              };
-                            };
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 25736 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1330 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
+# 25744 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20600 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20606 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20611 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20617 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20622 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20628 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20633 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          
-# 39 "standard.mly"
-    ( None )
-# 20642 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1051 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)))
-# 20654 "parser_cocci_menhir.ml"
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25765 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1333 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
+# 25774 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20662,127 +25782,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = e;
-            MenhirLib.EngineTypes.startp = _startpos_e_;
-            MenhirLib.EngineTypes.endp = _endpos_e_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = q;
-              MenhirLib.EngineTypes.startp = _startpos_q_;
-              MenhirLib.EngineTypes.endp = _endpos_q_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = rp2;
-                MenhirLib.EngineTypes.startp = _startpos_rp2_;
-                MenhirLib.EngineTypes.endp = _endpos_rp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = p;
-                  MenhirLib.EngineTypes.startp = _startpos_p_;
-                  MenhirLib.EngineTypes.endp = _endpos_p_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = lp2;
-                    MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                    MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = rp1;
-                      MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                      MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = d;
-                        MenhirLib.EngineTypes.startp = _startpos_d_;
-                        MenhirLib.EngineTypes.endp = _endpos_d_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.semv = st;
-                          MenhirLib.EngineTypes.startp = _startpos_st_;
-                          MenhirLib.EngineTypes.endp = _endpos_st_;
-                          MenhirLib.EngineTypes.next = {
-                            MenhirLib.EngineTypes.semv = lp1;
-                            MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                            MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                            MenhirLib.EngineTypes.next = {
-                              MenhirLib.EngineTypes.semv = t;
-                              MenhirLib.EngineTypes.startp = _startpos_t_;
-                              MenhirLib.EngineTypes.endp = _endpos_t_;
-                              MenhirLib.EngineTypes.next = {
-                                MenhirLib.EngineTypes.state = _menhir_s;
-                                MenhirLib.EngineTypes.semv = x0;
-                                MenhirLib.EngineTypes.startp = _startpos_x0_;
-                                MenhirLib.EngineTypes.endp = _endpos_x0_;
-                                MenhirLib.EngineTypes.next = _menhir_stack;
-                                };
-                              };
-                            };
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20730 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let e : 'tv_initialize = Obj.magic e in
-        let q : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20736 "parser_cocci_menhir.ml"
-        ) = Obj.magic q in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20741 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20747 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20752 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20758 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 20763 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let x0 : 'tv_storage = Obj.magic x0 in
-        let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_one_decl_var = let s =
-          let x = x0 in
-          
-# 41 "standard.mly"
-    ( Some x )
-# 20774 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 1051 "parser_cocci_menhir.mly"
-      ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-      Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)))
-# 20786 "parser_cocci_menhir.ml"
+        let _1 : (
+# 63 "parser_cocci_menhir.mly"
+       (Parse_aux.expinfo)
+# 25795 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1337 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,clt) = _1 in
+     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
+# 25803 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20793,13 +25810,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_option_TLocal_ = 
-# 29 "standard.mly"
-    ( None )
-# 20803 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25824 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1340 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
+# 25833 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20812,18 +25842,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let x : unit = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_option_TLocal_ = 
-# 31 "standard.mly"
-    ( Some x )
-# 20827 "parser_cocci_menhir.ml"
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25854 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1344 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
+# 25863 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 25884 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1348 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
+# 25893 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20834,13 +25900,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_option_TPosAny_ = 
-# 29 "standard.mly"
-    ( None )
-# 20844 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 25924 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 25930 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1352 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
+                           P.clt2mcode ")" _3)) )
+# 25938 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20852,19 +25946,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let x : unit = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_option_TPosAny_ = 
-# 31 "standard.mly"
-    ( Some x )
-# 20868 "parser_cocci_menhir.ml"
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 25969 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 25975 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1355 "parser_cocci_menhir.mly"
+     ( let (mids,code) = _2 in
+       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
+                              code, mids,
+                              P.clt2mcode ")" _3)) )
+# 25985 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20875,13 +25992,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_option_eexpr_ = 
-# 29 "standard.mly"
-    ( None )
-# 20885 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_invalid = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_invalid_ = 
+# 1359 "parser_cocci_menhir.mly"
+                 ( _1 )
+# 26009 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20894,18 +26018,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let x : 'tv_eexpr = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_option_eexpr_ = 
-# 31 "standard.mly"
-    ( Some x )
-# 20909 "parser_cocci_menhir.ml"
+        let _1 : 'tv_func_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1319 "parser_cocci_menhir.mly"
+                ( Ast0.wrap(Ast0.Ident(_1)) )
+# 26033 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20916,13 +26040,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_plus_after_dots = 
-# 1674 "parser_cocci_menhir.mly"
-                                                                         ([])
-# 20926 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26054 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1321 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
+# 26062 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20934,23 +26070,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_exp = Obj.magic _2 in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26083 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_dots = 
-# 1675 "parser_cocci_menhir.mly"
-                                                                         (_2)
-# 20954 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1324 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
+# 26091 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20962,25 +26099,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26112 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_dots = 
-# 1677 "parser_cocci_menhir.mly"
-                     ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 )
-# 20984 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1327 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
+# 26120 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20992,25 +26128,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
-        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26141 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_dots = 
-# 1678 "parser_cocci_menhir.mly"
-                                             ( Ast0.wrap(Ast0.DECL(_1))::_2 )
-# 21014 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1330 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
+# 26149 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21022,25 +26157,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26170 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_dots = 
-# 1680 "parser_cocci_menhir.mly"
-                ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
-# 21044 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1333 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
+# 26179 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21051,13 +26186,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_plus_after_exp = 
-# 1670 "parser_cocci_menhir.mly"
-                                                                         ([])
-# 21061 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 63 "parser_cocci_menhir.mly"
+       (Parse_aux.expinfo)
+# 26200 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1337 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,clt) = _1 in
+     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
+# 26208 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21069,25 +26216,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26229 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_exp = 
-# 1671 "parser_cocci_menhir.mly"
-                                          ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
-# 21091 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1340 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
+# 26238 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21098,13 +26245,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_plus_after_stm = 
-# 1683 "parser_cocci_menhir.mly"
-                                                                         ([])
-# 21108 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26259 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1344 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
+# 26268 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21116,25 +26276,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26289 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_stm = 
-# 1684 "parser_cocci_menhir.mly"
-                                          ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
-# 21138 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1348 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
+# 26298 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21146,25 +26306,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
-        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26329 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26335 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_stm = 
-# 1685 "parser_cocci_menhir.mly"
-                                             ( Ast0.wrap(Ast0.DECL(_1))::_2 )
-# 21168 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1352 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
+                           P.clt2mcode ")" _3)) )
+# 26343 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21176,25 +26351,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement = Obj.magic _1 in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26374 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26380 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_after_stm = 
-# 1687 "parser_cocci_menhir.mly"
-                ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
-# 21198 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1355 "parser_cocci_menhir.mly"
+     ( let (mids,code) = _2 in
+       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
+                              code, mids,
+                              P.clt2mcode ")" _3)) )
+# 26390 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21206,31 +26398,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ew;
-          MenhirLib.EngineTypes.startp = _startpos_ew_;
-          MenhirLib.EngineTypes.endp = _endpos_ew_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = f;
-              MenhirLib.EngineTypes.startp = _startpos_f_;
-              MenhirLib.EngineTypes.endp = _endpos_f_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ew : 'tv_loption_error_words_ = Obj.magic ew in
-        let b : 'tv_loption_plus_start_ = Obj.magic b in
-        let f : 'tv_loption_filespec_ = Obj.magic f in
-        let _startpos = _startpos_f_ in
-        let _endpos = _endpos_ew_ in
-        let _v : 'tv_plus_body = 
-# 614 "parser_cocci_menhir.mly"
-    ( Top_level.top_level (f@b@ew) )
-# 21234 "parser_cocci_menhir.ml"
+        let _1 : 'tv_nest_expressions = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
+# 1359 "parser_cocci_menhir.mly"
+                 ( _1 )
+# 26414 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21242,31 +26422,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = ew;
-          MenhirLib.EngineTypes.startp = _startpos_ew_;
-          MenhirLib.EngineTypes.endp = _endpos_ew_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = f;
-              MenhirLib.EngineTypes.startp = _startpos_f_;
-              MenhirLib.EngineTypes.endp = _endpos_f_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ew : 'tv_loption_error_words_ = Obj.magic ew in
-        let b : 'tv_top_eexpr = Obj.magic b in
-        let f : 'tv_loption_filespec_ = Obj.magic f in
-        let _startpos = _startpos_f_ in
-        let _endpos = _endpos_ew_ in
-        let _v : 'tv_plus_exp_body = 
-# 628 "parser_cocci_menhir.mly"
-    ( Top_level.top_level (f@[b]@ew) )
-# 21270 "parser_cocci_menhir.ml"
+        let _1 : 'tv_func_ident = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1319 "parser_cocci_menhir.mly"
+                ( Ast0.wrap(Ast0.Ident(_1)) )
+# 26438 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21278,27 +26446,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_plus_exp_body = Obj.magic _1 in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26459 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 143 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 21298 "parser_cocci_menhir.ml"
-        ) = 
-# 179 "parser_cocci_menhir.mly"
-                                 ( _1 )
-# 21302 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1321 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
+# 26467 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21310,27 +26475,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = p;
-            MenhirLib.EngineTypes.startp = _startpos_p_;
-            MenhirLib.EngineTypes.endp = _endpos_p_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let p : 'tv_plus_exp_body = Obj.magic p in
-        let _startpos = _startpos_p_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 143 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 21330 "parser_cocci_menhir.ml"
-        ) = 
-# 179 "parser_cocci_menhir.mly"
-                                                                    ( p )
-# 21334 "parser_cocci_menhir.ml"
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26488 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1324 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
+# 26496 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21342,27 +26504,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = p;
-            MenhirLib.EngineTypes.startp = _startpos_p_;
-            MenhirLib.EngineTypes.endp = _endpos_p_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let p : 'tv_plus_exp_body = Obj.magic p in
-        let _startpos = _startpos_p_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 143 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 21362 "parser_cocci_menhir.ml"
-        ) = 
-# 180 "parser_cocci_menhir.mly"
-                        ( p )
-# 21366 "parser_cocci_menhir.ml"
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26517 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1327 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
+# 26525 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21374,27 +26533,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_plus_body = Obj.magic _1 in
+        let _1 : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26546 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 140 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 21394 "parser_cocci_menhir.ml"
-        ) = 
-# 175 "parser_cocci_menhir.mly"
-                         ( _1 )
-# 21398 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1330 "parser_cocci_menhir.mly"
+     ( let (x,clt) = _1 in
+     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
+# 26554 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21406,27 +26562,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = p;
-            MenhirLib.EngineTypes.startp = _startpos_p_;
-            MenhirLib.EngineTypes.endp = _endpos_p_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let p : 'tv_plus_body = Obj.magic p in
-        let _startpos = _startpos_p_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 140 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 21426 "parser_cocci_menhir.ml"
-        ) = 
-# 175 "parser_cocci_menhir.mly"
-                                                        ( p )
-# 21430 "parser_cocci_menhir.ml"
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26575 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1333 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
+# 26584 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21438,27 +26592,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = p;
-            MenhirLib.EngineTypes.startp = _startpos_p_;
-            MenhirLib.EngineTypes.endp = _endpos_p_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let p : 'tv_plus_body = Obj.magic p in
-        let _startpos = _startpos_p_ in
-        let _endpos = _endpos__2_ in
-        let _v : (
-# 140 "parser_cocci_menhir.mly"
-      (Ast0_cocci.rule)
-# 21458 "parser_cocci_menhir.ml"
-        ) = 
-# 176 "parser_cocci_menhir.mly"
-                    ( p )
-# 21462 "parser_cocci_menhir.ml"
+        let _1 : (
+# 63 "parser_cocci_menhir.mly"
+       (Parse_aux.expinfo)
+# 26605 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1337 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,clt) = _1 in
+     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
+# 26613 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21476,13 +26627,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_ctype = Obj.magic _1 in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26634 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_plus_start = 
-# 1659 "parser_cocci_menhir.mly"
-                          ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] )
-# 21486 "parser_cocci_menhir.ml"
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1340 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
+# 26643 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21500,13 +26657,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_top_init = Obj.magic _1 in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26664 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_plus_start = 
-# 1660 "parser_cocci_menhir.mly"
-                     ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] )
-# 21510 "parser_cocci_menhir.ml"
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1344 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
+# 26673 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21518,25 +26681,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _1 : (
+# 67 "parser_cocci_menhir.mly"
+       (Parse_aux.typed_info)
+# 26694 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_start = 
-# 1662 "parser_cocci_menhir.mly"
-                                          ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
-# 21540 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1348 "parser_cocci_menhir.mly"
+     ( let (nm,constraints,pure,ty,clt) = _1 in
+     Ast0.wrap
+       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
+# 26703 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21548,25 +26711,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
-          } = _menhir_stack in
-        let _2 : 'tv_plus_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
+          } = _menhir_stack in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26734 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26740 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_start = 
-# 1664 "parser_cocci_menhir.mly"
-                     ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 )
-# 21570 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1352 "parser_cocci_menhir.mly"
+     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
+                           P.clt2mcode ")" _3)) )
+# 26748 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21578,25 +26756,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
-        let _1 : 'tv_fundecl = Obj.magic _1 in
+        let _3 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26779 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in
+        let _1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 26785 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_start = 
-# 1665 "parser_cocci_menhir.mly"
-                                             ( Ast0.wrap(Ast0.DECL(_1))::_2 )
-# 21600 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1355 "parser_cocci_menhir.mly"
+     ( let (mids,code) = _2 in
+       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
+                              code, mids,
+                              P.clt2mcode ")" _3)) )
+# 26795 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21608,25 +26803,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : 'tv_plus_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _1 : 'tv_invalid = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_plus_start = 
-# 1667 "parser_cocci_menhir.mly"
-                ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
-# 21630 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_primary_expr_expr_invalid_ = 
+# 1359 "parser_cocci_menhir.mly"
+                 ( _1 )
+# 26819 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21639,22 +26828,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
           MenhirLib.EngineTypes.startp = _startpos__1_;
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 21651 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_pnrule = 
-# 230 "parser_cocci_menhir.mly"
-                   ( Ast.Dep      _1 )
-# 21658 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure = 
+# 190 "parser_cocci_menhir.mly"
+                 ( Ast0.Pure )
+# 26841 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21666,27 +26849,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 21683 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_pnrule = 
-# 231 "parser_cocci_menhir.mly"
-                   ( Ast.AntiDep  _2 )
-# 21690 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure = 
+# 191 "parser_cocci_menhir.mly"
+                 ( Ast0.Context )
+# 26863 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21698,7 +26871,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
@@ -21708,17 +26880,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 21715 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_pnrule = 
-# 232 "parser_cocci_menhir.mly"
-                   ( Ast.EverDep  _2 )
-# 21722 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure = 
+# 192 "parser_cocci_menhir.mly"
+                 ( Ast0.PureContext )
+# 26889 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21730,7 +26897,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
@@ -21740,17 +26906,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 21747 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_pnrule = 
-# 233 "parser_cocci_menhir.mly"
-                   ( Ast.NeverDep _2 )
-# 21754 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure = 
+# 193 "parser_cocci_menhir.mly"
+                 ( Ast0.PureContext )
+# 26915 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21761,28 +26922,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let _2 : 'tv_dep = Obj.magic _2 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_pnrule = 
-# 234 "parser_cocci_menhir.mly"
-                   ( _2 )
-# 21786 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_pure = 
+# 194 "parser_cocci_menhir.mly"
+                 ( Ast0.Impure )
+# 26932 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21800,13 +26946,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_primary_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _1 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 26953 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1323 "parser_cocci_menhir.mly"
-                                                 ( _1 )
-# 21810 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure_ident = 
+# 1373 "parser_cocci_menhir.mly"
+            ( _1 )
+# 26960 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21818,86 +26968,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
-          } = _menhir_stack in
-        let _4 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 21846 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 21852 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1325 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
-                                      P.clt2mcode "]" _4)) )
-# 21861 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 21893 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _1 : 'tv_pure_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1328 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 21901 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1379 "parser_cocci_menhir.mly"
+                                 ( (None,P.id2name _1) )
+# 26984 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21909,36 +26992,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 104 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 21933 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
+        let _1 : 'tv_meta_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1330 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
-                                    _3)) )
-# 21942 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1380 "parser_cocci_menhir.mly"
+                                 ( _1 )
+# 27008 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21950,29 +27016,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 21968 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1333 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 21976 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1381 "parser_cocci_menhir.mly"
+                   ( (None, "identifier") )
+# 27030 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21984,29 +27038,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22002 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1335 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 22010 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1382 "parser_cocci_menhir.mly"
+                   ( (None, "expression") )
+# 27052 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22018,47 +27060,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22046 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22052 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1337 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
-                             _3,
-                             P.clt2mcode ")" _4)) )
-# 22062 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1383 "parser_cocci_menhir.mly"
+                  ( (None, "statement") )
+# 27074 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22071,18 +27083,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
           MenhirLib.EngineTypes.startp = _startpos__1_;
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_primary_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1323 "parser_cocci_menhir.mly"
-                                                 ( _1 )
-# 22086 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1384 "parser_cocci_menhir.mly"
+                 ( (None, "function") )
+# 27096 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22094,46 +27104,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _4 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22122 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22128 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1325 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
-                                      P.clt2mcode "]" _4)) )
-# 22137 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1385 "parser_cocci_menhir.mly"
+              ( (None, "local") )
+# 27118 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22145,35 +27126,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22169 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1328 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 22177 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1386 "parser_cocci_menhir.mly"
+             ( (None, "type") )
+# 27140 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22185,36 +27148,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 104 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22209 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1330 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
-                                    _3)) )
-# 22218 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1387 "parser_cocci_menhir.mly"
+                  ( (None, "parameter") )
+# 27162 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22226,29 +27170,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
-          } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22244 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1333 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 22252 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1388 "parser_cocci_menhir.mly"
+                     ( (None, "idexpression") )
+# 27184 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22260,29 +27192,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22278 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1335 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 22286 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1389 "parser_cocci_menhir.mly"
+                    ( (None, "initialiser") )
+# 27206 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22294,47 +27214,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22322 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22328 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1337 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
-                             _3,
-                             P.clt2mcode ")" _4)) )
-# 22338 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1390 "parser_cocci_menhir.mly"
+             ( (None, "list") )
+# 27228 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22347,18 +27237,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
           MenhirLib.EngineTypes.startp = _startpos__1_;
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_primary_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1323 "parser_cocci_menhir.mly"
-                                                 ( _1 )
-# 22362 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1391 "parser_cocci_menhir.mly"
+              ( (None, "fresh") )
+# 27250 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22370,46 +27258,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _4 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22398 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22404 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1325 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
-                                      P.clt2mcode "]" _4)) )
-# 22413 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1392 "parser_cocci_menhir.mly"
+                 ( (None, "constant") )
+# 27272 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22421,35 +27280,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22445 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1328 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 22453 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1393 "parser_cocci_menhir.mly"
+              ( (None, "error") )
+# 27294 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22461,36 +27302,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 104 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22485 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1330 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
-                                    _3)) )
-# 22494 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1394 "parser_cocci_menhir.mly"
+              ( (None, "words") )
+# 27316 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22502,29 +27324,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22520 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1333 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 22528 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1395 "parser_cocci_menhir.mly"
+             ( (None, "pure") )
+# 27338 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22536,29 +27346,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22554 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1335 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 22562 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1396 "parser_cocci_menhir.mly"
+                ( (None, "context") )
+# 27360 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22567,50 +27365,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos;
           MenhirLib.EngineTypes.next = _menhir_stack;
           });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22598 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22604 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1337 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
-                             _3,
-                             P.clt2mcode ")" _4)) )
-# 22614 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1397 "parser_cocci_menhir.mly"
+                  ( (None, "generated") )
+# 27382 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22623,18 +27391,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
           MenhirLib.EngineTypes.startp = _startpos__1_;
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_primary_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1323 "parser_cocci_menhir.mly"
-                                                 ( _1 )
-# 22638 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1398 "parser_cocci_menhir.mly"
+                ( (None, "typedef") )
+# 27404 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22646,46 +27412,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _4 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22674 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 102 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22680 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1325 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
-                                      P.clt2mcode "]" _4)) )
-# 22689 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1399 "parser_cocci_menhir.mly"
+                 ( (None, "declarer") )
+# 27426 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22697,35 +27434,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22721 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1328 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 22729 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1400 "parser_cocci_menhir.mly"
+                 ( (None, "iterator") )
+# 27448 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22737,36 +27456,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _3 : 'tv_ident = Obj.magic _3 in
-        let _2 : (
-# 104 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22761 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1330 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
-                                    _3)) )
-# 22770 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1401 "parser_cocci_menhir.mly"
+             ( (None, "name") )
+# 27470 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22778,29 +27478,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22796 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1333 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 22804 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_pure_ident_or_meta_ident = 
+# 1402 "parser_cocci_menhir.mly"
+                 ( (None, "position") )
+# 27492 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22812,29 +27500,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = l;
+          MenhirLib.EngineTypes.startp = _startpos_l_;
+          MenhirLib.EngineTypes.endp = _endpos_l_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = i;
+            MenhirLib.EngineTypes.startp = _startpos_i_;
+            MenhirLib.EngineTypes.endp = _endpos_i_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 85 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22830 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1335 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 22838 "parser_cocci_menhir.ml"
+        let l : 'tv_loption_not_ceq_ = Obj.magic l in
+        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_l_ in
+        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = 
+# 1421 "parser_cocci_menhir.mly"
+                                                    ( (i,l) )
+# 27522 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22846,47 +27530,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _4;
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.semv = l;
+          MenhirLib.EngineTypes.startp = _startpos_l_;
+          MenhirLib.EngineTypes.endp = _endpos_l_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _3;
-            MenhirLib.EngineTypes.startp = _startpos__3_;
-            MenhirLib.EngineTypes.endp = _endpos__3_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _2;
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = i;
+            MenhirLib.EngineTypes.startp = _startpos_i_;
+            MenhirLib.EngineTypes.endp = _endpos_i_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22874 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 22880 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1337 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
-                             _3,
-                             P.clt2mcode ")" _4)) )
-# 22890 "parser_cocci_menhir.ml"
+        let l : 'tv_loption_not_eq_ = Obj.magic l in
+        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_l_ in
+        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = 
+# 1421 "parser_cocci_menhir.mly"
+                                                    ( (i,l) )
+# 27552 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22898,19 +27560,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_func_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1342 "parser_cocci_menhir.mly"
-                ( Ast0.wrap(Ast0.Ident(_1)) )
-# 22914 "parser_cocci_menhir.ml"
+          MenhirLib.EngineTypes.semv = l;
+          MenhirLib.EngineTypes.startp = _startpos_l_;
+          MenhirLib.EngineTypes.endp = _endpos_l_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = i;
+            MenhirLib.EngineTypes.startp = _startpos_i_;
+            MenhirLib.EngineTypes.endp = _endpos_i_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let l : 'tv_loption_not_eqe_ = Obj.magic l in
+        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_l_ in
+        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = 
+# 1421 "parser_cocci_menhir.mly"
+                                                    ( (i,l) )
+# 27582 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22922,24 +27590,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = l;
+          MenhirLib.EngineTypes.startp = _startpos_l_;
+          MenhirLib.EngineTypes.endp = _endpos_l_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = i;
+            MenhirLib.EngineTypes.startp = _startpos_i_;
+            MenhirLib.EngineTypes.endp = _endpos_i_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 22935 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1344 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 22943 "parser_cocci_menhir.ml"
+        let l : 'tv_loption_not_pos_ = Obj.magic l in
+        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_l_ in
+        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = 
+# 1421 "parser_cocci_menhir.mly"
+                                                    ( (i,l) )
+# 27612 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22957,18 +27626,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 22964 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1347 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 22972 "parser_cocci_menhir.ml"
+        let _v : 'tv_pure_ident_or_meta_ident_with_seed = 
+# 1405 "parser_cocci_menhir.mly"
+                                ( (_1,Ast.NoVal) )
+# 27636 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22980,24 +27644,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 22993 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let _3 : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = Obj.magic _3 in
+        let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1350 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 23001 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_pure_ident_or_meta_ident_with_seed = 
+# 1408 "parser_cocci_menhir.mly"
+  ( match _3 with
+          [Ast.SeedString s] -> (_1,Ast.StringSeed s)
+        | _ -> (_1,Ast.ListSeed _3) )
+# 27672 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23008,25 +27679,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23022 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1353 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 23030 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : (
+# 131 "parser_cocci_menhir.mly"
+      (unit)
+# 27689 "parser_cocci_menhir.ml"
+        ) = 
+# 172 "parser_cocci_menhir.mly"
+        ( )
+# 27693 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23044,19 +27707,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23051 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let _1 : 'tv_one_decl_var = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1356 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 23060 "parser_cocci_menhir.ml"
+        let _v : 'tv_rule_elem_statement = 
+# 893 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) )
+# 27717 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23068,24 +27725,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let _1 : (
-# 63 "parser_cocci_menhir.mly"
-       (Parse_aux.expinfo)
-# 23081 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 27743 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1360 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,clt) = _1 in
-     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 23089 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_rule_elem_statement = 
+# 894 "parser_cocci_menhir.mly"
+               ( P.exp_stm _1 _2 )
+# 27751 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23097,25 +27759,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
+        let _3 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 27782 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23110 "parser_cocci_menhir.ml"
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 27788 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1363 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 23119 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_rule_elem_statement = 
+# 895 "parser_cocci_menhir.mly"
+                        ( P.ret_exp _1 _2 _3 )
+# 27795 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23127,25 +27803,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 27821 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
         let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23140 "parser_cocci_menhir.ml"
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 27826 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1367 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 23149 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_rule_elem_statement = 
+# 896 "parser_cocci_menhir.mly"
+                  ( P.ret _1 _2 )
+# 27833 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23157,25 +27841,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 27859 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
         let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23170 "parser_cocci_menhir.ml"
+# 58 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 27864 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1371 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 23179 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_rule_elem_statement = 
+# 897 "parser_cocci_menhir.mly"
+                 ( P.break _1 _2 )
+# 27871 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23187,40 +27879,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23210 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
+# 27897 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
         let _1 : (
-# 76 "parser_cocci_menhir.mly"
+# 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23216 "parser_cocci_menhir.ml"
+# 27902 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1375 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
-                           P.clt2mcode ")" _3)) )
-# 23224 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_rule_elem_statement = 
+# 898 "parser_cocci_menhir.mly"
+                    ( P.cont _1 _2 )
+# 27909 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23251,71 +27936,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _3 : (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23255 "parser_cocci_menhir.ml"
+# 27940 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
-        let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
+        let _2 : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = Obj.magic _2 in
         let _1 : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23261 "parser_cocci_menhir.ml"
+# 27946 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1378 "parser_cocci_menhir.mly"
-     ( let (mids,code) = _2 in
-       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
-                              code, mids,
-                              P.clt2mcode ")" _3)) )
-# 23271 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_dot_expressions = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1382 "parser_cocci_menhir.mly"
-                 ( _1 )
-# 23295 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_func_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1342 "parser_cocci_menhir.mly"
-                ( Ast0.wrap(Ast0.Ident(_1)) )
-# 23319 "parser_cocci_menhir.ml"
+        let _v : 'tv_rule_elem_statement = 
+# 900 "parser_cocci_menhir.mly"
+    ( let (mids,code) = _2 in
+    Ast0.wrap
+      (Ast0.Disj(P.clt2mcode "(" _1,
+                List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code,
+                mids, P.clt2mcode ")" _3)) )
+# 27957 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23327,24 +27965,62 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__7_;
+          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ee;
+            MenhirLib.EngineTypes.startp = _startpos_ee_;
+            MenhirLib.EngineTypes.endp = _endpos_ee_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = e;
+              MenhirLib.EngineTypes.startp = _startpos_e_;
+              MenhirLib.EngineTypes.endp = _endpos_e_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = a;
+                MenhirLib.EngineTypes.startp = _startpos_a_;
+                MenhirLib.EngineTypes.endp = _endpos_a_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = d;
+                    MenhirLib.EngineTypes.startp = _startpos_d_;
+                    MenhirLib.EngineTypes.endp = _endpos_d_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.startp = _startpos__1_;
+                      MenhirLib.EngineTypes.endp = _endpos__1_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23340 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let ee : 'tv_is_expression = Obj.magic ee in
+        let e : 'tv_exists = Obj.magic e in
+        let a : 'tv_loption_disable_ = Obj.magic a in
+        let i : 'tv_loption_choose_iso_ = Obj.magic i in
+        let d : 'tv_depends = Obj.magic d in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1344 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 23348 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__7_ in
+        let _v : (
+# 153 "parser_cocci_menhir.mly"
+      (Ast_cocci.rulename)
+# 28013 "parser_cocci_menhir.ml"
+        ) = let nm =
+          
+# 39 "standard.mly"
+    ( None )
+# 28018 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 202 "parser_cocci_menhir.mly"
+      ( P.make_cocci_rule_name_result nm d i a e ee )
+# 28024 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23356,24 +28032,69 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__8_;
+          MenhirLib.EngineTypes.endp = _endpos__8_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ee;
+            MenhirLib.EngineTypes.startp = _startpos_ee_;
+            MenhirLib.EngineTypes.endp = _endpos_ee_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = e;
+              MenhirLib.EngineTypes.startp = _startpos_e_;
+              MenhirLib.EngineTypes.endp = _endpos_e_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = a;
+                MenhirLib.EngineTypes.startp = _startpos_a_;
+                MenhirLib.EngineTypes.endp = _endpos_a_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = d;
+                    MenhirLib.EngineTypes.startp = _startpos_d_;
+                    MenhirLib.EngineTypes.endp = _endpos_d_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.startp = _startpos__2_;
+                      MenhirLib.EngineTypes.endp = _endpos__2_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.state = _menhir_s;
+                        MenhirLib.EngineTypes.semv = x0;
+                        MenhirLib.EngineTypes.startp = _startpos_x0_;
+                        MenhirLib.EngineTypes.endp = _endpos_x0_;
+                        MenhirLib.EngineTypes.next = _menhir_stack;
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23369 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1347 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 23377 "parser_cocci_menhir.ml"
+        let ee : 'tv_is_expression = Obj.magic ee in
+        let e : 'tv_exists = Obj.magic e in
+        let a : 'tv_loption_disable_ = Obj.magic a in
+        let i : 'tv_loption_choose_iso_ = Obj.magic i in
+        let d : 'tv_depends = Obj.magic d in
+        let x0 : 'tv_pure_ident = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos__8_ in
+        let _v : (
+# 153 "parser_cocci_menhir.mly"
+      (Ast_cocci.rulename)
+# 28086 "parser_cocci_menhir.ml"
+        ) = let nm =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 28092 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 202 "parser_cocci_menhir.mly"
+      ( P.make_cocci_rule_name_result nm d i a e ee )
+# 28098 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23385,24 +28106,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__8_;
+          MenhirLib.EngineTypes.endp = _endpos__8_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ee;
+            MenhirLib.EngineTypes.startp = _startpos_ee_;
+            MenhirLib.EngineTypes.endp = _endpos_ee_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = e;
+              MenhirLib.EngineTypes.startp = _startpos_e_;
+              MenhirLib.EngineTypes.endp = _endpos_e_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = a;
+                MenhirLib.EngineTypes.startp = _startpos_a_;
+                MenhirLib.EngineTypes.endp = _endpos_a_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = i;
+                  MenhirLib.EngineTypes.startp = _startpos_i_;
+                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = d;
+                    MenhirLib.EngineTypes.startp = _startpos_d_;
+                    MenhirLib.EngineTypes.endp = _endpos_d_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.startp = _startpos__2_;
+                      MenhirLib.EngineTypes.endp = _endpos__2_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.state = _menhir_s;
+                        MenhirLib.EngineTypes.startp = _startpos__1_;
+                        MenhirLib.EngineTypes.endp = _endpos__1_;
+                        MenhirLib.EngineTypes.next = _menhir_stack;
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23398 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let ee : 'tv_is_expression = Obj.magic ee in
+        let e : 'tv_exists = Obj.magic e in
+        let a : 'tv_loption_disable_ = Obj.magic a in
+        let i : 'tv_loption_choose_iso_ = Obj.magic i in
+        let d : 'tv_depends = Obj.magic d in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1350 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 23406 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__8_ in
+        let _v : (
+# 153 "parser_cocci_menhir.mly"
+      (Ast_cocci.rulename)
+# 28158 "parser_cocci_menhir.ml"
+        ) = 
+# 207 "parser_cocci_menhir.mly"
+      ( P.make_generated_rule_name_result None d i a e ee )
+# 28162 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23414,24 +28170,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = lang;
+              MenhirLib.EngineTypes.startp = _startpos_lang_;
+              MenhirLib.EngineTypes.endp = _endpos_lang_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.startp = _startpos__1_;
+                  MenhirLib.EngineTypes.endp = _endpos__1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23427 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let d : 'tv_depends = Obj.magic d in
+        let lang : 'tv_pure_ident = Obj.magic lang in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1353 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 23435 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__5_ in
+        let _v : (
+# 153 "parser_cocci_menhir.mly"
+      (Ast_cocci.rulename)
+# 28204 "parser_cocci_menhir.ml"
+        ) = 
+# 209 "parser_cocci_menhir.mly"
+      ( P.make_script_rule_name_result lang d )
+# 28208 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23443,25 +28216,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = lang;
+            MenhirLib.EngineTypes.startp = _startpos_lang_;
+            MenhirLib.EngineTypes.endp = _endpos_lang_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23456 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let lang : 'tv_pure_ident = Obj.magic lang in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1356 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 23465 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 153 "parser_cocci_menhir.mly"
+      (Ast_cocci.rulename)
+# 28244 "parser_cocci_menhir.ml"
+        ) = 
+# 211 "parser_cocci_menhir.mly"
+      ( P.make_initial_script_rule_name_result lang )
+# 28248 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23473,24 +28256,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__4_;
+          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = lang;
+            MenhirLib.EngineTypes.startp = _startpos_lang_;
+            MenhirLib.EngineTypes.endp = _endpos_lang_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 63 "parser_cocci_menhir.mly"
-       (Parse_aux.expinfo)
-# 23486 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let lang : 'tv_pure_ident = Obj.magic lang in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1360 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,clt) = _1 in
-     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 23494 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__4_ in
+        let _v : (
+# 153 "parser_cocci_menhir.mly"
+      (Ast_cocci.rulename)
+# 28284 "parser_cocci_menhir.ml"
+        ) = 
+# 213 "parser_cocci_menhir.mly"
+      ( P.make_final_script_rule_name_result lang )
+# 28288 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23502,25 +28296,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.startp = _startpos__6_;
+          MenhirLib.EngineTypes.endp = _endpos__6_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = cocci;
+            MenhirLib.EngineTypes.startp = _startpos_cocci_;
+            MenhirLib.EngineTypes.endp = _endpos_cocci_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _3;
+                MenhirLib.EngineTypes.startp = _startpos__3_;
+                MenhirLib.EngineTypes.endp = _endpos__3_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.startp = _startpos__2_;
+                  MenhirLib.EngineTypes.endp = _endpos__2_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = py;
+                    MenhirLib.EngineTypes.startp = _startpos_py_;
+                    MenhirLib.EngineTypes.endp = _endpos_py_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23515 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1363 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 23524 "parser_cocci_menhir.ml"
+        let cocci : 'tv_pure_ident = Obj.magic cocci in
+        let _3 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 28332 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let py : 'tv_pure_ident = Obj.magic py in
+        let _startpos = _startpos_py_ in
+        let _endpos = _endpos__6_ in
+        let _v : (
+# 159 "parser_cocci_menhir.mly"
+       (string * (string * string))
+# 28340 "parser_cocci_menhir.ml"
+        ) = 
+# 1887 "parser_cocci_menhir.mly"
+  ( (P.id2name py, (_3, P.id2name cocci)) )
+# 28344 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23539,18 +28359,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23545 "parser_cocci_menhir.ml"
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 28365 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1367 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 23554 "parser_cocci_menhir.ml"
+        let _v : 'tv_seed_elem = 
+# 1413 "parser_cocci_menhir.mly"
+          ( let (x,_) = _1 in Ast.SeedString x )
+# 28372 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23569,18 +28387,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23575 "parser_cocci_menhir.ml"
+# 61 "parser_cocci_menhir.mly"
+       (Parse_aux.idinfo)
+# 28393 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1371 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 23584 "parser_cocci_menhir.ml"
+        let _v : 'tv_seed_elem = 
+# 1414 "parser_cocci_menhir.mly"
+          ( let (x,_,_,_) = _1 in Ast.SeedId x )
+# 28400 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23596,7 +28412,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.startp = _startpos__3_;
           MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
             MenhirLib.EngineTypes.startp = _startpos__2_;
             MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
@@ -23608,24 +28423,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 23615 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _3 : 'tv_pure_ident = Obj.magic _3 in
         let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 23621 "parser_cocci_menhir.ml"
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 28431 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1375 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
-                           P.clt2mcode ")" _3)) )
-# 23629 "parser_cocci_menhir.ml"
+        let _v : 'tv_seed_elem = 
+# 1416 "parser_cocci_menhir.mly"
+    ( let nm = (_1,P.id2name _3) in
+      P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm));
+      Ast.SeedId nm )
+# 28440 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let x : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 28461 "parser_cocci_menhir.ml"
+        ) = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_TString_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28468 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23637,42 +28476,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
             MenhirLib.EngineTypes.startp = _startpos__2_;
             MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 23660 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 23666 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1378 "parser_cocci_menhir.mly"
-     ( let (mids,code) = _2 in
-       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
-                              code, mids,
-                              P.clt2mcode ")" _3)) )
-# 23676 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_TString_ = Obj.magic xs in
+        let x : (
+# 87 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 28499 "parser_cocci_menhir.ml"
+        ) = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_TString_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28506 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23685,18 +28515,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_invalid = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1382 "parser_cocci_menhir.mly"
-                 ( _1 )
-# 23700 "parser_cocci_menhir.ml"
+        let x : 'tv_any_strict = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28530 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23708,19 +28538,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_func_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1342 "parser_cocci_menhir.mly"
-                ( Ast0.wrap(Ast0.Ident(_1)) )
-# 23724 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_any_strict_ = Obj.magic xs in
+        let x : 'tv_any_strict = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28564 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23733,23 +28573,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23745 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1344 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 23753 "parser_cocci_menhir.ml"
+        let x : 'tv_ctype = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_ctype_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28588 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23761,24 +28596,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23774 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1347 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 23782 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_ctype_ = Obj.magic xs in
+        let x : 'tv_ctype = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_ctype_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28622 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23791,23 +28631,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23803 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1350 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 23811 "parser_cocci_menhir.ml"
+        let x : 'tv_d_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28646 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23819,24 +28654,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 23832 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1353 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 23840 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_d_ident_ = Obj.magic xs in
+        let x : 'tv_d_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28680 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23849,24 +28689,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23861 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1356 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 23870 "parser_cocci_menhir.ml"
+        let x : 'tv_ident_or_const = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28704 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23878,24 +28712,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 63 "parser_cocci_menhir.mly"
-       (Parse_aux.expinfo)
-# 23891 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1360 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,clt) = _1 in
-     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 23899 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_ident_or_const_ = Obj.magic xs in
+        let x : 'tv_ident_or_const = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28738 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23908,24 +28747,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23920 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1363 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 23929 "parser_cocci_menhir.ml"
+        let x : 'tv_meta_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28762 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23937,25 +28770,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23950 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1367 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 23959 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_meta_ident_ = Obj.magic xs in
+        let x : 'tv_meta_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28796 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23968,24 +28805,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 23980 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1371 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 23989 "parser_cocci_menhir.ml"
+        let x : 'tv_pure_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28820 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23997,40 +28828,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
             MenhirLib.EngineTypes.startp = _startpos__2_;
             MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 24020 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 24026 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1375 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
-                           P.clt2mcode ")" _3)) )
-# 24034 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic xs in
+        let x : 'tv_pure_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28854 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24042,42 +28862,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28878 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
             MenhirLib.EngineTypes.startp = _startpos__2_;
             MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 24065 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 24071 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1378 "parser_cocci_menhir.mly"
-     ( let (mids,code) = _2 in
-       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
-                              code, mids,
-                              P.clt2mcode ")" _3)) )
-# 24081 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = Obj.magic xs in
+        let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28912 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24090,18 +28921,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_nest_expressions = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1382 "parser_cocci_menhir.mly"
-                 ( _1 )
-# 24105 "parser_cocci_menhir.ml"
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28936 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24113,19 +28944,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_func_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1342 "parser_cocci_menhir.mly"
-                ( Ast0.wrap(Ast0.Ident(_1)) )
-# 24129 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic xs in
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 28970 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24138,23 +28979,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 24150 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1344 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 24158 "parser_cocci_menhir.ml"
+          } = _menhir_stack in
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 28994 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24166,24 +29002,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 24179 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1347 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 24187 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic xs in
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 29028 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24196,23 +29037,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 24208 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1350 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 24216 "parser_cocci_menhir.ml"
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 29052 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24224,24 +29060,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 24237 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1353 "parser_cocci_menhir.mly"
-     ( let (x,clt) = _1 in
-     Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 24245 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic xs in
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 29086 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24254,24 +29095,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 24266 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1356 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 24275 "parser_cocci_menhir.ml"
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 29110 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24283,24 +29118,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 63 "parser_cocci_menhir.mly"
-       (Parse_aux.expinfo)
-# 24296 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1360 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,clt) = _1 in
-     Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 24304 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic xs in
+        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 29144 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24313,24 +29153,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 24325 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1363 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 24334 "parser_cocci_menhir.ml"
+        let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 29168 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24342,25 +29176,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 24355 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1367 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 24364 "parser_cocci_menhir.ml"
+        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic xs in
+        let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 29202 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24373,24 +29211,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.semv = x;
+          MenhirLib.EngineTypes.startp = _startpos_x_;
+          MenhirLib.EngineTypes.endp = _endpos_x_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : (
-# 67 "parser_cocci_menhir.mly"
-       (Parse_aux.typed_info)
-# 24385 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1371 "parser_cocci_menhir.mly"
-     ( let (nm,constraints,pure,ty,clt) = _1 in
-     Ast0.wrap
-       (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 24394 "parser_cocci_menhir.ml"
+        let x : 'tv_seed_elem = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_x_ in
+        let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = 
+# 144 "standard.mly"
+    ( [ x ] )
+# 29226 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24402,40 +29234,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = xs;
+          MenhirLib.EngineTypes.startp = _startpos_xs_;
+          MenhirLib.EngineTypes.endp = _endpos_xs_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
             MenhirLib.EngineTypes.startp = _startpos__2_;
             MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = x;
+              MenhirLib.EngineTypes.startp = _startpos_x_;
+              MenhirLib.EngineTypes.endp = _endpos_x_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 24425 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 24431 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
+        let xs : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = Obj.magic xs in
+        let x : 'tv_seed_elem = Obj.magic x in
+        let _startpos = _startpos_x_ in
+        let _endpos = _endpos_xs_ in
+        let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = 
+# 146 "standard.mly"
+    ( x :: xs )
+# 29260 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let _1 : 'tv_statement = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1375 "parser_cocci_menhir.mly"
-     ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
-                           P.clt2mcode ")" _3)) )
-# 24439 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_single_statement = 
+# 908 "parser_cocci_menhir.mly"
+                                      ( _1 )
+# 29284 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24466,23 +29311,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _3 : (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24470 "parser_cocci_menhir.ml"
+# 29315 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
-        let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in
+        let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in
         let _1 : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24476 "parser_cocci_menhir.ml"
+# 29321 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1378 "parser_cocci_menhir.mly"
-     ( let (mids,code) = _2 in
-       Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
-                              code, mids,
-                              P.clt2mcode ")" _3)) )
-# 24486 "parser_cocci_menhir.ml"
+        let _v : 'tv_single_statement = 
+# 912 "parser_cocci_menhir.mly"
+      ( let (mids,code) = _2 in
+        Ast0.wrap
+         (Ast0.Disj(P.clt2mcode "(" _1,
+                    List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code,
+                    mids, P.clt2mcode ")" _3)) )
+# 29332 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24500,35 +29346,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _1 : 'tv_invalid = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1382 "parser_cocci_menhir.mly"
-                 ( _1 )
-# 24510 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
+        let _1 : 'tv_includes = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_pure = 
-# 190 "parser_cocci_menhir.mly"
-                 ( Ast0.Pure )
-# 24532 "parser_cocci_menhir.ml"
+        let _v : 'tv_statement = 
+# 835 "parser_cocci_menhir.mly"
+           ( _1 )
+# 29356 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24541,16 +29365,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
           MenhirLib.EngineTypes.startp = _startpos__1_;
           MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
+        let _1 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 29377 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : 'tv_pure = 
-# 191 "parser_cocci_menhir.mly"
-                 ( Ast0.Context )
-# 24554 "parser_cocci_menhir.ml"
+        let _v : 'tv_statement = 
+# 837 "parser_cocci_menhir.mly"
+    ( P.meta_stm _1 )
+# 29384 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24562,21 +29392,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
+          MenhirLib.EngineTypes.semv = _2;
           MenhirLib.EngineTypes.startp = _startpos__2_;
           MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
             MenhirLib.EngineTypes.startp = _startpos__1_;
             MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29410 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : 'tv_pure = 
-# 192 "parser_cocci_menhir.mly"
-                 ( Ast0.PureContext )
-# 24580 "parser_cocci_menhir.ml"
+        let _v : 'tv_statement = 
+# 839 "parser_cocci_menhir.mly"
+    ( P.exp_stm _1 _2 )
+# 29418 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24588,21 +29426,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = _5;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = _4;
+            MenhirLib.EngineTypes.startp = _startpos__4_;
+            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _3;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _2;
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = _1;
+                  MenhirLib.EngineTypes.startp = _startpos__1_;
+                  MenhirLib.EngineTypes.endp = _endpos__1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
+        let _5 : 'tv_single_statement = Obj.magic _5 in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29460 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29466 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29471 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_pure = 
-# 193 "parser_cocci_menhir.mly"
-                 ( Ast0.PureContext )
-# 24606 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_statement = 
+# 841 "parser_cocci_menhir.mly"
+    ( P.ifthen _1 _2 _3 _4 _5 )
+# 29478 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24613,13 +29485,72 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_pure = 
-# 194 "parser_cocci_menhir.mly"
-                 ( Ast0.Impure )
-# 24623 "parser_cocci_menhir.ml"
+        let {
+          MenhirLib.EngineTypes.semv = _7;
+          MenhirLib.EngineTypes.startp = _startpos__7_;
+          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _6;
+            MenhirLib.EngineTypes.startp = _startpos__6_;
+            MenhirLib.EngineTypes.endp = _endpos__6_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _5;
+              MenhirLib.EngineTypes.startp = _startpos__5_;
+              MenhirLib.EngineTypes.endp = _endpos__5_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _4;
+                MenhirLib.EngineTypes.startp = _startpos__4_;
+                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = _3;
+                  MenhirLib.EngineTypes.startp = _startpos__3_;
+                  MenhirLib.EngineTypes.endp = _endpos__3_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = _2;
+                    MenhirLib.EngineTypes.startp = _startpos__2_;
+                    MenhirLib.EngineTypes.endp = _endpos__2_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = _1;
+                      MenhirLib.EngineTypes.startp = _startpos__1_;
+                      MenhirLib.EngineTypes.endp = _endpos__1_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let _7 : 'tv_single_statement = Obj.magic _7 in
+        let _6 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29530 "parser_cocci_menhir.ml"
+        ) = Obj.magic _6 in
+        let _5 : 'tv_single_statement = Obj.magic _5 in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29536 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29542 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29547 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__7_ in
+        let _v : 'tv_statement = 
+# 843 "parser_cocci_menhir.mly"
+    ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 )
+# 29554 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24631,47 +29562,87 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _9;
+          MenhirLib.EngineTypes.startp = _startpos__9_;
+          MenhirLib.EngineTypes.endp = _endpos__9_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _8;
+            MenhirLib.EngineTypes.startp = _startpos__8_;
+            MenhirLib.EngineTypes.endp = _endpos__8_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _7;
+              MenhirLib.EngineTypes.startp = _startpos__7_;
+              MenhirLib.EngineTypes.endp = _endpos__7_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _6;
+                MenhirLib.EngineTypes.startp = _startpos__6_;
+                MenhirLib.EngineTypes.endp = _endpos__6_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = _5;
+                  MenhirLib.EngineTypes.startp = _startpos__5_;
+                  MenhirLib.EngineTypes.endp = _endpos__5_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = _4;
+                    MenhirLib.EngineTypes.startp = _startpos__4_;
+                    MenhirLib.EngineTypes.endp = _endpos__4_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.semv = _3;
+                      MenhirLib.EngineTypes.startp = _startpos__3_;
+                      MenhirLib.EngineTypes.endp = _endpos__3_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = _2;
+                        MenhirLib.EngineTypes.startp = _startpos__2_;
+                        MenhirLib.EngineTypes.endp = _endpos__2_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.state = _menhir_s;
+                          MenhirLib.EngineTypes.semv = _1;
+                          MenhirLib.EngineTypes.startp = _startpos__1_;
+                          MenhirLib.EngineTypes.endp = _endpos__1_;
+                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          };
+                        };
+                      };
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
+        let _9 : 'tv_single_statement = Obj.magic _9 in
+        let _8 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29616 "parser_cocci_menhir.ml"
+        ) = Obj.magic _8 in
+        let _7 : 'tv_option_eexpr_ = Obj.magic _7 in
+        let _6 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29622 "parser_cocci_menhir.ml"
+        ) = Obj.magic _6 in
+        let _5 : 'tv_option_eexpr_ = Obj.magic _5 in
+        let _4 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29628 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_option_eexpr_ = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29634 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
         let _1 : (
-# 59 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 24644 "parser_cocci_menhir.ml"
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29639 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident = 
-# 1396 "parser_cocci_menhir.mly"
-            ( _1 )
-# 24651 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_pure_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident_or_meta_ident = 
-# 1402 "parser_cocci_menhir.mly"
-                                 ( (None,P.id2name _1) )
-# 24675 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__9_ in
+        let _v : 'tv_statement = 
+# 846 "parser_cocci_menhir.mly"
+    ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 )
+# 29646 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24683,19 +29654,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _5;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _4;
+            MenhirLib.EngineTypes.startp = _startpos__4_;
+            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _3;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _2;
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = _1;
+                  MenhirLib.EngineTypes.startp = _startpos__1_;
+                  MenhirLib.EngineTypes.endp = _endpos__1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_meta_ident = Obj.magic _1 in
+        let _5 : 'tv_single_statement = Obj.magic _5 in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29688 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29694 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29699 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident_or_meta_ident = 
-# 1403 "parser_cocci_menhir.mly"
-                                 ( _1 )
-# 24699 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_statement = 
+# 848 "parser_cocci_menhir.mly"
+    ( P.whileloop _1 _2 _3 _4 _5 )
+# 29706 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24707,17 +29714,75 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _7;
+          MenhirLib.EngineTypes.startp = _startpos__7_;
+          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _6;
+            MenhirLib.EngineTypes.startp = _startpos__6_;
+            MenhirLib.EngineTypes.endp = _endpos__6_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _5;
+              MenhirLib.EngineTypes.startp = _startpos__5_;
+              MenhirLib.EngineTypes.endp = _endpos__5_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _4;
+                MenhirLib.EngineTypes.startp = _startpos__4_;
+                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = _3;
+                  MenhirLib.EngineTypes.startp = _startpos__3_;
+                  MenhirLib.EngineTypes.endp = _endpos__3_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = _2;
+                    MenhirLib.EngineTypes.startp = _startpos__2_;
+                    MenhirLib.EngineTypes.endp = _endpos__2_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = _1;
+                      MenhirLib.EngineTypes.startp = _startpos__1_;
+                      MenhirLib.EngineTypes.endp = _endpos__1_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
+        let _7 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29757 "parser_cocci_menhir.ml"
+        ) = Obj.magic _7 in
+        let _6 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29762 "parser_cocci_menhir.ml"
+        ) = Obj.magic _6 in
+        let _5 : 'tv_eexpr = Obj.magic _5 in
+        let _4 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29768 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29773 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_single_statement = Obj.magic _2 in
+        let _1 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29779 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident_or_meta_ident = 
-# 1404 "parser_cocci_menhir.mly"
-                                 ( (None,"list") )
-# 24721 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__7_ in
+        let _v : 'tv_statement = 
+# 850 "parser_cocci_menhir.mly"
+    ( P.doloop _1 _2 _3 _4 _5 _6 _7 )
+# 29786 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24729,17 +29794,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _5;
+          MenhirLib.EngineTypes.startp = _startpos__5_;
+          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _4;
+            MenhirLib.EngineTypes.startp = _startpos__4_;
+            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _3;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _2;
+                MenhirLib.EngineTypes.startp = _startpos__2_;
+                MenhirLib.EngineTypes.endp = _endpos__2_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = _1;
+                  MenhirLib.EngineTypes.startp = _startpos__1_;
+                  MenhirLib.EngineTypes.endp = _endpos__1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
+        let _5 : 'tv_single_statement = Obj.magic _5 in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29828 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29834 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_iter_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident_or_meta_ident = 
-# 1405 "parser_cocci_menhir.mly"
-                                 ( (None,"error") )
-# 24743 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__5_ in
+        let _v : 'tv_statement = 
+# 852 "parser_cocci_menhir.mly"
+    ( P.iterator _1 _2 _3 _4 _5 )
+# 29842 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24751,17 +29850,75 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _7;
+          MenhirLib.EngineTypes.startp = _startpos__7_;
+          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _6;
+            MenhirLib.EngineTypes.startp = _startpos__6_;
+            MenhirLib.EngineTypes.endp = _endpos__6_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = _5;
+              MenhirLib.EngineTypes.startp = _startpos__5_;
+              MenhirLib.EngineTypes.endp = _endpos__5_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = _4;
+                MenhirLib.EngineTypes.startp = _startpos__4_;
+                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = _3;
+                  MenhirLib.EngineTypes.startp = _startpos__3_;
+                  MenhirLib.EngineTypes.endp = _endpos__3_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = _2;
+                    MenhirLib.EngineTypes.startp = _startpos__2_;
+                    MenhirLib.EngineTypes.endp = _endpos__2_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = _1;
+                      MenhirLib.EngineTypes.startp = _startpos__1_;
+                      MenhirLib.EngineTypes.endp = _endpos__1_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
+        let _7 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29893 "parser_cocci_menhir.ml"
+        ) = Obj.magic _7 in
+        let _6 : 'tv_list_case_line_ = Obj.magic _6 in
+        let _5 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29899 "parser_cocci_menhir.ml"
+        ) = Obj.magic _5 in
+        let _4 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29904 "parser_cocci_menhir.ml"
+        ) = Obj.magic _4 in
+        let _3 : 'tv_eexpr = Obj.magic _3 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29910 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29915 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident_or_meta_ident = 
-# 1406 "parser_cocci_menhir.mly"
-                                 ( (None,"type") )
-# 24765 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__7_ in
+        let _v : 'tv_statement = 
+# 854 "parser_cocci_menhir.mly"
+    ( P.switch _1 _2 _3 _4 _5 _6 _7 )
+# 29922 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24773,17 +29930,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
+        let _3 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29953 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_eexpr = Obj.magic _2 in
+        let _1 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29959 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident_or_meta_ident = 
-# 1407 "parser_cocci_menhir.mly"
-                                 ( (None,"name") )
-# 24787 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_statement = 
+# 855 "parser_cocci_menhir.mly"
+                        ( P.ret_exp _1 _2 _3 )
+# 29966 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24795,25 +29974,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = l;
-          MenhirLib.EngineTypes.startp = _startpos_l_;
-          MenhirLib.EngineTypes.endp = _endpos_l_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = i;
-            MenhirLib.EngineTypes.startp = _startpos_i_;
-            MenhirLib.EngineTypes.endp = _endpos_i_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let l : 'tv_loption_not_ceq_ = Obj.magic l in
-        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_l_ in
-        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = 
-# 1414 "parser_cocci_menhir.mly"
-                                                    ( (i,l) )
-# 24817 "parser_cocci_menhir.ml"
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29992 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 57 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 29997 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_statement = 
+# 856 "parser_cocci_menhir.mly"
+                  ( P.ret _1 _2 )
+# 30004 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24825,25 +30012,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = l;
-          MenhirLib.EngineTypes.startp = _startpos_l_;
-          MenhirLib.EngineTypes.endp = _endpos_l_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = i;
-            MenhirLib.EngineTypes.startp = _startpos_i_;
-            MenhirLib.EngineTypes.endp = _endpos_i_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let l : 'tv_loption_not_eq_ = Obj.magic l in
-        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_l_ in
-        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = 
-# 1414 "parser_cocci_menhir.mly"
-                                                    ( (i,l) )
-# 24847 "parser_cocci_menhir.ml"
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30030 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 58 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30035 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_statement = 
+# 857 "parser_cocci_menhir.mly"
+                 ( P.break _1 _2 )
+# 30042 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24855,25 +30050,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = l;
-          MenhirLib.EngineTypes.startp = _startpos_l_;
-          MenhirLib.EngineTypes.endp = _endpos_l_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = i;
-            MenhirLib.EngineTypes.startp = _startpos_i_;
-            MenhirLib.EngineTypes.endp = _endpos_i_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let l : 'tv_loption_not_eqe_ = Obj.magic l in
-        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_l_ in
-        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = 
-# 1414 "parser_cocci_menhir.mly"
-                                                    ( (i,l) )
-# 24877 "parser_cocci_menhir.ml"
+        let _2 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30068 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : (
+# 58 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30073 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_statement = 
+# 858 "parser_cocci_menhir.mly"
+                    ( P.cont _1 _2 )
+# 30080 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24885,49 +30088,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = l;
-          MenhirLib.EngineTypes.startp = _startpos_l_;
-          MenhirLib.EngineTypes.endp = _endpos_l_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = i;
-            MenhirLib.EngineTypes.startp = _startpos_i_;
-            MenhirLib.EngineTypes.endp = _endpos_i_;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let l : 'tv_loption_not_pos_ = Obj.magic l in
-        let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_l_ in
-        let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = 
-# 1414 "parser_cocci_menhir.mly"
-                                                    ( (i,l) )
-# 24907 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in
+        let _2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30106 "parser_cocci_menhir.ml"
+        ) = Obj.magic _2 in
+        let _1 : 'tv_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_pure_ident_or_meta_ident_with_seed = 
-# 1410 "parser_cocci_menhir.mly"
-                                ( (_1,None) )
-# 24931 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_statement = 
+# 859 "parser_cocci_menhir.mly"
+                ( P.label _1 _2 )
+# 30114 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24939,10 +30122,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = s;
-          MenhirLib.EngineTypes.startp = _startpos_s_;
-          MenhirLib.EngineTypes.endp = _endpos_s_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
             MenhirLib.EngineTypes.startp = _startpos__2_;
             MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
@@ -24954,39 +30138,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let s : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 24961 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in
+        let _3 : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30145 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_ident = Obj.magic _2 in
+        let _1 : (
+# 58 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30151 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos_s_ in
-        let _v : 'tv_pure_ident_or_meta_ident_with_seed = 
-# 1411 "parser_cocci_menhir.mly"
-                                              ( (_1,Some (P.id2name s)) )
-# 24969 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : (
-# 131 "parser_cocci_menhir.mly"
-      (unit)
-# 24986 "parser_cocci_menhir.ml"
-        ) = 
-# 172 "parser_cocci_menhir.mly"
-        ( )
-# 24990 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_statement = 
+# 860 "parser_cocci_menhir.mly"
+                      ( P.goto _1 _2 _3 )
+# 30158 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24998,19 +30166,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_one_decl_var = Obj.magic _1 in
+        let _3 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30189 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_fun_start = Obj.magic _2 in
+        let _1 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30195 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_rule_elem_statement = 
-# 916 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) )
-# 25014 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_statement = 
+# 862 "parser_cocci_menhir.mly"
+    ( P.seq _1 _2 _3 )
+# 30202 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25022,9 +30210,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = w;
+          MenhirLib.EngineTypes.startp = _startpos_w_;
+          MenhirLib.EngineTypes.endp = _endpos_w_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
             MenhirLib.EngineTypes.semv = _1;
@@ -25033,18 +30221,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
+        let w : 'tv_list_whenppdecs_ = Obj.magic w in
+        let _1 : (
+# 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25040 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
+# 30229 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_rule_elem_statement = 
-# 917 "parser_cocci_menhir.mly"
-               ( P.exp_stm _1 _2 )
-# 25048 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_w_ in
+        let _v : 'tv_stm_dots = 
+# 866 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) )
+# 30236 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25056,39 +30244,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = c;
+          MenhirLib.EngineTypes.startp = _startpos_c_;
+          MenhirLib.EngineTypes.endp = _endpos_c_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = b;
+            MenhirLib.EngineTypes.startp = _startpos_b_;
+            MenhirLib.EngineTypes.endp = _endpos_b_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = w;
+              MenhirLib.EngineTypes.startp = _startpos_w_;
+              MenhirLib.EngineTypes.endp = _endpos_w_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 107 "parser_cocci_menhir.mly"
+        let c : (
+# 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25079 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
+# 30272 "parser_cocci_menhir.ml"
+        ) = Obj.magic c in
+        let b : 'tv_nest_start = Obj.magic b in
+        let w : 'tv_list_whenppdecs_ = Obj.magic w in
         let _1 : (
-# 57 "parser_cocci_menhir.mly"
+# 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25085 "parser_cocci_menhir.ml"
+# 30279 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_rule_elem_statement = 
-# 918 "parser_cocci_menhir.mly"
-                        ( P.ret_exp _1 _2 _3 )
-# 25092 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_c_ in
+        let _v : 'tv_stm_dots = 
+# 868 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b,
+                         P.clt2mcode "...>" c, List.concat w, false)) )
+# 30287 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25100,33 +30295,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = c;
+          MenhirLib.EngineTypes.startp = _startpos_c_;
+          MenhirLib.EngineTypes.endp = _endpos_c_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = b;
+            MenhirLib.EngineTypes.startp = _startpos_b_;
+            MenhirLib.EngineTypes.endp = _endpos_b_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = w;
+              MenhirLib.EngineTypes.startp = _startpos_w_;
+              MenhirLib.EngineTypes.endp = _endpos_w_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = _1;
+                MenhirLib.EngineTypes.startp = _startpos__1_;
+                MenhirLib.EngineTypes.endp = _endpos__1_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
+        let c : (
+# 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25118 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
+# 30323 "parser_cocci_menhir.ml"
+        ) = Obj.magic c in
+        let b : 'tv_nest_start = Obj.magic b in
+        let w : 'tv_list_whenppdecs_ = Obj.magic w in
         let _1 : (
-# 57 "parser_cocci_menhir.mly"
+# 73 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25123 "parser_cocci_menhir.ml"
+# 30330 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_rule_elem_statement = 
-# 919 "parser_cocci_menhir.mly"
-                  ( P.ret _1 _2 )
-# 25130 "parser_cocci_menhir.ml"
+        let _endpos = _endpos_c_ in
+        let _v : 'tv_stm_dots = 
+# 871 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b,
+                         P.clt2mcode "...+>" c, List.concat w, true)) )
+# 30338 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25138,33 +30346,107 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = s;
+          MenhirLib.EngineTypes.startp = _startpos_s_;
+          MenhirLib.EngineTypes.endp = _endpos_s_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 25156 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 58 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 25161 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_rule_elem_statement = 
-# 920 "parser_cocci_menhir.mly"
-                 ( P.break _1 _2 )
-# 25168 "parser_cocci_menhir.ml"
+        let s : (
+# 53 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 30359 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let _startpos = _startpos_s_ in
+        let _endpos = _endpos_s_ in
+        let _v : 'tv_storage = 
+# 797 "parser_cocci_menhir.mly"
+                        ( P.clt2mcode Ast.Static s )
+# 30366 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = s;
+          MenhirLib.EngineTypes.startp = _startpos_s_;
+          MenhirLib.EngineTypes.endp = _endpos_s_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let s : (
+# 53 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 30387 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let _startpos = _startpos_s_ in
+        let _endpos = _endpos_s_ in
+        let _v : 'tv_storage = 
+# 798 "parser_cocci_menhir.mly"
+                        ( P.clt2mcode Ast.Auto s )
+# 30394 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = s;
+          MenhirLib.EngineTypes.startp = _startpos_s_;
+          MenhirLib.EngineTypes.endp = _endpos_s_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let s : (
+# 53 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 30415 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let _startpos = _startpos_s_ in
+        let _endpos = _endpos_s_ in
+        let _v : 'tv_storage = 
+# 799 "parser_cocci_menhir.mly"
+                        ( P.clt2mcode Ast.Register s )
+# 30422 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = s;
+          MenhirLib.EngineTypes.startp = _startpos_s_;
+          MenhirLib.EngineTypes.endp = _endpos_s_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let s : (
+# 53 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 30443 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let _startpos = _startpos_s_ in
+        let _endpos = _endpos_s_ in
+        let _v : 'tv_storage = 
+# 800 "parser_cocci_menhir.mly"
+                        ( P.clt2mcode Ast.Extern s )
+# 30450 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25176,33 +30458,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 25194 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 58 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 25199 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_rule_elem_statement = 
-# 921 "parser_cocci_menhir.mly"
-                    ( P.cont _1 _2 )
-# 25206 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_struct_decl = 
+# 555 "parser_cocci_menhir.mly"
+               ( [] )
+# 30472 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25214,43 +30480,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = t;
+              MenhirLib.EngineTypes.startp = _startpos_t_;
+              MenhirLib.EngineTypes.endp = _endpos_t_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 25237 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = Obj.magic _2 in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25243 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_rule_elem_statement = 
-# 923 "parser_cocci_menhir.mly"
-    ( let (mids,code) = _2 in
-    Ast0.wrap
-      (Ast0.Disj(P.clt2mcode "(" _1,
-                List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code,
-                mids, P.clt2mcode ")" _3)) )
-# 25254 "parser_cocci_menhir.ml"
+# 30503 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_struct_decl = 
+# 557 "parser_cocci_menhir.mly"
+  ( let (id,fn) = d in
+        [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] )
+# 30513 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25262,33 +30521,45 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__7_;
-          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ee;
-            MenhirLib.EngineTypes.startp = _startpos_ee_;
-            MenhirLib.EngineTypes.endp = _endpos_ee_;
+            MenhirLib.EngineTypes.semv = rp2;
+            MenhirLib.EngineTypes.startp = _startpos_rp2_;
+            MenhirLib.EngineTypes.endp = _endpos_rp2_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = e;
-              MenhirLib.EngineTypes.startp = _startpos_e_;
-              MenhirLib.EngineTypes.endp = _endpos_e_;
+              MenhirLib.EngineTypes.semv = p;
+              MenhirLib.EngineTypes.startp = _startpos_p_;
+              MenhirLib.EngineTypes.endp = _endpos_p_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = a;
-                MenhirLib.EngineTypes.startp = _startpos_a_;
-                MenhirLib.EngineTypes.endp = _endpos_a_;
+                MenhirLib.EngineTypes.semv = lp2;
+                MenhirLib.EngineTypes.startp = _startpos_lp2_;
+                MenhirLib.EngineTypes.endp = _endpos_lp2_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
+                  MenhirLib.EngineTypes.semv = rp1;
+                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
+                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
                   MenhirLib.EngineTypes.next = {
                     MenhirLib.EngineTypes.semv = d;
                     MenhirLib.EngineTypes.startp = _startpos_d_;
                     MenhirLib.EngineTypes.endp = _endpos_d_;
                     MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.startp = _startpos__1_;
-                      MenhirLib.EngineTypes.endp = _endpos__1_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      MenhirLib.EngineTypes.semv = st;
+                      MenhirLib.EngineTypes.startp = _startpos_st_;
+                      MenhirLib.EngineTypes.endp = _endpos_st_;
+                      MenhirLib.EngineTypes.next = {
+                        MenhirLib.EngineTypes.semv = lp1;
+                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
+                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
+                        MenhirLib.EngineTypes.next = {
+                          MenhirLib.EngineTypes.state = _menhir_s;
+                          MenhirLib.EngineTypes.semv = t;
+                          MenhirLib.EngineTypes.startp = _startpos_t_;
+                          MenhirLib.EngineTypes.endp = _endpos_t_;
+                          MenhirLib.EngineTypes.next = _menhir_stack;
+                          };
+                        };
                       };
                     };
                   };
@@ -25296,28 +30567,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let ee : 'tv_is_expression = Obj.magic ee in
-        let e : 'tv_exists = Obj.magic e in
-        let a : 'tv_loption_disable_ = Obj.magic a in
-        let i : 'tv_loption_choose_iso_ = Obj.magic i in
-        let d : 'tv_depends = Obj.magic d in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__7_ in
-        let _v : (
-# 153 "parser_cocci_menhir.mly"
-      (Ast_cocci.rulename)
-# 25310 "parser_cocci_menhir.ml"
-        ) = let nm =
-          
-# 39 "standard.mly"
-    ( None )
-# 25315 "parser_cocci_menhir.ml"
-          
-        in
-        
-# 202 "parser_cocci_menhir.mly"
-      ( P.make_cocci_rule_name_result nm d i a e ee )
-# 25321 "parser_cocci_menhir.ml"
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30574 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let rp2 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30579 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp2 in
+        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
+        let lp2 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30585 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp2 in
+        let rp1 : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30590 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp1 in
+        let d : 'tv_d_ident = Obj.magic d in
+        let st : (
+# 99 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30596 "parser_cocci_menhir.ml"
+        ) = Obj.magic st in
+        let lp1 : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30601 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp1 in
+        let t : 'tv_ctype = Obj.magic t in
+        let _startpos = _startpos_t_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_struct_decl = 
+# 561 "parser_cocci_menhir.mly"
+        ( let (id,fn) = d in
+        let t =
+         Ast0.wrap
+           (Ast0.FunctionPointer
+              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
+               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
+        [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] )
+# 30615 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25329,69 +30623,100 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__8_;
-          MenhirLib.EngineTypes.endp = _endpos__8_;
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ee;
-            MenhirLib.EngineTypes.startp = _startpos_ee_;
-            MenhirLib.EngineTypes.endp = _endpos_ee_;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = e;
-              MenhirLib.EngineTypes.startp = _startpos_e_;
-              MenhirLib.EngineTypes.endp = _endpos_e_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = a;
-                MenhirLib.EngineTypes.startp = _startpos_a_;
-                MenhirLib.EngineTypes.endp = _endpos_a_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = d;
-                    MenhirLib.EngineTypes.startp = _startpos_d_;
-                    MenhirLib.EngineTypes.endp = _endpos_d_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.startp = _startpos__2_;
-                      MenhirLib.EngineTypes.endp = _endpos__2_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.state = _menhir_s;
-                        MenhirLib.EngineTypes.semv = x0;
-                        MenhirLib.EngineTypes.startp = _startpos_x0_;
-                        MenhirLib.EngineTypes.endp = _endpos_x0_;
-                        MenhirLib.EngineTypes.next = _menhir_stack;
-                        };
-                      };
-                    };
-                  };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30646 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let _startpos = _startpos_i_ in
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_struct_decl = let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 30656 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 569 "parser_cocci_menhir.mly"
+  ( let (id,fn) = d in
+        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+        [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] )
+# 30664 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = pv;
+          MenhirLib.EngineTypes.startp = _startpos_pv_;
+          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = i;
+              MenhirLib.EngineTypes.startp = _startpos_i_;
+              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let ee : 'tv_is_expression = Obj.magic ee in
-        let e : 'tv_exists = Obj.magic e in
-        let a : 'tv_loption_disable_ = Obj.magic a in
-        let i : 'tv_loption_choose_iso_ = Obj.magic i in
-        let d : 'tv_depends = Obj.magic d in
-        let x0 : 'tv_pure_ident = Obj.magic x0 in
+        let pv : (
+# 107 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30700 "parser_cocci_menhir.ml"
+        ) = Obj.magic pv in
+        let d : 'tv_d_ident = Obj.magic d in
+        let i : 'tv_pure_ident = Obj.magic i in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos__8_ in
-        let _v : (
-# 153 "parser_cocci_menhir.mly"
-      (Ast_cocci.rulename)
-# 25383 "parser_cocci_menhir.ml"
-        ) = let nm =
+        let _endpos = _endpos_pv_ in
+        let _v : 'tv_struct_decl = let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 25389 "parser_cocci_menhir.ml"
+# 30712 "parser_cocci_menhir.ml"
           
         in
         
-# 202 "parser_cocci_menhir.mly"
-      ( P.make_cocci_rule_name_result nm d i a e ee )
-# 25395 "parser_cocci_menhir.ml"
+# 569 "parser_cocci_menhir.mly"
+  ( let (id,fn) = d in
+        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
+        [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] )
+# 30720 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25403,59 +30728,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__8_;
-          MenhirLib.EngineTypes.endp = _endpos__8_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = ee;
-            MenhirLib.EngineTypes.startp = _startpos_ee_;
-            MenhirLib.EngineTypes.endp = _endpos_ee_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = e;
-              MenhirLib.EngineTypes.startp = _startpos_e_;
-              MenhirLib.EngineTypes.endp = _endpos_e_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = a;
-                MenhirLib.EngineTypes.startp = _startpos_a_;
-                MenhirLib.EngineTypes.endp = _endpos_a_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = i;
-                  MenhirLib.EngineTypes.startp = _startpos_i_;
-                  MenhirLib.EngineTypes.endp = _endpos_i_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = d;
-                    MenhirLib.EngineTypes.startp = _startpos_d_;
-                    MenhirLib.EngineTypes.endp = _endpos_d_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.startp = _startpos__2_;
-                      MenhirLib.EngineTypes.endp = _endpos__2_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.state = _menhir_s;
-                        MenhirLib.EngineTypes.startp = _startpos__1_;
-                        MenhirLib.EngineTypes.endp = _endpos__1_;
-                        MenhirLib.EngineTypes.next = _menhir_stack;
-                        };
-                      };
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let ee : 'tv_is_expression = Obj.magic ee in
-        let e : 'tv_exists = Obj.magic e in
-        let a : 'tv_loption_disable_ = Obj.magic a in
-        let i : 'tv_loption_choose_iso_ = Obj.magic i in
-        let d : 'tv_depends = Obj.magic d in
+        let _1 : 'tv_struct_decl_list_start = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__8_ in
-        let _v : (
-# 153 "parser_cocci_menhir.mly"
-      (Ast_cocci.rulename)
-# 25455 "parser_cocci_menhir.ml"
-        ) = 
-# 207 "parser_cocci_menhir.mly"
-      ( P.make_generated_rule_name_result None d i a e ee )
-# 25459 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_struct_decl_list = 
+# 574 "parser_cocci_menhir.mly"
+                          ( Ast0.wrap(Ast0.DOTS(_1)) )
+# 30744 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25467,41 +30752,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = lang;
-              MenhirLib.EngineTypes.startp = _startpos_lang_;
-              MenhirLib.EngineTypes.endp = _endpos_lang_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.startp = _startpos__1_;
-                  MenhirLib.EngineTypes.endp = _endpos__1_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let d : 'tv_depends = Obj.magic d in
-        let lang : 'tv_pure_ident = Obj.magic lang in
+        let _1 : 'tv_struct_decl = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__5_ in
-        let _v : (
-# 153 "parser_cocci_menhir.mly"
-      (Ast_cocci.rulename)
-# 25501 "parser_cocci_menhir.ml"
-        ) = 
-# 209 "parser_cocci_menhir.mly"
-      ( P.make_script_rule_name_result lang d )
-# 25505 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_struct_decl_list_start = 
+# 577 "parser_cocci_menhir.mly"
+                                     ( _1 )
+# 30768 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25513,35 +30776,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = lang;
-            MenhirLib.EngineTypes.startp = _startpos_lang_;
-            MenhirLib.EngineTypes.endp = _endpos_lang_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let lang : 'tv_pure_ident = Obj.magic lang in
+        let _2 : 'tv_struct_decl_list_start = Obj.magic _2 in
+        let _1 : 'tv_struct_decl = Obj.magic _1 in
         let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 153 "parser_cocci_menhir.mly"
-      (Ast_cocci.rulename)
-# 25541 "parser_cocci_menhir.ml"
-        ) = 
-# 211 "parser_cocci_menhir.mly"
-      ( P.make_initial_script_rule_name_result lang )
-# 25545 "parser_cocci_menhir.ml"
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_struct_decl_list_start = 
+# 578 "parser_cocci_menhir.mly"
+                                     ( _1@_2 )
+# 30798 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25553,35 +30806,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__4_;
-          MenhirLib.EngineTypes.endp = _endpos__4_;
+          MenhirLib.EngineTypes.semv = r;
+          MenhirLib.EngineTypes.startp = _startpos_r_;
+          MenhirLib.EngineTypes.endp = _endpos_r_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = lang;
-            MenhirLib.EngineTypes.startp = _startpos_lang_;
-            MenhirLib.EngineTypes.endp = _endpos_lang_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__2_;
-              MenhirLib.EngineTypes.endp = _endpos__2_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = d;
+            MenhirLib.EngineTypes.startp = _startpos_d_;
+            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let lang : 'tv_pure_ident = Obj.magic lang in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__4_ in
-        let _v : (
-# 153 "parser_cocci_menhir.mly"
-      (Ast_cocci.rulename)
-# 25581 "parser_cocci_menhir.ml"
-        ) = 
-# 213 "parser_cocci_menhir.mly"
-      ( P.make_final_script_rule_name_result lang )
-# 25585 "parser_cocci_menhir.ml"
+        let r : 'tv_continue_struct_decl_list = Obj.magic r in
+        let d : 'tv_edots_when_TEllipsis_struct_decl_ = Obj.magic d in
+        let _startpos = _startpos_d_ in
+        let _endpos = _endpos_r_ in
+        let _v : 'tv_struct_decl_list_start = 
+# 580 "parser_cocci_menhir.mly"
+    ( (P.mkddots "..." d)::r )
+# 30828 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25593,51 +30836,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.startp = _startpos__6_;
-          MenhirLib.EngineTypes.endp = _endpos__6_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = cocci;
-            MenhirLib.EngineTypes.startp = _startpos_cocci_;
-            MenhirLib.EngineTypes.endp = _endpos_cocci_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.startp = _startpos__4_;
-              MenhirLib.EngineTypes.endp = _endpos__4_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _3;
-                MenhirLib.EngineTypes.startp = _startpos__3_;
-                MenhirLib.EngineTypes.endp = _endpos__3_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.startp = _startpos__2_;
-                  MenhirLib.EngineTypes.endp = _endpos__2_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.state = _menhir_s;
-                    MenhirLib.EngineTypes.semv = py;
-                    MenhirLib.EngineTypes.startp = _startpos_py_;
-                    MenhirLib.EngineTypes.endp = _endpos_py_;
-                    MenhirLib.EngineTypes.next = _menhir_stack;
-                    };
-                  };
-                };
-              };
-            };
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = s;
+          MenhirLib.EngineTypes.startp = _startpos_s_;
+          MenhirLib.EngineTypes.endp = _endpos_s_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          } = _menhir_stack in
+        let s : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 30849 "parser_cocci_menhir.ml"
+        ) = Obj.magic s in
+        let _startpos = _startpos_s_ in
+        let _endpos = _endpos_s_ in
+        let _v : 'tv_struct_or_union = 
+# 551 "parser_cocci_menhir.mly"
+                 ( P.clt2mcode Ast.Struct s )
+# 30856 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = u;
+          MenhirLib.EngineTypes.startp = _startpos_u_;
+          MenhirLib.EngineTypes.endp = _endpos_u_;
+          MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let cocci : 'tv_pure_ident = Obj.magic cocci in
-        let _3 : (
-# 47 "parser_cocci_menhir.mly"
-      (string)
-# 25629 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let py : 'tv_pure_ident = Obj.magic py in
-        let _startpos = _startpos_py_ in
-        let _endpos = _endpos__6_ in
-        let _v : (
-# 159 "parser_cocci_menhir.mly"
-       (string * (string * string))
-# 25637 "parser_cocci_menhir.ml"
-        ) = 
-# 1879 "parser_cocci_menhir.mly"
-  ( (P.id2name py, (_3, P.id2name cocci)) )
-# 25641 "parser_cocci_menhir.ml"
+        let u : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 30877 "parser_cocci_menhir.ml"
+        ) = Obj.magic u in
+        let _startpos = _startpos_u_ in
+        let _endpos = _endpos_u_ in
+        let _v : 'tv_struct_or_union = 
+# 552 "parser_cocci_menhir.mly"
+                 ( P.clt2mcode Ast.Union u )
+# 30884 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25650,22 +30893,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.semv = _1;
+          MenhirLib.EngineTypes.startp = _startpos__1_;
+          MenhirLib.EngineTypes.endp = _endpos__1_;
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
-        let x : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 25662 "parser_cocci_menhir.ml"
-        ) = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_TString_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 25669 "parser_cocci_menhir.ml"
+        let _1 : 'tv_eexpr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__1_ in
+        let _v : 'tv_top_eexpr = 
+# 1187 "parser_cocci_menhir.mly"
+        ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) )
+# 30908 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25677,33 +30916,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
           MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = _2;
             MenhirLib.EngineTypes.startp = _startpos__2_;
             MenhirLib.EngineTypes.endp = _endpos__2_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.semv = _1;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_TString_ = Obj.magic xs in
-        let x : (
-# 87 "parser_cocci_menhir.mly"
-       (string * Data.clt)
-# 25700 "parser_cocci_menhir.ml"
-        ) = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_TString_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 25707 "parser_cocci_menhir.ml"
+        let _3 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30939 "parser_cocci_menhir.ml"
+        ) = Obj.magic _3 in
+        let _2 : 'tv_initialize_list = Obj.magic _2 in
+        let _1 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 30945 "parser_cocci_menhir.ml"
+        ) = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_top_init = 
+# 1665 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) )
+# 30952 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25714,20 +30959,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_toplevel_after_dots = 
+# 1653 "parser_cocci_menhir.mly"
+                                     ([])
+# 30969 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
           MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_any_strict = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 25731 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_dots = 
+# 1654 "parser_cocci_menhir.mly"
+                                     (_2)
+# 30997 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25739,29 +31005,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_any_strict_ = Obj.magic xs in
-        let x : 'tv_any_strict = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 25765 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_dots = 
+# 1655 "parser_cocci_menhir.mly"
+                                     ((Ast0.wrap(Ast0.Exp(_1)))::_2)
+# 31027 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25773,19 +31035,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_ctype = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_ctype_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 25789 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_dots = 
+# 1656 "parser_cocci_menhir.mly"
+                                          (_1@_2)
+# 31057 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25797,29 +31065,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_ctype_ = Obj.magic xs in
-        let x : 'tv_ctype = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_ctype_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 25823 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_dots_init = 
+# 1644 "parser_cocci_menhir.mly"
+                                     (_2)
+# 31085 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25831,19 +31093,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_d_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 25847 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_dots_init = 
+# 1645 "parser_cocci_menhir.mly"
+                                     ((Ast0.wrap(Ast0.Exp(_1)))::_2)
+# 31115 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25855,29 +31123,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_d_ident_ = Obj.magic xs in
-        let x : 'tv_d_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 25881 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_dots_init = 
+# 1646 "parser_cocci_menhir.mly"
+                                          (_1@_2)
+# 31145 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25888,20 +31152,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let x : 'tv_dexpr = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_dexpr_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 25905 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_toplevel_after_exp = 
+# 1649 "parser_cocci_menhir.mly"
+                                     ([])
+# 31162 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25913,29 +31170,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_dexpr_ = Obj.magic xs in
-        let x : 'tv_dexpr = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_dexpr_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 25939 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_exp = 
+# 1650 "parser_cocci_menhir.mly"
+                                     (_1::_2)
+# 31192 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25946,20 +31199,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let x : 'tv_ident_or_const = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 25963 "parser_cocci_menhir.ml"
+        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
+        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
+        let _endpos = _startpos in
+        let _v : 'tv_toplevel_after_stm = 
+# 1659 "parser_cocci_menhir.mly"
+                                     ([])
+# 31209 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25971,29 +31217,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_ident_or_const_ = Obj.magic xs in
-        let x : 'tv_ident_or_const = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 25997 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_stm = 
+# 1660 "parser_cocci_menhir.mly"
+                                     (_1::_2)
+# 31239 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26005,19 +31247,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_meta_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26021 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_after_stm = 
+# 1661 "parser_cocci_menhir.mly"
+                                     (_1@_2)
+# 31269 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26029,29 +31277,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_meta_ident_ = Obj.magic xs in
-        let x : 'tv_meta_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26055 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in
+        let _1 : 'tv_stm_dots = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
+# 1639 "parser_cocci_menhir.mly"
+                                     ( _1::_2 )
+# 31299 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26063,19 +31307,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_pure_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26079 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
+# 1640 "parser_cocci_menhir.mly"
+                                     ( (Ast0.wrap(Ast0.Exp(_1)))::_2 )
+# 31329 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26087,29 +31337,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic xs in
-        let x : 'tv_pure_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26113 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
+# 1641 "parser_cocci_menhir.mly"
+                                          ( _1@_2 )
+# 31359 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26121,19 +31367,44 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = w0;
+            MenhirLib.EngineTypes.startp = _startpos_w0_;
+            MenhirLib.EngineTypes.endp = _endpos_w0_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = a0;
+              MenhirLib.EngineTypes.startp = _startpos_a0_;
+              MenhirLib.EngineTypes.endp = _endpos_a0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26137 "parser_cocci_menhir.ml"
+        let b : 'tv_toplevel_after_dots_init = Obj.magic b in
+        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
+        let a0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31392 "parser_cocci_menhir.ml"
+        ) = Obj.magic a0 in
+        let _startpos = _startpos_a0_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
+          let w = w0 in
+          let a = a0 in
+          
+# 876 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) )
+# 31402 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 1632 "parser_cocci_menhir.mly"
+                                             ( a::b )
+# 31408 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26145,29 +31416,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = c0;
+            MenhirLib.EngineTypes.startp = _startpos_c0_;
+            MenhirLib.EngineTypes.endp = _endpos_c0_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = b0;
+              MenhirLib.EngineTypes.startp = _startpos_b0_;
+              MenhirLib.EngineTypes.endp = _endpos_b0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = w0;
+                MenhirLib.EngineTypes.startp = _startpos_w0_;
+                MenhirLib.EngineTypes.endp = _endpos_w0_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = a0;
+                  MenhirLib.EngineTypes.startp = _startpos_a0_;
+                  MenhirLib.EngineTypes.endp = _endpos_a0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
               };
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = Obj.magic xs in
-        let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26171 "parser_cocci_menhir.ml"
+        let b : 'tv_toplevel_after_dots_init = Obj.magic b in
+        let c0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31450 "parser_cocci_menhir.ml"
+        ) = Obj.magic c0 in
+        let b0 : 'tv_nest_start = Obj.magic b0 in
+        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
+        let a0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31457 "parser_cocci_menhir.ml"
+        ) = Obj.magic a0 in
+        let _startpos = _startpos_a0_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
+          let c = c0 in
+          let b = b0 in
+          let w = w0 in
+          let a = a0 in
+          
+# 880 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b,
+                         P.clt2mcode "...>" c, List.concat w, false)) )
+# 31470 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 1633 "parser_cocci_menhir.mly"
+                                              ( a::b )
+# 31476 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26179,19 +31484,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = b;
+          MenhirLib.EngineTypes.startp = _startpos_b_;
+          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = c0;
+            MenhirLib.EngineTypes.startp = _startpos_c0_;
+            MenhirLib.EngineTypes.endp = _endpos_c0_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = b0;
+              MenhirLib.EngineTypes.startp = _startpos_b0_;
+              MenhirLib.EngineTypes.endp = _endpos_b0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = w0;
+                MenhirLib.EngineTypes.startp = _startpos_w0_;
+                MenhirLib.EngineTypes.endp = _endpos_w0_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = a0;
+                  MenhirLib.EngineTypes.startp = _startpos_a0_;
+                  MenhirLib.EngineTypes.endp = _endpos_a0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26195 "parser_cocci_menhir.ml"
+        let b : 'tv_toplevel_after_dots_init = Obj.magic b in
+        let c0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31518 "parser_cocci_menhir.ml"
+        ) = Obj.magic c0 in
+        let b0 : 'tv_nest_start = Obj.magic b0 in
+        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
+        let a0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31525 "parser_cocci_menhir.ml"
+        ) = Obj.magic a0 in
+        let _startpos = _startpos_a0_ in
+        let _endpos = _endpos_b_ in
+        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
+          let c = c0 in
+          let b = b0 in
+          let w = w0 in
+          let a = a0 in
+          
+# 883 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b,
+                         P.clt2mcode "...+>" c, List.concat w, true)) )
+# 31538 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 1633 "parser_cocci_menhir.mly"
+                                              ( a::b )
+# 31544 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26203,29 +31552,57 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = c0;
+          MenhirLib.EngineTypes.startp = _startpos_c0_;
+          MenhirLib.EngineTypes.endp = _endpos_c0_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = b0;
+            MenhirLib.EngineTypes.startp = _startpos_b0_;
+            MenhirLib.EngineTypes.endp = _endpos_b0_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = w0;
+              MenhirLib.EngineTypes.startp = _startpos_w0_;
+              MenhirLib.EngineTypes.endp = _endpos_w0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = a0;
+                MenhirLib.EngineTypes.startp = _startpos_a0_;
+                MenhirLib.EngineTypes.endp = _endpos_a0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic xs in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26229 "parser_cocci_menhir.ml"
+        let c0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31580 "parser_cocci_menhir.ml"
+        ) = Obj.magic c0 in
+        let b0 : 'tv_nest_start = Obj.magic b0 in
+        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
+        let a0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31587 "parser_cocci_menhir.ml"
+        ) = Obj.magic a0 in
+        let _startpos = _startpos_a0_ in
+        let _endpos = _endpos_c0_ in
+        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
+          let c = c0 in
+          let b = b0 in
+          let w = w0 in
+          let a = a0 in
+          
+# 880 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b,
+                         P.clt2mcode "...>" c, List.concat w, false)) )
+# 31600 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 1634 "parser_cocci_menhir.mly"
+                                       ( [a] )
+# 31606 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26237,19 +31614,57 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = c0;
+          MenhirLib.EngineTypes.startp = _startpos_c0_;
+          MenhirLib.EngineTypes.endp = _endpos_c0_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = b0;
+            MenhirLib.EngineTypes.startp = _startpos_b0_;
+            MenhirLib.EngineTypes.endp = _endpos_b0_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = w0;
+              MenhirLib.EngineTypes.startp = _startpos_w0_;
+              MenhirLib.EngineTypes.endp = _endpos_w0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = a0;
+                MenhirLib.EngineTypes.startp = _startpos_a0_;
+                MenhirLib.EngineTypes.endp = _endpos_a0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26253 "parser_cocci_menhir.ml"
+        let c0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31642 "parser_cocci_menhir.ml"
+        ) = Obj.magic c0 in
+        let b0 : 'tv_nest_start = Obj.magic b0 in
+        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
+        let a0 : (
+# 73 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 31649 "parser_cocci_menhir.ml"
+        ) = Obj.magic a0 in
+        let _startpos = _startpos_a0_ in
+        let _endpos = _endpos_c0_ in
+        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
+          let c = c0 in
+          let b = b0 in
+          let w = w0 in
+          let a = a0 in
+          
+# 883 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b,
+                         P.clt2mcode "...+>" c, List.concat w, true)) )
+# 31662 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 1634 "parser_cocci_menhir.mly"
+                                       ( [a] )
+# 31668 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26261,29 +31676,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic xs in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26287 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
+        let _1 : 'tv_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = 
+# 1635 "parser_cocci_menhir.mly"
+                                     ( (Ast0.wrap(Ast0.Exp(_1)))::_2 )
+# 31698 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26295,19 +31706,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = _2;
+          MenhirLib.EngineTypes.startp = _startpos__2_;
+          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = _1;
+            MenhirLib.EngineTypes.startp = _startpos__1_;
+            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26311 "parser_cocci_menhir.ml"
+        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
+        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__2_ in
+        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = 
+# 1636 "parser_cocci_menhir.mly"
+                                          ( _1@_2 )
+# 31728 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26319,29 +31736,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic xs in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26345 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 31760 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 31765 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 31777 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 31783 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 31790 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 31796 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26353,19 +31804,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26369 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 31828 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 31833 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 31845 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 31851 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 31858 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 31864 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26377,29 +31872,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic xs in
-        let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26403 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 31896 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 31901 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 31913 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 31919 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 31926 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 31932 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26411,19 +31940,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = x;
-          MenhirLib.EngineTypes.startp = _startpos_x_;
-          MenhirLib.EngineTypes.endp = _endpos_x_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_x_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = 
-# 144 "standard.mly"
-    ( [ x ] )
-# 26427 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 31964 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 31969 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 31982 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 31988 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 31995 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32001 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26435,29 +32009,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = xs;
-          MenhirLib.EngineTypes.startp = _startpos_xs_;
-          MenhirLib.EngineTypes.endp = _endpos_xs_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = x;
-              MenhirLib.EngineTypes.startp = _startpos_x_;
-              MenhirLib.EngineTypes.endp = _endpos_x_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
               };
             };
           } = _menhir_stack in
-        let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic xs in
-        let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in
-        let _startpos = _startpos_x_ in
-        let _endpos = _endpos_xs_ in
-        let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = 
-# 146 "standard.mly"
-    ( x :: xs )
-# 26461 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 32042 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 32047 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32052 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
+        let _startpos = _startpos_r1_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 32071 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 32077 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32084 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32090 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26469,19 +32098,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_statement = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_single_statement = 
-# 931 "parser_cocci_menhir.mly"
-                                      ( _1 )
-# 26485 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32122 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32127 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 32139 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 32145 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32152 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32158 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26493,43 +32166,78 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26516 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in
-        let _1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26522 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_single_statement = 
-# 935 "parser_cocci_menhir.mly"
-      ( let (mids,code) = _2 in
-        Ast0.wrap
-         (Ast0.Disj(P.clt2mcode "(" _1,
-                    List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code,
-                    mids, P.clt2mcode ")" _3)) )
-# 26533 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32195 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32200 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32205 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 32222 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 32228 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32235 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32241 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26541,19 +32249,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_includes = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_statement = 
-# 858 "parser_cocci_menhir.mly"
-           ( _1 )
-# 26557 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32273 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32278 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 32290 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 32296 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32303 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32309 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26565,23 +32317,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
           } = _menhir_stack in
-        let _1 : (
-# 64 "parser_cocci_menhir.mly"
-       (Parse_aux.info)
-# 26578 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_statement = 
-# 860 "parser_cocci_menhir.mly"
-    ( P.meta_stm _1 )
-# 26585 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32341 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32346 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 32358 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 32364 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32371 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32377 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26593,29 +32385,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26611 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_statement = 
-# 862 "parser_cocci_menhir.mly"
-    ( P.exp_stm _1 _2 )
-# 26619 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32409 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32414 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 32426 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 32432 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32439 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32445 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26627,55 +32453,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _5;
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _4;
-            MenhirLib.EngineTypes.startp = _startpos__4_;
-            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _3;
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _2;
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = _1;
-                  MenhirLib.EngineTypes.startp = _startpos__1_;
-                  MenhirLib.EngineTypes.endp = _endpos__1_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _5 : 'tv_single_statement = Obj.magic _5 in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26661 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26667 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26672 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_statement = 
-# 864 "parser_cocci_menhir.mly"
-    ( P.ifthen _1 _2 _3 _4 _5 )
-# 26679 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 32477 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32482 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 32495 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 32501 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32508 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32514 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26687,71 +32522,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _7;
-          MenhirLib.EngineTypes.startp = _startpos__7_;
-          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _6;
-            MenhirLib.EngineTypes.startp = _startpos__6_;
-            MenhirLib.EngineTypes.endp = _endpos__6_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _5;
-              MenhirLib.EngineTypes.startp = _startpos__5_;
-              MenhirLib.EngineTypes.endp = _endpos__5_;
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _4;
-                MenhirLib.EngineTypes.startp = _startpos__4_;
-                MenhirLib.EngineTypes.endp = _endpos__4_;
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = _3;
-                  MenhirLib.EngineTypes.startp = _startpos__3_;
-                  MenhirLib.EngineTypes.endp = _endpos__3_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = _2;
-                    MenhirLib.EngineTypes.startp = _startpos__2_;
-                    MenhirLib.EngineTypes.endp = _endpos__2_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = _1;
-                      MenhirLib.EngineTypes.startp = _startpos__1_;
-                      MenhirLib.EngineTypes.endp = _endpos__1_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let _7 : 'tv_single_statement = Obj.magic _7 in
-        let _6 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26731 "parser_cocci_menhir.ml"
-        ) = Obj.magic _6 in
-        let _5 : 'tv_single_statement = Obj.magic _5 in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26737 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26743 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26748 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__7_ in
-        let _v : 'tv_statement = 
-# 866 "parser_cocci_menhir.mly"
-    ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 )
-# 26755 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 32555 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 32560 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32565 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
+        let _startpos = _startpos_r1_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 32584 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 32590 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32597 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32603 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26763,87 +32611,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _9;
-          MenhirLib.EngineTypes.startp = _startpos__9_;
-          MenhirLib.EngineTypes.endp = _endpos__9_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _8;
-            MenhirLib.EngineTypes.startp = _startpos__8_;
-            MenhirLib.EngineTypes.endp = _endpos__8_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _7;
-              MenhirLib.EngineTypes.startp = _startpos__7_;
-              MenhirLib.EngineTypes.endp = _endpos__7_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _6;
-                MenhirLib.EngineTypes.startp = _startpos__6_;
-                MenhirLib.EngineTypes.endp = _endpos__6_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = _5;
-                  MenhirLib.EngineTypes.startp = _startpos__5_;
-                  MenhirLib.EngineTypes.endp = _endpos__5_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = _4;
-                    MenhirLib.EngineTypes.startp = _startpos__4_;
-                    MenhirLib.EngineTypes.endp = _endpos__4_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = _3;
-                      MenhirLib.EngineTypes.startp = _startpos__3_;
-                      MenhirLib.EngineTypes.endp = _endpos__3_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = _2;
-                        MenhirLib.EngineTypes.startp = _startpos__2_;
-                        MenhirLib.EngineTypes.endp = _endpos__2_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.state = _menhir_s;
-                          MenhirLib.EngineTypes.semv = _1;
-                          MenhirLib.EngineTypes.startp = _startpos__1_;
-                          MenhirLib.EngineTypes.endp = _endpos__1_;
-                          MenhirLib.EngineTypes.next = _menhir_stack;
-                          };
-                        };
-                      };
-                    };
-                  };
-                };
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _9 : 'tv_single_statement = Obj.magic _9 in
-        let _8 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26817 "parser_cocci_menhir.ml"
-        ) = Obj.magic _8 in
-        let _7 : 'tv_option_eexpr_ = Obj.magic _7 in
-        let _6 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26823 "parser_cocci_menhir.ml"
-        ) = Obj.magic _6 in
-        let _5 : 'tv_option_eexpr_ = Obj.magic _5 in
-        let _4 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26829 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_option_eexpr_ = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26835 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26840 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__9_ in
-        let _v : 'tv_statement = 
-# 869 "parser_cocci_menhir.mly"
-    ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 )
-# 26847 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32635 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32640 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 32652 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 32658 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32665 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32671 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26855,55 +32679,78 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _5;
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _4;
-            MenhirLib.EngineTypes.startp = _startpos__4_;
-            MenhirLib.EngineTypes.endp = _endpos__4_;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _3;
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _2;
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = _1;
-                  MenhirLib.EngineTypes.startp = _startpos__1_;
-                  MenhirLib.EngineTypes.endp = _endpos__1_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let _5 : 'tv_single_statement = Obj.magic _5 in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26889 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26895 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26900 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_statement = 
-# 871 "parser_cocci_menhir.mly"
-    ( P.whileloop _1 _2 _3 _4 _5 )
-# 26907 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32708 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32713 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32718 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let _startpos = _startpos_r0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 32735 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 32741 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32748 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32754 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26915,75 +32762,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _7;
-          MenhirLib.EngineTypes.startp = _startpos__7_;
-          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _6;
-            MenhirLib.EngineTypes.startp = _startpos__6_;
-            MenhirLib.EngineTypes.endp = _endpos__6_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _5;
-              MenhirLib.EngineTypes.startp = _startpos__5_;
-              MenhirLib.EngineTypes.endp = _endpos__5_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _4;
-                MenhirLib.EngineTypes.startp = _startpos__4_;
-                MenhirLib.EngineTypes.endp = _endpos__4_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = _3;
-                  MenhirLib.EngineTypes.startp = _startpos__3_;
-                  MenhirLib.EngineTypes.endp = _endpos__3_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = _2;
-                    MenhirLib.EngineTypes.startp = _startpos__2_;
-                    MenhirLib.EngineTypes.endp = _endpos__2_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = _1;
-                      MenhirLib.EngineTypes.startp = _startpos__1_;
-                      MenhirLib.EngineTypes.endp = _endpos__1_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _7 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26958 "parser_cocci_menhir.ml"
-        ) = Obj.magic _7 in
-        let _6 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26963 "parser_cocci_menhir.ml"
-        ) = Obj.magic _6 in
-        let _5 : 'tv_eexpr = Obj.magic _5 in
-        let _4 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26969 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26974 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_single_statement = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 26980 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__7_ in
-        let _v : 'tv_statement = 
-# 873 "parser_cocci_menhir.mly"
-    ( P.doloop _1 _2 _3 _4 _5 _6 _7 )
-# 26987 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32781 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 32792 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 32798 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32805 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32811 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26995,51 +32819,109 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _5;
-          MenhirLib.EngineTypes.startp = _startpos__5_;
-          MenhirLib.EngineTypes.endp = _endpos__5_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _4;
-            MenhirLib.EngineTypes.startp = _startpos__4_;
-            MenhirLib.EngineTypes.endp = _endpos__4_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _3;
-              MenhirLib.EngineTypes.startp = _startpos__3_;
-              MenhirLib.EngineTypes.endp = _endpos__3_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _2;
-                MenhirLib.EngineTypes.startp = _startpos__2_;
-                MenhirLib.EngineTypes.endp = _endpos__2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = _1;
-                  MenhirLib.EngineTypes.startp = _startpos__1_;
-                  MenhirLib.EngineTypes.endp = _endpos__1_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
+          } = _menhir_stack in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32838 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 32849 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 32855 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32862 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32868 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _5 : 'tv_single_statement = Obj.magic _5 in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27029 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27035 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_iter_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__5_ in
-        let _v : 'tv_statement = 
-# 875 "parser_cocci_menhir.mly"
-    ( P.iterator _1 _2 _3 _4 _5 )
-# 27043 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 32895 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 32906 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 32912 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32919 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32925 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27051,75 +32933,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _7;
-          MenhirLib.EngineTypes.startp = _startpos__7_;
-          MenhirLib.EngineTypes.endp = _endpos__7_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _6;
-            MenhirLib.EngineTypes.startp = _startpos__6_;
-            MenhirLib.EngineTypes.endp = _endpos__6_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = _5;
-              MenhirLib.EngineTypes.startp = _startpos__5_;
-              MenhirLib.EngineTypes.endp = _endpos__5_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = _4;
-                MenhirLib.EngineTypes.startp = _startpos__4_;
-                MenhirLib.EngineTypes.endp = _endpos__4_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = _3;
-                  MenhirLib.EngineTypes.startp = _startpos__3_;
-                  MenhirLib.EngineTypes.endp = _endpos__3_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = _2;
-                    MenhirLib.EngineTypes.startp = _startpos__2_;
-                    MenhirLib.EngineTypes.endp = _endpos__2_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.state = _menhir_s;
-                      MenhirLib.EngineTypes.semv = _1;
-                      MenhirLib.EngineTypes.startp = _startpos__1_;
-                      MenhirLib.EngineTypes.endp = _endpos__1_;
-                      MenhirLib.EngineTypes.next = _menhir_stack;
-                      };
-                    };
-                  };
-                };
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _7 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27094 "parser_cocci_menhir.ml"
-        ) = Obj.magic _7 in
-        let _6 : 'tv_list_case_line_ = Obj.magic _6 in
-        let _5 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27100 "parser_cocci_menhir.ml"
-        ) = Obj.magic _5 in
-        let _4 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27105 "parser_cocci_menhir.ml"
-        ) = Obj.magic _4 in
-        let _3 : 'tv_eexpr = Obj.magic _3 in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27111 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27116 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__7_ in
-        let _v : 'tv_statement = 
-# 877 "parser_cocci_menhir.mly"
-    ( P.switch _1 _2 _3 _4 _5 _6 _7 )
-# 27123 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 32952 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let _startpos = _startpos_p00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 32964 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 32970 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 32977 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 32983 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27131,39 +32991,73 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.startp = _startpos__2_;
+              MenhirLib.EngineTypes.endp = _endpos__2_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27154 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_eexpr = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27160 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_statement = 
-# 878 "parser_cocci_menhir.mly"
-                        ( P.ret_exp _1 _2 _3 )
-# 27167 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 33019 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 33024 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let _startpos = _startpos_r00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 33042 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 33048 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33055 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33061 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27175,33 +33069,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27193 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 57 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27198 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_statement = 
-# 879 "parser_cocci_menhir.mly"
-                  ( P.ret _1 _2 )
-# 27205 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33088 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 33099 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 33105 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33112 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33118 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27213,33 +33126,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
-          } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27231 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 58 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27236 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_statement = 
-# 880 "parser_cocci_menhir.mly"
-                 ( P.break _1 _2 )
-# 27243 "parser_cocci_menhir.ml"
+          } = _menhir_stack in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33150 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33155 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let _startpos = _startpos_ty100_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 33171 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 33177 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33184 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33190 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27251,33 +33198,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27269 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : (
-# 58 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27274 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_statement = 
-# 881 "parser_cocci_menhir.mly"
-                    ( P.cont _1 _2 )
-# 27281 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33217 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 495 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) )
+# 33228 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33234 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33241 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33247 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27289,29 +33255,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
             MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27307 "parser_cocci_menhir.ml"
-        ) = Obj.magic _2 in
-        let _1 : 'tv_ident = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_statement = 
-# 882 "parser_cocci_menhir.mly"
-                ( P.label _1 _2 )
-# 27315 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33274 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 497 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) )
+# 33285 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33291 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33298 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33304 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27323,39 +33312,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
             };
           } = _menhir_stack in
-        let _3 : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27346 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_ident = Obj.magic _2 in
-        let _1 : (
-# 58 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27352 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_statement = 
-# 883 "parser_cocci_menhir.mly"
-                      ( P.goto _1 _2 _3 )
-# 27359 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33331 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let _startpos = _startpos_ty00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 499 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) )
+# 33342 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33348 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33355 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33361 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27367,39 +33369,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
             MenhirLib.EngineTypes.next = {
               MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
               MenhirLib.EngineTypes.next = _menhir_stack;
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27390 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_fun_start = Obj.magic _2 in
-        let _1 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27396 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_statement = 
-# 885 "parser_cocci_menhir.mly"
-    ( P.seq _1 _2 _3 )
-# 27403 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33394 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 501 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) )
+# 33407 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33413 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33420 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33426 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27411,29 +33434,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = w;
-          MenhirLib.EngineTypes.startp = _startpos_w_;
-          MenhirLib.EngineTypes.endp = _endpos_w_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let w : 'tv_list_whenppdecs_ = Obj.magic w in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27430 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_w_ in
-        let _v : 'tv_stm_dots = 
-# 889 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) )
-# 27437 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 503 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) )
+# 33468 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33474 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33481 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33487 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27445,46 +33495,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = c;
-          MenhirLib.EngineTypes.startp = _startpos_c_;
-          MenhirLib.EngineTypes.endp = _endpos_c_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = w;
-              MenhirLib.EngineTypes.startp = _startpos_w_;
-              MenhirLib.EngineTypes.endp = _endpos_w_;
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let c : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27473 "parser_cocci_menhir.ml"
-        ) = Obj.magic c in
-        let b : 'tv_nest_start = Obj.magic b in
-        let w : 'tv_list_whenppdecs_ = Obj.magic w in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27480 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_c_ in
-        let _v : 'tv_stm_dots = 
-# 891 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b,
-                         P.clt2mcode "...>" c, List.concat w, false)) )
-# 27488 "parser_cocci_menhir.ml"
+# 33529 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 33535 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            let i =
+              
+# 39 "standard.mly"
+    ( None )
+# 33554 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 33564 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33570 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33577 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33583 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27496,46 +33591,100 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = c;
-          MenhirLib.EngineTypes.startp = _startpos_c_;
-          MenhirLib.EngineTypes.endp = _endpos_c_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b;
-            MenhirLib.EngineTypes.startp = _startpos_b_;
-            MenhirLib.EngineTypes.endp = _endpos_b_;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = w;
-              MenhirLib.EngineTypes.startp = _startpos_w_;
-              MenhirLib.EngineTypes.endp = _endpos_w_;
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = _1;
-                MenhirLib.EngineTypes.startp = _startpos__1_;
-                MenhirLib.EngineTypes.endp = _endpos__1_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = x000;
+                  MenhirLib.EngineTypes.startp = _startpos_x000_;
+                  MenhirLib.EngineTypes.endp = _endpos_x000_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = s00;
+                    MenhirLib.EngineTypes.startp = _startpos_s00_;
+                    MenhirLib.EngineTypes.endp = _endpos_s00_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let c : (
-# 73 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27524 "parser_cocci_menhir.ml"
-        ) = Obj.magic c in
-        let b : 'tv_nest_start = Obj.magic b in
-        let w : 'tv_list_whenppdecs_ = Obj.magic w in
-        let _1 : (
-# 73 "parser_cocci_menhir.mly"
+# 33630 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27531 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos_c_ in
-        let _v : 'tv_stm_dots = 
-# 894 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b,
-                         P.clt2mcode "...+>" c, List.concat w, true)) )
-# 27539 "parser_cocci_menhir.ml"
+# 33636 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let x000 : 'tv_ident = Obj.magic x000 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let x00 = x000 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let x0 = x00 in
+            let s = s0 in
+            let i =
+              let x = x0 in
+              
+# 41 "standard.mly"
+    ( Some x )
+# 33659 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 33669 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33675 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33682 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33688 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27547,23 +33696,86 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = s;
-          MenhirLib.EngineTypes.startp = _startpos_s_;
-          MenhirLib.EngineTypes.endp = _endpos_s_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
+            };
           } = _menhir_stack in
-        let s : (
-# 53 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 27560 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_s_ in
-        let _v : 'tv_storage = 
-# 816 "parser_cocci_menhir.mly"
-                        ( P.clt2mcode Ast.Static s )
-# 27567 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 33730 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 33736 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 33741 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let _startpos = _startpos_s00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            
+# 512 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = s in
+    let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
+    Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) )
+# 33760 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33766 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33773 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33779 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27575,23 +33787,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = s;
-          MenhirLib.EngineTypes.startp = _startpos_s_;
-          MenhirLib.EngineTypes.endp = _endpos_s_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+            };
           } = _menhir_stack in
-        let s : (
-# 53 "parser_cocci_menhir.mly"
-      (Data.clt)
-# 27588 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_s_ in
-        let _v : 'tv_storage = 
-# 817 "parser_cocci_menhir.mly"
-                        ( P.clt2mcode Ast.Auto s )
-# 27595 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 33806 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let _startpos = _startpos_p00_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 516 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) )
+# 33817 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 33823 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          
+# 39 "standard.mly"
+    ( None )
+# 33830 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33836 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27603,51 +33844,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = s;
-          MenhirLib.EngineTypes.startp = _startpos_s_;
-          MenhirLib.EngineTypes.endp = _endpos_s_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let s : (
-# 53 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 27616 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_s_ in
-        let _v : 'tv_storage = 
-# 818 "parser_cocci_menhir.mly"
-                        ( P.clt2mcode Ast.Register s )
-# 27623 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = s;
-          MenhirLib.EngineTypes.startp = _startpos_s_;
-          MenhirLib.EngineTypes.endp = _endpos_s_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let s : (
-# 53 "parser_cocci_menhir.mly"
+# 33873 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
       (Data.clt)
-# 27644 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_s_ in
-        let _v : 'tv_storage = 
-# 819 "parser_cocci_menhir.mly"
-                        ( P.clt2mcode Ast.Extern s )
-# 27651 "parser_cocci_menhir.ml"
+# 33878 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 33891 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 33897 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 33905 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33911 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27659,17 +33919,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_struct_decl = 
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33948 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 33953 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 33966 "parser_cocci_menhir.ml"
+            
+          in
+          
 # 521 "parser_cocci_menhir.mly"
-               ( [] )
-# 27673 "parser_cocci_menhir.ml"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 33972 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 33980 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 33986 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27681,36 +33994,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = t;
-              MenhirLib.EngineTypes.startp = _startpos_t_;
-              MenhirLib.EngineTypes.endp = _endpos_t_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27704 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let t : 'tv_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_struct_decl = 
-# 523 "parser_cocci_menhir.mly"
-  ( let (id,fn) = d in
-        [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] )
-# 27714 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34023 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34028 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 34041 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 34047 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34055 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34061 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27722,97 +34069,71 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = rp2;
-            MenhirLib.EngineTypes.startp = _startpos_rp2_;
-            MenhirLib.EngineTypes.endp = _endpos_rp2_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = p;
-              MenhirLib.EngineTypes.startp = _startpos_p_;
-              MenhirLib.EngineTypes.endp = _endpos_p_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = lp2;
-                MenhirLib.EngineTypes.startp = _startpos_lp2_;
-                MenhirLib.EngineTypes.endp = _endpos_lp2_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.semv = rp1;
-                  MenhirLib.EngineTypes.startp = _startpos_rp1_;
-                  MenhirLib.EngineTypes.endp = _endpos_rp1_;
-                  MenhirLib.EngineTypes.next = {
-                    MenhirLib.EngineTypes.semv = d;
-                    MenhirLib.EngineTypes.startp = _startpos_d_;
-                    MenhirLib.EngineTypes.endp = _endpos_d_;
-                    MenhirLib.EngineTypes.next = {
-                      MenhirLib.EngineTypes.semv = st;
-                      MenhirLib.EngineTypes.startp = _startpos_st_;
-                      MenhirLib.EngineTypes.endp = _endpos_st_;
-                      MenhirLib.EngineTypes.next = {
-                        MenhirLib.EngineTypes.semv = lp1;
-                        MenhirLib.EngineTypes.startp = _startpos_lp1_;
-                        MenhirLib.EngineTypes.endp = _endpos_lp1_;
-                        MenhirLib.EngineTypes.next = {
-                          MenhirLib.EngineTypes.state = _menhir_s;
-                          MenhirLib.EngineTypes.semv = t;
-                          MenhirLib.EngineTypes.startp = _startpos_t_;
-                          MenhirLib.EngineTypes.endp = _endpos_t_;
-                          MenhirLib.EngineTypes.next = _menhir_stack;
-                          };
-                        };
-                      };
-                    };
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27775 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let rp2 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27780 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp2 in
-        let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
-        let lp2 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27786 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp2 in
-        let rp1 : (
-# 77 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27791 "parser_cocci_menhir.ml"
-        ) = Obj.magic rp1 in
-        let d : 'tv_d_ident = Obj.magic d in
-        let st : (
-# 99 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27797 "parser_cocci_menhir.ml"
-        ) = Obj.magic st in
-        let lp1 : (
-# 76 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27802 "parser_cocci_menhir.ml"
-        ) = Obj.magic lp1 in
-        let t : 'tv_fn_ctype = Obj.magic t in
-        let _startpos = _startpos_t_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_struct_decl = 
-# 527 "parser_cocci_menhir.mly"
-        ( let (id,fn) = d in
-        let t =
-         Ast0.wrap
-           (Ast0.FunctionPointer
-              (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
-               P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
-        [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] )
-# 27816 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 34098 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34103 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 34117 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 34123 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34131 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34137 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27824,44 +34145,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
-              };
-            };
-          } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27847 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
-        let _startpos = _startpos_i_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_struct_decl = let cv =
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
+              };
+            };
+          } = _menhir_stack in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 34183 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 34188 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34193 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 34213 "parser_cocci_menhir.ml"
+            
+          in
           
-# 39 "standard.mly"
-    ( None )
-# 27857 "parser_cocci_menhir.ml"
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 34219 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34227 "parser_cocci_menhir.ml"
           
         in
         
-# 535 "parser_cocci_menhir.mly"
-  ( let (id,fn) = d in
-        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-        [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] )
-# 27865 "parser_cocci_menhir.ml"
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34233 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27873,17 +34241,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = pv;
-          MenhirLib.EngineTypes.startp = _startpos_pv_;
-          MenhirLib.EngineTypes.endp = _endpos_pv_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = i;
-              MenhirLib.EngineTypes.startp = _startpos_i_;
-              MenhirLib.EngineTypes.endp = _endpos_i_;
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
               MenhirLib.EngineTypes.next = {
                 MenhirLib.EngineTypes.state = _menhir_s;
                 MenhirLib.EngineTypes.semv = x0;
@@ -27894,78 +34262,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               };
             };
           } = _menhir_stack in
-        let pv : (
-# 107 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 27901 "parser_cocci_menhir.ml"
-        ) = Obj.magic pv in
-        let d : 'tv_d_ident = Obj.magic d in
-        let i : 'tv_pure_ident = Obj.magic i in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34270 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34275 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
         let x0 : 'tv_const_vol = Obj.magic x0 in
         let _startpos = _startpos_x0_ in
-        let _endpos = _endpos_pv_ in
-        let _v : 'tv_struct_decl = let cv =
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 34288 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 34294 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 27913 "parser_cocci_menhir.ml"
+# 34302 "parser_cocci_menhir.ml"
           
         in
         
-# 535 "parser_cocci_menhir.mly"
-  ( let (id,fn) = d in
-        let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
-        [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] )
-# 27921 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_struct_decl_list_start = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_struct_decl_list = 
-# 540 "parser_cocci_menhir.mly"
-                          ( Ast0.wrap(Ast0.DOTS(_1)) )
-# 27945 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          } = _menhir_stack in
-        let _1 : 'tv_struct_decl = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_struct_decl_list_start = 
-# 543 "parser_cocci_menhir.mly"
-                                     ( _1 )
-# 27969 "parser_cocci_menhir.ml"
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34308 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27977,25 +34316,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_struct_decl_list_start = Obj.magic _2 in
-        let _1 : 'tv_struct_decl = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_struct_decl_list_start = 
-# 544 "parser_cocci_menhir.mly"
-                                     ( _1@_2 )
-# 27999 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34350 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34355 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34360 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 34378 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 521 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
+# 34384 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34392 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34398 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28007,25 +34406,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = r;
-          MenhirLib.EngineTypes.startp = _startpos_r_;
-          MenhirLib.EngineTypes.endp = _endpos_r_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = d;
-            MenhirLib.EngineTypes.startp = _startpos_d_;
-            MenhirLib.EngineTypes.endp = _endpos_d_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let r : 'tv_continue_struct_decl_list = Obj.magic r in
-        let d : 'tv_edots_when_TEllipsis_struct_decl_ = Obj.magic d in
-        let _startpos = _startpos_d_ in
-        let _endpos = _endpos_r_ in
-        let _v : 'tv_struct_decl_list_start = 
-# 546 "parser_cocci_menhir.mly"
-    ( (P.mkddots "..." d)::r )
-# 28029 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34435 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34440 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 34453 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 34459 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34467 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34473 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28037,23 +34481,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = s;
-          MenhirLib.EngineTypes.startp = _startpos_s_;
-          MenhirLib.EngineTypes.endp = _endpos_s_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let s : (
-# 50 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34510 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
       (Data.clt)
-# 28050 "parser_cocci_menhir.ml"
-        ) = Obj.magic s in
-        let _startpos = _startpos_s_ in
-        let _endpos = _endpos_s_ in
-        let _v : 'tv_struct_or_union = 
-# 517 "parser_cocci_menhir.mly"
-                 ( P.clt2mcode Ast.Struct s )
-# 28057 "parser_cocci_menhir.ml"
+# 34515 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 34528 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 34534 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34542 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34548 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28065,23 +34556,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = u;
-          MenhirLib.EngineTypes.startp = _startpos_u_;
-          MenhirLib.EngineTypes.endp = _endpos_u_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let u : (
-# 50 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
       (Data.clt)
-# 28078 "parser_cocci_menhir.ml"
-        ) = Obj.magic u in
-        let _startpos = _startpos_u_ in
-        let _endpos = _endpos_u_ in
-        let _v : 'tv_struct_or_union = 
-# 518 "parser_cocci_menhir.mly"
-                 ( P.clt2mcode Ast.Union u )
-# 28085 "parser_cocci_menhir.ml"
+# 34585 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34590 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 34603 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 34609 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34617 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34623 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28093,19 +34631,71 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = _1;
-          MenhirLib.EngineTypes.startp = _startpos__1_;
-          MenhirLib.EngineTypes.endp = _endpos__1_;
-          MenhirLib.EngineTypes.next = _menhir_stack;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
+            };
           } = _menhir_stack in
-        let _1 : 'tv_eexpr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__1_ in
-        let _v : 'tv_top_eexpr = 
-# 1210 "parser_cocci_menhir.mly"
-        ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) )
-# 28109 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 34660 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34665 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r = r0 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 34679 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 34685 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34693 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34699 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28117,56 +34707,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _3;
-          MenhirLib.EngineTypes.startp = _startpos__3_;
-          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = _2;
-            MenhirLib.EngineTypes.startp = _startpos__2_;
-            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = _1;
-              MenhirLib.EngineTypes.startp = _startpos__1_;
-              MenhirLib.EngineTypes.endp = _endpos__1_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.startp = _startpos__4_;
+              MenhirLib.EngineTypes.endp = _endpos__4_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = r1;
+                  MenhirLib.EngineTypes.startp = _startpos_r1_;
+                  MenhirLib.EngineTypes.endp = _endpos_r1_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
+                };
               };
             };
           } = _menhir_stack in
-        let _3 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 28140 "parser_cocci_menhir.ml"
-        ) = Obj.magic _3 in
-        let _2 : 'tv_initialize_list = Obj.magic _2 in
-        let _1 : (
-# 101 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 28146 "parser_cocci_menhir.ml"
-        ) = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__3_ in
-        let _v : 'tv_top_init = 
-# 1652 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) )
-# 28153 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_toplevel_after_dots = 
-# 1640 "parser_cocci_menhir.mly"
-                                     ([])
-# 28170 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 34745 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 34750 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let r1 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34755 "parser_cocci_menhir.ml"
+        ) = Obj.magic r1 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let r = r1 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 34775 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 34781 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34789 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34795 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28178,23 +34803,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = r0;
+              MenhirLib.EngineTypes.startp = _startpos_r0_;
+              MenhirLib.EngineTypes.endp = _endpos_r0_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_dots = 
-# 1641 "parser_cocci_menhir.mly"
-                                     (_2)
-# 28198 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34832 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34837 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let r = r0 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 34850 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 34856 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34864 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34870 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28206,25 +34878,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r0;
+                MenhirLib.EngineTypes.startp = _startpos_r0_;
+                MenhirLib.EngineTypes.endp = _endpos_r0_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_dots = 
-# 1642 "parser_cocci_menhir.mly"
-                                     ((Ast0.wrap(Ast0.Exp(_1)))::_2)
-# 28228 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34912 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34917 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let r0 : (
+# 51 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34922 "parser_cocci_menhir.ml"
+        ) = Obj.magic r0 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let r = r0 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 34940 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 523 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
+# 34946 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 34954 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 34960 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28236,25 +34968,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_dots = 
-# 1643 "parser_cocci_menhir.mly"
-                                          (_1@_2)
-# 28258 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 34992 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 469 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
+# 35004 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 35010 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35018 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35024 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28266,23 +35032,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_dots_init = 
-# 1631 "parser_cocci_menhir.mly"
-                                     (_2)
-# 28286 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35056 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 471 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
+# 35068 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 35074 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35082 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35088 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28294,25 +35096,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_dots_init = 
-# 1632 "parser_cocci_menhir.mly"
-                                     ((Ast0.wrap(Ast0.Exp(_1)))::_2)
-# 28316 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35120 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 473 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
+# 35132 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 35138 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35146 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35152 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28324,42 +35160,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_dots_init = 
-# 1633 "parser_cocci_menhir.mly"
-                                          (_1@_2)
-# 28346 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_toplevel_after_exp = 
-# 1636 "parser_cocci_menhir.mly"
-                                     ([])
-# 28363 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 35184 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 475 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
+# 35197 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 35203 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35211 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35217 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28371,42 +35225,80 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.startp = _startpos__3_;
+              MenhirLib.EngineTypes.endp = _endpos__3_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = r00;
+                MenhirLib.EngineTypes.startp = _startpos_r00_;
+                MenhirLib.EngineTypes.endp = _endpos_r00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.state = _menhir_s;
+                  MenhirLib.EngineTypes.semv = x0;
+                  MenhirLib.EngineTypes.startp = _startpos_x0_;
+                  MenhirLib.EngineTypes.endp = _endpos_x0_;
+                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  };
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_exp = 
-# 1637 "parser_cocci_menhir.mly"
-                                     (_1::_2)
-# 28393 "parser_cocci_menhir.ml"
-         in
-        _menhir_env.MenhirLib.EngineTypes.stack <- {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-          });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
-        let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
-        let _endpos = _startpos in
-        let _v : 'tv_toplevel_after_stm = 
-# 1646 "parser_cocci_menhir.mly"
-                                     ([])
-# 28410 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 35258 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let r00 : (
+# 47 "parser_cocci_menhir.mly"
+      (string)
+# 35263 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let r0 = r00 in
+          let ty =
+            let p = p0 in
+            let r = r0 in
+            
+# 478 "parser_cocci_menhir.mly"
+    ( let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) )
+# 35282 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 35288 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35296 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35302 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28418,25 +35310,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_stm = 
-# 1647 "parser_cocci_menhir.mly"
-                                     (_1::_2)
-# 28440 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35334 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 485 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) )
+# 35346 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 35352 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35360 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35366 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28448,25 +35374,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty200;
+            MenhirLib.EngineTypes.startp = _startpos_ty200_;
+            MenhirLib.EngineTypes.endp = _endpos_ty200_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = ty100;
+              MenhirLib.EngineTypes.startp = _startpos_ty100_;
+              MenhirLib.EngineTypes.endp = _endpos_ty100_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_after_stm = 
-# 1648 "parser_cocci_menhir.mly"
-                                     (_1@_2)
-# 28470 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty200 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35403 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty200 in
+        let ty100 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35408 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty100 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty20 = ty200 in
+          let ty10 = ty100 in
+          let ty =
+            let ty2 = ty20 in
+            let ty1 = ty10 in
+            
+# 487 "parser_cocci_menhir.mly"
+    ( Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
+# 35425 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 524 "parser_cocci_menhir.mly"
+                    ( ty )
+# 35431 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35439 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35445 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28478,25 +35453,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in
-        let _1 : 'tv_stm_dots = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
-# 1626 "parser_cocci_menhir.mly"
-                                     ( _1::_2 )
-# 28500 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35477 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 495 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) )
+# 35489 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 35495 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35503 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35509 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28508,25 +35517,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
-# 1627 "parser_cocci_menhir.mly"
-                                     ( (Ast0.wrap(Ast0.Exp(_1)))::_2 )
-# 28530 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35541 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 497 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) )
+# 35553 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 35559 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35567 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35573 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28538,25 +35581,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = ty00;
+            MenhirLib.EngineTypes.startp = _startpos_ty00_;
+            MenhirLib.EngineTypes.endp = _endpos_ty00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
-# 1628 "parser_cocci_menhir.mly"
-                                          ( _1@_2 )
-# 28560 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let ty00 : (
+# 49 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35605 "parser_cocci_menhir.ml"
+        ) = Obj.magic ty00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let ty0 = ty00 in
+          let ty =
+            let ty = ty0 in
+            
+# 499 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) )
+# 35617 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 35623 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35631 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35637 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28568,44 +35645,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = w0;
-            MenhirLib.EngineTypes.startp = _startpos_w0_;
-            MenhirLib.EngineTypes.endp = _endpos_w0_;
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.state = _menhir_s;
-              MenhirLib.EngineTypes.semv = a0;
-              MenhirLib.EngineTypes.startp = _startpos_a0_;
-              MenhirLib.EngineTypes.endp = _endpos_a0_;
-              MenhirLib.EngineTypes.next = _menhir_stack;
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
+                };
               };
             };
           } = _menhir_stack in
-        let b : 'tv_toplevel_after_dots_init = Obj.magic b in
-        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
-        let a0 : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 28593 "parser_cocci_menhir.ml"
-        ) = Obj.magic a0 in
-        let _startpos = _startpos_a0_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
-          let w = w0 in
-          let a = a0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : (
+# 50 "parser_cocci_menhir.mly"
+      (Data.clt)
+# 35675 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 501 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) )
+# 35689 "parser_cocci_menhir.ml"
+            
+          in
           
-# 899 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) )
-# 28603 "parser_cocci_menhir.ml"
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 35695 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35703 "parser_cocci_menhir.ml"
           
         in
         
-# 1619 "parser_cocci_menhir.mly"
-                                             ( a::b )
-# 28609 "parser_cocci_menhir.ml"
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35709 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28617,63 +35717,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = c0;
-            MenhirLib.EngineTypes.startp = _startpos_c0_;
-            MenhirLib.EngineTypes.endp = _endpos_c0_;
+            MenhirLib.EngineTypes.semv = i00;
+            MenhirLib.EngineTypes.startp = _startpos_i00_;
+            MenhirLib.EngineTypes.endp = _endpos_i00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = b0;
-              MenhirLib.EngineTypes.startp = _startpos_b0_;
-              MenhirLib.EngineTypes.endp = _endpos_b0_;
+              MenhirLib.EngineTypes.semv = s00;
+              MenhirLib.EngineTypes.startp = _startpos_s00_;
+              MenhirLib.EngineTypes.endp = _endpos_s00_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = w0;
-                MenhirLib.EngineTypes.startp = _startpos_w0_;
-                MenhirLib.EngineTypes.endp = _endpos_w0_;
-                MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = a0;
-                  MenhirLib.EngineTypes.startp = _startpos_a0_;
-                  MenhirLib.EngineTypes.endp = _endpos_a0_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
-                  };
+                MenhirLib.EngineTypes.state = _menhir_s;
+                MenhirLib.EngineTypes.semv = x0;
+                MenhirLib.EngineTypes.startp = _startpos_x0_;
+                MenhirLib.EngineTypes.endp = _endpos_x0_;
+                MenhirLib.EngineTypes.next = _menhir_stack;
                 };
               };
             };
           } = _menhir_stack in
-        let b : 'tv_toplevel_after_dots_init = Obj.magic b in
-        let c0 : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 28651 "parser_cocci_menhir.ml"
-        ) = Obj.magic c0 in
-        let b0 : 'tv_nest_start = Obj.magic b0 in
-        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
-        let a0 : (
-# 73 "parser_cocci_menhir.mly"
-       (Data.clt)
-# 28658 "parser_cocci_menhir.ml"
-        ) = Obj.magic a0 in
-        let _startpos = _startpos_a0_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
-          let c = c0 in
-          let b = b0 in
-          let w = w0 in
-          let a = a0 in
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let i00 : 'tv_ident = Obj.magic i00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let i0 = i00 in
+          let s0 = s00 in
+          let ty =
+            let i = i0 in
+            let s = s0 in
+            
+# 503 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) )
+# 35757 "parser_cocci_menhir.ml"
+            
+          in
           
-# 903 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b,
-                         P.clt2mcode "...>" c, List.concat w, false)) )
-# 28671 "parser_cocci_menhir.ml"
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 35763 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35771 "parser_cocci_menhir.ml"
           
         in
         
-# 1620 "parser_cocci_menhir.mly"
-                                              ( a::b )
-# 28677 "parser_cocci_menhir.ml"
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35777 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28685,63 +35785,98 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = b;
-          MenhirLib.EngineTypes.startp = _startpos_b_;
-          MenhirLib.EngineTypes.endp = _endpos_b_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = c0;
-            MenhirLib.EngineTypes.startp = _startpos_c0_;
-            MenhirLib.EngineTypes.endp = _endpos_c0_;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = b0;
-              MenhirLib.EngineTypes.startp = _startpos_b0_;
-              MenhirLib.EngineTypes.endp = _endpos_b0_;
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.semv = w0;
-                MenhirLib.EngineTypes.startp = _startpos_w0_;
-                MenhirLib.EngineTypes.endp = _endpos_w0_;
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
                 MenhirLib.EngineTypes.next = {
-                  MenhirLib.EngineTypes.state = _menhir_s;
-                  MenhirLib.EngineTypes.semv = a0;
-                  MenhirLib.EngineTypes.startp = _startpos_a0_;
-                  MenhirLib.EngineTypes.endp = _endpos_a0_;
-                  MenhirLib.EngineTypes.next = _menhir_stack;
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
                   };
                 };
               };
             };
           } = _menhir_stack in
-        let b : 'tv_toplevel_after_dots_init = Obj.magic b in
-        let c0 : (
-# 73 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28719 "parser_cocci_menhir.ml"
-        ) = Obj.magic c0 in
-        let b0 : 'tv_nest_start = Obj.magic b0 in
-        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
-        let a0 : (
-# 73 "parser_cocci_menhir.mly"
+# 35824 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28726 "parser_cocci_menhir.ml"
-        ) = Obj.magic a0 in
-        let _startpos = _startpos_a0_ in
-        let _endpos = _endpos_b_ in
-        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
-          let c = c0 in
-          let b = b0 in
-          let w = w0 in
-          let a = a0 in
+# 35830 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            let i =
+              
+# 39 "standard.mly"
+    ( None )
+# 35850 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 35860 "parser_cocci_menhir.ml"
+            
+          in
           
-# 906 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b,
-                         P.clt2mcode "...+>" c, List.concat w, true)) )
-# 28739 "parser_cocci_menhir.ml"
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 35866 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35874 "parser_cocci_menhir.ml"
           
         in
         
-# 1620 "parser_cocci_menhir.mly"
-                                              ( a::b )
-# 28745 "parser_cocci_menhir.ml"
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35880 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28753,57 +35888,107 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = c0;
-          MenhirLib.EngineTypes.startp = _startpos_c0_;
-          MenhirLib.EngineTypes.endp = _endpos_c0_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b0;
-            MenhirLib.EngineTypes.startp = _startpos_b0_;
-            MenhirLib.EngineTypes.endp = _endpos_b0_;
-            MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = w0;
-              MenhirLib.EngineTypes.startp = _startpos_w0_;
-              MenhirLib.EngineTypes.endp = _endpos_w0_;
-              MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = a0;
-                MenhirLib.EngineTypes.startp = _startpos_a0_;
-                MenhirLib.EngineTypes.endp = _endpos_a0_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
+              MenhirLib.EngineTypes.next = {
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = x000;
+                  MenhirLib.EngineTypes.startp = _startpos_x000_;
+                  MenhirLib.EngineTypes.endp = _endpos_x000_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.semv = s00;
+                    MenhirLib.EngineTypes.startp = _startpos_s00_;
+                    MenhirLib.EngineTypes.endp = _endpos_s00_;
+                    MenhirLib.EngineTypes.next = {
+                      MenhirLib.EngineTypes.state = _menhir_s;
+                      MenhirLib.EngineTypes.semv = x0;
+                      MenhirLib.EngineTypes.startp = _startpos_x0_;
+                      MenhirLib.EngineTypes.endp = _endpos_x0_;
+                      MenhirLib.EngineTypes.next = _menhir_stack;
+                      };
+                    };
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let c0 : (
-# 73 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28781 "parser_cocci_menhir.ml"
-        ) = Obj.magic c0 in
-        let b0 : 'tv_nest_start = Obj.magic b0 in
-        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
-        let a0 : (
-# 73 "parser_cocci_menhir.mly"
+# 35932 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28788 "parser_cocci_menhir.ml"
-        ) = Obj.magic a0 in
-        let _startpos = _startpos_a0_ in
-        let _endpos = _endpos_c0_ in
-        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
-          let c = c0 in
-          let b = b0 in
-          let w = w0 in
-          let a = a0 in
+# 35938 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let x000 : 'tv_ident = Obj.magic x000 in
+        let s00 : 'tv_struct_or_union = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let x00 = x000 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let x0 = x00 in
+            let s = s0 in
+            let i =
+              let x = x0 in
+              
+# 41 "standard.mly"
+    ( Some x )
+# 35962 "parser_cocci_menhir.ml"
+              
+            in
+            
+# 506 "parser_cocci_menhir.mly"
+    ( (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) )
+# 35972 "parser_cocci_menhir.ml"
+            
+          in
           
-# 903 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b,
-                         P.clt2mcode "...>" c, List.concat w, false)) )
-# 28801 "parser_cocci_menhir.ml"
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 35978 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 35986 "parser_cocci_menhir.ml"
           
         in
         
-# 1621 "parser_cocci_menhir.mly"
-                                       ( [a] )
-# 28807 "parser_cocci_menhir.ml"
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 35992 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28815,57 +36000,93 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = c0;
-          MenhirLib.EngineTypes.startp = _startpos_c0_;
-          MenhirLib.EngineTypes.endp = _endpos_c0_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.semv = b0;
-            MenhirLib.EngineTypes.startp = _startpos_b0_;
-            MenhirLib.EngineTypes.endp = _endpos_b0_;
+            MenhirLib.EngineTypes.semv = r00;
+            MenhirLib.EngineTypes.startp = _startpos_r00_;
+            MenhirLib.EngineTypes.endp = _endpos_r00_;
             MenhirLib.EngineTypes.next = {
-              MenhirLib.EngineTypes.semv = w0;
-              MenhirLib.EngineTypes.startp = _startpos_w0_;
-              MenhirLib.EngineTypes.endp = _endpos_w0_;
+              MenhirLib.EngineTypes.semv = d00;
+              MenhirLib.EngineTypes.startp = _startpos_d00_;
+              MenhirLib.EngineTypes.endp = _endpos_d00_;
               MenhirLib.EngineTypes.next = {
-                MenhirLib.EngineTypes.state = _menhir_s;
-                MenhirLib.EngineTypes.semv = a0;
-                MenhirLib.EngineTypes.startp = _startpos_a0_;
-                MenhirLib.EngineTypes.endp = _endpos_a0_;
-                MenhirLib.EngineTypes.next = _menhir_stack;
+                MenhirLib.EngineTypes.semv = l00;
+                MenhirLib.EngineTypes.startp = _startpos_l00_;
+                MenhirLib.EngineTypes.endp = _endpos_l00_;
+                MenhirLib.EngineTypes.next = {
+                  MenhirLib.EngineTypes.semv = s00;
+                  MenhirLib.EngineTypes.startp = _startpos_s00_;
+                  MenhirLib.EngineTypes.endp = _endpos_s00_;
+                  MenhirLib.EngineTypes.next = {
+                    MenhirLib.EngineTypes.state = _menhir_s;
+                    MenhirLib.EngineTypes.semv = x0;
+                    MenhirLib.EngineTypes.startp = _startpos_x0_;
+                    MenhirLib.EngineTypes.endp = _endpos_x0_;
+                    MenhirLib.EngineTypes.next = _menhir_stack;
+                    };
+                  };
                 };
               };
             };
           } = _menhir_stack in
-        let c0 : (
-# 73 "parser_cocci_menhir.mly"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let r00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28843 "parser_cocci_menhir.ml"
-        ) = Obj.magic c0 in
-        let b0 : 'tv_nest_start = Obj.magic b0 in
-        let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
-        let a0 : (
-# 73 "parser_cocci_menhir.mly"
+# 36039 "parser_cocci_menhir.ml"
+        ) = Obj.magic r00 in
+        let d00 : 'tv_struct_decl_list = Obj.magic d00 in
+        let l00 : (
+# 101 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28850 "parser_cocci_menhir.ml"
-        ) = Obj.magic a0 in
-        let _startpos = _startpos_a0_ in
-        let _endpos = _endpos_c0_ in
-        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a =
-          let c = c0 in
-          let b = b0 in
-          let w = w0 in
-          let a = a0 in
+# 36045 "parser_cocci_menhir.ml"
+        ) = Obj.magic l00 in
+        let s00 : (
+# 64 "parser_cocci_menhir.mly"
+       (Parse_aux.info)
+# 36050 "parser_cocci_menhir.ml"
+        ) = Obj.magic s00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let r0 = r00 in
+          let d0 = d00 in
+          let l0 = l00 in
+          let s0 = s00 in
+          let ty =
+            let r = r0 in
+            let d = d0 in
+            let l = l0 in
+            let s = s0 in
+            
+# 512 "parser_cocci_menhir.mly"
+    ( let (nm,pure,clt) = s in
+    let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
+    Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) )
+# 36070 "parser_cocci_menhir.ml"
+            
+          in
           
-# 906 "parser_cocci_menhir.mly"
-    ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b,
-                         P.clt2mcode "...+>" c, List.concat w, true)) )
-# 28863 "parser_cocci_menhir.ml"
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 36076 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 36084 "parser_cocci_menhir.ml"
           
         in
         
-# 1621 "parser_cocci_menhir.mly"
-                                       ( [a] )
-# 28869 "parser_cocci_menhir.ml"
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 36090 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28877,25 +36098,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = m;
+          MenhirLib.EngineTypes.startp = _startpos_m_;
+          MenhirLib.EngineTypes.endp = _endpos_m_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = p00;
+            MenhirLib.EngineTypes.startp = _startpos_p00_;
+            MenhirLib.EngineTypes.endp = _endpos_p00_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = x0;
+              MenhirLib.EngineTypes.startp = _startpos_x0_;
+              MenhirLib.EngineTypes.endp = _endpos_x0_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in
-        let _1 : 'tv_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = 
-# 1622 "parser_cocci_menhir.mly"
-                                     ( (Ast0.wrap(Ast0.Exp(_1)))::_2 )
-# 28899 "parser_cocci_menhir.ml"
+        let m : 'tv_list_TMul_ = Obj.magic m in
+        let p00 : (
+# 59 "parser_cocci_menhir.mly"
+       (string * Data.clt)
+# 36122 "parser_cocci_menhir.ml"
+        ) = Obj.magic p00 in
+        let x0 : 'tv_const_vol = Obj.magic x0 in
+        let _startpos = _startpos_x0_ in
+        let _endpos = _endpos_m_ in
+        let _v : 'tv_typedef_ctype = let ty =
+          let p0 = p00 in
+          let ty =
+            let p = p0 in
+            
+# 516 "parser_cocci_menhir.mly"
+    ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) )
+# 36134 "parser_cocci_menhir.ml"
+            
+          in
+          
+# 525 "parser_cocci_menhir.mly"
+                        ( ty )
+# 36140 "parser_cocci_menhir.ml"
+          
+        in
+        let cv =
+          let x = x0 in
+          
+# 41 "standard.mly"
+    ( Some x )
+# 36148 "parser_cocci_menhir.ml"
+          
+        in
+        
+# 542 "parser_cocci_menhir.mly"
+    ( P.pointerify (P.make_cv cv ty) m )
+# 36154 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28907,25 +36162,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let {
-          MenhirLib.EngineTypes.semv = _2;
-          MenhirLib.EngineTypes.startp = _startpos__2_;
-          MenhirLib.EngineTypes.endp = _endpos__2_;
+          MenhirLib.EngineTypes.semv = rp;
+          MenhirLib.EngineTypes.startp = _startpos_rp_;
+          MenhirLib.EngineTypes.endp = _endpos_rp_;
           MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = _1;
-            MenhirLib.EngineTypes.startp = _startpos__1_;
-            MenhirLib.EngineTypes.endp = _endpos__1_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
+            MenhirLib.EngineTypes.semv = t;
+            MenhirLib.EngineTypes.startp = _startpos_t_;
+            MenhirLib.EngineTypes.endp = _endpos_t_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.semv = lp;
+              MenhirLib.EngineTypes.startp = _startpos_lp_;
+              MenhirLib.EngineTypes.endp = _endpos_lp_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
             };
           } = _menhir_stack in
-        let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in
-        let _1 : 'tv_decl_statement_expr = Obj.magic _1 in
-        let _startpos = _startpos__1_ in
-        let _endpos = _endpos__2_ in
-        let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = 
-# 1623 "parser_cocci_menhir.mly"
-                                          ( _1@_2 )
-# 28929 "parser_cocci_menhir.ml"
+        let rp : (
+# 77 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 36185 "parser_cocci_menhir.ml"
+        ) = Obj.magic rp in
+        let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in
+        let lp : (
+# 76 "parser_cocci_menhir.mly"
+       (Data.clt)
+# 36191 "parser_cocci_menhir.ml"
+        ) = Obj.magic lp in
+        let _startpos = _startpos_lp_ in
+        let _endpos = _endpos_rp_ in
+        let _v : 'tv_typedef_ctype = 
+# 544 "parser_cocci_menhir.mly"
+    ( let (mids,code) = t in
+      Ast0.wrap
+       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
+# 36200 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28947,9 +36218,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_typedef_ident = 
-# 1531 "parser_cocci_menhir.mly"
+# 1538 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.TypeName(P.id2mcode _1)) )
-# 28953 "parser_cocci_menhir.ml"
+# 36224 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28970,15 +36241,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 64 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 28974 "parser_cocci_menhir.ml"
+# 36245 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_typedef_ident = 
-# 1533 "parser_cocci_menhir.mly"
+# 1540 "parser_cocci_menhir.mly"
          ( let (nm,pure,clt) = _1 in
         Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
-# 28982 "parser_cocci_menhir.ml"
+# 36253 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29000,9 +36271,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1299 "parser_cocci_menhir.mly"
+# 1276 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 29006 "parser_cocci_menhir.ml"
+# 36277 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29029,14 +36300,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29033 "parser_cocci_menhir.ml"
+# 36304 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1301 "parser_cocci_menhir.mly"
+# 1278 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 29040 "parser_cocci_menhir.ml"
+# 36311 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29063,14 +36334,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29067 "parser_cocci_menhir.ml"
+# 36338 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1303 "parser_cocci_menhir.mly"
+# 1280 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 29074 "parser_cocci_menhir.ml"
+# 36345 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29098,9 +36369,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1305 "parser_cocci_menhir.mly"
+# 1282 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29104 "parser_cocci_menhir.ml"
+# 36375 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29127,15 +36398,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29131 "parser_cocci_menhir.ml"
+# 36402 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1307 "parser_cocci_menhir.mly"
+# 1284 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29139 "parser_cocci_menhir.ml"
+# 36410 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29162,14 +36433,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29166 "parser_cocci_menhir.ml"
+# 36437 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1310 "parser_cocci_menhir.mly"
+# 1287 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 29173 "parser_cocci_menhir.ml"
+# 36444 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29205,27 +36476,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let rp : (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29209 "parser_cocci_menhir.ml"
+# 36480 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29215 "parser_cocci_menhir.ml"
+# 36486 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29220 "parser_cocci_menhir.ml"
+# 36491 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1312 "parser_cocci_menhir.mly"
+# 1289 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 29229 "parser_cocci_menhir.ml"
+# 36500 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29247,9 +36518,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1299 "parser_cocci_menhir.mly"
+# 1276 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 29253 "parser_cocci_menhir.ml"
+# 36524 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29276,14 +36547,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29280 "parser_cocci_menhir.ml"
+# 36551 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1301 "parser_cocci_menhir.mly"
+# 1278 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 29287 "parser_cocci_menhir.ml"
+# 36558 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29310,14 +36581,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29314 "parser_cocci_menhir.ml"
+# 36585 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1303 "parser_cocci_menhir.mly"
+# 1280 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 29321 "parser_cocci_menhir.ml"
+# 36592 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29345,9 +36616,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1305 "parser_cocci_menhir.mly"
+# 1282 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29351 "parser_cocci_menhir.ml"
+# 36622 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29374,15 +36645,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29378 "parser_cocci_menhir.ml"
+# 36649 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1307 "parser_cocci_menhir.mly"
+# 1284 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29386 "parser_cocci_menhir.ml"
+# 36657 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29409,14 +36680,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29413 "parser_cocci_menhir.ml"
+# 36684 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1310 "parser_cocci_menhir.mly"
+# 1287 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 29420 "parser_cocci_menhir.ml"
+# 36691 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29452,27 +36723,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let rp : (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29456 "parser_cocci_menhir.ml"
+# 36727 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29462 "parser_cocci_menhir.ml"
+# 36733 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29467 "parser_cocci_menhir.ml"
+# 36738 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1312 "parser_cocci_menhir.mly"
+# 1289 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 29476 "parser_cocci_menhir.ml"
+# 36747 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29494,9 +36765,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1299 "parser_cocci_menhir.mly"
+# 1276 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 29500 "parser_cocci_menhir.ml"
+# 36771 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29523,14 +36794,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29527 "parser_cocci_menhir.ml"
+# 36798 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1301 "parser_cocci_menhir.mly"
+# 1278 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 29534 "parser_cocci_menhir.ml"
+# 36805 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29557,14 +36828,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29561 "parser_cocci_menhir.ml"
+# 36832 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1303 "parser_cocci_menhir.mly"
+# 1280 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 29568 "parser_cocci_menhir.ml"
+# 36839 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29592,9 +36863,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1305 "parser_cocci_menhir.mly"
+# 1282 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29598 "parser_cocci_menhir.ml"
+# 36869 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29621,15 +36892,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29625 "parser_cocci_menhir.ml"
+# 36896 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1307 "parser_cocci_menhir.mly"
+# 1284 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29633 "parser_cocci_menhir.ml"
+# 36904 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29656,14 +36927,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29660 "parser_cocci_menhir.ml"
+# 36931 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1310 "parser_cocci_menhir.mly"
+# 1287 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 29667 "parser_cocci_menhir.ml"
+# 36938 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29699,27 +36970,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let rp : (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29703 "parser_cocci_menhir.ml"
+# 36974 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29709 "parser_cocci_menhir.ml"
+# 36980 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29714 "parser_cocci_menhir.ml"
+# 36985 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1312 "parser_cocci_menhir.mly"
+# 1289 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 29723 "parser_cocci_menhir.ml"
+# 36994 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29741,9 +37012,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1299 "parser_cocci_menhir.mly"
+# 1276 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 29747 "parser_cocci_menhir.ml"
+# 37018 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29770,14 +37041,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29774 "parser_cocci_menhir.ml"
+# 37045 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1301 "parser_cocci_menhir.mly"
+# 1278 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 29781 "parser_cocci_menhir.ml"
+# 37052 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29804,14 +37075,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 85 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29808 "parser_cocci_menhir.ml"
+# 37079 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1303 "parser_cocci_menhir.mly"
+# 1280 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 29815 "parser_cocci_menhir.ml"
+# 37086 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29839,9 +37110,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1305 "parser_cocci_menhir.mly"
+# 1282 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29845 "parser_cocci_menhir.ml"
+# 37116 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29868,15 +37139,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29872 "parser_cocci_menhir.ml"
+# 37143 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1307 "parser_cocci_menhir.mly"
+# 1284 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 29880 "parser_cocci_menhir.ml"
+# 37151 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29903,14 +37174,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29907 "parser_cocci_menhir.ml"
+# 37178 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1310 "parser_cocci_menhir.mly"
+# 1287 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 29914 "parser_cocci_menhir.ml"
+# 37185 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29946,27 +37217,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let rp : (
 # 77 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29950 "parser_cocci_menhir.ml"
+# 37221 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
 # 76 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29956 "parser_cocci_menhir.ml"
+# 37227 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
 # 58 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29961 "parser_cocci_menhir.ml"
+# 37232 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1312 "parser_cocci_menhir.mly"
+# 1289 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 29970 "parser_cocci_menhir.ml"
+# 37241 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29987,14 +37258,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 93 "parser_cocci_menhir.mly"
        (Data.clt)
-# 29991 "parser_cocci_menhir.ml"
+# 37262 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1316 "parser_cocci_menhir.mly"
+# 1293 "parser_cocci_menhir.mly"
                   ( P.clt2mcode Ast.GetRef _1 )
-# 29998 "parser_cocci_menhir.ml"
+# 37269 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30015,14 +37286,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30019 "parser_cocci_menhir.ml"
+# 37290 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1317 "parser_cocci_menhir.mly"
+# 1294 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.DeRef _1 )
-# 30026 "parser_cocci_menhir.ml"
+# 37297 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30043,14 +37314,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 98 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30047 "parser_cocci_menhir.ml"
+# 37318 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1318 "parser_cocci_menhir.mly"
+# 1295 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.UnPlus _1 )
-# 30054 "parser_cocci_menhir.ml"
+# 37325 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30071,14 +37342,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 98 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30075 "parser_cocci_menhir.ml"
+# 37346 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1319 "parser_cocci_menhir.mly"
+# 1296 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.UnMinus _1 )
-# 30082 "parser_cocci_menhir.ml"
+# 37353 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30099,14 +37370,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _1 : (
 # 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30103 "parser_cocci_menhir.ml"
+# 37374 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1320 "parser_cocci_menhir.mly"
+# 1297 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.Tilde _1 )
-# 30110 "parser_cocci_menhir.ml"
+# 37381 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30134,9 +37405,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_when_start = 
-# 1745 "parser_cocci_menhir.mly"
+# 1758 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.DOTS((Ast0.wrap(Ast0.Exp(_1)))::_2)) )
-# 30140 "parser_cocci_menhir.ml"
+# 37411 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30164,9 +37435,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_when_start = 
-# 1747 "parser_cocci_menhir.mly"
+# 1760 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.DOTS(_1@_2)) )
-# 30170 "parser_cocci_menhir.ml"
+# 37441 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30188,9 +37459,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_w_ in
         let _endpos = _endpos_w_ in
         let _v : 'tv_whenppdecs = 
-# 910 "parser_cocci_menhir.mly"
+# 887 "parser_cocci_menhir.mly"
     ( w )
-# 30194 "parser_cocci_menhir.ml"
+# 37465 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30224,9 +37495,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 1813 "parser_cocci_menhir.mly"
+# 1826 "parser_cocci_menhir.mly"
                                          ( [Ast0.WhenNot w] )
-# 30230 "parser_cocci_menhir.ml"
+# 37501 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30260,9 +37531,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 1814 "parser_cocci_menhir.mly"
+# 1827 "parser_cocci_menhir.mly"
                                              ( [Ast0.WhenAlways w] )
-# 30266 "parser_cocci_menhir.ml"
+# 37537 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30292,9 +37563,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 1816 "parser_cocci_menhir.mly"
+# 1829 "parser_cocci_menhir.mly"
       ( List.map (function x -> Ast0.WhenModifier(x)) _2 )
-# 30298 "parser_cocci_menhir.ml"
+# 37569 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30328,9 +37599,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 1817 "parser_cocci_menhir.mly"
+# 1830 "parser_cocci_menhir.mly"
                                         ( [Ast0.WhenNotTrue e] )
-# 30334 "parser_cocci_menhir.ml"
+# 37605 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30364,9 +37635,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 1818 "parser_cocci_menhir.mly"
+# 1831 "parser_cocci_menhir.mly"
                                          ( [Ast0.WhenNotFalse e] )
-# 30370 "parser_cocci_menhir.ml"
+# 37641 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30387,106 +37658,106 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
 
 let rec script_meta_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1549 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1777 lexer lexbuf) : (
 # 159 "parser_cocci_menhir.mly"
        (string * (string * string))
-# 30394 "parser_cocci_menhir.ml"
+# 37665 "parser_cocci_menhir.ml"
     ))
 
 and rule_name =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1477 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1707 lexer lexbuf) : (
 # 153 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30402 "parser_cocci_menhir.ml"
+# 37673 "parser_cocci_menhir.ml"
     ))
 
 and reinit =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1475 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1705 lexer lexbuf) : (
 # 131 "parser_cocci_menhir.mly"
       (unit)
-# 30410 "parser_cocci_menhir.ml"
+# 37681 "parser_cocci_menhir.ml"
     ))
 
 and plus_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1439 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1669 lexer lexbuf) : (
 # 140 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 30418 "parser_cocci_menhir.ml"
+# 37689 "parser_cocci_menhir.ml"
     ))
 
 and plus_exp_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1430 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1661 lexer lexbuf) : (
 # 143 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 30426 "parser_cocci_menhir.ml"
+# 37697 "parser_cocci_menhir.ml"
     ))
 
 and never_used =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1424 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1655 lexer lexbuf) : (
 # 168 "parser_cocci_menhir.mly"
       (unit)
-# 30434 "parser_cocci_menhir.ml"
+# 37705 "parser_cocci_menhir.ml"
     ))
 
 and minus_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1338 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1575 lexer lexbuf) : (
 # 134 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 30442 "parser_cocci_menhir.ml"
+# 37713 "parser_cocci_menhir.ml"
     ))
 
 and minus_exp_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1314 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1563 lexer lexbuf) : (
 # 137 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 30450 "parser_cocci_menhir.ml"
+# 37721 "parser_cocci_menhir.ml"
     ))
 
 and meta_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1311 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1560 lexer lexbuf) : (
 # 157 "parser_cocci_menhir.mly"
       ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
-# 30458 "parser_cocci_menhir.ml"
+# 37729 "parser_cocci_menhir.ml"
     ))
 
 and iso_rule_name =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1307 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1556 lexer lexbuf) : (
 # 149 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30466 "parser_cocci_menhir.ml"
+# 37737 "parser_cocci_menhir.ml"
     ))
 
 and iso_meta_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1104 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 1325 lexer lexbuf) : (
 # 165 "parser_cocci_menhir.mly"
       ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
-# 30474 "parser_cocci_menhir.ml"
+# 37745 "parser_cocci_menhir.ml"
     ))
 
 and iso_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 10 lexer lexbuf) : (
+    (Obj.magic (MenhirInterpreter.entry 11 lexer lexbuf) : (
 # 162 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
-# 30482 "parser_cocci_menhir.ml"
+# 37753 "parser_cocci_menhir.ml"
     ))
 
 and include_main =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : (
 # 146 "parser_cocci_menhir.mly"
-      ((string,string) Common.either list)
-# 30490 "parser_cocci_menhir.ml"
+      (Data.incl_iso list)
+# 37761 "parser_cocci_menhir.ml"
     ))
 
 
index 2aef9fb..4564263 100644 (file)
@@ -46,7 +46,6 @@ type token =
   | TScript
   | TRuleName of (string)
   | TRightIso
-  | TReverse
   | TReturn of (Data.clt)
   | TPure
   | TPtrOp of (Data.clt)
@@ -152,6 +151,7 @@ type token =
   | TDeclarerId of (string * Data.clt)
   | TDeclarer
   | TDec of (Data.clt)
+  | TCppConcatOp
   | TContinue of (Data.clt)
   | TContext
   | TConstant
@@ -187,4 +187,4 @@ val meta_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ((Ast_cocci.metavar,
 val iso_rule_name: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_cocci.rulename)
 val iso_meta_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
 val iso_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast0_cocci.anything list list)
-val include_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ((string,string) Common.either list)
\ No newline at end of file
+val include_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Data.incl_iso list)
\ No newline at end of file
index 23c1c1e..b475b45 100644 (file)
@@ -43,7 +43,7 @@ module P = Parse_aux
 %token TPure TContext TGenerated
 %token TTypedef TDeclarer TIterator TName TPosition TPosAny
 %token TUsing TDisable TExtends TDepends TOn TEver TNever TExists TForall
-%token TScript TInitialize TFinalize TReverse TNothing
+%token TScript TInitialize TFinalize TNothing
 %token<string> TRuleName
 
 %token<Data.clt> Tchar Tshort Tint Tdouble Tfloat Tlong
@@ -103,7 +103,7 @@ module P = Parse_aux
 
 %token <Data.clt> TPtrOp
 
-%token TMPtVirg
+%token TMPtVirg TCppConcatOp
 %token <Data.clt> TEq TDot TComma TPtVirg
 %token <Ast_cocci.assignOp * Data.clt> TAssign
 
@@ -143,7 +143,7 @@ module P = Parse_aux
 %type <Ast0_cocci.rule> plus_exp_main
 
 %start include_main
-%type <(string,string) Common.either list> include_main
+%type <Data.incl_iso list> include_main
 
 %start iso_rule_name
 %type <Ast_cocci.rulename>
@@ -242,7 +242,6 @@ disable:
 exists:
   TExists { Ast.Exists }
 | TForall { Ast.Forall }
-| TReverse TForall { Ast.ReverseForall }
 |         { Ast.Undetermined }
 
 is_expression: // for more flexible parsing of top level expressions
@@ -254,8 +253,9 @@ include_main:
 | list(incl) TArobArob { $1 }
 
 incl:
-  TUsing TString      { Common.Left(P.id2name $2) }
-| TUsing TPathIsoFile { Common.Right $2 }
+  TIncludeL           { let (x,_) = $1 in Data.Include(x) }
+| TUsing TString      { Data.Iso(Common.Left(P.id2name $2)) }
+| TUsing TPathIsoFile { Data.Iso(Common.Right $2) }
 
 metadec:
   ar=arity ispure=pure
@@ -449,7 +449,7 @@ metadec:
 
 
 meta_exp_type:
-  t=ctype
+  t=typedef_ctype
     { [Ast0_cocci.ast0_type_to_type t] }
 | TOBrace t=comma_list(ctype) TCBrace m=list(TMul)
     { List.map
@@ -461,57 +461,91 @@ arity: TBang0 { Ast.UNIQUE }
      | TPlus0 { Ast.MULTI }
      | /* empty */ { Ast.NONE }
 
-generic_ctype_full:
-       q=ctype_qualif_opt ty=Tchar
-        { q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) }
-     | q=ctype_qualif_opt ty=Tshort
-        { q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])))}
-     | q=ctype_qualif_opt ty=Tint
-         { q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) }
-     | t=Tdouble
-         { Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" t])) }
-     | t=Tfloat
-         { Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" t])) }
-     | q=ctype_qualif_opt ty=Tlong
-         { q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) }
-     | q=ctype_qualif_opt ty=Tlong ty1=Tlong
-         { q (Ast0.wrap
-               (Ast0.BaseType
-                  (Ast.LongLongType,
-                     [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) }
-     | s=Tenum i=ident
-        { Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) }
-     | s=struct_or_union i=ident
-        { Ast0.wrap(Ast0.StructUnionName(s, Some i)) }
-     | s=struct_or_union i=ioption(ident)
-       l=TOBrace d=struct_decl_list r=TCBrace
-        { (if i = None && !Data.in_iso
-          then failwith "structures must be named in the iso file");
-           Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
-                                        P.clt2mcode "{" l,
-                                        d, P.clt2mcode "}" r)) }
-     | s=TMetaType l=TOBrace d=struct_decl_list r=TCBrace
-        { let (nm,pure,clt) = s in
-        let ty =
-          Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
-        Ast0.wrap
-          (Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) }
-     | r=TRuleName TDot p=TIdent
-        { let nm = (r,P.id2name p) in
-        (* this is only possible when we are in a metavar decl.  Otherwise,
-           it will be represented already as a MetaType *)
-        let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
-        Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
-                                Ast0.Impure (*will be ignored*))) }
-     | p=TTypeId
-        { Ast0.wrap(Ast0.TypeName(P.id2mcode p)) }
-     | q=ctype_qualif_opt p=TMetaType
-        { let (nm,pure,clt) = p in
-        q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) }
-
-generic_ctype:
-       q=ctype_qualif     { q None }
-     | generic_ctype_full { $1 }
+/* ---------------------------------------------------------------------- */
+
+%inline
+signable_types:
+  ty=Tchar
+    { Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) }
+| ty=Tshort
+    { Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) }
+| ty=Tint
+    { Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) }
+| p=TMetaType
+    { let (nm,pure,clt) = p in
+      Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) }
+| r=TRuleName TDot p=TIdent
+    { let nm = (r,P.id2name p) in
+    (* this is only possible when we are in a metavar decl.  Otherwise,
+       it will be represented already as a MetaType *)
+    let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
+    Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
+                           Ast0.Impure (*will be ignored*))) }
+| ty=Tlong
+    { Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) }
+| ty1=Tlong ty2=Tlong
+    { Ast0.wrap
+       (Ast0.BaseType
+          (Ast.LongLongType,
+           [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) }
+
+%inline
+non_signable_types:
+  ty=Tvoid
+    { Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) }
+| ty=Tdouble
+    { Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) }
+| ty=Tfloat
+    { Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) }
+| s=Tenum i=ident
+    { Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) }
+| s=struct_or_union i=ident
+    { Ast0.wrap(Ast0.StructUnionName(s, Some i)) }
+| s=struct_or_union i=ioption(ident)
+    l=TOBrace d=struct_decl_list r=TCBrace
+    { (if i = None && !Data.in_iso
+    then failwith "structures must be named in the iso file");
+      Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
+                                   P.clt2mcode "{" l,
+                                   d, P.clt2mcode "}" r)) }
+| s=TMetaType l=TOBrace d=struct_decl_list r=TCBrace
+    { let (nm,pure,clt) = s in
+    let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
+    Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) }
+| p=TTypeId
+    { Ast0.wrap(Ast0.TypeName(P.id2mcode p)) }
+
+%inline
+all_basic_types:
+  r=Tsigned ty=signable_types
+    { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) }
+| r=Tunsigned ty=signable_types
+    { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) }
+| ty=signable_types { ty }
+| ty=non_signable_types { ty }
+
+ctype:
+  cv=ioption(const_vol) ty=all_basic_types m=list(TMul)
+    { P.pointerify (P.make_cv cv ty) m }
+| r=Tsigned
+    { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) }
+| r=Tunsigned
+    { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) }
+| lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0
+    { let (mids,code) = t in
+      Ast0.wrap
+       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) }
+
+/* signed, unsigned alone not allowed */
+typedef_ctype:
+  cv=ioption(const_vol) ty=all_basic_types m=list(TMul)
+    { P.pointerify (P.make_cv cv ty) m }
+| lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0
+    { let (mids,code) = t in
+      Ast0.wrap
+       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) }
+
+/* ---------------------------------------------------------------------- */
 
 struct_or_union:
        s=Tstruct { P.clt2mcode Ast.Struct s }
@@ -522,7 +556,7 @@ struct_decl:
     | t=ctype d=d_ident pv=TPtVirg
         { let (id,fn) = d in
         [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] }
-    | t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
+    | t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
        lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar pv=TPtVirg
         { let (id,fn) = d in
         let t =
@@ -550,49 +584,6 @@ continue_struct_decl_list:
 | struct_decl struct_decl_list_start { $1@$2 }
 | struct_decl                        { $1 }
 
-ctype:
-       cv=ioption(const_vol) ty=generic_ctype m=list(TMul)
-        { P.pointerify (P.make_cv cv ty) m }
-     | cv=ioption(const_vol) t=Tvoid m=nonempty_list(TMul)
-         { let ty =
-            Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          P.pointerify (P.make_cv cv ty) m }
-   | lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0
-      /* more hacks */
-    { let (mids,code) = t in
-      Ast0.wrap
-       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) }
-
-ctype_full:
-       cv=ioption(const_vol) ty=generic_ctype_full m=list(TMul)
-        { P.pointerify (P.make_cv cv ty) m }
-     | cv=ioption(const_vol) t=Tvoid m=nonempty_list(TMul)
-         { let ty =
-            Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          P.pointerify (P.make_cv cv ty) m }
-   | lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0
-      /* more hacks */
-    { let (mids,code) = t in
-      Ast0.wrap
-       (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) }
-
-
-fn_ctype: // allows metavariables
-       ty=generic_ctype m=list(TMul) { P.pointerify ty m }
-     | t=Tvoid m=list(TMul)
-         { P.pointerify
-            (Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])))
-            m }
-
-%inline ctype_qualif:
-  r=Tunsigned
-   { function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) }
-| r=Tsigned
-   { function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) }
-
-%inline ctype_qualif_opt:
-  s=ctype_qualif  { function x -> s (Some x) }
-| /* empty */   { function x -> x }
 
 /*****************************************************************************/
 
@@ -602,30 +593,30 @@ declarations, statements, and expressions for the subterms */
 minus_body:
     f=loption(filespec)
     b=loption(minus_start)
-    ew=loption(error_words)
-    { match f@b@ew with
+    /*ew=loption(error_words)*/
+    { match f@b(*@ew*) with
       [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
     | code -> Top_level.top_level code }
 
 plus_body:
     f=loption(filespec)
     b=loption(plus_start)
-    ew=loption(error_words)
-    { Top_level.top_level (f@b@ew) }
+    /*ew=loption(error_words)*/
+    { Top_level.top_level (f@b(*@ew*)) }
 
 minus_exp_body:
     f=loption(filespec)
     b=top_eexpr
-    ew=loption(error_words)
-    { match f@[b]@ew with
+    /*ew=loption(error_words)*/
+    { match f@[b](*@ew*) with
       [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
     | code -> Top_level.top_level code }
 
 plus_exp_body:
     f=loption(filespec)
     b=top_eexpr
-    ew=loption(error_words)
-    { Top_level.top_level (f@[b]@ew) }
+    /*ew=loption(error_words)*/
+    { Top_level.top_level (f@[b](*@ew*)) }
 
 filespec:
   TMinusFile TPlusFile
@@ -750,23 +741,13 @@ funproto:
                (Ast0.FunctionType(Some t,
                                   P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
              id, P.clt2mcode ";" pt)) }
-| s=ioption(storage) t=Tvoid
-  id=func_ident lp=TOPar d=decl_list(name_opt_decl) rp=TCPar pt=TPtVirg
-    { let t = Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-      Ast0.wrap
-        (Ast0.UnInit
-          (s,
-           Ast0.wrap
-             (Ast0.FunctionType(Some t,
-                                P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)),
-           id, P.clt2mcode ";" pt)) }
-
 
 fundecl:
   f=fninfo
   TFunDecl i=func_ident lp=TOPar d=decl_list(decl) rp=TCPar
   lb=TOBrace b=fun_start rb=TCBrace
-      { Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()),
+      { P.verify_parameter_declarations (Ast0.undots d);
+       Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()),
                               f, i,
                               P.clt2mcode "(" lp, d,
                               P.clt2mcode ")" rp,
@@ -781,7 +762,7 @@ fninfo:
          List.find (function Ast0.FStorage(_) -> true | _ -> false) $2 in
        raise (Semantic_cocci.Semantic "duplicate storage")
       with Not_found -> (Ast0.FStorage($1))::$2 }
-  | t=fn_ctype r=fninfo_nt { (Ast0.FType(t))::r }
+  | t=ctype r=fninfo_nt { (Ast0.FType(t))::r }
   | Tinline  fninfo
       { try
        let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) $2 in
@@ -820,7 +801,8 @@ storage:
 
 decl: t=ctype i=ident
        { Ast0.wrap(Ast0.Param(t, Some i)) }
-    | t=fn_ctype lp=TOPar s=TMul i=ident rp=TCPar
+    | t=ctype { (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) }
+    | t=ctype lp=TOPar s=TMul i=ident rp=TCPar
        lp1=TOPar d=decl_list(name_opt_decl) rp1=TCPar
         { let fnptr =
          Ast0.wrap
@@ -828,18 +810,13 @@ decl: t=ctype i=ident
               (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp,
                P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in
        Ast0.wrap(Ast0.Param(fnptr, Some i)) }
-    | t=Tvoid
-       { let ty =
-         Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in
-          Ast0.wrap(Ast0.VoidParam(ty)) }
     | TMetaParam
        { let (nm,pure,clt) = $1 in
        Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) }
 
 name_opt_decl:
       decl  { $1 }
-    | t=ctype { Ast0.wrap(Ast0.Param(t, None)) }
-    | t=fn_ctype lp=TOPar s=TMul rp=TCPar
+    | t=ctype lp=TOPar s=TMul rp=TCPar
        lp1=TOPar d=decl_list(name_opt_decl) rp1=TCPar
         { let fnptr =
          Ast0.wrap
@@ -978,7 +955,7 @@ decl_var:
                           P.clt2mcode ";" pv))] }
   /* function pointer type */
   | s=ioption(storage)
-    t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
+    t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
     lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar
     pv=TPtVirg
       { let (id,fn) = d in
@@ -992,7 +969,7 @@ decl_var:
       { [Ast0.wrap(Ast0.MacroDecl($1,P.clt2mcode "(" $2,$3,
                                  P.clt2mcode ")" $4,P.clt2mcode ";" $5))] }
   | s=ioption(storage)
-    t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
+    t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
     lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar
     q=TEq e=initialize pv=TPtVirg
       { let (id,fn) = d in
@@ -1002,7 +979,7 @@ decl_var:
               (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
                P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
       [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]}
-  | s=Ttypedef t=ctype_full id=typedef_ident pv=TPtVirg
+  | s=Ttypedef t=typedef_ctype id=typedef_ident pv=TPtVirg
       { let s = P.clt2mcode "typedef" s in
         [Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))] }
 
@@ -1031,7 +1008,7 @@ one_decl_var:
                           P.clt2mcode ";" pv)) }
   /* function pointer type */
   | s=ioption(storage)
-    t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
+    t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
     lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar
     pv=TPtVirg
       { let (id,fn) = d in
@@ -1045,7 +1022,7 @@ one_decl_var:
       { Ast0.wrap(Ast0.MacroDecl($1,P.clt2mcode "(" $2,$3,
                                  P.clt2mcode ")" $4,P.clt2mcode ";" $5)) }
   | s=ioption(storage)
-    t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
+    t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar
     lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar
     q=TEq e=initialize pv=TPtVirg
       { let (id,fn) = d in
@@ -1401,14 +1378,44 @@ meta_ident:
 pure_ident_or_meta_ident:
        pure_ident                { (None,P.id2name $1) }
      | meta_ident                { $1 }
-     | Tlist                     { (None,"list") }
-     | TError                    { (None,"error") }
-     | TType                     { (None,"type") }
-     | TName                     { (None,"name") }
+     | TIdentifier { (None, "identifier") }
+     | TExpression { (None, "expression") }
+     | TStatement { (None, "statement") }
+     | TFunction { (None, "function") }
+     | TLocal { (None, "local") }
+     | TType { (None, "type") }
+     | TParameter { (None, "parameter") }
+     | TIdExpression { (None, "idexpression") }
+     | TInitialiser { (None, "initialiser") }
+     | Tlist { (None, "list") }
+     | TFresh { (None, "fresh") }
+     | TConstant { (None, "constant") }
+     | TError { (None, "error") }
+     | TWords { (None, "words") }
+     | TPure { (None, "pure") }
+     | TContext { (None, "context") }
+     | TGenerated { (None, "generated") }
+     | TTypedef { (None, "typedef") }
+     | TDeclarer { (None, "declarer") }
+     | TIterator { (None, "iterator") }
+     | TName { (None, "name") }
+     | TPosition { (None, "position") }
 
 pure_ident_or_meta_ident_with_seed:
-       pure_ident_or_meta_ident { ($1,None) }
-     | pure_ident_or_meta_ident TEq s=TString { ($1,Some (P.id2name s)) }
+       pure_ident_or_meta_ident { ($1,Ast.NoVal) }
+     | pure_ident_or_meta_ident TEq
+        separated_nonempty_list(TCppConcatOp,seed_elem)
+        { match $3 with
+          [Ast.SeedString s] -> ($1,Ast.StringSeed s)
+        | _ -> ($1,Ast.ListSeed $3) }
+
+seed_elem:
+  TString { let (x,_) = $1 in Ast.SeedString x }
+| TMetaId { let (x,_,_,_) = $1 in Ast.SeedId x }
+| TRuleName TDot pure_ident
+    { let nm = ($1,P.id2name $3) in
+      P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm));
+      Ast.SeedId nm }
 
 pure_ident_or_meta_ident_with_not_eq(not_eq):
        i=pure_ident_or_meta_ident l=loption(not_eq) { (i,l) }
@@ -1574,9 +1581,15 @@ comma_decls(dotter,decl):
 
 /* ---------------------------------------------------------------------- */
 
-error_words:
+/* error words make it complicated to be able to use error as a metavariable
+name or a type in a metavariable list; for that we would like to allow TError
+as an ident, but that makes conflicts with this rule.  To add back error words,
+need to find some appropriate delimiter for it, but it has not been used much
+so just drop it */
+/*error_words:
     TError TWords TEq TOCro cl=comma_list(dexpr) TCCro
       { [Ast0.wrap(Ast0.ERRORWORDS(cl))] }
+*/
 
 /* ---------------------------------------------------------------------- */
 /* sequences of statements and expressions */
@@ -1823,11 +1836,6 @@ any_strict:
   | TForall { Ast.WhenForall }
   | TExists { Ast.WhenExists }
 
-any_only:
-    TAny    { Ast.WhenAny }
-  | TForall { Ast.WhenForall }
-  | TExists { Ast.WhenExists }
-
 /*****************************************************************************
 *
 *
index d418203..b3702e3 100644 (file)
@@ -423,7 +423,7 @@ let add_braces orig_s =
        Ast0.MIXED(ref(new_text,tinfo1,tinfo2))
     | _ -> failwith "unexpected plus code" in
   Ast0.set_mcodekind s new_mcodekind;
-  Compute_lines.statement s
+  Compute_lines.compute_statement_lines true s
 
 (* ---------------------------------------------------------------------- *)
 
index 39c5b46..f557585 100644 (file)
@@ -501,14 +501,14 @@ and statement arity s =
          | Ast0.PureContext -> print_string "pure_context")*)
       | Ast0.MetaStmtList(name,_) ->
          print_string arity;  mcode print_meta name
-      | Ast0.Disj(_,statement_dots_list,_,_) ->
+      | Ast0.Disj(starter,statement_dots_list,_,ender) ->
          print_string arity;
-         print_string "\n("; force_newline();
+         print_string "\n"; mcode print_string starter; force_newline();
          print_between
            (function _ -> print_string "\n|"; force_newline())
            (dots force_newline (statement arity))
            statement_dots_list;
-         print_string "\n)"
+         print_string "\n"; mcode print_string ender
       | Ast0.Nest(starter,stmt_dots,ender,whn,multi) ->
          print_string arity;
          mcode print_string starter;
index e9758ae..9d4ee97 100644 (file)
@@ -54,7 +54,7 @@ let call_pretty f a =
   let str = ref ([] : string list) in
   let pr_elem info = str := (Ast_c.str_of_info info) :: !str in
   let pr_sp _ = () in
-  f pr_elem pr_sp a;
+  f ~pr_elem ~pr_space:pr_sp a;
   String.concat " " (List.rev !str)
 
 let stringrep mvb = match mvb with
index 7d4a241..faa995b 100644 (file)
@@ -28,7 +28,7 @@ let call_pretty f a =
   let str = ref ([] : string list) in
   let pr_elem info = str := (Ast_c.str_of_info info) :: !str in
   let pr_sp _ = () in
-  f pr_elem pr_sp a;
+  f ~pr_elem ~pr_space:pr_sp a;
   String.concat " " (List.rev !str)
 
 let exprrep = call_pretty Pretty_print_c.pp_expression_gen
index d75d5fa..55809b3 100644 (file)
@@ -18,17 +18,18 @@ For tcsh do:
 
   $ source env.csh 
 
+You can then test coccinelle with:
+
+  $ spatch -sp_file demos/simple.cocci demos/simple.c -o /tmp/new_simple.c
 
 
-You can then test coccinelle with:
 
-  $ spatch -sp_file demos/simple.cocci demos/simple.c
 
 If you downloaded the bytecode version of spatch you may first 
 have to install OCaml (which contains the 'ocamlrun' bytecode interpreter,
 the equivalent of 'java', the Java virtual machine, but for OCaml) and then do:
 
-  $ ocamlrun spatch -sp_file demos/simple.cocci demos/simple.c
+  $ ocamlrun spatch -sp_file demos/simple.cocci demos/simple.c -o /tmp/new_simple.c
 
 
 
index 42d5537..94a9192 100644 (file)
 
 // this is defined by windows compiler, and so can not be found via a macro
 // after a -extract_macros
-#define __stdcall /*could: YACFE_ATTRIBUTE*/
-#define __declspec(a) 
+// update: now handled in lexer, simplify stuff
+//#define __stdcall /*could: YACFE_ATTRIBUTE*/
+//#define __declspec(a) 
 
-#define WINAPI
-#define CALLBACK
+//#define WINAPI
+//#define CALLBACK
 
 
 // ****************************************************************************
 // maybe only in old kernel
 #define  __openfirmware
 
-
-#define __extension__
+// now in lexer
+//#define __extension__
 
 #define __thread
 #define __used
 
 #define __releases(x) 
 #define __acquires(x) 
-#define __declspec(x) 
+
+//now in lexer
+//#define __declspec(x) 
+
 #define __page_aligned(x) 
 #define __vsyscall(x) 
 
index b488d72..6ca4be7 100644 (file)
@@ -127,6 +127,10 @@ let testall ?(expected_score_file="tests/SCORE_expected.sexp") () =
               let s = Str.global_replace 
                 (Str.regexp "\"/tmp/cocci-output.*\"") "<COCCIOUTPUTFILE>" s
               in
+              (* on macos the temporary files are stored elsewhere *)
+              let s = Str.global_replace 
+                (Str.regexp "\"/var/folders/.*/cocci-output.*\"") "<COCCIOUTPUTFILE>" s
+              in
               let s = 
                 "INCORRECT:" ^ s ^ "\n" ^ 
                 "    diff (result(<) vs expected_result(>)) = \n" ^
index bd0579a..aff5cc2 100644 (file)
@@ -40,7 +40,12 @@ val sp_of_file :
   Ast_cocci.metavar list list * Ast_cocci.rule list *
       Ast_cocci.meta_name list list list *
       Ast_cocci.meta_name list list list *
-      Ast_cocci.meta_name list list list * Ast_cocci.meta_name list list list *
+      (Ast_cocci.meta_name list list list (*used after list*) *
+        (*fresh used after list*)
+        Ast_cocci.meta_name list list list *
+        (*fresh used after list seeds*)
+        Ast_cocci.meta_name list list list) *
+      Ast_cocci.meta_name list list list *
       string list list *
       string option
 
index b1225a1..ffa1ba4 100644 (file)
@@ -1,7 +1,8 @@
-((a3d.res Ok) (a_and_e.res Ok) (a_and_e_ver1.res Ok) (addelse.res Ok)
- (addif.res Ok) (addif1.res Ok) (addif2.res Ok) (after_if.res Ok)
- (anon.res Ok) (ar.res Ok) (arg.res Ok) (argument.res Ok) (array_init.res Ok)
- (array_size.res Ok) (arraysz.res Ok) (b1.res Ok) (b2.res Ok)
+((a.res Ok) (a3d.res Ok) (a_and_e.res Ok) (a_and_e_ver1.res Ok)
+ (addelse.res Ok) (addif.res Ok) (addif1.res Ok) (addif2.res Ok)
+ (after_if.res Ok) (anon.res Ok) (ar.res Ok) (arg.res Ok) (argument.res Ok)
+ (array_init.res Ok) (array_size.res Ok) (arraysz.res Ok) (b1.res Ok)
+ (b2.res Ok)
  (bad_iso_example.res
   (Pb
    "INCORRECT:diff token: ( VS x\nFile \"tests/bad_iso_example.c\", line 2, column 6,  charpos = 19\n    around = '(', whole content =   if ((x = 3)) return;\nFile \"tests/bad_iso_example.res\", line 2, column 6,  charpos = 19\n    around = 'x', whole content =   if (x) return;\n\n    diff (result(<) vs expected_result(>)) = \n    @@ -1,4 +1,4 @@\n     int main() {\n    -  if ((x = 3)) return;\n    +  if (x) return;\n     }\n     \n"))
@@ -36,7 +37,7 @@
  (expopt2.res Ok) (expopt3.res Ok) (expopt3_ver1.res Ok)
  (expopt3_ver2.res Ok) (fields.res Ok) (fieldsmin.res Ok) (find_long.res Ok)
  (fix_flow_need.res Ok) (fn_todo.res Ok) (fnptr.res Ok) (fnret.res Ok)
- (four.res Ok) (foura.res Ok) (fp.res Ok) (fun.res Ok)
+ (four.res Ok) (foura.res Ok) (fp.res Ok) (fsh.res Ok) (fun.res Ok)
  (gilles-question.res Ok) (gotobreak.res Ok) (hd.res Ok) (headers.res Ok)
  (hex.res Ok) (hil1.res Ok) (if.res Ok) (ifbr.res Ok) (ifdef1.res Ok)
  (ifdef2.res Ok)
@@ -69,7 +70,7 @@
  (labels_metastatement_ver1.res Ok) (local.res Ok) (localid.res Ok)
  (longconst.res Ok) (longlong.res Ok) (longlongint.res Ok) (loop.res Ok)
  (lvalue.res Ok) (macro.res Ok) (macro_int16.res Ok) (match_no_meta.res Ok)
- (max.res Ok)
+ (max.res Ok) (memory.res (Pb "PROBLEM\n   exn = Out of memory\n"))
  (metahex.res
   (Pb
    "INCORRECT:diff token: f VS }\nFile \"tests/metahex.c\", line 2, column 2,  charpos = 15\n    around = 'f', whole content =   f(3);\nFile \"tests/metahex.res\", line 2, column 0,  charpos = 13\n    around = '}', whole content = }\n\n    diff (result(<) vs expected_result(>)) = \n    @@ -1,4 +1,2 @@\n     int main() {\n    -  f(3);\n    -  g(0x03);\n     }\n"))
    "PROBLEM\n   exn = Failure(\"minus: parse error: \\n = File \\\"tests/multi_func1.cocci\\\", line 12, column 2,  charpos = 102\\n    around = 'fn2', whole content =   fn2(...) {\\n\")\n"))
  (multiplus.res Ok) (multitype.res Ok) (multitypedef.res Ok)
  (multivars.res Ok) (nest.res Ok) (nestone.res Ok) (nestseq.res Ok)
- (neststruct.res Ok) (nl.res Ok) (nocast.res Ok) (not.res Ok) (noty.res Ok)
- (null_type.res Ok)
+ (neststruct.res Ok) (nl.res Ok) (nocast.res Ok) (not.res Ok) (notest.res Ok)
+ (noty.res Ok) (null_type.res Ok)
  (oddifdef.res
   (Pb
    "INCORRECT:diff token: #else\n VS x\nFile <COCCIOUTPUTFILE>, line 10, column 0,  charpos = 114\n    around = '#else\n', whole content = #else\nFile \"tests/oddifdef.res\", line 10, column 2,  charpos = 116\n    around = 'x', whole content =   x = 0;\n\n    diff (result(<) vs expected_result(>)) = \n    @@ -7,8 +7,9 @@\n         a = 5;\n     \n     #ifdef FOO\n    +  x = 0;\n     #else\n    -  \n    +  x = 0;\n     #endif\n     }\n     \n    @@ -21,8 +22,9 @@\n         a = 3;\n     \n     #ifdef FOO\n    +  x = 0;\n     #else\n    -  \n    +  x = 0;\n     #endif\n     }\n     \n    @@ -35,7 +37,8 @@\n     #endif\n     \n     #ifdef FOO\n    +  x = 0;\n     #else\n    -  \n    +  x = 0;\n     #endif\n     }\n"))
  (of.res Ok) (oneline.res Ok) (opt.res Ok) (optional_qualifier.res Ok)
- (optional_storage.res Ok) (orexp.res Ok) (param.res Ok) (param_end.res Ok)
- (param_ver1.res Ok) (parameters_dots.res Ok) (partial.res Ok)
+ (optional_storage.res Ok) (orexp.res Ok)
+ (overshoot.res
+  (Pb
+   "INCORRECT:diff token: b VS g\nFile <COCCIOUTPUTFILE>, line 4, column 2,  charpos = 38\n    around = 'b', whole content =   b();\nFile \"tests/overshoot.res\", line 3, column 14,  charpos = 35\n    around = 'g', whole content =   g();g();g();g();\n\n    diff (result(<) vs expected_result(>)) = \n    @@ -1,6 +1,6 @@\n     int main () {\n       a();\n    -  g();g();g();\n    +  g();g();g();g();\n       b();\n       q();\n     }\n"))
+ (param.res Ok) (param_end.res Ok) (param_ver1.res Ok)
+ (parameters_dots.res Ok) (partial.res Ok)
  (pb_distribute_type.res
   (Pb
    "INCORRECT:PB parsing only in generated-file\n    diff (result(<) vs expected_result(>)) = \n    @@ -5,11 +5,11 @@\n     \n     \n     int foo() {\n    -  int * *x;\n    +  int **x;\n       return 0;\n     }\n     \n     int foo() {\n    -  int[45] *x;\n    +  int (*x)[45];\n       return 0;\n     }\n"))
   (Pb
    "INCORRECT:not same number of entities (func, decl, ...)\n    diff (result(<) vs expected_result(>)) = \n    @@ -1,10 +1,3 @@\n    -\n    -      .ack    = mpuio_ack_irq,\n    -      .mask   = mpuio_mask_irq,\n    -      .unmask = mpuio_unmask_irq\n    -\n    -  .b = 15,\n    -\n     int hello ( String input )\n     {\n       String input = input.lowercase();\n"))
  (replace_typedef.res Ok) (reserved.res Ok) (retmacro.res Ok) (rets.res Ok)
- (return.res Ok) (return_implicit.res Ok) (same_expr.res Ok)
+ (return.res Ok) (return_implicit.res Ok) (retval.res Ok) (same_expr.res Ok)
  (scope_problem.res
   (Pb
    "INCORRECT:diff token: } VS a\nFile <COCCIOUTPUTFILE>, line 6, column 2,  charpos = 44\n    around = '}', whole content =   }\nFile \"tests/scope_problem.res\", line 7, column 4,  charpos = 49\n    around = 'a', whole content =     a = 2;\n\n    diff (result(<) vs expected_result(>)) = \n    @@ -1,8 +1,10 @@\n     void main(int i) {\n     \n     \n    +\n       if(1) {\n         int a;\n    +    a = 2;\n       }\n     \n     \n"))
  (three_types.res Ok) (threea.res Ok) (top.res Ok) (topdec.res Ok)
  (topdec_ver1.res Ok) (topdec_ver2.res Ok) (toplevel_macrostmt.res Ok)
  (toplevel_struct.res Ok) (tup.res Ok) (twoproto.res Ok) (ty.res Ok)
- (ty1.res Ok) (ty_tyexp.res Ok) (type.res Ok) (type1.res Ok)
+ (ty1.res Ok) (ty_tyexp.res Ok) (tydisj.res Ok) (type.res Ok) (type1.res Ok)
  (type_annotated.res Ok) (type_ver1.res Ok)
  (type_ver2.res
   (Pb
index 4e37271..b1225a1 100644 (file)
@@ -8,7 +8,7 @@
  (bad_ptr_print.res Ok) (bad_typedef.res Ok) (badexp.res Ok)
  (badpos.res
   (Pb
-   "PROBLEM\n   exn = Failure(\"rule starting on line 1: already tagged token:\\nFile \\\"tests/badpos.c\\\", line 5, column 30,  charpos = 139\\n    around = 'reg_ptr', whole content = \\t (int) -(((struct pt_regs *) reg_ptr)->orig_eax + 2));\")\n"))
+   "PROBLEM\n   exn = Failure(\"rule starting on line 1: already tagged token:\\nC code context\\nFile \\\"tests/badpos.c\\\", line 5, column 30,  charpos = 139\\n    around = 'reg_ptr', whole content = \\t (int) -(((struct pt_regs *) reg_ptr)->orig_eax + 2));\")\n"))
  (badtypedef.res Ok) (badzero.res Ok) (ben.res Ok) (bitfield.res Ok)
  (braces.res Ok) (break.res Ok) (bug1.res Ok)
  (bugloop.res
@@ -45,9 +45,7 @@
    "PROBLEM\n   exn = Lexer_cocci.Lexical(\"unrecognised symbol, in token rule: #\")\n"))
  (ifdef4.res Ok) (ifdef5.res Ok) (ifdef6.res Ok) (ifdef6a.res Ok)
  (ifdefmeta.res Ok) (ifdefmeta1.res Ok) (ifdefmeta2.res Ok)
- (ifdefmeta3.res
-  (Pb
-   "INCORRECT:diff token: g VS #ifdef ONE\nFile <COCCIOUTPUTFILE>, line 4, column 2,  charpos = 32\n    around = 'g', whole content =   g();\nFile \"tests/ifdefmeta3.res\", line 4, column 0,  charpos = 30\n    around = '#ifdef ONE', whole content = #ifdef ONE\n\n    diff (result(<) vs expected_result(>)) = \n    @@ -1,5 +1,7 @@\n     int main () {\n       f();\n       xxx();\n    +#ifdef ONE\n    +#endif\n       g();\n     }\n"))
+ (ifdefmeta3.res Ok)
  (ifdefmeta4.res
   (Pb
    "PROBLEM\n   exn = Unix.Unix_error(20, \"stat\", \"tests/ifdefmeta4.cocci\")\n"))
diff --git a/tests/a.c b/tests/a.c
new file mode 100644 (file)
index 0000000..9d24360
--- /dev/null
+++ b/tests/a.c
@@ -0,0 +1,9 @@
+int main () {
+  int a;
+  f(a);
+  h(a);
+  { int a;
+  g(a);
+  r(a);
+  }
+}
diff --git a/tests/a.cocci b/tests/a.cocci
new file mode 100644 (file)
index 0000000..3710e79
--- /dev/null
@@ -0,0 +1,16 @@
+@@
+expression a;
+@@
+
+-f(a);
+ ...
+-g(a);
+
+@@
+idexpression int a;
+@@
+
+-h(a);
+ ...
+-r(a);
+
diff --git a/tests/a.res b/tests/a.res
new file mode 100644 (file)
index 0000000..9d24360
--- /dev/null
@@ -0,0 +1,9 @@
+int main () {
+  int a;
+  f(a);
+  h(a);
+  { int a;
+  g(a);
+  r(a);
+  }
+}
diff --git a/tests/fsh.c b/tests/fsh.c
new file mode 100644 (file)
index 0000000..18e2e4d
--- /dev/null
@@ -0,0 +1,4 @@
+int main () {
+  f(c);
+  g();
+}
diff --git a/tests/fsh.cocci b/tests/fsh.cocci
new file mode 100644 (file)
index 0000000..c73e7cd
--- /dev/null
@@ -0,0 +1,12 @@
+@r@
+identifier x;
+@@
+
+f(x);
+
+@@
+fresh identifier a = "foo-" ## r.x;
+@@
+
+- g();
++ g(a);
diff --git a/tests/fsh.res b/tests/fsh.res
new file mode 100644 (file)
index 0000000..82bca52
--- /dev/null
@@ -0,0 +1,4 @@
+int main () {
+  f(c);
+  g(foo-c);
+}
index ded0150..49cb796 100644 (file)
@@ -4,6 +4,6 @@
 void main(void)
 {
      INT16 a, b, c;
-     c = b - a;
+     c = a - b;
 }
 
diff --git a/tests/memory.c b/tests/memory.c
new file mode 100644 (file)
index 0000000..420c400
--- /dev/null
@@ -0,0 +1,7 @@
+#define BAD_MAGIC(q,m) 0
+
+int __queue_add(Queue_t *queue, Scsi_Cmnd *SCpnt, int head)
+{
+       if (BAD_MAGIC(1,12))
+               BUG();
+}
diff --git a/tests/memory.cocci b/tests/memory.cocci
new file mode 100644 (file)
index 0000000..18167ae
--- /dev/null
@@ -0,0 +1,4 @@
+@@ expression E; @@
+
+- if (E) { BUG(); }
++ BUG_ON(E);
diff --git a/tests/memory.res b/tests/memory.res
new file mode 100644 (file)
index 0000000..18461b5
--- /dev/null
@@ -0,0 +1,6 @@
+#define BAD_MAGIC(q,m) 0
+
+int __queue_add(Queue_t *queue, Scsi_Cmnd *SCpnt, int head)
+{
+       BUG_ON (BAD_MAGIC(1,12));
+}
diff --git a/tests/notest.c b/tests/notest.c
new file mode 100644 (file)
index 0000000..8bb979f
--- /dev/null
@@ -0,0 +1,6 @@
+int main() {
+  struct foo *x;
+  x = FN();
+  if (!x) return;
+  return;
+}
diff --git a/tests/notest.cocci b/tests/notest.cocci
new file mode 100644 (file)
index 0000000..86ff5bd
--- /dev/null
@@ -0,0 +1,9 @@
+@n2@
+expression x;
+@@
+
+x = FN(...)
+... when strict
+    when any
+- !x
++ 12
diff --git a/tests/notest.res b/tests/notest.res
new file mode 100644 (file)
index 0000000..1a62ac4
--- /dev/null
@@ -0,0 +1,6 @@
+int main() {
+  struct foo *x;
+  x = FN();
+  if (12) return;
+  return;
+}
diff --git a/tests/overshoot.c b/tests/overshoot.c
new file mode 100644 (file)
index 0000000..fee0530
--- /dev/null
@@ -0,0 +1,9 @@
+int main () {
+  a();
+  s();
+  d();
+  f();
+  b();
+  b();
+  q();
+}
diff --git a/tests/overshoot.cocci b/tests/overshoot.cocci
new file mode 100644 (file)
index 0000000..169e209
--- /dev/null
@@ -0,0 +1,31 @@
+@aaa@
+identifier f;
+@@
+
+a();
+<...
+-ff();
++g();
+...>
+b();
+
+
+@bbb@
+identifier f;
+@@
+
+a();
+<...
+-f();
++g();
+...>
+b();
+
+
+@xxx@
+identifier f;
+@@
+
+a();
+...
+-b();
diff --git a/tests/overshoot.res b/tests/overshoot.res
new file mode 100644 (file)
index 0000000..03a5739
--- /dev/null
@@ -0,0 +1,6 @@
+int main () {
+  a();
+  g();g();g();g();
+  b();
+  q();
+}
diff --git a/tests/retval.c b/tests/retval.c
new file mode 100644 (file)
index 0000000..f538915
--- /dev/null
@@ -0,0 +1,24 @@
+int main () {
+  if (retval1) {
+    if (retval2 != -ENODEV) {
+      foo();
+      return 3;
+    }
+    bar();
+  }
+  return 6;
+}
+
+int second () {
+  if (retval1) {
+    if (retval2 != -ENODEV) {
+      foo();
+      goto out;
+    }
+    bar();
+  }
+out:
+  return 6;
+}
+
+
diff --git a/tests/retval.cocci b/tests/retval.cocci
new file mode 100644 (file)
index 0000000..82d3c97
--- /dev/null
@@ -0,0 +1,10 @@
+@@
+@@
+
+       if (retval1) {
+-               if (retval2 != -ENODEV) {
+                        ...
+                        return ...;
+-               }
+-               ...
+       }
diff --git a/tests/retval.res b/tests/retval.res
new file mode 100644 (file)
index 0000000..01a576f
--- /dev/null
@@ -0,0 +1,18 @@
+int main () {
+  if (retval1) {
+      foo();
+      return 3;
+  }
+  return 6;
+}
+
+int second () {
+  if (retval1) {
+      foo();
+      goto out;
+  }
+out:
+  return 6;
+}
+
+
index 4c0679b..79e976a 100644 (file)
@@ -1,5 +1,5 @@
 @ r1 @
-identifier X, Y;
+identifier X,Y;
 @@
 
 struct foo {
diff --git a/tests/tydisj.c b/tests/tydisj.c
new file mode 100644 (file)
index 0000000..3178b22
--- /dev/null
@@ -0,0 +1,2 @@
+int64_t foo() { int64_t a; int i; return i << 20; }
+
diff --git a/tests/tydisj.cocci b/tests/tydisj.cocci
new file mode 100644 (file)
index 0000000..0ddd9d6
--- /dev/null
@@ -0,0 +1,25 @@
+@func@
+typedef int64_t;
+typedef uint64_t;
+identifier f;
+position p;
+expression E;
+type T;
+{int,unsigned,long,unsigned long} i;
+@@
+
+(
+int64_t
+|
+uint64_t
+) f(...) {
+(
+int64_t
+|
+uint64_t
+) a;
+  ...
++ xxx();
+  return <+... i <<@p E ...+>;
+  ...
+}
diff --git a/tests/tydisj.res b/tests/tydisj.res
new file mode 100644 (file)
index 0000000..4b32673
--- /dev/null
@@ -0,0 +1,2 @@
+int64_t foo() { int64_t a; int i; xxx(); return i << 20; }
+
index cd6da6a..ba98ec0 100644 (file)
@@ -1,6 +1,6 @@
 -include ../Makefile.config
 
-PROGS=gitgrep split_patch extract_c_and_res #generate_dependencies
+PROGS=spp gitgrep split_patch extract_c_and_res #generate_dependencies
 
 all: $(SUBDIRS) $(PROGS)
 
@@ -29,7 +29,7 @@ install_bridge: bridge
 .PHONY: $(SUBDIRS)
 
 
-SYSLIBS = str.cma unix.cma
+SYSLIBS = str.cma unix.cma bigarray.cma
 
 INCLUDE=-I ../commons -I ../extra -I  ../parsing_c
 LIBS=../commons/commons.cma ../globals/globals.cma \
@@ -43,6 +43,10 @@ OCAMLYACC=ocamlyacc -v
 OCAMLDEP=ocamldep$(OPTBIN) $(INCLUDE)
 OCAMLMKTOP=ocamlmktop -g -custom $(INCLUDE)
 
+spp: spp.ml
+       $(OCAMLC) -o $@ $(SYSLIBS) $(INCLUDE) $(LIBS)  $+
+#      ocamlc -I ../commons/ -o spp str.cma unix.cma bigarray.cma  ../commons/common.cmo spp.ml
+
 split_patch: split_patch.cmo
        $(OCAMLC) -o $@ $(SYSLIBS) $(INCLUDE) $(LIBS)  $+
 
index c3dcdfb..6e3037c 100644 (file)
@@ -97,7 +97,7 @@ let collect_ors fp lines =
     | line::xs ->
        let (c,k,v) = split_or line in
        let ((c1,k1,v1),rest) = loop xs in
-       if c = c1 && k = k1
+       if c = c1 && k = k1 && not (k = [])
        then
          if List.mem v v1
          then ((c1,k1,v1),rest)
diff --git a/tools/spp.ml b/tools/spp.ml
new file mode 100644 (file)
index 0000000..1281fba
--- /dev/null
@@ -0,0 +1,91 @@
+open Common
+
+exception WrongArguments
+
+(* could do via a List.filter because cpp flags are simple as it's
+ * "-I/usr/include" not ["-I";"/usr/include"] like in ocaml so no
+ * need to look multiple args.
+ *)
+let rec cpp_flags_filter xs =
+  match xs with
+  | [] -> []
+  | x::xs ->
+      (match x with
+      | s  when x =~ "-D.*" ->
+          s::cpp_flags_filter xs
+      | s  when s =~ "-I.*" ->
+          s::cpp_flags_filter xs
+      | _ ->
+          cpp_flags_filter xs
+      )
+
+let is_compile_command xs =
+  List.mem "-c" xs
+
+let source_file xs =
+  xs +> List.filter (fun s -> s =~ ".*\\.c$")
+
+let rec fix_args args file =
+  match args with
+      [] -> []
+    | hd::tail ->
+       if hd = file then
+         (hd^".i") :: tail
+       else
+         hd::fix_args tail file
+
+let rec get_outputfile args =
+  match args with
+      [] -> ([],"")
+    | hd::tail ->
+       if hd = "-o" then
+         let (hd',tail') = match tail with
+             hd'::tail' -> (hd',tail')
+           | _          -> raise WrongArguments
+         in
+           (tail', hd')
+       else
+         let (ntail, out) = get_outputfile tail in
+           (hd::ntail, out)
+
+let main () =
+  let args = List.tl (Array.to_list Sys.argv) in
+  (*args +> List.iter pr2;*)
+  if is_compile_command args
+  then begin
+    let file = source_file args in
+      (match file with
+        | [file] ->
+             let cpp_flags = cpp_flags_filter args in
+             let cmd2 =
+               (spf "cpp %s %s > %s.i"
+                  (Common.join " " cpp_flags)
+                  file
+                  file)
+             in
+               pr2 cmd2;
+               let ret2 = Sys.command cmd2 in
+                if ret2 > 0 then exit ret2;
+                let sp_args = fix_args args file in
+                let cmd = "spatch " ^ (Common.join " " sp_args) in
+                  pr2 cmd;
+                  let ret = Sys.command cmd in
+                    exit ret
+
+        | [] -> failwith "could not find name of source file"
+        | x::y::xs -> failwith "multiple source files"
+      );
+  end
+  else
+    begin
+      let (nargs, outfile) = get_outputfile args in
+      let cmd2 =
+        (spf "cat %s > %s"
+                  (Common.join " " nargs)
+                  outfile)
+      in
+        pr2 cmd2;
+        Sys.command cmd2
+    end
+
+let _ = main ()