# 14 "menhir-20181113/src/lexer.mll"
 

open Stdcompat

(* Array.create was deprecated for a while and removed in OCaml 5.0,
   yet it is used by the code generated by ocamllex in OCaml 3.12 *)
module Array = struct
  include Array
  let create = make
end

open Lexing
open Parser
open Positions
open Keyword

(* ------------------------------------------------------------------------ *)

(* Short-hands. *)

let error1 pos =
  Error.error (Positions.one pos)

let error2 lexbuf =
  Error.error (Positions.lexbuf lexbuf)

(* ------------------------------------------------------------------------ *)

(* This wrapper saves the current lexeme start, invokes its argument,
   and restores it. This allows transmitting better positions to the
   parser. *)

let savestart lexbuf f =
  let startp = lexbuf.lex_start_p in
  let token = f lexbuf in
  lexbuf.lex_start_p <- startp;
  token

(* ------------------------------------------------------------------------ *)

(* Overwrites an old character with a new one at a specified
   offset in a [bytes] buffer. *)

let overwrite content offset c1 c2 =
  assert (Bytes.get content offset = c1);
  Bytes.set content offset c2

(* ------------------------------------------------------------------------ *)

(* Keyword recognition and construction. *)

(* A monster is a spot where we have identified a keyword in concrete syntax.
   We describe a monster as an object with the following methods: *)

type monster = {

  (* The position of the monster. *)
  pos: Positions.t;

  (* This method is passed an array of (optional) names for the producers,
     that is, the elements of the production's right-hand side. It is also
     passed a flag which tells whether [$i] syntax is allowed or disallowed.
     It may perform some checks and is allowed to fail. *)
  check: check;

  (* This method transforms the keyword (in place) into a conventional
     OCaml identifier. This is done by replacing '$', '(', and ')' with
     '_'. Bloody. The arguments are [ofs1] and [content]. [ofs1] is the
     offset where [content] begins in the source file. *)
  transform: int -> bytes -> unit;

  (* This is the keyword, in abstract syntax. *)
  keyword: keyword option;

}

and check =
  Settings.dollars -> string option array -> unit

(* No check. *)

let none : check =
  fun _ _ -> ()

(* ------------------------------------------------------------------------ *)

(* The [$syntaxerror] monster. *)

let syntaxerror pos : monster =
  let check =
    none
  and transform ofs1 content =
    (* [$syntaxerror] is replaced with
       [(raise _eRR)]. Same length. *)
    let pos = start_of_position pos in
    let ofs = pos.pos_cnum - ofs1 in
    let source = "(raise _eRR)" in
    Bytes.blit_string source 0 content ofs (String.length source)
  and keyword =
    Some SyntaxError
  in
  { pos; check; transform; keyword }

(* ------------------------------------------------------------------------ *)

(* We check that every [$i] is within range. Also, we forbid using [$i]
   when a producer has been given a name; this is bad style and may be
   a mistake. (Plus, this simplies our life, as we rewrite [$i] to [_i],
   and we would have to rewrite it to a different identifier otherwise.) *)

let check_dollar pos i : check = fun dollars producers ->
  (* If [i] is out of range, say so. *)
  if not (0 <= i - 1 && i - 1 < Array.length producers) then
    Error.error [pos] "$%d refers to a nonexistent symbol." i;
  (* If [$i] could be referred to via a name, say so. *)
  producers.(i - 1) |> Option.iter (fun x ->
    Error.error [pos] "please do not say: $%d. Instead, say: %s." i x
  );
  (* If [$i] syntax is disallowed, say so. *)
  match dollars with
  | Settings.DollarsDisallowed ->
      Error.error [pos] "please do not use $%d. Instead, name this value." i
  | Settings.DollarsAllowed ->
      ()

(* We check that every reference to a producer [x] in a position keyword,
   such as [$startpos(x)], exists. *)

let check_producer pos x : check = fun _ producers ->
  if not (List.mem (Some x) (Array.to_list producers)) then
    Error.error [pos] "%s refers to a nonexistent symbol." x

(* ------------------------------------------------------------------------ *)

(* The [$i] monster. *)

let dollar pos i : monster =
  let check : check = check_dollar pos i
  and transform ofs1 content =
    (* [$i] is replaced with [_i]. Thus, it is no longer a keyword. *)
    let pos = start_of_position pos in
    let ofs = pos.pos_cnum - ofs1 in
    overwrite content ofs '$' '_'
  and keyword =
    None
  in
  { pos; check; transform; keyword }

(* ------------------------------------------------------------------------ *)

(* The position-keyword monster. The most horrible of all. *)

let position pos
  (where : string)
  (flavor : string)
  (i : string option) (x : string option)
=
  let check_no_parameter () =
    if i <> None || x <> None then
      Error.error [pos] "$%s%s does not take a parameter." where flavor
  in
  let ofslpar = (* offset of the opening parenthesis, if there is one *)
    1 + (* for the initial "$" *)
    String.length where +
    3   (* for "pos" or "ofs" or "loc" *)
  in
  let where =
    match where with
    | "symbolstart"
    | "s"           -> check_no_parameter(); WhereSymbolStart
    | "start"       -> WhereStart
    | "end"         -> WhereEnd
    | ""            -> WhereStart
    | _             -> assert false
  in
  let flavor =
    match flavor with
    | "pos"   -> FlavorPosition
    | "ofs"   -> FlavorOffset
    | "loc"   -> FlavorLocation
    | _       -> assert false
  in
  let subject, check =
    match i, x with
    | Some i, None ->
        let ii = int_of_string i in (* cannot fail *)
        if ii = 0 && where = WhereEnd then
          (* [$endpos($0)] *)
          Before, none
        else
          (* [$startpos($i)] is rewritten to [$startpos(_i)]. *)
          RightNamed ("_" ^ i), check_dollar pos ii
    | None, Some x ->
        (* [$startpos(x)] *)
        RightNamed x, check_producer pos x
    | None, None ->
        (* [$startpos] *)
        Left, none
    | Some _, Some _ ->
        assert false
  in
  let transform ofs1 content =
    let pos = start_of_position pos in
    let ofs = pos.pos_cnum - ofs1 in
    overwrite content ofs '$' '_';
    let ofslpar = ofs + ofslpar in
    match i, x with
    | None, Some x ->
        overwrite content ofslpar '(' '_';
        overwrite content (ofslpar + 1 + String.length x) ')' '_'
    | Some i, None ->
        overwrite content ofslpar '(' '_';
        overwrite content (ofslpar + 1) '$' '_';
        overwrite content (ofslpar + 2 + String.length i) ')' '_'
    | _, _ ->
        ()
  in
  let keyword =
    Some (Position (subject, where, flavor))
  in
  { pos; check; transform; keyword }

(* ------------------------------------------------------------------------ *)

(* In an OCaml header, there should be no monsters. This is just a sanity
   check. *)

let no_monsters monsters =
  match monsters with
  | [] ->
      ()
  | monster :: _ ->
      Error.error [monster.pos]
        "a Menhir keyword cannot be used in an OCaml header."

(* ------------------------------------------------------------------------ *)

(* Creates a stretch. *)

let mk_stretch pos1 pos2 parenthesize monsters =
  (* Read the specified chunk of the file. *)
  let raw_content : string = InputFile.chunk (pos1, pos2) in
  (* Transform the monsters, if there are any. (This explicit test
     allows saving one string copy and keeping just one live copy.) *)
  let content : string =
    match monsters with
    | [] ->
        raw_content
    | _ :: _ ->
        let content : bytes = Bytes.of_string raw_content in
        List.iter (fun monster -> monster.transform pos1.pos_cnum content) monsters;
        Bytes.unsafe_to_string content
  in
  (* Add whitespace so that the column numbers match those of the source file.
     If requested, add parentheses so that the semantic action can be inserted
     into other code without ambiguity. *)
  let content =
    if parenthesize then
      (String.make (pos1.pos_cnum - pos1.pos_bol - 1) ' ') ^ "(" ^ content ^ ")"
    else
      (String.make (pos1.pos_cnum - pos1.pos_bol) ' ') ^ content
  in
  Stretch.({
    stretch_filename = InputFile.get_input_file_name();
    stretch_linenum = pos1.pos_lnum;
    stretch_linecount = pos2.pos_lnum - pos1.pos_lnum;
    stretch_content = content;
    stretch_raw_content = raw_content;
    stretch_keywords = Misc.map_opt (fun monster -> monster.keyword) monsters
  })

(* ------------------------------------------------------------------------ *)

(* OCaml's reserved words. *)

let reserved =
  let table = Hashtbl.create 149 in
  List.iter (fun word -> Hashtbl.add table word ()) [
    "and";
    "as";
    "assert";
    "begin";
    "class";
    "constraint";
    "do";
    "done";
    "downto";
    "else";
    "end";
    "exception";
    "external";
    "false";
    "for";
    "fun";
    "function";
    "functor";
    "if";
    "in";
    "include";
    "inherit";
    "initializer";
    "lazy";
    "let";
    "match";
    "method";
    "module";
    "mutable";
    "new";
    "object";
    "of";
    "open";
    "or";
    "parser";
    "private";
    "rec";
    "sig";
    "struct";
    "then";
    "to";
    "true";
    "try";
    "type";
    "val";
    "virtual";
    "when";
    "while";
    "with";
    "mod";
    "land";
    "lor";
    "lxor";
    "lsl";
    "lsr";
    "asr";
  ];
  table


# 341 "menhir-20181113/src/lexer.ml"
let __ocaml_lex_tables = {
  Lexing.lex_base =
   "\000\000\215\255\216\255\000\000\218\255\220\255\003\000\001\000\
    \224\255\003\000\225\000\048\001\000\002\208\002\160\003\232\255\
    \233\255\234\255\235\255\236\255\237\255\004\000\001\000\240\255\
    \031\000\242\255\056\000\030\000\219\255\243\255\015\000\011\000\
    \018\000\032\000\014\000\020\000\027\000\032\000\023\000\023\000\
    \029\000\036\000\028\000\255\255\038\000\254\255\038\000\025\000\
    \253\255\039\000\039\000\029\000\252\255\038\000\053\000\036\000\
    \037\000\043\000\056\000\251\255\059\000\043\000\042\000\250\255\
    \045\000\062\000\061\000\064\000\249\255\057\000\064\000\074\000\
    \248\255\077\000\066\000\075\000\061\000\077\000\066\000\247\255\
    \073\000\077\000\073\000\083\000\246\255\069\000\072\000\082\000\
    \090\000\072\000\074\000\090\000\245\255\001\000\114\000\133\000\
    \145\000\206\000\248\000\012\001\250\000\008\001\010\001\250\000\
    \013\001\038\001\244\255\114\004\096\005\006\000\230\255\229\255\
    \221\255\048\006\000\007\224\007\225\255\222\255\131\001\004\000\
    \161\001\252\255\253\255\001\000\006\000\255\255\254\255\172\001\
    \250\255\251\255\007\000\252\255\007\000\254\255\078\001\080\001\
    \255\255\253\255\191\001\243\255\244\255\008\000\245\255\247\255\
    \248\255\027\003\009\000\047\001\254\255\255\255\246\255\059\001\
    \064\001\066\001\070\001\084\002\080\001\070\001\065\001\085\001\
    \073\001\079\001\073\001\073\001\093\001\078\001\077\001\083\001\
    \094\001\086\001\083\001\012\000\024\008\106\008\094\002\114\002\
    \251\255\251\255\084\001\103\001\082\001\104\001\092\001\093\001\
    \097\001\095\001\249\255\096\001\095\001\113\001\115\001\114\001\
    \098\001\113\001\108\001\103\001\106\001\121\001\109\001\110\001\
    \115\001\115\001\250\255\143\002\243\255\244\255\009\000\245\255\
    \247\255\248\255\235\003\253\255\254\255\011\000\246\255\119\001\
    \124\001\126\001\065\002\037\003\140\001\129\001\179\001\217\001\
    \206\001\210\001\204\001\204\001\250\001\234\001\233\001\012\002\
    \248\001\241\001\010\002\014\000\029\009\111\009\047\003\064\003\
    \251\255\251\255\011\002\030\002\008\002\028\002\016\002\038\002\
    \043\002\043\002\249\255\044\002\043\002\060\002\075\002\074\002\
    \058\002\073\002\069\002\068\002\072\002\087\002\075\002\076\002\
    \104\002\133\002\250\255\101\010\246\255\247\255\010\000\248\255\
    \250\255\251\255\013\000\253\255\254\255\255\255\249\255\027\004\
    \249\255\250\255\011\000\251\255\252\255\253\255\014\000\016\000\
    \255\255\254\255\237\004\251\255\252\255\012\000\254\255\119\003\
    \255\255\253\255\013\000\219\005\000\000\004\003\228\002\223\005\
    \230\002\132\006\255\003\005\003\233\002\255\255\006\003\022\004\
    \254\255\007\003\189\004\009\003\208\003\253\255\254\255\014\000\
    \255\255";
  Lexing.lex_backtrk =
   "\255\255\255\255\255\255\040\000\255\255\255\255\032\000\031\000\
    \255\255\040\000\040\000\029\000\028\000\028\000\024\000\255\255\
    \255\255\255\255\255\255\255\255\255\255\017\000\016\000\255\255\
    \014\000\255\255\040\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\038\000\038\000\255\255\255\255\
    \255\255\028\000\027\000\255\255\255\255\255\255\255\255\031\000\
    \255\255\255\255\255\255\003\000\000\000\255\255\255\255\255\255\
    \255\255\255\255\003\000\255\255\005\000\255\255\005\000\005\000\
    \255\255\255\255\255\255\255\255\255\255\010\000\255\255\255\255\
    \255\255\012\000\002\000\012\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\003\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\004\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\010\000\255\255\
    \255\255\255\255\012\000\255\255\255\255\000\000\255\255\255\255\
    \255\255\255\255\255\255\003\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\004\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\007\000\255\255\
    \255\255\255\255\003\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\004\000\255\255\255\255\255\255\006\000\006\000\
    \255\255\255\255\255\255\255\255\255\255\001\000\255\255\004\000\
    \255\255\255\255\001\000\001\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
    \255\255";
  Lexing.lex_default =
   "\001\000\000\000\000\000\255\255\000\000\000\000\255\255\255\255\
    \000\000\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
    \000\000\000\000\000\000\000\000\000\000\255\255\255\255\000\000\
    \255\255\000\000\255\255\255\255\000\000\000\000\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\000\000\255\255\000\000\255\255\255\255\
    \000\000\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
    \255\255\255\255\255\255\000\000\255\255\255\255\255\255\000\000\
    \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
    \000\000\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
    \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\000\000\255\255\255\255\255\255\000\000\000\000\
    \000\000\255\255\255\255\255\255\000\000\000\000\118\000\255\255\
    \121\000\000\000\000\000\255\255\255\255\000\000\000\000\128\000\
    \000\000\000\000\255\255\000\000\255\255\000\000\255\255\255\255\
    \000\000\000\000\139\000\000\000\000\000\255\255\000\000\000\000\
    \000\000\255\255\255\255\255\255\000\000\000\000\000\000\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \000\000\000\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\000\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\000\000\204\000\000\000\000\000\255\255\000\000\
    \000\000\000\000\255\255\000\000\000\000\255\255\000\000\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \000\000\000\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\000\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\000\000\012\001\000\000\000\000\255\255\000\000\
    \000\000\000\000\255\255\000\000\000\000\000\000\000\000\024\001\
    \000\000\000\000\255\255\000\000\000\000\000\000\255\255\255\255\
    \000\000\000\000\035\001\000\000\000\000\255\255\000\000\041\001\
    \000\000\000\000\255\255\044\001\255\255\255\255\255\255\048\001\
    \255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\
    \000\000\255\255\255\255\255\255\061\001\000\000\000\000\255\255\
    \000\000";
  Lexing.lex_trans =
   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\006\000\008\000\008\000\006\000\007\000\008\000\109\000\
    \125\000\131\000\142\000\207\000\015\001\027\001\038\001\038\001\
    \064\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \006\000\000\000\010\000\006\000\000\000\026\000\109\000\056\001\
    \021\000\020\000\017\000\016\000\023\000\117\000\112\000\009\000\
    \126\000\137\000\118\000\150\000\172\000\214\000\236\000\022\001\
    \033\001\032\001\024\000\025\000\005\000\022\000\111\000\018\000\
    \107\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\003\000\110\000\029\000\107\000\014\000\
    \094\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\013\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\004\000\019\000\093\000\015\000\085\000\
    \080\000\064\000\060\000\053\000\049\000\046\000\040\000\044\000\
    \041\000\042\000\043\000\045\000\047\000\048\000\050\000\051\000\
    \039\000\052\000\066\000\027\000\054\000\065\000\055\000\056\000\
    \057\000\031\000\058\000\059\000\061\000\062\000\063\000\073\000\
    \069\000\032\000\067\000\068\000\037\000\070\000\035\000\030\000\
    \033\000\071\000\036\000\034\000\038\000\072\000\074\000\075\000\
    \076\000\077\000\078\000\028\000\079\000\081\000\082\000\083\000\
    \084\000\086\000\087\000\088\000\089\000\090\000\091\000\092\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\095\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\096\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \002\000\115\000\115\000\097\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\098\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\099\000\100\000\101\000\102\000\103\000\104\000\
    \105\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\106\000\136\000\008\000\136\000\011\000\
    \119\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\125\000\148\000\191\000\124\000\190\000\
    \189\000\187\000\152\000\159\000\158\000\179\000\131\000\160\000\
    \161\000\130\000\156\000\162\000\163\000\164\000\165\000\157\000\
    \166\000\167\000\168\000\169\000\178\000\170\000\171\000\171\000\
    \180\000\142\000\181\000\123\000\141\000\182\000\183\000\184\000\
    \185\000\186\000\188\000\167\000\132\000\167\000\171\000\192\000\
    \193\000\135\000\194\000\195\000\196\000\197\000\198\000\199\000\
    \200\000\144\000\201\000\145\000\147\000\202\000\143\000\146\000\
    \140\000\255\000\133\000\254\000\253\000\251\000\223\000\222\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\134\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\243\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\149\000\224\000\148\000\225\000\226\000\227\000\
    \228\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\229\000\230\000\231\000\242\000\012\000\
    \234\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\232\000\233\000\235\000\235\000\244\000\
    \245\000\246\000\247\000\255\255\155\000\155\000\155\000\155\000\
    \155\000\155\000\155\000\155\000\155\000\155\000\175\000\175\000\
    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
    \248\000\207\000\249\000\176\000\206\000\250\000\252\000\231\000\
    \231\000\122\000\175\000\175\000\175\000\175\000\175\000\175\000\
    \175\000\175\000\175\000\175\000\129\000\216\000\235\000\000\001\
    \001\001\209\000\002\001\210\000\003\001\220\000\208\000\213\000\
    \212\000\004\001\221\000\005\001\006\001\007\001\008\001\140\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\009\001\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\010\001\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\211\000\053\001\205\000\056\001\054\001\054\001\
    \053\001\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\053\001\053\001\053\001\056\001\012\000\
    \056\001\012\000\012\000\012\000\012\000\113\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\155\000\155\000\155\000\155\000\155\000\
    \155\000\155\000\155\000\155\000\155\000\219\000\219\000\219\000\
    \219\000\219\000\219\000\219\000\219\000\219\000\219\000\239\000\
    \239\000\239\000\239\000\239\000\239\000\239\000\239\000\239\000\
    \239\000\240\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \239\000\239\000\239\000\239\000\239\000\239\000\239\000\239\000\
    \239\000\239\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \153\000\038\001\000\000\000\000\042\001\000\000\000\000\152\000\
    \000\000\000\000\000\000\151\000\000\000\000\000\154\000\205\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\064\001\000\000\000\000\063\001\000\000\000\000\
    \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\000\000\000\000\000\000\000\000\012\000\
    \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\219\000\219\000\219\000\219\000\219\000\
    \219\000\219\000\219\000\219\000\219\000\027\001\056\001\000\000\
    \026\001\000\000\000\000\000\000\000\000\000\000\000\000\055\001\
    \055\001\055\001\055\001\055\001\055\001\055\001\055\001\055\001\
    \055\001\000\000\000\000\000\000\000\000\029\001\000\000\000\000\
    \000\000\000\000\028\001\030\001\000\000\031\001\057\001\057\001\
    \057\001\057\001\057\001\057\001\057\001\057\001\057\001\057\001\
    \217\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\
    \000\000\000\000\000\000\215\000\000\000\000\000\218\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\255\255\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \108\000\000\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\000\000\000\000\000\000\
    \062\001\108\000\000\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\059\001\059\001\059\001\
    \059\001\059\001\059\001\059\001\059\001\059\001\059\001\038\001\
    \000\000\000\000\037\001\000\000\000\000\000\000\059\001\059\001\
    \059\001\059\001\059\001\059\001\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\001\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\025\001\000\000\000\000\059\001\059\001\
    \059\001\059\001\059\001\059\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\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\039\001\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\109\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \109\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\108\000\000\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\000\000\000\000\000\000\000\000\108\000\
    \000\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\046\001\000\000\000\000\
    \045\001\052\001\000\000\000\000\051\001\036\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\255\255\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\050\001\
    \050\001\050\001\050\001\050\001\050\001\050\001\050\001\050\001\
    \050\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\047\001\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\049\001\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\000\000\000\000\000\000\000\000\012\000\
    \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\114\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\056\001\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\058\001\058\001\058\001\058\001\
    \058\001\058\001\058\001\058\001\058\001\058\001\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\058\001\058\001\058\001\
    \058\001\058\001\058\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\255\255\000\000\000\000\000\000\255\255\
    \000\000\000\000\000\000\000\000\000\000\058\001\058\001\058\001\
    \058\001\058\001\058\001\000\000\000\000\000\000\000\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\000\000\000\000\000\000\000\000\012\000\
    \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\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\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\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\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \115\000\115\000\116\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\174\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\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\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\177\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
    \173\000\173\000\173\000\173\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\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\000\000\000\000\000\000\
    \000\000\173\000\000\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\000\000\000\000\000\000\
    \000\000\000\000\000\000\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\
    \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\000\000\
    \173\000\173\000\173\000\173\000\173\000\173\000\173\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\000\000\000\000\000\000\000\
    \000\000\000\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\238\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\173\000\173\000\173\000\
    \173\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
    \173\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\000\000\000\
    \000\000\000\000\000\000\000\000\237\000\000\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \241\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\000\000\000\000\000\000\000\000\237\000\000\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\000\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\000\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\000\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\015\001\
    \000\000\000\000\014\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\017\001\
    \000\000\000\000\000\000\000\000\016\001\018\001\013\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\
    \021\001\000\000\020\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\
    \019\001\000\000\013\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\013\001";
  Lexing.lex_check =
   "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\000\000\000\000\007\000\006\000\000\000\119\000\109\000\
    \124\000\130\000\141\000\206\000\014\001\026\001\037\001\042\001\
    \063\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \000\000\255\255\000\000\006\000\255\255\000\000\109\000\044\001\
    \000\000\000\000\000\000\000\000\000\000\009\000\021\000\000\000\
    \123\000\132\000\009\000\146\000\171\000\213\000\235\000\018\001\
    \030\001\031\001\000\000\000\000\000\000\000\000\022\000\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\000\
    \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\026\000\027\000\000\000\
    \093\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\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\000\000\000\031\000\
    \032\000\033\000\034\000\035\000\036\000\037\000\038\000\039\000\
    \040\000\041\000\042\000\044\000\046\000\047\000\049\000\050\000\
    \038\000\051\000\033\000\026\000\053\000\033\000\054\000\055\000\
    \056\000\026\000\057\000\058\000\060\000\061\000\062\000\064\000\
    \065\000\026\000\066\000\067\000\026\000\069\000\026\000\026\000\
    \026\000\070\000\026\000\026\000\026\000\071\000\073\000\074\000\
    \075\000\076\000\077\000\026\000\078\000\080\000\081\000\082\000\
    \083\000\085\000\086\000\087\000\088\000\089\000\090\000\091\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\094\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\095\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\010\000\010\000\096\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\097\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\098\000\099\000\100\000\101\000\102\000\103\000\
    \104\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\105\000\134\000\118\000\135\000\011\000\
    \118\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\120\000\147\000\151\000\120\000\152\000\
    \153\000\156\000\154\000\157\000\157\000\158\000\127\000\159\000\
    \160\000\127\000\154\000\161\000\162\000\163\000\164\000\154\000\
    \165\000\166\000\167\000\167\000\168\000\169\000\170\000\178\000\
    \179\000\138\000\180\000\120\000\138\000\181\000\182\000\183\000\
    \184\000\185\000\187\000\188\000\127\000\189\000\190\000\191\000\
    \192\000\127\000\193\000\194\000\195\000\196\000\197\000\198\000\
    \199\000\138\000\200\000\138\000\138\000\201\000\138\000\138\000\
    \138\000\215\000\127\000\216\000\217\000\220\000\221\000\221\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\127\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\222\000\
    \011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\138\000\223\000\138\000\224\000\225\000\226\000\
    \227\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\228\000\229\000\230\000\232\000\012\000\
    \233\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\231\000\231\000\234\000\242\000\243\000\
    \244\000\245\000\246\000\118\000\155\000\155\000\155\000\155\000\
    \155\000\155\000\155\000\155\000\155\000\155\000\174\000\174\000\
    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
    \247\000\203\000\248\000\175\000\203\000\249\000\251\000\252\000\
    \253\000\120\000\175\000\175\000\175\000\175\000\175\000\175\000\
    \175\000\175\000\175\000\175\000\127\000\218\000\254\000\255\000\
    \000\001\203\000\001\001\203\000\002\001\218\000\203\000\203\000\
    \203\000\003\001\218\000\004\001\005\001\006\001\007\001\138\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\008\001\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\009\001\
    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\203\000\046\001\203\000\048\001\045\001\051\001\
    \052\001\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\045\001\051\001\054\001\057\001\013\000\
    \059\001\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\145\000\145\000\145\000\145\000\145\000\
    \145\000\145\000\145\000\145\000\145\000\219\000\219\000\219\000\
    \219\000\219\000\219\000\219\000\219\000\219\000\219\000\238\000\
    \238\000\238\000\238\000\238\000\238\000\238\000\238\000\238\000\
    \238\000\239\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \239\000\239\000\239\000\239\000\239\000\239\000\239\000\239\000\
    \239\000\239\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \145\000\039\001\255\255\255\255\039\001\255\255\255\255\145\000\
    \255\255\255\255\255\255\145\000\255\255\255\255\145\000\203\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\255\255\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\255\255\
    \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\060\001\255\255\255\255\060\001\255\255\255\255\
    \255\255\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\255\255\255\255\255\255\255\255\014\000\
    \255\255\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\210\000\210\000\210\000\210\000\210\000\
    \210\000\210\000\210\000\210\000\210\000\023\001\050\001\255\255\
    \023\001\255\255\255\255\255\255\255\255\255\255\255\255\050\001\
    \050\001\050\001\050\001\050\001\050\001\050\001\050\001\050\001\
    \050\001\255\255\255\255\255\255\255\255\023\001\255\255\255\255\
    \255\255\255\255\023\001\023\001\255\255\023\001\055\001\055\001\
    \055\001\055\001\055\001\055\001\055\001\055\001\055\001\055\001\
    \210\000\255\255\255\255\255\255\255\255\255\255\255\255\210\000\
    \255\255\255\255\255\255\210\000\255\255\255\255\210\000\255\255\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\039\001\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\255\255\
    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
    \107\000\255\255\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\255\255\255\255\255\255\
    \060\001\107\000\255\255\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\058\001\058\001\058\001\
    \058\001\058\001\058\001\058\001\058\001\058\001\058\001\034\001\
    \255\255\255\255\034\001\255\255\255\255\255\255\058\001\058\001\
    \058\001\058\001\058\001\058\001\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\034\001\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\023\001\255\255\255\255\058\001\058\001\
    \058\001\058\001\058\001\058\001\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\034\001\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\108\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \108\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\108\000\255\255\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\255\255\255\255\255\255\255\255\108\000\
    \255\255\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\043\001\255\255\255\255\
    \043\001\047\001\255\255\255\255\047\001\034\001\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\043\001\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\047\001\
    \047\001\047\001\047\001\047\001\047\001\047\001\047\001\047\001\
    \047\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\043\001\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\047\001\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\255\255\255\255\255\255\255\255\113\000\
    \255\255\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\049\001\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\049\001\049\001\049\001\049\001\
    \049\001\049\001\049\001\049\001\049\001\049\001\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\049\001\049\001\049\001\
    \049\001\049\001\049\001\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\043\001\255\255\255\255\255\255\047\001\
    \255\255\255\255\255\255\255\255\255\255\049\001\049\001\049\001\
    \049\001\049\001\049\001\255\255\255\255\255\255\255\255\255\255\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\255\255\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\255\255\
    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\255\255\255\255\255\255\255\255\114\000\
    \255\255\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\255\255\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\255\255\
    \114\000\114\000\114\000\114\000\114\000\114\000\114\000\114\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\172\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\172\000\
    \255\255\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\173\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
    \173\000\173\000\173\000\173\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\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\255\255\255\255\255\255\
    \255\255\173\000\255\255\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\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\255\255\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\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\236\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\173\000\173\000\173\000\
    \173\000\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
    \173\000\173\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\236\000\255\255\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \237\000\255\255\255\255\255\255\255\255\255\255\255\255\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\255\255\255\255\255\255\255\255\237\000\255\255\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\255\255\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\255\255\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\255\255\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\011\001\
    \255\255\255\255\011\001\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\011\001\
    \255\255\255\255\255\255\255\255\011\001\011\001\011\001\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \011\001\255\255\011\001\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \011\001\255\255\011\001\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\011\001";
  Lexing.lex_base_code =
   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\210\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\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\008\000\000\000\
    \000\000\000\000\010\000\000\000\009\001\217\001\078\000\088\000\
    \052\000\067\000\031\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\031\000\048\000\050\000\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\035\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\035\000\000\000\
    \000\000\000\000\037\000\001\000\016\002\224\002\105\000\115\000\
    \052\000\067\000\058\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\058\000\075\000\077\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000";
  Lexing.lex_backtrk_code =
   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \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\000\007\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000";
  Lexing.lex_default_code =
   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000";
  Lexing.lex_trans_code =
   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \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\001\000\012\000\000\000\
    \040\000\040\000\000\000\000\000\000\000\000\000\004\000\000\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\000\000\000\000\000\000\000\000\004\000\
    \000\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\019\000\019\000\024\000\049\000\049\000\
    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
    \049\000\049\000\024\000\019\000\019\000\024\000\019\000\019\000\
    \024\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
    \049\000\049\000\049\000\049\000\049\000\024\000\019\000\019\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\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\000\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\000\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\000\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\043\000\000\000\000\000\
    \000\000\004\000\000\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\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\
    \046\000\000\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\000\000\000\000\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\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\000\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\000\000\000\004\000\004\000\004\000\004\000\004\000\004\000\
    \004\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\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \000\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\043\000\000\000\000\000\000\000\
    \046\000\000\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\046\000\
    \000\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \000\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \000\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\000\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\000\000\000\000\000\000\000\000\046\000\
    \000\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\000\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\000\000\
    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
    \000\000";
  Lexing.lex_check_code =
   "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\138\000\000\000\203\000\255\255\
    \171\000\235\000\255\255\255\255\255\255\255\255\107\000\255\255\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\255\255\255\255\255\255\255\255\107\000\
    \255\255\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\145\000\166\000\170\000\174\000\174\000\
    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
    \175\000\175\000\178\000\188\000\189\000\190\000\210\000\230\000\
    \234\000\238\000\238\000\238\000\238\000\238\000\238\000\238\000\
    \238\000\238\000\238\000\239\000\239\000\239\000\239\000\239\000\
    \239\000\239\000\239\000\239\000\239\000\242\000\252\000\253\000\
    \254\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\255\255\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\255\255\
    \107\000\107\000\107\000\107\000\107\000\107\000\107\000\107\000\
    \108\000\255\255\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\172\000\255\255\255\255\
    \255\255\108\000\255\255\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \172\000\255\255\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\255\255\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\255\255\108\000\108\000\108\000\108\000\108\000\108\000\
    \108\000\108\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \255\255\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
    \172\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
    \173\000\173\000\173\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\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\236\000\255\255\255\255\255\255\
    \173\000\255\255\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\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\236\000\
    \255\255\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\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\
    \255\255\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\173\000\173\000\173\000\173\000\
    \255\255\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
    \173\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\255\255\
    \236\000\236\000\236\000\236\000\236\000\236\000\236\000\236\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\255\255\255\255\255\255\255\255\237\000\
    \255\255\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\255\255\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\255\255\
    \237\000\237\000\237\000\237\000\237\000\237\000\237\000\237\000\
    \255\255";
  Lexing.lex_code =
   "\255\002\255\255\003\255\255\000\002\001\003\255\010\255\009\255\
    \008\255\255\010\255\009\255\255\011\255\255\007\255\003\255\005\
    \008\004\010\001\009\000\011\255\012\255\255\014\255\255\013\255\
    \255\015\255\255\007\255\005\008\004\010\003\014\002\015\001\009\
    \000\011\255\003\255\007\012\006\013\005\008\004\010\001\009\000\
    \011\255";
}

let rec main lexbuf =
  lexbuf.Lexing.lex_mem <- Array.make 4 (-1);(* L=1 [2] <- p ;  *)
  lexbuf.Lexing.lex_mem.(2) <- lexbuf.Lexing.lex_curr_pos ;
 __ocaml_lex_main_rec lexbuf 0
and __ocaml_lex_main_rec lexbuf __ocaml_lex_state =
  match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 393 "menhir-20181113/src/lexer.mll"
    ( TOKEN )
# 1597 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 395 "menhir-20181113/src/lexer.mll"
    ( TYPE )
# 1602 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 397 "menhir-20181113/src/lexer.mll"
    ( LEFT )
# 1607 "menhir-20181113/src/lexer.ml"

  | 3 ->
# 399 "menhir-20181113/src/lexer.mll"
    ( RIGHT )
# 1612 "menhir-20181113/src/lexer.ml"

  | 4 ->
# 401 "menhir-20181113/src/lexer.mll"
    ( NONASSOC )
# 1617 "menhir-20181113/src/lexer.ml"

  | 5 ->
# 403 "menhir-20181113/src/lexer.mll"
    ( START )
# 1622 "menhir-20181113/src/lexer.ml"

  | 6 ->
# 405 "menhir-20181113/src/lexer.mll"
    ( PREC )
# 1627 "menhir-20181113/src/lexer.ml"

  | 7 ->
# 407 "menhir-20181113/src/lexer.mll"
    ( PUBLIC )
# 1632 "menhir-20181113/src/lexer.ml"

  | 8 ->
# 409 "menhir-20181113/src/lexer.mll"
    ( PARAMETER )
# 1637 "menhir-20181113/src/lexer.ml"

  | 9 ->
# 411 "menhir-20181113/src/lexer.mll"
    ( INLINE )
# 1642 "menhir-20181113/src/lexer.ml"

  | 10 ->
# 413 "menhir-20181113/src/lexer.mll"
    ( PERCENTATTRIBUTE )
# 1647 "menhir-20181113/src/lexer.ml"

  | 11 ->
# 415 "menhir-20181113/src/lexer.mll"
    ( ON_ERROR_REDUCE )
# 1652 "menhir-20181113/src/lexer.ml"

  | 12 ->
# 417 "menhir-20181113/src/lexer.mll"
    ( (* The token [PERCENTPERCENT] carries a stretch that contains
         everything that follows %% in the input file. This string
         must be created lazily. The parser decides (based on the
         context) whether this stretch is needed. If it is indeed
         needed, then constructing this stretch drives the lexer
         to the end of the file. *)
      PERCENTPERCENT (lazy (
        let openingpos = lexeme_end_p lexbuf in
        let closingpos = finish lexbuf in
        mk_stretch openingpos closingpos false []
      )) )
# 1667 "menhir-20181113/src/lexer.ml"

  | 13 ->
# 429 "menhir-20181113/src/lexer.mll"
    ( SEMI )
# 1672 "menhir-20181113/src/lexer.ml"

  | 14 ->
# 431 "menhir-20181113/src/lexer.mll"
    ( COLON )
# 1677 "menhir-20181113/src/lexer.ml"

  | 15 ->
# 433 "menhir-20181113/src/lexer.mll"
    ( COMMA )
# 1682 "menhir-20181113/src/lexer.ml"

  | 16 ->
# 435 "menhir-20181113/src/lexer.mll"
    ( EQUAL )
# 1687 "menhir-20181113/src/lexer.ml"

  | 17 ->
# 437 "menhir-20181113/src/lexer.mll"
    ( LPAREN )
# 1692 "menhir-20181113/src/lexer.ml"

  | 18 ->
# 439 "menhir-20181113/src/lexer.mll"
    ( RPAREN )
# 1697 "menhir-20181113/src/lexer.ml"

  | 19 ->
# 441 "menhir-20181113/src/lexer.mll"
    ( BAR )
# 1702 "menhir-20181113/src/lexer.ml"

  | 20 ->
# 443 "menhir-20181113/src/lexer.mll"
    ( QUESTION )
# 1707 "menhir-20181113/src/lexer.ml"

  | 21 ->
# 445 "menhir-20181113/src/lexer.mll"
    ( STAR )
# 1712 "menhir-20181113/src/lexer.ml"

  | 22 ->
# 447 "menhir-20181113/src/lexer.mll"
    ( PLUS )
# 1717 "menhir-20181113/src/lexer.ml"

  | 23 ->
# 449 "menhir-20181113/src/lexer.mll"
    ( TILDE )
# 1722 "menhir-20181113/src/lexer.ml"

  | 24 ->
# 451 "menhir-20181113/src/lexer.mll"
    ( UNDERSCORE )
# 1727 "menhir-20181113/src/lexer.ml"

  | 25 ->
# 453 "menhir-20181113/src/lexer.mll"
    ( COLONEQUAL )
# 1732 "menhir-20181113/src/lexer.ml"

  | 26 ->
# 455 "menhir-20181113/src/lexer.mll"
    ( EQUALEQUAL )
# 1737 "menhir-20181113/src/lexer.ml"

  | 27 ->
# 457 "menhir-20181113/src/lexer.mll"
    ( LET )
# 1742 "menhir-20181113/src/lexer.ml"

  | 28 ->
let
# 458 "menhir-20181113/src/lexer.mll"
                             id
# 1748 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 459 "menhir-20181113/src/lexer.mll"
    ( if Hashtbl.mem reserved id then
        error2 lexbuf "this is an OCaml reserved word."
      else
        LID (with_pos (cpos lexbuf) id)
    )
# 1756 "menhir-20181113/src/lexer.ml"

  | 29 ->
let
# 464 "menhir-20181113/src/lexer.mll"
                             id
# 1762 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 465 "menhir-20181113/src/lexer.mll"
    ( UID (with_pos (cpos lexbuf) id) )
# 1766 "menhir-20181113/src/lexer.ml"

  | 30 ->
let
# 469 "menhir-20181113/src/lexer.mll"
                                                  id
# 1772 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 470 "menhir-20181113/src/lexer.mll"
    ( QID (with_pos (cpos lexbuf) id) )
# 1776 "menhir-20181113/src/lexer.ml"

  | 31 ->
# 473 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf; main lexbuf )
# 1781 "menhir-20181113/src/lexer.ml"

  | 32 ->
# 475 "menhir-20181113/src/lexer.mll"
    ( main lexbuf )
# 1786 "menhir-20181113/src/lexer.ml"

  | 33 ->
# 477 "menhir-20181113/src/lexer.mll"
    ( comment (lexeme_start_p lexbuf) lexbuf; main lexbuf )
# 1791 "menhir-20181113/src/lexer.ml"

  | 34 ->
# 479 "menhir-20181113/src/lexer.mll"
    ( ocamlcomment (lexeme_start_p lexbuf) lexbuf; main lexbuf )
# 1796 "menhir-20181113/src/lexer.ml"

  | 35 ->
# 481 "menhir-20181113/src/lexer.mll"
    ( savestart lexbuf (ocamltype (lexeme_end_p lexbuf)) )
# 1801 "menhir-20181113/src/lexer.ml"

  | 36 ->
# 483 "menhir-20181113/src/lexer.mll"
    ( savestart lexbuf (fun lexbuf ->
        let openingpos = lexeme_start_p lexbuf in
        let stretchpos = lexeme_end_p lexbuf in
        let closingpos, monsters = action true openingpos [] lexbuf in
        no_monsters monsters;
        HEADER (mk_stretch stretchpos closingpos false [])
      ) )
# 1812 "menhir-20181113/src/lexer.ml"

  | 37 ->
# 491 "menhir-20181113/src/lexer.mll"
    ( savestart lexbuf (fun lexbuf ->
        let openingpos = lexeme_start_p lexbuf in
        let stretchpos = lexeme_end_p lexbuf in
        let closingpos, monsters = action false openingpos [] lexbuf in
        ACTION (
          fun dollars producers ->
            List.iter (fun monster -> monster.check dollars producers) monsters;
            let stretch = mk_stretch stretchpos closingpos true monsters in
            Action.from_stretch stretch
        )
      )
    )
# 1828 "menhir-20181113/src/lexer.ml"

  | 38 ->
let
# 503 "menhir-20181113/src/lexer.mll"
           percent
# 1834 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
and
# 503 "menhir-20181113/src/lexer.mll"
                                            id
# 1839 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_mem.(0) + 2) lexbuf.Lexing.lex_mem.(1) in
# 504 "menhir-20181113/src/lexer.mll"
    ( let openingpos = lexeme_start_p lexbuf in
      let stretchpos = lexeme_end_p lexbuf in
      let closingpos = attribute openingpos lexbuf in
      let pos = Positions.import (openingpos, lexeme_end_p lexbuf) in
      let attr = mk_stretch stretchpos closingpos false [] in
      if percent = "" then
        (* No [%] sign: this is a normal attribute. *)
        ATTRIBUTE (Positions.with_pos pos id, attr)
      else
        (* A [%] sign is present: this is a grammar-wide attribute. *)
        GRAMMARATTRIBUTE (Positions.with_pos pos id, attr)
    )
# 1854 "menhir-20181113/src/lexer.ml"

  | 39 ->
# 517 "menhir-20181113/src/lexer.mll"
    ( EOF )
# 1859 "menhir-20181113/src/lexer.ml"

  | 40 ->
# 519 "menhir-20181113/src/lexer.mll"
    ( error2 lexbuf "unexpected character(s)." )
# 1864 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_main_rec lexbuf __ocaml_lex_state

and comment openingpos lexbuf =
   __ocaml_lex_comment_rec openingpos lexbuf 120
and __ocaml_lex_comment_rec openingpos lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 527 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf; comment openingpos lexbuf )
# 1876 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 529 "menhir-20181113/src/lexer.mll"
    ( () )
# 1881 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 531 "menhir-20181113/src/lexer.mll"
    ( error1 openingpos "unterminated comment." )
# 1886 "menhir-20181113/src/lexer.ml"

  | 3 ->
# 533 "menhir-20181113/src/lexer.mll"
    ( comment openingpos lexbuf )
# 1891 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_comment_rec openingpos lexbuf __ocaml_lex_state

and ocamltype openingpos lexbuf =
   __ocaml_lex_ocamltype_rec openingpos lexbuf 127
and __ocaml_lex_ocamltype_rec openingpos lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 544 "menhir-20181113/src/lexer.mll"
    ( ocamltype openingpos lexbuf )
# 1903 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 546 "menhir-20181113/src/lexer.mll"
    ( OCAMLTYPE (Stretch.Declared (mk_stretch openingpos (lexeme_start_p lexbuf) true [])) )
# 1908 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 548 "menhir-20181113/src/lexer.mll"
    ( ocamlcomment (lexeme_start_p lexbuf) lexbuf; ocamltype openingpos lexbuf )
# 1913 "menhir-20181113/src/lexer.ml"

  | 3 ->
# 550 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf; ocamltype openingpos lexbuf )
# 1918 "menhir-20181113/src/lexer.ml"

  | 4 ->
# 552 "menhir-20181113/src/lexer.mll"
    ( error1 openingpos "unterminated OCaml type." )
# 1923 "menhir-20181113/src/lexer.ml"

  | 5 ->
# 554 "menhir-20181113/src/lexer.mll"
    ( ocamltype openingpos lexbuf )
# 1928 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_ocamltype_rec openingpos lexbuf __ocaml_lex_state

and action percent openingpos monsters lexbuf =
  lexbuf.Lexing.lex_mem <- Array.make 16 (-1); __ocaml_lex_action_rec percent openingpos monsters lexbuf 138
and __ocaml_lex_action_rec percent openingpos monsters lexbuf __ocaml_lex_state =
  match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 565 "menhir-20181113/src/lexer.mll"
    ( let _, monsters = action false (lexeme_start_p lexbuf) monsters lexbuf in
      action percent openingpos monsters lexbuf )
# 1941 "menhir-20181113/src/lexer.ml"

  | 1 ->
let
# 567 "menhir-20181113/src/lexer.mll"
                  delimiter
# 1947 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 568 "menhir-20181113/src/lexer.mll"
    ( match percent, delimiter with
      | true, "%}"
      | false, "}" ->
          (* This is the delimiter we were instructed to look for. *)
          lexeme_start_p lexbuf, monsters
      | _, _ ->
          (* This is not it. *)
          error1 openingpos "unbalanced opening brace."
    )
# 1959 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 578 "menhir-20181113/src/lexer.mll"
    ( let _, monsters = parentheses (lexeme_start_p lexbuf) monsters lexbuf in
      action percent openingpos monsters lexbuf )
# 1965 "menhir-20181113/src/lexer.ml"

  | 3 ->
let
# 580 "menhir-20181113/src/lexer.mll"
                     i
# 1971 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 1) lexbuf.Lexing.lex_curr_pos in
# 581 "menhir-20181113/src/lexer.mll"
    ( let monster = dollar (cpos lexbuf) (int_of_string i) in
      action percent openingpos (monster :: monsters) lexbuf )
# 1976 "menhir-20181113/src/lexer.ml"

  | 4 ->
let
# 370 "menhir-20181113/src/lexer.mll"
                     i
# 1982 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(3) lexbuf.Lexing.lex_mem.(2)
and
# 371 "menhir-20181113/src/lexer.mll"
                             x
# 1987 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(7) lexbuf.Lexing.lex_mem.(6)
and
# 376 "menhir-20181113/src/lexer.mll"
                                          where
# 1992 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(5) lexbuf.Lexing.lex_mem.(4)
and
# 376 "menhir-20181113/src/lexer.mll"
                                                                     flavor
# 1997 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(1) lexbuf.Lexing.lex_mem.(0) in
# 584 "menhir-20181113/src/lexer.mll"
    ( let monster = position (cpos lexbuf) where flavor i x in
      action percent openingpos (monster :: monsters) lexbuf )
# 2002 "menhir-20181113/src/lexer.ml"

  | 5 ->
# 587 "menhir-20181113/src/lexer.mll"
    ( error2 lexbuf "$previouserror is no longer supported." )
# 2007 "menhir-20181113/src/lexer.ml"

  | 6 ->
# 589 "menhir-20181113/src/lexer.mll"
    ( let monster = syntaxerror (cpos lexbuf) in
      action percent openingpos (monster :: monsters) lexbuf )
# 2013 "menhir-20181113/src/lexer.ml"

  | 7 ->
# 592 "menhir-20181113/src/lexer.mll"
    ( string (lexeme_start_p lexbuf) lexbuf;
      action percent openingpos monsters lexbuf )
# 2019 "menhir-20181113/src/lexer.ml"

  | 8 ->
# 595 "menhir-20181113/src/lexer.mll"
    ( char lexbuf;
      action percent openingpos monsters lexbuf )
# 2025 "menhir-20181113/src/lexer.ml"

  | 9 ->
# 598 "menhir-20181113/src/lexer.mll"
    ( ocamlcomment (lexeme_start_p lexbuf) lexbuf;
      action percent openingpos monsters lexbuf )
# 2031 "menhir-20181113/src/lexer.ml"

  | 10 ->
# 601 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf;
      action percent openingpos monsters lexbuf )
# 2037 "menhir-20181113/src/lexer.ml"

  | 11 ->
# 605 "menhir-20181113/src/lexer.mll"
    ( error1 openingpos "unbalanced opening brace." )
# 2042 "menhir-20181113/src/lexer.ml"

  | 12 ->
# 607 "menhir-20181113/src/lexer.mll"
    ( action percent openingpos monsters lexbuf )
# 2047 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_action_rec percent openingpos monsters lexbuf __ocaml_lex_state

and parentheses openingpos monsters lexbuf =
  lexbuf.Lexing.lex_mem <- Array.make 16 (-1); __ocaml_lex_parentheses_rec openingpos monsters lexbuf 203
and __ocaml_lex_parentheses_rec openingpos monsters lexbuf __ocaml_lex_state =
  match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 616 "menhir-20181113/src/lexer.mll"
    ( let _, monsters = parentheses (lexeme_start_p lexbuf) monsters lexbuf in
      parentheses openingpos monsters lexbuf )
# 2060 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 619 "menhir-20181113/src/lexer.mll"
    ( lexeme_start_p lexbuf, monsters )
# 2065 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 621 "menhir-20181113/src/lexer.mll"
    ( let _, monsters = action false (lexeme_start_p lexbuf) monsters lexbuf in
      parentheses openingpos monsters lexbuf )
# 2071 "menhir-20181113/src/lexer.ml"

  | 3 ->
let
# 623 "menhir-20181113/src/lexer.mll"
                     i
# 2077 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 1) lexbuf.Lexing.lex_curr_pos in
# 624 "menhir-20181113/src/lexer.mll"
    ( let monster = dollar (cpos lexbuf) (int_of_string i) in
      parentheses openingpos (monster :: monsters) lexbuf )
# 2082 "menhir-20181113/src/lexer.ml"

  | 4 ->
let
# 370 "menhir-20181113/src/lexer.mll"
                     i
# 2088 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(3) lexbuf.Lexing.lex_mem.(2)
and
# 371 "menhir-20181113/src/lexer.mll"
                             x
# 2093 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(7) lexbuf.Lexing.lex_mem.(6)
and
# 376 "menhir-20181113/src/lexer.mll"
                                          where
# 2098 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(5) lexbuf.Lexing.lex_mem.(4)
and
# 376 "menhir-20181113/src/lexer.mll"
                                                                     flavor
# 2103 "menhir-20181113/src/lexer.ml"
= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(1) lexbuf.Lexing.lex_mem.(0) in
# 627 "menhir-20181113/src/lexer.mll"
    ( let monster = position (cpos lexbuf) where flavor i x in
      parentheses openingpos (monster :: monsters) lexbuf )
# 2108 "menhir-20181113/src/lexer.ml"

  | 5 ->
# 630 "menhir-20181113/src/lexer.mll"
    ( error2 lexbuf "$previouserror is no longer supported." )
# 2113 "menhir-20181113/src/lexer.ml"

  | 6 ->
# 632 "menhir-20181113/src/lexer.mll"
    ( let monster = syntaxerror (cpos lexbuf) in
      parentheses openingpos (monster :: monsters) lexbuf )
# 2119 "menhir-20181113/src/lexer.ml"

  | 7 ->
# 635 "menhir-20181113/src/lexer.mll"
    ( string (lexeme_start_p lexbuf) lexbuf; parentheses openingpos monsters lexbuf )
# 2124 "menhir-20181113/src/lexer.ml"

  | 8 ->
# 637 "menhir-20181113/src/lexer.mll"
    ( char lexbuf; parentheses openingpos monsters lexbuf )
# 2129 "menhir-20181113/src/lexer.ml"

  | 9 ->
# 639 "menhir-20181113/src/lexer.mll"
    ( ocamlcomment (lexeme_start_p lexbuf) lexbuf; parentheses openingpos monsters lexbuf )
# 2134 "menhir-20181113/src/lexer.ml"

  | 10 ->
# 641 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf; parentheses openingpos monsters lexbuf )
# 2139 "menhir-20181113/src/lexer.ml"

  | 11 ->
# 644 "menhir-20181113/src/lexer.mll"
    ( error1 openingpos "unbalanced opening parenthesis." )
# 2144 "menhir-20181113/src/lexer.ml"

  | 12 ->
# 646 "menhir-20181113/src/lexer.mll"
    ( parentheses openingpos monsters lexbuf )
# 2149 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_parentheses_rec openingpos monsters lexbuf __ocaml_lex_state

and attribute openingpos lexbuf =
   __ocaml_lex_attribute_rec openingpos lexbuf 267
and __ocaml_lex_attribute_rec openingpos lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 657 "menhir-20181113/src/lexer.mll"
    ( let _ = attribute (lexeme_start_p lexbuf) lexbuf in
      attribute openingpos lexbuf )
# 2162 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 660 "menhir-20181113/src/lexer.mll"
    ( lexeme_start_p lexbuf )
# 2167 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 662 "menhir-20181113/src/lexer.mll"
    ( let _, _ = action false (lexeme_start_p lexbuf) [] lexbuf in
      attribute openingpos lexbuf )
# 2173 "menhir-20181113/src/lexer.ml"

  | 3 ->
# 665 "menhir-20181113/src/lexer.mll"
    ( let _, _ = parentheses (lexeme_start_p lexbuf) [] lexbuf in
      attribute openingpos lexbuf )
# 2179 "menhir-20181113/src/lexer.ml"

  | 4 ->
# 668 "menhir-20181113/src/lexer.mll"
    ( string (lexeme_start_p lexbuf) lexbuf; attribute openingpos lexbuf )
# 2184 "menhir-20181113/src/lexer.ml"

  | 5 ->
# 670 "menhir-20181113/src/lexer.mll"
    ( char lexbuf; attribute openingpos lexbuf )
# 2189 "menhir-20181113/src/lexer.ml"

  | 6 ->
# 672 "menhir-20181113/src/lexer.mll"
    ( ocamlcomment (lexeme_start_p lexbuf) lexbuf; attribute openingpos lexbuf )
# 2194 "menhir-20181113/src/lexer.ml"

  | 7 ->
# 674 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf; attribute openingpos lexbuf )
# 2199 "menhir-20181113/src/lexer.ml"

  | 8 ->
# 678 "menhir-20181113/src/lexer.mll"
    ( error1 openingpos "unbalanced opening bracket." )
# 2204 "menhir-20181113/src/lexer.ml"

  | 9 ->
# 680 "menhir-20181113/src/lexer.mll"
    ( attribute openingpos lexbuf )
# 2209 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_attribute_rec openingpos lexbuf __ocaml_lex_state

and ocamlcomment openingpos lexbuf =
   __ocaml_lex_ocamlcomment_rec openingpos lexbuf 279
and __ocaml_lex_ocamlcomment_rec openingpos lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 692 "menhir-20181113/src/lexer.mll"
    ( () )
# 2221 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 694 "menhir-20181113/src/lexer.mll"
    ( ocamlcomment (lexeme_start_p lexbuf) lexbuf; ocamlcomment openingpos lexbuf )
# 2226 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 696 "menhir-20181113/src/lexer.mll"
    ( string (lexeme_start_p lexbuf) lexbuf; ocamlcomment openingpos lexbuf )
# 2231 "menhir-20181113/src/lexer.ml"

  | 3 ->
# 698 "menhir-20181113/src/lexer.mll"
    ( char lexbuf; ocamlcomment openingpos lexbuf )
# 2236 "menhir-20181113/src/lexer.ml"

  | 4 ->
# 700 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf; ocamlcomment openingpos lexbuf )
# 2241 "menhir-20181113/src/lexer.ml"

  | 5 ->
# 702 "menhir-20181113/src/lexer.mll"
    ( error1 openingpos "unterminated OCaml comment." )
# 2246 "menhir-20181113/src/lexer.ml"

  | 6 ->
# 704 "menhir-20181113/src/lexer.mll"
    ( ocamlcomment openingpos lexbuf )
# 2251 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_ocamlcomment_rec openingpos lexbuf __ocaml_lex_state

and string openingpos lexbuf =
   __ocaml_lex_string_rec openingpos lexbuf 290
and __ocaml_lex_string_rec openingpos lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 712 "menhir-20181113/src/lexer.mll"
   ( () )
# 2263 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 715 "menhir-20181113/src/lexer.mll"
   ( new_line lexbuf; string openingpos lexbuf )
# 2268 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 719 "menhir-20181113/src/lexer.mll"
   ( string openingpos lexbuf )
# 2273 "menhir-20181113/src/lexer.ml"

  | 3 ->
# 721 "menhir-20181113/src/lexer.mll"
   ( error1 openingpos "unterminated OCaml string." )
# 2278 "menhir-20181113/src/lexer.ml"

  | 4 ->
# 723 "menhir-20181113/src/lexer.mll"
   ( string openingpos lexbuf )
# 2283 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_string_rec openingpos lexbuf __ocaml_lex_state

and char lexbuf =
   __ocaml_lex_char_rec lexbuf 299
and __ocaml_lex_char_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 733 "menhir-20181113/src/lexer.mll"
   ( new_line lexbuf )
# 2295 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 739 "menhir-20181113/src/lexer.mll"
   ( () )
# 2300 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_char_rec lexbuf __ocaml_lex_state

and finish lexbuf =
   __ocaml_lex_finish_rec lexbuf 316
and __ocaml_lex_finish_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 750 "menhir-20181113/src/lexer.mll"
    ( new_line lexbuf; finish lexbuf )
# 2312 "menhir-20181113/src/lexer.ml"

  | 1 ->
# 752 "menhir-20181113/src/lexer.mll"
    ( lexeme_start_p lexbuf )
# 2317 "menhir-20181113/src/lexer.ml"

  | 2 ->
# 754 "menhir-20181113/src/lexer.mll"
    ( finish lexbuf )
# 2322 "menhir-20181113/src/lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf;
      __ocaml_lex_finish_rec lexbuf __ocaml_lex_state

;;

